2
0
Эх сурвалжийг харах

Wayland: Merge function called once

This brings together the two halves of the cursor setting logic for the
fallback decorations.

(cherry picked from commit 6b48f2be97057cf436c6eb3059bbbfdcb5f66d7c)
Camilla Löwy 2 жил өмнө
parent
commit
c3f15da23a
1 өөрчлөгдсөн 42 нэмэгдсэн , 43 устгасан
  1. 42 43
      src/wl_window.c

+ 42 - 43
src/wl_window.c

@@ -1339,48 +1339,6 @@ static void pointerHandleLeave(void* userData,
     _glfwInputCursorEnter(window, GLFW_FALSE);
 }
 
-static void setCursor(_GLFWwindow* window, const char* name)
-{
-    struct wl_buffer* buffer;
-    struct wl_cursor* cursor;
-    struct wl_cursor_image* image;
-    struct wl_surface* surface = _glfw.wl.cursorSurface;
-    struct wl_cursor_theme* theme = _glfw.wl.cursorTheme;
-    int scale = 1;
-
-    if (window->wl.contentScale > 1 && _glfw.wl.cursorThemeHiDPI)
-    {
-        // We only support up to scale=2 for now, since libwayland-cursor
-        // requires us to load a different theme for each size.
-        scale = 2;
-        theme = _glfw.wl.cursorThemeHiDPI;
-    }
-
-    cursor = wl_cursor_theme_get_cursor(theme, name);
-    if (!cursor)
-        return;
-
-    // TODO: handle animated cursors too.
-    image = cursor->images[0];
-
-    if (!image)
-        return;
-
-    buffer = wl_cursor_image_get_buffer(image);
-    if (!buffer)
-        return;
-    wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerEnterSerial,
-                          surface,
-                          image->hotspot_x / scale,
-                          image->hotspot_y / scale);
-    wl_surface_set_buffer_scale(surface, scale);
-    wl_surface_attach(surface, buffer, 0, 0);
-    wl_surface_damage(surface, 0, 0,
-                      image->width, image->height);
-    wl_surface_commit(surface);
-    _glfw.wl.cursorPreviousName = name;
-}
-
 static void pointerHandleMotion(void* userData,
                                 struct wl_pointer* pointer,
                                 uint32_t time,
@@ -1436,8 +1394,49 @@ static void pointerHandleMotion(void* userData,
         default:
             assert(0);
     }
+
     if (_glfw.wl.cursorPreviousName != cursorName)
-        setCursor(window, cursorName);
+    {
+        struct wl_buffer* buffer;
+        struct wl_cursor* cursor;
+        struct wl_cursor_image* image;
+        struct wl_surface* surface = _glfw.wl.cursorSurface;
+        struct wl_cursor_theme* theme = _glfw.wl.cursorTheme;
+        int scale = 1;
+
+        if (window->wl.contentScale > 1 && _glfw.wl.cursorThemeHiDPI)
+        {
+            // We only support up to scale=2 for now, since libwayland-cursor
+            // requires us to load a different theme for each size.
+            scale = 2;
+            theme = _glfw.wl.cursorThemeHiDPI;
+        }
+
+        cursor = wl_cursor_theme_get_cursor(theme, name);
+        if (!cursor)
+            return;
+
+        // TODO: handle animated cursors too.
+        image = cursor->images[0];
+
+        if (!image)
+            return;
+
+        buffer = wl_cursor_image_get_buffer(image);
+        if (!buffer)
+            return;
+
+        wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerEnterSerial,
+                              surface,
+                              image->hotspot_x / scale,
+                              image->hotspot_y / scale);
+        wl_surface_set_buffer_scale(surface, scale);
+        wl_surface_attach(surface, buffer, 0, 0);
+        wl_surface_damage(surface, 0, 0,
+                          image->width, image->height);
+        wl_surface_commit(surface);
+        _glfw.wl.cursorPreviousName = name;
+    }
 }
 
 static void pointerHandleButton(void* userData,