gpt4 book ai didi

linux - X11 FocusIn 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:14 27 4
gpt4 key购买 nike

据我了解,只要窗口获得焦点,就会触发 X11 FocusIn 事件。它是键盘输入发送到的窗口。我无法触发此事件。我确保在创建窗口时给它 FocusChangeMask。我在我的事件处理程序中创建了一个断点,其中 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 );

最佳答案

好像我在错误的地方设置了 FocusChangeMask。通过添加行 XSelectInput(x_display, opengl_window, FocusChangeMask),它现在触发 FocusIn 事件。它触发了另一个显示器,因为它有面具,但这个没有。

关于linux - X11 FocusIn 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com