[PATCH weston v2] window: track changes in libwayland-cursor api

Ander Conselvan de Oliveira ander.conselvan.de.oliveira at intel.com
Thu May 24 23:30:02 PDT 2012


libwayland-cursor does not provide enum wl_cursor_type anymore so this
brings back enum pointer_type.

This partially revers commit 1042dc15e0ca69a4d8d4d23b862f1e3d3c8e054f.
---

Changes in v2:
    Fixed display_get_pointer_image(). It was passing an enum pointer_type
    int as the cursor name to wl_cursor_theme_get_cursors().

 clients/clickdot.c      |    3 +-
 clients/desktop-shell.c |    5 +--
 clients/dnd.c           |    8 ++--
 clients/eventdemo.c     |    5 +--
 clients/flower.c        |    3 +-
 clients/gears.c         |    3 +-
 clients/smoke.c         |    3 +-
 clients/terminal.c      |    3 +-
 clients/window.c        |   83 ++++++++++++++++++++++++++++++++++-------------
 9 files changed, 73 insertions(+), 43 deletions(-)

diff --git a/clients/clickdot.c b/clients/clickdot.c
index 4e1538a..b9669d1 100644
--- a/clients/clickdot.c
+++ b/clients/clickdot.c
@@ -32,7 +32,6 @@
 
 #include <linux/input.h>
 #include <wayland-client.h>
-#include <wayland-cursor.h>
 
 #include "window.h"
 
@@ -219,7 +218,7 @@ motion_handler(struct widget *widget,
 
 	window_schedule_redraw(clickdot->window);
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 static void
diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c
index 2473f36..7554df3 100644
--- a/clients/desktop-shell.c
+++ b/clients/desktop-shell.c
@@ -33,7 +33,6 @@
 #include <linux/input.h>
 
 #include <wayland-client.h>
-#include <wayland-cursor.h>
 #include "window.h"
 #include "../shared/cairo-util.h"
 #include "../shared/config-parser.h"
@@ -241,7 +240,7 @@ panel_launcher_enter_handler(struct widget *widget, struct input *input,
 	launcher->focused = 1;
 	widget_schedule_redraw(widget);
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 static void
@@ -512,7 +511,7 @@ unlock_dialog_widget_enter_handler(struct widget *widget,
 	dialog->button_focused = 1;
 	widget_schedule_redraw(widget);
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 static void
diff --git a/clients/dnd.c b/clients/dnd.c
index b0f0fa9..c4d6f7b 100644
--- a/clients/dnd.c
+++ b/clients/dnd.c
@@ -318,7 +318,7 @@ create_drag_cursor(struct dnd_drag *dnd_drag,
 	cairo_pattern_t *pattern;
 	cairo_t *cr;
 
-	pointer = display_get_pointer_image(dnd->display, WL_CURSOR_DRAGGING);
+	pointer = display_get_pointer_image(dnd->display, POINTER_DRAGGING);
 
 	rectangle.width = item_width + 2 * pointer->width;
 	rectangle.height = item_height + 2 * pointer->height;
@@ -410,7 +410,7 @@ dnd_button_handler(struct widget *widget,
 					  dnd_drag->drag_surface,
 					  serial);
 
-		input_set_pointer_image(input, time, WL_CURSOR_DRAGGING);
+		input_set_pointer_image(input, time, POINTER_DRAGGING);
 
 		dnd_drag->opaque =
 			create_drag_cursor(dnd_drag, item, x, y, 1);
@@ -434,9 +434,9 @@ lookup_cursor(struct dnd *dnd, int x, int y)
 
 	item = dnd_get_item(dnd, x, y);
 	if (item)
-		return WL_CURSOR_HAND1;
+		return POINTER_HAND1;
 	else
-		return WL_CURSOR_LEFT_PTR;
+		return POINTER_LEFT_PTR;
 }
 
 static int
diff --git a/clients/eventdemo.c b/clients/eventdemo.c
index 3c4233f..8e63540 100644
--- a/clients/eventdemo.c
+++ b/clients/eventdemo.c
@@ -35,7 +35,6 @@
 
 #include <cairo.h>
 
-#include <wayland-cursor.h>
 #include "window.h"
 
 /** window title */
@@ -248,9 +247,9 @@ motion_handler(struct widget *widget, struct input *input, uint32_t time,
 
 	if (x > e->x && x < e->x + e->w)
 		if (y > e->y && y < e->y + e->h)
-			return WL_CURSOR_HAND1;
+			return POINTER_HAND1;
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 /**
diff --git a/clients/flower.c b/clients/flower.c
index 84f8e6c..2d54b38 100644
--- a/clients/flower.c
+++ b/clients/flower.c
@@ -32,7 +32,6 @@
 
 #include <linux/input.h>
 #include <wayland-client.h>
-#include <wayland-cursor.h>
 #include "window.h"
 
 struct flower {
@@ -134,7 +133,7 @@ static int
 motion_handler(struct widget *widget, struct input *input,
 	       uint32_t time, float x, float y, void *data)
 {
-	return WL_CURSOR_HAND1;
+	return POINTER_HAND1;
 }
 
 static void
diff --git a/clients/gears.c b/clients/gears.c
index be0f9a4..ce8212a 100644
--- a/clients/gears.c
+++ b/clients/gears.c
@@ -35,7 +35,6 @@
 
 #include <linux/input.h>
 #include <wayland-client.h>
-#include <wayland-cursor.h>
 
 #include "window.h"
 
@@ -244,7 +243,7 @@ motion_handler(struct widget *widget, struct input *input,
 			gears->view.rotx = gears->view.rotx + 360;
 	}
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 static void
diff --git a/clients/smoke.c b/clients/smoke.c
index 6104b7c..d730124 100644
--- a/clients/smoke.c
+++ b/clients/smoke.c
@@ -30,7 +30,6 @@
 #include <cairo.h>
 
 #include <wayland-client.h>
-#include <wayland-cursor.h>
 #include "window.h"
 
 struct smoke {
@@ -259,7 +258,7 @@ smoke_motion_handler(struct widget *widget, struct input *input,
 			smoke->b[0].d[k] += 1;
 		}
 
-	return WL_CURSOR_HAND1;
+	return POINTER_HAND1;
 }
 
 static void
diff --git a/clients/terminal.c b/clients/terminal.c
index 4932532..c7300e6 100644
--- a/clients/terminal.c
+++ b/clients/terminal.c
@@ -34,7 +34,6 @@
 #include <sys/epoll.h>
 
 #include <wayland-client.h>
-#include <wayland-cursor.h>
 
 #include "window.h"
 
@@ -2246,7 +2245,7 @@ motion_handler(struct widget *widget,
 		widget_schedule_redraw(widget);
 	}
 
-	return WL_CURSOR_IBEAM;
+	return POINTER_IBEAM;
 }
 
 static struct terminal *
diff --git a/clients/window.c b/clients/window.c
index 489c35a..a41fa3d 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -103,6 +103,7 @@ struct display {
 	} xkb;
 
 	struct wl_cursor_theme *cursor_theme;
+	struct wl_cursor **cursors;
 
 	PFNGLEGLIMAGETARGETTEXTURE2DOESPROC image_target_texture_2d;
 	PFNEGLCREATEIMAGEKHRPROC create_image;
@@ -274,8 +275,8 @@ struct shm_pool {
 };
 
 enum {
-	WL_CURSOR_DEFAULT = 100,
-	WL_CURSOR_UNSET
+	POINTER_DEFAULT = 100,
+	POINTER_UNSET
 };
 
 enum window_location {
@@ -613,11 +614,48 @@ display_create_surface(struct display *display,
 	return display_create_shm_surface(display, rectangle, flags, NULL);
 }
 
+static const char *cursors[] = {
+	"bottom_left_corner",
+	"bottom_right_corner",
+	"bottom_side",
+	"grabbing",
+	"left_ptr",
+	"left_side",
+	"right_side",
+	"top_left_corner",
+	"top_right_corner",
+	"top_side",
+	"xterm",
+	"hand1",
+};
+
+static void
+create_cursors(struct display *display)
+{
+	unsigned int i;
+
+	display->cursor_theme = wl_cursor_theme_load(NULL, 32, display->shm);
+	display->cursors =
+		malloc(ARRAY_LENGTH(cursors) * sizeof display->cursors[0]);
+
+	for (i = 0; i < ARRAY_LENGTH(cursors); i++)
+		display->cursors[i] =
+			wl_cursor_theme_get_cursor(display->cursor_theme,
+						   cursors[i]);
+}
+
+static void
+destroy_cursors(struct display *display)
+{
+	wl_cursor_theme_destroy(display->cursor_theme);
+}
+
 struct wl_cursor_image *
 display_get_pointer_image(struct display *display, int pointer)
 {
 	struct wl_cursor *cursor =
-		wl_cursor_theme_get_cursor(display->cursor_theme, pointer);
+		wl_cursor_theme_get_cursor(display->cursor_theme,
+					   cursors[pointer]);
 
 	return cursor ? cursor->images[0] : NULL;
 }
@@ -1106,7 +1144,7 @@ frame_button_enter_handler(struct widget *widget,
 	widget_schedule_redraw(frame_button->widget);
 	frame_button->state = FRAME_BUTTON_OVER;
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 static void
@@ -1286,25 +1324,25 @@ frame_get_pointer_image_for_location(struct frame *frame, struct input *input)
 
 	switch (location) {
 	case THEME_LOCATION_RESIZING_TOP:
-		return WL_CURSOR_TOP;
+		return POINTER_TOP;
 	case THEME_LOCATION_RESIZING_BOTTOM:
-		return WL_CURSOR_BOTTOM;
+		return POINTER_BOTTOM;
 	case THEME_LOCATION_RESIZING_LEFT:
-		return WL_CURSOR_LEFT;
+		return POINTER_LEFT;
 	case THEME_LOCATION_RESIZING_RIGHT:
-		return WL_CURSOR_RIGHT;
+		return POINTER_RIGHT;
 	case THEME_LOCATION_RESIZING_TOP_LEFT:
-		return WL_CURSOR_TOP_LEFT;
+		return POINTER_TOP_LEFT;
 	case THEME_LOCATION_RESIZING_TOP_RIGHT:
-		return WL_CURSOR_TOP_RIGHT;
+		return POINTER_TOP_RIGHT;
 	case THEME_LOCATION_RESIZING_BOTTOM_LEFT:
-		return WL_CURSOR_BOTTOM_LEFT;
+		return POINTER_BOTTOM_LEFT;
 	case THEME_LOCATION_RESIZING_BOTTOM_RIGHT:
-		return WL_CURSOR_BOTTOM_RIGHT;
+		return POINTER_BOTTOM_RIGHT;
 	case THEME_LOCATION_EXTERIOR:
 	case THEME_LOCATION_TITLEBAR:
 	default:
-		return WL_CURSOR_LEFT_PTR;
+		return POINTER_LEFT_PTR;
 	}
 }
 
@@ -1379,7 +1417,7 @@ frame_button_handler(struct widget *widget,
 		case THEME_LOCATION_TITLEBAR:
 			if (!window->shell_surface)
 				break;
-			input_set_pointer_image(input, time, WL_CURSOR_DRAGGING);
+			input_set_pointer_image(input, time, POINTER_DRAGGING);
 			input_ungrab(input);
 			wl_shell_surface_move(window->shell_surface,
 					      input_get_seat(input),
@@ -1471,7 +1509,7 @@ input_set_focus_widget(struct input *input, struct widget *focus,
 		       float x, float y)
 {
 	struct widget *old, *widget;
-	int pointer = WL_CURSOR_LEFT_PTR;
+	int pointer = POINTER_LEFT_PTR;
 
 	if (focus == input->focus_widget)
 		return;
@@ -1507,7 +1545,7 @@ pointer_handle_motion(void *data, struct wl_pointer *pointer,
 	struct input *input = data;
 	struct window *window = input->pointer_focus;
 	struct widget *widget;
-	int cursor = WL_CURSOR_LEFT_PTR;
+	int cursor = POINTER_LEFT_PTR;
 	float sx = wl_fixed_to_double(sx_w);
 	float sy = wl_fixed_to_double(sy_w);
 
@@ -1638,7 +1676,7 @@ input_remove_pointer_focus(struct input *input)
 	input_set_focus_widget(input, NULL, 0, 0);
 
 	input->pointer_focus = NULL;
-	input->current_cursor = WL_CURSOR_UNSET;
+	input->current_cursor = POINTER_UNSET;
 }
 
 static void
@@ -1959,7 +1997,6 @@ static const struct wl_data_device_listener data_device_listener = {
 void
 input_set_pointer_image(struct input *input, uint32_t time, int pointer)
 {
-	struct display *display = input->display;
 	struct wl_buffer *buffer;
 	struct wl_cursor *cursor;
 	struct wl_cursor_image *image;
@@ -1967,7 +2004,7 @@ input_set_pointer_image(struct input *input, uint32_t time, int pointer)
 	if (pointer == input->current_cursor)
 		return;
 
-	cursor = wl_cursor_theme_get_cursor(display->cursor_theme, pointer);
+	cursor = input->display->cursors[pointer];
 	if (!cursor)
 		return;
 
@@ -2538,7 +2575,7 @@ menu_motion_handler(struct widget *widget,
 	if (widget == menu->widget)
 		menu_set_item(data, y);
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 static int
@@ -2550,7 +2587,7 @@ menu_enter_handler(struct widget *widget,
 	if (widget == menu->widget)
 		menu_set_item(data, y);
 
-	return WL_CURSOR_LEFT_PTR;
+	return POINTER_LEFT_PTR;
 }
 
 static void
@@ -3057,7 +3094,7 @@ display_create(int argc, char *argv[])
 	d->create_image = (void *) eglGetProcAddress("eglCreateImageKHR");
 	d->destroy_image = (void *) eglGetProcAddress("eglDestroyImageKHR");
 
-	d->cursor_theme = wl_cursor_theme_load(NULL, 32, d->shm);
+	create_cursors(d);
 
 	d->theme = theme_create();
 
@@ -3103,7 +3140,7 @@ display_destroy(struct display *display)
 	fini_xkb(display);
 
 	theme_destroy(display->theme);
-	wl_cursor_theme_destroy(display->cursor_theme);
+	destroy_cursors(display);
 
 #ifdef HAVE_CAIRO_EGL
 	fini_egl(display);
-- 
1.7.4.1



More information about the wayland-devel mailing list