如何使用Xlib设置“arrow + watch”鼠标光标?

时间:2015-10-08 08:55:17

标签: linux xlib

我注意到,使用XCreateFontCursor然后使用光标代码XC_watch(150)的XDefineCursor实际上将光标设置为丑陋的Xlib光标,而不是默认的系统动画沙漏光标。

对我来说,这表明某些系统(窗口管理器?)拦截了xlib调用并透明地更改了游标。

但是,如果没有在XLib常量中定义,我怎样才能将光标设置为“箭头+沙漏”光标?

2 个答案:

答案 0 :(得分:1)

您正在寻找的是光标主题(它扩展了X光标字体的内容,并不总是以兼容的方式)。对于一些讨论:

这是用户级别(您可以查看动画游标)。 X服务器使用Xcursor library来覆盖旧的位图光标行为,以提供颜色和其他有趣的图像相关功能。文档是...... poor,基本上要求其他开发人员通过阅读源代码来获取大部分信息(正如我在xterm中所做的那样 - 寻找"XCursor")。

这是指向源代码的指针:

http://cgit.freedesktop.org/xorg/lib/libXcursor/

答案 1 :(得分:1)

存在从光标形状定义(数字)到光标主题提供的图像的映射。这似乎由Xcursor处理。查看Xcursor.h文件有以下注释:

/*
 * This is the function called by Xlib when attempting to
 * load cursors from XCreateGlyphCursor.  The interface must
 * not change as Xlib loads 'libXcursor.so' instead of
 * a specific major version
 */

这表明XcursorTryShapeCursor函数涉及将XCreateFontCursor的调用转换为要加载的图像文件。

因此,用于满足Xlib调用的图标文件由Xcursor提供的图标主题管理。 XcursorSetTheme可用于选择其他游标主题,但除非原始丑陋的X11游标已作为主题安装,否则无法以此方式获取内置游标。

但是,Xcursor手册提到了XCURSOR_PATH环境变量。如果将其设置为没有光标主题的路径,则所有内容都默认为内置的丑陋游标。例如:env XCURSOR_PATH=/tmp ./test_application