diff options
author | Giovanni Campagna <gcampagn@redhat.com> | 2013-09-11 17:22:14 +0200 |
---|---|---|
committer | Giovanni Campagna <gcampagn@redhat.com> | 2013-09-12 10:16:29 +0200 |
commit | 9def55914c0aa62d8ed7c24b2c6b957a46541423 (patch) | |
tree | ece0efec09a4de0bdb3f7cff4067e4c1e5586e2c | |
parent | f044eda079d0e4f47ffb4c43c9e8a52ffeac8ea4 (diff) | |
download | mutter-9def55914c0aa62d8ed7c24b2c6b957a46541423.tar.gz |
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.c | 33 | ||||
-rw-r--r-- | src/core/screen-private.h | 2 | ||||
-rw-r--r-- | src/meta/common.h | 18 | ||||
-rw-r--r-- | src/meta/screen.h | 4 |
4 files changed, 49 insertions, 8 deletions
diff --git a/src/core/display.c b/src/core/display.c index 755b97034..c630a950c 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 5d7bfd0aa..426f561ff 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 98f2ad781..01c259773 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 aec9afa47..88a3481a4 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 |