dis = XOpenDisplay(0);
xcb_connection_t *conn = XGetXCBConnection(dis);
Window window = 0;
int revert_to;
XGetInputFocus(dis, &window, &revert_to);
xcb_cursor_t cursor = 71;
xcb_change_window_attributes(conn, window, XCB_CW_CURSOR, &cursor);
xcb_flush(conn);
Не работает тестовый код по каким-то причинам, ничего не меняется.
Есть так же пример на XLib, но он только при первом вызове, почему-то, меняет курсор и больше не хочет:
Cursor cursor;
Window window = 0;
int revert_to;
XGetInputFocus(dis, &window, &revert_to);
XUndefineCursor(dis, window);
auto temp_d = XOpenDisplay(0);
if (dis != temp_d) {
qDebug() << "Not equal";
XCloseDisplay(dis);
dis = temp_d;
} else {
XCloseDisplay(temp_d);
}
switch (cursorState) {
case TL:
cursor = XCreateFontCursor(dis, XC_ul_angle);
break;
case BR:
cursor = XCreateFontCursor(dis, XC_lr_angle);
break;
case TR:
cursor = XCreateFontCursor(dis, XC_ur_angle);
break;
case BL:
cursor = XCreateFontCursor(dis, XC_ll_angle);
break;
case B:
cursor = XCreateFontCursor(dis, XC_bottom_side);
break;
case T:
cursor = XCreateFontCursor(dis, XC_top_side);
break;
case L:
cursor = XCreateFontCursor(dis, XC_left_side);
break;
case R:
cursor = XCreateFontCursor(dis, XC_right_side);
break;
case Inside:
cursor = XCreateFontCursor(dis, XC_X_cursor);
break;
default:
cursor = XCreateFontCursor(dis, XC_arrow);
break;
}
//Cursor c = XcursorLibraryLoadCursor(dis, "sb_v_double_arrow");
XDefineCursor(dis, window, cursor);