From 30c99286eda160f95fd7f17ba4e82e2e368fc6eb Mon Sep 17 00:00:00 2001 From: Oz N Tiram Date: Sat, 18 Jun 2016 16:23:32 +0200 Subject: Some more fixes for gtk+3 * remove deprecated calls to: - gdk_keyboard_grab - gdk_pointer_grab - gdk_keyboard_ungrab - gdk_pointer_ungrab GTK+3 Replace on_preview_expose_event This method used many deprecated calles. This method was replaced with on_preview_draw, code taken directly from current gnome-screenshot --- mate-screenshot/src/screenshot-utils.c | 50 +++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'mate-screenshot/src/screenshot-utils.c') diff --git a/mate-screenshot/src/screenshot-utils.c b/mate-screenshot/src/screenshot-utils.c index 9d5d8af7..0efd43b8 100644 --- a/mate-screenshot/src/screenshot-utils.c +++ b/mate-screenshot/src/screenshot-utils.c @@ -500,6 +500,11 @@ void screenshot_select_area_async (SelectAreaCallback callback) { GdkCursor *cursor; +#if GTK_CHECK_VERSION (3, 0, 0) + GdkDeviceManager *manager; + GdkDevice *pointer, *keyboard; + GdkGrabStatus res; +#endif select_area_filter_data data; GdkRectangle *rectangle; CallbackData *cb_data; @@ -521,6 +526,39 @@ screenshot_select_area_async (SelectAreaCallback callback) cursor = gdk_cursor_new (GDK_CROSSHAIR); +#if GTK_CHECK_VERSION (3, 0, 0) + manager = gdk_display_get_device_manager (gdk_display_get_default ()); + pointer = gdk_device_manager_get_client_pointer (manager); + keyboard = gdk_device_get_associated_device (pointer); + + + res = gdk_device_grab (pointer, gtk_widget_get_window (data.window), + GDK_OWNERSHIP_NONE, FALSE, + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK, + cursor, GDK_CURRENT_TIME); + + if (res != GDK_GRAB_SUCCESS) + { + g_object_unref (cursor); + goto out; + } + + res = gdk_device_grab (keyboard, gtk_widget_get_window (data.window), + GDK_OWNERSHIP_NONE, FALSE, + GDK_KEY_PRESS_MASK | + GDK_KEY_RELEASE_MASK, + NULL, GDK_CURRENT_TIME); + if (res != GDK_GRAB_SUCCESS) + { + gdk_device_ungrab (pointer, GDK_CURRENT_TIME); + g_object_unref (cursor); + goto out; + } + +#else + if (gdk_pointer_grab (gtk_widget_get_window (data.window), FALSE, GDK_POINTER_MOTION_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK, NULL, cursor, @@ -537,14 +575,24 @@ screenshot_select_area_async (SelectAreaCallback callback) goto out; } +#endif + gtk_main (); +#if GTK_CHECK_VERSION (3, 0, 0) + + gdk_device_ungrab (keyboard, GDK_CURRENT_TIME); + gdk_device_ungrab (pointer, GDK_CURRENT_TIME); + +#else + gdk_keyboard_ungrab (GDK_CURRENT_TIME); gdk_pointer_ungrab (GDK_CURRENT_TIME); +#endif + gtk_widget_destroy (data.window); gdk_cursor_unref (cursor); - gdk_flush (); out: -- cgit v1.2.1