[Xfce4-commits] [panel-plugins/xfce4-whiskermenu-plugin] 21/41: Replace deprecated pointer grab.
noreply at xfce.org
noreply at xfce.org
Sat Aug 20 18:32:35 CEST 2016
This is an automated email from the git hooks/post-receive script.
gottcode pushed a commit to branch master
in repository panel-plugins/xfce4-whiskermenu-plugin.
commit b83e05ef51ebadc8a5d1fe9d88c4acd6f714ecae
Author: Graeme Gott <graeme at gottcode.org>
Date: Tue Aug 9 08:22:32 2016 -0400
Replace deprecated pointer grab.
---
panel-plugin/plugin.cpp | 48 ++++++++++++++++++++++++++------
panel-plugin/window.cpp | 73 ++++++++++++++++++++++++++++++++-----------------
2 files changed, 87 insertions(+), 34 deletions(-)
diff --git a/panel-plugin/plugin.cpp b/panel-plugin/plugin.cpp
index 0a9d592..a3e00b1 100644
--- a/panel-plugin/plugin.cpp
+++ b/panel-plugin/plugin.cpp
@@ -51,19 +51,48 @@ static bool panel_utils_grab_available()
{
bool grab_succeed = false;
- // Don't try to get the grab for longer then 1/4 second
GdkWindow* root = gdk_screen_get_root_window(xfce_gdk_screen_get_active(NULL));
+ GdkDisplay* display = gdk_display_get_default();
+#if GTK_CHECK_VERSION(3,20,0)
+ GdkSeat* seat = gdk_display_get_default_seat(display);
+
+ // Don't try to get the grab for longer then 1/4 second
+ for (guint i = 0; i < (G_USEC_PER_SEC / 400); ++i)
+ {
+ if (gdk_seat_grab(seat, root, GDK_SEAT_CAPABILITY_ALL, true, NULL, NULL, NULL, NULL))
+ {
+ gdk_seat_ungrab(seat);
+ grab_succeed = true;
+ break;
+ }
+ g_usleep(100);
+ }
+#else
+ GdkDeviceManager* device_manager = gdk_display_get_device_manager(display);
+ GdkDevice* pointer = gdk_device_manager_get_client_pointer(device_manager);
+ GdkDevice* keyboard = gdk_device_get_associated_device(pointer);
+
+ // Don't try to get the grab for longer then 1/4 second
GdkGrabStatus grab_pointer = GDK_GRAB_FROZEN;
GdkGrabStatus grab_keyboard = GDK_GRAB_FROZEN;
- for (guint i = 0; i < (G_USEC_PER_SEC / 4 / 100); ++i)
+ for (guint i = 0; i < (G_USEC_PER_SEC / 400); ++i)
{
- grab_keyboard = gdk_keyboard_grab(root, true, GDK_CURRENT_TIME);
+ grab_keyboard = gdk_device_grab(keyboard,
+ root,
+ GDK_OWNERSHIP_NONE,
+ true,
+ GDK_ALL_EVENTS_MASK,
+ NULL,
+ GDK_CURRENT_TIME);
if (grab_keyboard == GDK_GRAB_SUCCESS)
{
- const GdkEventMask pointer_mask = static_cast<GdkEventMask>(GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK
- | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK);
- grab_pointer = gdk_pointer_grab(root, true, pointer_mask, NULL, NULL, GDK_CURRENT_TIME);
+ grab_pointer = gdk_device_grab(pointer,
+ root,
+ GDK_OWNERSHIP_NONE,
+ true,
+ GDK_ALL_EVENTS_MASK,
+ NULL,
+ GDK_CURRENT_TIME);
if (grab_pointer == GDK_GRAB_SUCCESS)
{
grab_succeed = true;
@@ -76,12 +105,13 @@ static bool panel_utils_grab_available()
// Release the grab so the menu window can take it
if (grab_pointer == GDK_GRAB_SUCCESS)
{
- gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ gdk_device_ungrab(pointer, GDK_CURRENT_TIME);
}
if (grab_keyboard == GDK_GRAB_SUCCESS)
{
- gdk_keyboard_ungrab(GDK_CURRENT_TIME);
+ gdk_device_ungrab(keyboard, GDK_CURRENT_TIME);
}
+#endif
if (!grab_succeed)
{
diff --git a/panel-plugin/window.cpp b/panel-plugin/window.cpp
index 2ef6082..cfd8706 100644
--- a/panel-plugin/window.cpp
+++ b/panel-plugin/window.cpp
@@ -39,6 +39,49 @@ using namespace WhiskerMenu;
//-----------------------------------------------------------------------------
+#if GTK_CHECK_VERSION(3,20,0)
+
+static void grab_pointer(GdkWindow* window, guint32)
+{
+ GdkDisplay* display = gdk_display_get_default();
+ GdkSeat* seat = gdk_display_get_default_seat(display);
+ gdk_seat_grab(seat, window, GDK_SEAT_CAPABILITY_ALL_POINTING, true, NULL, NULL, NULL, NULL);
+}
+
+static void ungrab_pointer()
+{
+ GdkDisplay* display = gdk_display_get_default();
+ GdkSeat* seat = gdk_display_get_default_seat(display);
+ gdk_seat_ungrab(seat);
+}
+
+#else
+
+static void grab_pointer(GdkWindow* window, guint32 time)
+{
+ GdkDisplay* display = gdk_display_get_default();
+ GdkDeviceManager* device_manager = gdk_display_get_device_manager(display);
+ GdkDevice* device = gdk_device_manager_get_client_pointer(device_manager);
+ gdk_device_grab(device, window, GDK_OWNERSHIP_NONE, true,
+ GdkEventMask(
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK
+ ),
+ NULL, time);
+}
+
+static void ungrab_pointer()
+{
+ GdkDisplay* display = gdk_display_get_default();
+ GdkDeviceManager* device_manager = gdk_display_get_device_manager(display);
+ GdkDevice* device = gdk_device_manager_get_client_pointer(device_manager);
+ gdk_device_ungrab(device, gtk_get_current_event_time());
+}
+
+#endif
+
+//-----------------------------------------------------------------------------
+
WhiskerMenu::Window::Window() :
m_window(NULL),
m_sidebar_size_group(NULL),
@@ -248,7 +291,7 @@ WhiskerMenu::Window::~Window()
void WhiskerMenu::Window::hide()
{
- gdk_pointer_ungrab(gtk_get_current_event_time());
+ ungrab_pointer();
// Hide command buttons to remove active border
for (int i = 0; i < 4; ++i)
@@ -601,12 +644,7 @@ void WhiskerMenu::Window::save()
void WhiskerMenu::Window::on_context_menu_destroyed()
{
- gdk_pointer_grab(gtk_widget_get_window(GTK_WIDGET(m_window)), true,
- GdkEventMask(
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK
- ),
- NULL, NULL, gtk_get_current_event_time());
+ grab_pointer(gtk_widget_get_window(GTK_WIDGET(m_window)), gtk_get_current_event_time());
}
//-----------------------------------------------------------------------------
@@ -658,12 +696,7 @@ gboolean WhiskerMenu::Window::on_enter_notify_event(GtkWidget*, GdkEvent* event)
return false;
}
- gdk_pointer_grab(gtk_widget_get_window(GTK_WIDGET(m_window)), true,
- GdkEventMask(
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK
- ),
- NULL, NULL, crossing_event->time);
+ grab_pointer(gtk_widget_get_window(GTK_WIDGET(m_window)), crossing_event->time);
return false;
}
@@ -679,12 +712,7 @@ gboolean WhiskerMenu::Window::on_leave_notify_event(GtkWidget*, GdkEvent* event)
return false;
}
- gdk_pointer_grab(gtk_widget_get_window(GTK_WIDGET(m_window)), true,
- GdkEventMask(
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK
- ),
- NULL, NULL, crossing_event->time);
+ grab_pointer(gtk_widget_get_window(GTK_WIDGET(m_window)), crossing_event->time);
return false;
}
@@ -789,12 +817,7 @@ gboolean WhiskerMenu::Window::on_map_event(GtkWidget*, GdkEvent*)
gtk_window_set_keep_above(m_window, true);
// Track mouse clicks outside of menu
- gdk_pointer_grab(gtk_widget_get_window(GTK_WIDGET(m_window)), true,
- GdkEventMask(
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK
- ),
- NULL, NULL, gtk_get_current_event_time());
+ grab_pointer(gtk_widget_get_window(GTK_WIDGET(m_window)), gtk_get_current_event_time());
// Focus search entry
gtk_widget_grab_focus(GTK_WIDGET(m_search_entry));
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list