summaryrefslogtreecommitdiff
path: root/eel/eel-canvas.c
diff options
context:
space:
mode:
authorWolfgang Ulbrich <[email protected]>2016-01-18 15:30:10 +0100
committerWolfgang Ulbrich <[email protected]>2016-01-18 15:30:10 +0100
commitacadd35e4cab5beb155496558597ae5c755f1225 (patch)
treea8d935240ca2951c98971edcba9f8a525bdc77e1 /eel/eel-canvas.c
parent57c2e8090698e8d05beec0c53e3a116fd8b88862 (diff)
downloadcaja-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.c56
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);