Пока я это понимаю, событие X11 FocusIn запускается всякий раз, когда окно фокусируется. Это окно, в которое отправляется ввод с клавиатуры. У меня возникли проблемы с запуском этого события. Я создаю окно FocusChangeMask для создания окна. Я создал точку останова внутри моего обработчика событий, где предполагается событие FocusIn, и оно не останавливается.X11 FocusIn не работает
У меня есть 2 отдельных окна, прозрачный один и один непрозрачный. В настоящее время у меня есть это, поэтому прозрачное окно всегда находится поверх прозрачного окна. Всякий раз, когда я переключаю фокус и затем переключаюсь обратно в прозрачное окно, непрозрачное окно находится прямо под ним. Это заставляет другие окна застревать между прозрачным и непрозрачным окном.
Я заметил, что всякий раз, когда я фокусируюсь на непрозрачном окне, которое находится под ним, запускается событие FocusIn. Я не могу получить прозрачное окно для запуска события. Это связано с тем, что окно находится в 32-битном цвете?
Что мне не хватает?
while(!renderer->stop)
{
XNextEvent(renderer->x_display, &event);
switch(event.type)
{
case Expose:
if (event.xexpose.window == gstreamer_window)
{
XRaiseWindow(renderer->x_display, renderer->opengl_window);
}
break;
case FocusIn:
if (event.xfocus.window == renderer->opengl_window)
{
XRaiseWindow(renderer->x_display, gstreamer_window);
}
break;
case ConfigureNotify:
if (event.xconfigure.window == renderer->opengl_window)
{
XMoveWindow(renderer->x_display, gstreamer_window,
event.xconfigure.x, event.xconfigure.y - top_border_offset);
}
break;
}
}
Вот как я создал окно.
XSetWindowAttributes swa;
swa.event_mask = ExposureMask | PointerMotionMask | KeyPressMask | FocusChangeMask;
swa.colormap = XCreateColormap(x_display, XDefaultRootWindow(x_display), visual, AllocNone);
swa.background_pixel = 0;
swa.border_pixel = 0;
/* Create a window */
opengl_window = XCreateWindow (
x_display, parent,
0, 0, m_plane_width, m_plane_height, 0,
depth, InputOutput,
visual, CWEventMask | CWBackPixel | CWColormap | CWBorderPixel,
&swa);