Проблема:
У меня есть окно Java, управляемое XWindows в файле Window Manager C ++ в системе Linux. Где-то есть ошибка, если вы открываете HCI примерно от 7 до 35 раз подряд (и быстро), как правило, по крайней мере, один раз, когда окно открывается в месте по умолчанию (0,0), а не в месте, которое я установил (430, 300 ). После сбоя, если я закрываю HCI и снова открываю его, он открывается в правильном месте, как и до ошибки. Атрибуты изначально устанавливаются с помощью XMoveResizeWindow.
Я добавил цикл, чтобы проверить расположение HCI (через XTranslateAttributes и XGetWindowAttributes), сравнить X и Y с заданным местоположением и сбросить атрибуты, если они не совпадают.
Однако, когда я печатаю атрибуты, это показывает (430, 300), даже когда окно фактически открылось в (0,0).
Конкретный вопрос:
Это ошибка с XWindows? имеет ли смысл для атрибутов читать одну вещь, но для того, чтобы она не соответствовала фактическому местоположению (т. е. возможно, эти атрибуты являются предложениями, а не требованиями)? Есть ли другой метод, который может вернуть более точное местоположение HCI?
Обновить:
Я попытался изменить цикл, чтобы просто переместить местоположение 15 раз подряд через XMoveWindow. Кажется, это исправлено (еще не завершено тестирование). Но, безусловно, должен быть лучший путь, чем грубая сила.
Вам нужно подождать, чтобы убедиться, что окно действительно реализовано, прежде чем пытаться изменить его положение и т. Д. Попробуйте добавить обработчик событий, который маскирует SubstructureRedirectMask, и вызовите XMoveResizeWindow в обработчике событий, когда тип события — XMapRequestEvent.
Других решений пока нет …