On Wed, Sep 18, 2013 at 03:20:04PM +0200, Giulio Camuffo wrote:
use the alternative cursor names used also in window.c, since the
names it used previously are not guaranteed to exist in all themes.
Makes sense, applied.
Kristian
---
src/xwayland/window-manager.c | 86
+++
1 file changed, 79 insertions(+), 7 deletions(-)
diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index b4f64d3..7c7bef7 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -1282,27 +1282,99 @@ enum cursor_type {
XWM_CURSOR_LEFT_PTR,
};
-static const char *cursors[] = {
- top_side,
+/*
+ * The following correspondences between file names and cursors was copied
+ * from: https://bugs.kde.org/attachment.cgi?id=67313
+ */
+
+static const char *bottom_left_corners[] = {
+ bottom_left_corner,
+ sw-resize,
+ size_bdiag
+};
+
+static const char *bottom_right_corners[] = {
+ bottom_right_corner,
+ se-resize,
+ size_fdiag
+};
+
+static const char *bottom_sides[] = {
bottom_side,
+ s-resize,
+ size_ver
+};
+
+static const char *left_ptrs[] = {
+ left_ptr,
+ default,
+ top_left_arrow,
+ left-arrow
+};
+
+static const char *left_sides[] = {
left_side,
+ w-resize,
+ size_hor
+};
+
+static const char *right_sides[] = {
right_side,
+ e-resize,
+ size_hor
+};
+
+static const char *top_left_corners[] = {
top_left_corner,
+ nw-resize,
+ size_fdiag
+};
+
+static const char *top_right_corners[] = {
top_right_corner,
- bottom_left_corner,
- bottom_right_corner,
- left_ptr
+ ne-resize,
+ size_bdiag
+};
+
+static const char *top_sides[] = {
+ top_side,
+ n-resize,
+ size_ver
+};
+
+struct cursor_alternatives {
+ const char **names;
+ size_t count;
+};
+
+static const struct cursor_alternatives cursors[] = {
+ {top_sides, ARRAY_LENGTH(top_sides)},
+ {bottom_sides, ARRAY_LENGTH(bottom_sides)},
+ {left_sides, ARRAY_LENGTH(left_sides)},
+ {right_sides, ARRAY_LENGTH(right_sides)},
+ {top_left_corners, ARRAY_LENGTH(top_left_corners)},
+ {top_right_corners, ARRAY_LENGTH(top_right_corners)},
+ {bottom_left_corners, ARRAY_LENGTH(bottom_left_corners)},
+ {bottom_right_corners, ARRAY_LENGTH(bottom_right_corners)},
+ {left_ptrs, ARRAY_LENGTH(left_ptrs)},
};
static void
weston_wm_create_cursors(struct weston_wm *wm)
{
+ const char *name;
int i, count = ARRAY_LENGTH(cursors);
+ size_t j;
wm-cursors = malloc(count * sizeof(xcb_cursor_t));
for (i = 0; i count; i++) {
- wm-cursors[i] =
- xcb_cursor_library_load_cursor(wm, cursors[i]);
+ for (j = 0; j cursors[i].count; j++) {
+ name = cursors[i].names[j];
+ wm-cursors[i] =
+ xcb_cursor_library_load_cursor(wm, name);
+ if (wm-cursors[i] != (xcb_cursor_t)-1)
+ break;
+ }
}
wm-last_cursor = -1;
--
1.8.4
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel