J
Published on
· Last modified on
· Public

Auto hidden cursor

最近需要做一个隐藏光标的功能, 在这里将了解到的知识总结一下.

原理

隐藏光标的原理就是把光标设置为一个 x11 null cursor, 不需要隐藏时再将它设为 x11 left_ptr cursor.

设置光标

设置光标主要需要调用下面两个函数:

c int XDefineCursor(Display *display, Window w, Cursor cursor); void XFixesChangeCursorByName (Display *dpy, Cursor source, const char *name);

创建光标

至于创建 null cursor 可以见下面的代码:

c window = DefaultRootWindow(display); Cursor invisibleCursor; Pixmap bitmapNoData; XColor black; static char noData[] = { 0,0,0,0,0,0,0,0 }; black.red = black.green = black.blue = 0; bitmapNoData = XCreateBitmapFromData(display, window, noData, 8, 8); invisibleCursor = XCreatePixmapCursor(display, bitmapNoData, bitmapNoData, &black, &black, 0, 0);

创建完后, 将其设置为默认光标就可以了.

另外 libxfixes 也提供了隐藏/显示光标的接口:

c void XFixesHideCursor (Display *dpy, Window win); void XFixesShowCursor (Display *dpy, Window win);

其它

隐藏光标推荐使用 unclutter 来设置, 它可以自定义空闲时间, 具体功能请见 man 手册.

如果使用 lightdm 作为登录管理器, 可以编辑 /etc/lightdm/lightdm.conf 文件, 在 [Seat:*] 后添加 xserver-command=X -bs -core -nocursor.

Sign in or Sign up Leave Comment