XCreateWindow дает идентификатор окна, который конфликтует с уже существующим окном

Я создал программу, которая создает окно с помощью XCreateWindow. Это отлично работает в моей системе и многих других, но во многих вызывает несколько странных проблем. например идентификатор, который я получил от него, конфликтует с идентификатором терминала, с которого запускается программа. В одном из таких случаев gnome-terminal также имеет идентификатор окна 0x2400001 (родительский элемент - это root), а идентификатор окна моей программы также равен 0x2400001 (его родительский элемент также является корневым). Есть предложения, что может пойти не так?


person Shantanu Goel    schedule 02.03.2009    source источник
comment
Не могли бы вы подробнее рассказать, как получить идентификатор окна терминала? Также может быть полезен фрагмент кода с наброском того, что вы делаете.   -  person EFraim    schedule 03.03.2009


Ответы (3)


Идентификаторы окна, вероятно, уникальны только в каждом подключении к X-серверу (т.е. разные процессы, подключающиеся к X-серверу, могут получать один и тот же идентификатор окна, и X-сервер использует идентификатор соединения И окна для их внутреннего разделения).

Я думаю, что X не обещает идентификатор окна, например. они уникальны для разных процессов или чего-либо еще, поэтому лучше не пытаться использовать их для каких-либо других целей.

Я не удивлюсь, увидев реализации X, которые просто возвращают последовательные числа в виде идентификаторов окон, начинающихся с одного и того же значения (например, 1) для каждого соединения, что объясняет ваш опыт, например первое окно в каждом клиенте, похоже, имеет тот же идентификатор окна в этой реализации X.

person haa    schedule 02.05.2009
comment
Идентификаторы окон уникальны для X-дисплея. В противном случае клиенты X не могли бы ссылаться на окна друг друга. - person daf; 23.06.2011

Xserver создает уникальный непрозрачный идентификатор для каждого окна. Метод, который вы используете для определения идентификатора окна, вероятно, неправильный.

Ваш вопрос - симптом другой проблемы. Какую проблему вы на самом деле пытаетесь решить?

person codeDr    schedule 16.05.2009
comment
Идентификаторы окон генерируются X-клиентами, а не X-сервером. - person daf; 23.06.2011

В дополнение к другим ответам: запустите xwininfo -root -all (прочтите его справочную страницу для получения дополнительной информации). Проверьте идентификатор окна gnome-terminal и идентификатор окна вашего приложения.

person pzanoni    schedule 22.03.2012