я написал следующий код, чтобы определить, когда окно создается на экране с помощью другого приложения (не мой код):createNotify событие называется слишком часто
Display* display = XOpenDisplay(":0");
XSetWindowAttributes attributes;
attributes.event_mask = SubstructureNotifyMask | StructureNotifyMask;
Window win = XDefaultRootWindow(display);
XChangeWindowAttributes(display, win, CWEventMask, &attributes);
while (1) {
XEvent event;
XNextEvent(display, &event);
if (event.type == CreateNotify)
puts("create Notify event occured\n");
}
Код в основном работает, однако, я заметил, что , когда я запускаю приложение (например, терминал), событие CreateNotify
, похоже, срабатывает несколько раз. Может ли кто-нибудь объяснить, почему? Я бы ожидал, что CreateNotify
будет уволен только для каждого запускаемого приложения/окна. Как мне изменить код для этого?
Благодарим вас за предложение. попробовал, но кажется, что 'event' не имеет члена, называемого' parent': '' XEvent {aka union _XEvent} 'не имеет члена с именем' parent'' – Moonlit
@Moonlit Извините - забыли член профсоюза. Исправлена. – cxw
ах ок, спасибо, я теперь компилируюсь, но, к сожалению, поведение такое же. – Moonlit