summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovanni Campagna <gcampagn@redhat.com>2013-09-11 17:22:14 +0200
committerGiovanni Campagna <gcampagn@redhat.com>2013-09-12 10:16:29 +0200
commit9def55914c0aa62d8ed7c24b2c6b957a46541423 (patch)
treeece0efec09a4de0bdb3f7cff4067e4c1e5586e2c
parentf044eda079d0e4f47ffb4c43c9e8a52ffeac8ea4 (diff)
display: add support for more cursor types
These cursors are used by gnome-shell, supporting them allows to reduce GDK usage in the shell. Also, make meta_screen_set_cursor() public. https://bugzilla.gnome.org/show_bug.cgi?id=707919
-rw-r--r--src/core/display.c33
-rw-r--r--src/core/screen-private.h2
-rw-r--r--src/meta/common.h18
-rw-r--r--src/meta/screen.h4
4 files changed, 49 insertions, 8 deletions
diff --git a/src/core/display.c b/src/core/display.c
index 755b9703..c630a950 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -3863,7 +3863,8 @@ meta_display_create_x_cursor (MetaDisplay *display,
MetaCursor cursor)
{
Cursor xcursor;
- guint glyph;
+ guint glyph = XC_num_glyphs;
+ const char *name = NULL;
switch (cursor)
{
@@ -3900,14 +3901,38 @@ meta_display_create_x_cursor (MetaDisplay *display,
case META_CURSOR_BUSY:
glyph = XC_watch;
break;
-
+ case META_CURSOR_DND_IN_DRAG:
+ name = "dnd-in-drag";
+ break;
+ case META_CURSOR_DND_MOVE:
+ name = "dnd-move";
+ break;
+ case META_CURSOR_DND_COPY:
+ name = "dnd-copy";
+ break;
+ case META_CURSOR_DND_UNSUPPORTED_TARGET:
+ name = "dnd-none";
+ break;
+ case META_CURSOR_POINTING_HAND:
+ glyph = XC_hand2;
+ break;
+ case META_CURSOR_CROSSHAIR:
+ glyph = XC_crosshair;
+ break;
+ case META_CURSOR_IBEAM:
+ glyph = XC_xterm;
+ break;
+
default:
g_assert_not_reached ();
glyph = 0; /* silence compiler */
break;
}
-
- xcursor = XCreateFontCursor (display->xdisplay, glyph);
+
+ if (name != NULL)
+ xcursor = XcursorLibraryLoadCursor (display->xdisplay, name);
+ else
+ xcursor = XCreateFontCursor (display->xdisplay, glyph);
return xcursor;
}
diff --git a/src/core/screen-private.h b/src/core/screen-private.h
index 5d7bfd0a..426f561f 100644
--- a/src/core/screen-private.h
+++ b/src/core/screen-private.h
@@ -151,8 +151,6 @@ void meta_screen_foreach_window (MetaScreen *scree
MetaScreenWindowFunc func,
gpointer data);
-void meta_screen_set_cursor (MetaScreen *screen,
- MetaCursor cursor);
void meta_screen_update_cursor (MetaScreen *screen);
void meta_screen_tab_popup_create (MetaScreen *screen,
diff --git a/src/meta/common.h b/src/meta/common.h
index 98f2ad78..01c25977 100644
--- a/src/meta/common.h
+++ b/src/meta/common.h
@@ -260,6 +260,13 @@ typedef enum
* @META_CURSOR_NW_RESIZE: Resize north-western corner cursor
* @META_CURSOR_MOVE_OR_RESIZE_WINDOW: Move or resize cursor
* @META_CURSOR_BUSY: Busy cursor
+ * @META_CURSOR_DND_IN_DRAG: DND in drag cursor
+ * @META_CURSOR_DND_MOVE: DND move cursor
+ * @META_CURSOR_DND_COPY: DND copy cursor
+ * @META_CURSOR_DND_UNSUPPORTED_TARGET: DND unsupported target
+ * @META_CURSOR_POINTING_HAND: pointing hand
+ * @META_CURSOR_CROSSHAIR: crosshair (action forbidden)
+ * @META_CURSOR_IBEAM: I-beam (text input)
*/
typedef enum
{
@@ -273,8 +280,15 @@ typedef enum
META_CURSOR_NE_RESIZE,
META_CURSOR_NW_RESIZE,
META_CURSOR_MOVE_OR_RESIZE_WINDOW,
- META_CURSOR_BUSY
-
+ META_CURSOR_BUSY,
+ META_CURSOR_DND_IN_DRAG,
+ META_CURSOR_DND_MOVE,
+ META_CURSOR_DND_COPY,
+ META_CURSOR_DND_UNSUPPORTED_TARGET,
+ META_CURSOR_POINTING_HAND,
+ META_CURSOR_CROSSHAIR,
+ META_CURSOR_IBEAM,
+ META_CURSOR_LAST
} MetaCursor;
/**
diff --git a/src/meta/screen.h b/src/meta/screen.h
index aec9afa4..88a3481a 100644
--- a/src/meta/screen.h
+++ b/src/meta/screen.h
@@ -114,4 +114,8 @@ void meta_screen_override_workspace_layout (MetaScreen *screen,
gboolean vertical_layout,
int n_rows,
int n_columns);
+
+void meta_screen_set_cursor (MetaScreen *screen,
+ MetaCursor cursor);
+
#endif