Я создал программу, которая создает окно с помощью XCreateWindow. Это отлично работает в моей системе и многих других, но во многих вызывает несколько странных проблем. например идентификатор, который я получил от него, конфликтует с идентификатором терминала, с которого запускается программа. В одном из таких случаев gnome-terminal также имеет идентификатор окна 0x2400001 (родительский элемент - это root), а идентификатор окна моей программы также равен 0x2400001 (его родительский элемент также является корневым). Есть предложения, что может пойти не так?
XCreateWindow дает идентификатор окна, который конфликтует с уже существующим окном
Ответы (3)
Идентификаторы окна, вероятно, уникальны только в каждом подключении к X-серверу (т.е. разные процессы, подключающиеся к X-серверу, могут получать один и тот же идентификатор окна, и X-сервер использует идентификатор соединения И окна для их внутреннего разделения).
Я думаю, что X не обещает идентификатор окна, например. они уникальны для разных процессов или чего-либо еще, поэтому лучше не пытаться использовать их для каких-либо других целей.
Я не удивлюсь, увидев реализации X, которые просто возвращают последовательные числа в виде идентификаторов окон, начинающихся с одного и того же значения (например, 1) для каждого соединения, что объясняет ваш опыт, например первое окно в каждом клиенте, похоже, имеет тот же идентификатор окна в этой реализации X.
Xserver создает уникальный непрозрачный идентификатор для каждого окна. Метод, который вы используете для определения идентификатора окна, вероятно, неправильный.
Ваш вопрос - симптом другой проблемы. Какую проблему вы на самом деле пытаетесь решить?
В дополнение к другим ответам: запустите xwininfo -root -all
(прочтите его справочную страницу для получения дополнительной информации). Проверьте идентификатор окна gnome-terminal и идентификатор окна вашего приложения.