diff options
author | Wolfgang Ulbrich <[email protected]> | 2016-01-18 15:30:10 +0100 |
---|---|---|
committer | Wolfgang Ulbrich <[email protected]> | 2016-01-18 15:30:10 +0100 |
commit | acadd35e4cab5beb155496558597ae5c755f1225 (patch) | |
tree | a8d935240ca2951c98971edcba9f8a525bdc77e1 /eel/eel-canvas.c | |
parent | 57c2e8090698e8d05beec0c53e3a116fd8b88862 (diff) | |
download | caja-acadd35e4cab5beb155496558597ae5c755f1225.tar.bz2 caja-acadd35e4cab5beb155496558597ae5c755f1225.tar.xz |
GTK3 canvas: don't use deprecated GDK grab API
taken from:
https://git.gnome.org/browse/nautilus/commit/?h=gnome-3-2&id=2ff006d
Diffstat (limited to 'eel/eel-canvas.c')
-rw-r--r-- | eel/eel-canvas.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/eel/eel-canvas.c b/eel/eel-canvas.c index 55d983c8..1e45224d 100644 --- a/eel/eel-canvas.c +++ b/eel/eel-canvas.c @@ -341,12 +341,16 @@ eel_canvas_item_dispose (GObject *object) item->canvas->need_repick = TRUE; } +#if GTK_CHECK_VERSION(3, 0, 0) + eel_canvas_item_ungrab (item, GDK_CURRENT_TIME); +#else if (item == item->canvas->grabbed_item) { GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (item->canvas)); item->canvas->grabbed_item = NULL; gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); } +#endif if (item == item->canvas->focused_item) item->canvas->focused_item = NULL; @@ -888,6 +892,40 @@ eel_canvas_item_hide (EelCanvasItem *item) * returns %GDK_GRAB_NOT_VIEWABLE. Else, it returns the result of calling * gdk_pointer_grab(). **/ +#if GTK_CHECK_VERSION(3, 0, 0) +GdkGrabStatus +eel_canvas_item_grab (EelCanvasItem *item, + GdkEventMask event_mask, + GdkCursor *cursor, + guint32 timestamp) +{ + GdkGrabStatus retval; + GdkDisplay *display; + GdkDeviceManager *manager; + GdkDevice *device; + + g_return_val_if_fail (EEL_IS_CANVAS_ITEM (item), GDK_GRAB_NOT_VIEWABLE); + g_return_val_if_fail (gtk_widget_get_mapped (GTK_WIDGET (item->canvas)), + GDK_GRAB_NOT_VIEWABLE); + + if (item->canvas->grabbed_item) + return GDK_GRAB_ALREADY_GRABBED; + + if (!(item->flags & EEL_CANVAS_ITEM_MAPPED)) + return GDK_GRAB_NOT_VIEWABLE; + + display = gtk_widget_get_display (GTK_WIDGET (item->canvas)); + manager = gdk_display_get_device_manager (display); + device = gdk_device_manager_get_client_pointer (manager); + + retval = gdk_device_grab (device, + gtk_layout_get_bin_window (GTK_LAYOUT (item->canvas)), + GDK_OWNERSHIP_NONE, + FALSE, + event_mask, + cursor, + timestamp); +#else int eel_canvas_item_grab (EelCanvasItem *item, guint event_mask, GdkCursor *cursor, guint32 etime) { @@ -909,6 +947,7 @@ eel_canvas_item_grab (EelCanvasItem *item, guint event_mask, GdkCursor *cursor, NULL, cursor, etime); +#endif if (retval != GDK_GRAB_SUCCESS) return retval; @@ -933,6 +972,10 @@ void eel_canvas_item_ungrab (EelCanvasItem *item, guint32 etime) { GdkDisplay *display; +#if GTK_CHECK_VERSION(3, 0, 0) + GdkDeviceManager *manager; + GdkDevice *device; +#endif g_return_if_fail (EEL_IS_CANVAS_ITEM (item)); @@ -940,11 +983,18 @@ eel_canvas_item_ungrab (EelCanvasItem *item, guint32 etime) return; display = gtk_widget_get_display (GTK_WIDGET (item->canvas)); +#if GTK_CHECK_VERSION(3, 0, 0) + manager = gdk_display_get_device_manager (display); + device = gdk_device_manager_get_client_pointer (manager); + + item->canvas->grabbed_item = NULL; + gdk_device_ungrab (device, etime); +#else item->canvas->grabbed_item = NULL; gdk_display_pointer_ungrab (display, etime); +#endif } - /** * eel_canvas_item_w2i: * @item: A canvas item. @@ -2274,9 +2324,13 @@ shutdown_transients (EelCanvas *canvas) if (canvas->grabbed_item) { +#if GTK_CHECK_VERSION(3, 0, 0) + eel_canvas_item_ungrab (canvas->grabbed_item, GDK_CURRENT_TIME); +#else GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (canvas)); canvas->grabbed_item = NULL; gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); +#endif } remove_idle (canvas); |