Wayland: Don’t reload the cursor on every pointer motion

Previously, any pointer motion in the window decorations when using the
fallback implementation would obtain the wl_cursor again, and do the
attach danse for no benefit.

This will ultimately allow animated cursors to not reset to the first
frame on motion, once these will be implemented.

(cherry picked from commit a9f674e719)
This commit is contained in:
Emmanuel Gil Peyrot 2019-11-15 15:30:41 +01:00 committed by Camilla Löwy
parent 2bac7ee8da
commit 3a2c0aaa27
2 changed files with 5 additions and 2 deletions

View File

@ -169,6 +169,7 @@ static void setCursor(_GLFWwindow* window, const char* name)
wl_surface_damage(surface, 0, 0, wl_surface_damage(surface, 0, 0,
image->width, image->height); image->width, image->height);
wl_surface_commit(surface); wl_surface_commit(surface);
_glfw.wl.cursorPreviousName = name;
} }
static void pointerHandleMotion(void* data, static void pointerHandleMotion(void* data,
@ -178,7 +179,7 @@ static void pointerHandleMotion(void* data,
wl_fixed_t sy) wl_fixed_t sy)
{ {
_GLFWwindow* window = _glfw.wl.pointerFocus; _GLFWwindow* window = _glfw.wl.pointerFocus;
const char* cursorName; const char* cursorName = NULL;
if (!window) if (!window)
return; return;
@ -227,6 +228,7 @@ static void pointerHandleMotion(void* data,
default: default:
assert(0); assert(0);
} }
if (_glfw.wl.cursorPreviousName != cursorName)
setCursor(window, cursorName); setCursor(window, cursorName);
} }

View File

@ -249,6 +249,7 @@ typedef struct _GLFWlibraryWayland
struct wl_cursor_theme* cursorTheme; struct wl_cursor_theme* cursorTheme;
struct wl_cursor_theme* cursorThemeHiDPI; struct wl_cursor_theme* cursorThemeHiDPI;
struct wl_surface* cursorSurface; struct wl_surface* cursorSurface;
const char* cursorPreviousName;
int cursorTimerfd; int cursorTimerfd;
uint32_t serial; uint32_t serial;