webkit - 透明 X11 光标主题 - 为什么 X 光标出现在 GTK+ 子窗口中?

标签 webkit x11 gtk mouse-cursor

我正在使用透明光标主题技巧(请参阅 http://obiltschnig.com/2010/08/14/hiding-the-gtkx11-mouse-cursor/ )在基于触摸屏的设备的全屏 Linux GTK+ 应用程序中隐藏 X11 光标。我基本上使用 Xorg 服务器运行基于 WebKit GTK+ 的应用程序,在全屏模式下没有窗口管理器。现在,通过设置透明的 1 像素光标默认主题来隐藏光标效果非常好(另请参阅: How do you hide the mouse pointer under Linux/X11? )。但是,一旦光标位于子窗口(例如 JavaScript 警报窗口或组合框/HTML)内,X 光标就会出现(如果光标移出窗口,则 X 光标会再次消失)。有谁知道为什么会这样?有没有办法完全隐藏光标?

最佳答案

“为什么会这样?”

该行为的主要原因是 XGrabPointer()函数(参见 Xlib 编程手册),主动获取指针的控制权,如果获取成功则返回 GrabSuccess。进一步的指针事件仅报告给抓取客户端。 XGrabPointer() 覆盖此客户端抓取的任何事件指针。

int XGrabPointer(Display *display;
                 Window grab_window;
                 Bool owner_events;
                 unsigned int event_mask;
                 int pointer_mode, keyboard_mode;
                 Window confine_to;
                 Cursor cursor;
                 Time time);

如果指定了光标,则无论指针位于哪个窗口中,都会显示该光标。如果指定了 None,则当指针指向该窗口时,将显示该窗口的正常光标位于 grab_window 或其子窗口之一中;否则,将显示 grab_window 的光标。

“有没有办法完全隐藏光标?”

我认为你可以使用 XUnDefineCursor 覆盖该行为和 XUndefineCursor :

XUndefineCursor(Display *display;
                Window w);

撤消先前 XDefineCursor() 对事件窗口的影响。当指针位于窗口中时,将使用父级的光标。如果您选择透明指针作为默认指针,并且还使用取消定义子窗口的光标,则您应该根本看不到光标。当光标设置为 None 时,XUndefineCursor 相当于 XDefineCursor

    display=XOpenDisplay(NULL)
    window = DefaultRootWindow(display);
    Cursor invisible_cursor;
    Pixmap no_pixmap;
    XColor black;
    static char nothing[] = { 0, 0, 0, 0, 0, 0, 0, 0 };

    no_pixmap = XCreateBitmapFromData(display, window, nothing, 8, 8);
    invisible_cursor = XCreatePixmapCursor(display,
                                           no_pixmap, no_pixmap,
                                           &black, &black, 0, 0);
    XDefineCursor(display, window, invisible_cursor);

某些桌面(例如 KDE)使用其他方法与其窗口通信,但可能无论如何都不起作用。

<小时/>

或者还有另一个程序,unclutter ,这会在几秒钟不活动后从屏幕上删除空闲光标。这会在不使用时隐藏鼠标指针。

unclutter runs in the background of an X11 session and after a specified period of inactivity hides the cursor from display. When the cursor is moved its display is restored. Users may specify specific windows to be ignored by unclutter.

您可以将延迟时间设置为0:unclutter -idle 0,当您停止移动光标时,鼠标指针就会消失。

关于webkit - 透明 X11 光标主题 - 为什么 X 光标出现在 GTK+ 子窗口中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491753/

相关文章:

http - 为什么 Chrome 或 Safari 不能正确播放我的 MP3?

html - Webkit 背景图像被剪裁

linux - XKB : How to convert a keycode to keysym

performance - 开罗+橡皮筋选择: gui very very slow

gtk - 为什么 gtkmm 行 get_value 不起作用?

css - webkit-gradient 不附加在 FF 中

javascript - Webkit线程javascript文件加载和执行顺序

c++ - Qt获取应用程序窗口外的鼠标事件

c++ - XRender 显示来自磁盘/应用程序生成图像的图片

c++ - GTkmm 3.0 如何在框架或窗口之间切换