aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/misc
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/misc')
-rw-r--r--widgets/misc/e-buffer-tagger.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/widgets/misc/e-buffer-tagger.c b/widgets/misc/e-buffer-tagger.c
index 650abb3d9d..8a0d7ccbc3 100644
--- a/widgets/misc/e-buffer-tagger.c
+++ b/widgets/misc/e-buffer-tagger.c
@@ -126,6 +126,24 @@ markup_text (GtkTextBuffer *buffer)
g_free (text);
}
+static void
+get_pointer_position (GtkTextView *text_view,
+ gint *x,
+ gint *y)
+{
+ GdkWindow *window;
+ GdkDisplay *display;
+ GdkDeviceManager *device_manager;
+ GdkDevice *device;
+
+ window = gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_WIDGET);
+ display = gdk_window_get_display (window);
+ device_manager = gdk_display_get_device_manager (display);
+ device = gdk_device_manager_get_client_pointer (device_manager);
+
+ gdk_window_get_device_position (window, device, x, y, NULL);
+}
+
static guint32
get_state (GtkTextBuffer *buffer)
{
@@ -338,7 +356,8 @@ update_mouse_cursor (GtkTextView *text_view,
else
gdk_window_set_cursor (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT), regular_cursor);
- gdk_window_get_pointer (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_WIDGET), NULL, NULL, NULL);
+ /* XXX Is this necessary? Appears to be a no-op. */
+ get_pointer_position (text_view, NULL, NULL);
}
hovering_over_link = (state & E_BUFFER_TAGGER_STATE_IS_HOVERING_TOOLTIP) != 0;
@@ -438,7 +457,7 @@ update_ctrl_state (GtkTextView *textview,
update_state (buffer, E_BUFFER_TAGGER_STATE_CTRL_DOWN, ctrl_is_down != FALSE);
}
- gdk_window_get_pointer (gtk_text_view_get_window (textview, GTK_TEXT_WINDOW_WIDGET), &x, &y, NULL);
+ get_pointer_position (textview, &x, &y);
gtk_text_view_window_to_buffer_coords (textview, GTK_TEXT_WINDOW_WIDGET, x, y, &x, &y);
update_mouse_cursor (textview, x, y);
}
@@ -471,10 +490,17 @@ textview_event_after (GtkTextView *textview,
}
if (!gdk_event_get_state (ev, &mt)) {
- GdkWindow *w = gtk_widget_get_parent_window (GTK_WIDGET (textview));
+ GdkWindow *window;
+ GdkDisplay *display;
+ GdkDeviceManager *device_manager;
+ GdkDevice *device;
+
+ window = gtk_widget_get_parent_window (GTK_WIDGET (textview));
+ display = gdk_window_get_display (window);
+ device_manager = gdk_display_get_device_manager (display);
+ device = gdk_device_manager_get_client_pointer (device_manager);
- if (w)
- gdk_window_get_pointer (w, NULL, NULL, &mt);
+ gdk_window_get_device_position (window, device, NULL, NULL, &mt);
}
update_ctrl_state (textview, (mt & GDK_CONTROL_MASK) != 0);
@@ -533,7 +559,7 @@ textview_visibility_notify_event (GtkTextView *textview,
g_return_val_if_fail (GTK_IS_TEXT_VIEW (textview), FALSE);
- gdk_window_get_pointer (gtk_text_view_get_window (textview, GTK_TEXT_WINDOW_WIDGET), &wx, &wy, NULL);
+ get_pointer_position (textview, &wx, &wy);
gtk_text_view_window_to_buffer_coords (
textview,