Итак, я написал простую тестовую программу для отслеживания значения свойства _NET_ACTIVE_WINDOW до того, как реализовал ее в своей основной программе. Хотя я заметил странное поведение, всякий раз, когда я переключаю то, какое окно в настоящее время находится в фокусе, я получаю 2 события, которые уведомляют о изменении значения _NET_ACTIVE_WINDOW вместо 1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
int main(void){
Display *dpy = XOpenDisplay(NULL);
Window root = XDefaultRootWindow(dpy);
XSelectInput(dpy, root, PropertyChangeMask);
XEvent ev;
while(True){
XNextEvent(dpy, &ev);
if(strcmp("_NET_ACTIVE_WINDOW", XGetAtomName(dpy, ev.xproperty.atom)) == 0){
Atom type;
int format;
unsigned long items, bytesLeft;
Window *value;
XGetWindowProperty(dpy, root, ev.xproperty.atom, 0, 1, False,
AnyPropertyType, &type, &format, &items, &bytesLeft, (unsigned char**)&value);
printf("active window id: %u\n", *value);
}
}
XCloseDisplay(dpy);
}
Вот каков результат работы этой программы,Очевидно, что строки, начинающиеся с #, являются комментариями, которые я добавил, чтобы уточнить, что происходит
[zee@zeeDT test]> ./test
#started program in terminal here
#switch from terminal to text editor
active window id: 171966465
active window id: 171966465
#switch from text editor to terminal
active window id: 130023431
active window id: 130023431
Редактировать: после дополнительного тестирования я обнаружил, что числа также не всегда совпадают, например, если я переключаюсь из своего текстового редактораиногда к терминалу вывод будет выглядеть, как указано выше, но иногда он также будет выглядеть так. Почему идентификатор будет 0?
active window id: 0
active window id: 130023431