Не получается завести эти события (присутствие/отсутствие курсора в окне), лишь после закрытия окна видно что они есть. При закрытии окна ошибка:
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
after 42 requests (40 known processed) with 0 events remaining.
После долгого перебора аттрибутов и mask ошибки нет, но нет даже признаков выполнения событий EnterNotify/LeaveNotify. В xev первый называется немного иначе: MotionNotify, но оно тоже не работает.
#include <stdio.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main(int argc, char **argv)
{
Display *ourDisplay;
int ourScreen;
Window myWindow, rootWindow, childWindow;
unsigned long bgcolor;
int myDepth;
XSetWindowAttributes myAttr;
Visual *myVisual;
XSizeHints mySizeHints;
XClassHint myClassHint;
char *myPropertyData;
char *myClassName="example";
char *myResName="example";
char *iconName;
ourDisplay=XOpenDisplay(NULL);
if (ourDisplay==NULL)
{
printf("Не удалось установить соединение с графическим терминалом.\n");
return 1;
};
/* Получим предварительные сведения */
ourScreen=DefaultScreen(ourDisplay); /* Экран по-умолчанию */
rootWindow=RootWindow(ourDisplay, ourScreen); /* Корневое окно */
bgcolor=WhitePixel(ourDisplay, ourScreen); /* Белый цвет экрана */
myDepth=DefaultDepth(ourDisplay, ourScreen); /* Глубина цветности экрана */
myVisual=DefaultVisual(ourDisplay, ourScreen); /* Визуальные характеристики */
myAttr.colormap = DefaultColormap(ourDisplay,ourScreen);
myAttr.override_redirect = True;
unsigned long mask = CWEventMask | CWColormap | CWBorderPixel | CWBackPixel | CWOverrideRedirect;
myWindow=XCreateWindow(ourDisplay,rootWindow,100, 100, 320, 200,
0, myDepth, InputOutput, myVisual, mask, &myAttr);
/* Делаем окна видимыми */
XMapWindow(ourDisplay, myWindow);
XEvent report;
XSelectInput(ourDisplay, myWindow, EnterWindowMask | LeaveWindowMask | StructureNotifyMask);
while ( 1 ) {
XNextEvent ( ourDisplay, &report );
switch ( report.type ) {
case EnterNotify :
printf("enter");
break;
case LeaveNotify :
printf("leave");
break;
}
}
XFlush(ourDisplay);
XDestroyWindow(ourDisplay, myWindow);
XCloseDisplay(ourDisplay);
return 0;
};
Нигде в интернетах примеров этих событий не нашел. Может быть, кто-то может подсказать? Спасибо.