Установить курсор X11 на стрелку - PullRequest
2 голосов
/ 19 июля 2011

Я попытался сделать следующее при вызове XCreateWindow ():

unsigned long ctt_attribute_mask = CWWinGravity | CWCursor;

ctt_attributes->win_gravity = NorthEastGravity;
ctt_attributes->cursor = XC_arrow;

ctt_window = XCreateWindow(dpy, parent, ctt_xpos, ctt_ypos,
             ctt_xy_size, ctt_xy_size, ctt_border,
             ctt_depth, ctt_class, ctt_visual,
             ctt_attribute_mask, ctt_attributes);

Это создает окно, но оно не влияет на указатель при его наведении на окно.

Я хочу использовать стандартный указатель курсора окружения рабочего стола пользователя, когда мышь появляется над моим окном.

Требуется Xlib, потому что это программа, не зависящая от инструментария.

ETA : доступен дополнительный контекст; см create_ctt_window начиная со строки 35 в исходном файле .

Ответы [ 2 ]

4 голосов
/ 19 июля 2011
  1. ctt_attributes->cursor = XCreateFontCursor(dpy, XC_arrow);
  2. Это не стандартный курсор указателя среды рабочего стола, это довольно уродливый растровый курсор X11.Если вы хотите тематические курсоры, используйте libXcursor.У меня нет опыта с этим.
1 голос
/ 20 июля 2011

Вот пример из Руководства по программированию Xlib, том 1, стр. 182.

#include <X11/cursorfont.h>
int cursor_shape = XC_arrow;
Window window;
Cursor cursor;
cursor = XCreateFontCursor(display, cursor_shape);
XDefineCursor(display, window, cursor);
/* Now cursor will appear when pointer is in window */ 

Так это выглядит как н.м. на месте. Вам нужно вызвать XCreateFontCursor, чтобы перевести XC_arrow (который является просто целым числом, обозначающим местоположение курсора в векторе кодировки шрифта) в ресурс Cursor. Я думаю, что ресурс Cursor тоже просто целое число. Вот почему вы не получаете ошибку компиляции. Но у вас действительно есть несоответствие типов.

...