From db3f169a3b9aaced264a5cec39e41430e4b8040f Mon Sep 17 00:00:00 2001 From: infirit <infirit@gmail.com> Date: Wed, 10 Dec 2014 01:51:45 +0100 Subject: libview: Only accept focus on annot windows when pointer is on the window It prevents focus stealing when scrolling with keyboard. Taken from evince commit: 8a635b0b7d54cecc864299c8decbcc51b3c068a9 From: Carlos Garcia Campos <carlosgc@gnome.org> Gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=623829 --- libview/ev-annotation-window.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/libview/ev-annotation-window.c b/libview/ev-annotation-window.c index 91b0a7b0..643341fa 100644 --- a/libview/ev-annotation-window.c +++ b/libview/ev-annotation-window.c @@ -411,7 +411,7 @@ ev_annotation_window_init (EvAnnotationWindow *window) gtk_container_set_border_width (GTK_CONTAINER (window), 2); - gtk_window_set_accept_focus (GTK_WINDOW (window), TRUE); + gtk_window_set_accept_focus (GTK_WINDOW (window), FALSE); gtk_window_set_decorated (GTK_WINDOW (window), FALSE); gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE); gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE); @@ -544,6 +544,24 @@ ev_annotation_window_focus_out_event (GtkWidget *widget, return FALSE; } +static gboolean +ev_annotation_window_enter_notify_event (GtkWidget *widget, + GdkEventCrossing *event) +{ + gtk_window_set_accept_focus (GTK_WINDOW (widget), TRUE); + + return FALSE; +} + +static gboolean +ev_annotation_window_leave_notify_event (GtkWidget *widget, + GdkEventCrossing *event) +{ + gtk_window_set_accept_focus (GTK_WINDOW (widget), FALSE); + + return FALSE; +} + static void ev_annotation_window_class_init (EvAnnotationWindowClass *klass) { @@ -558,6 +576,8 @@ ev_annotation_window_class_init (EvAnnotationWindowClass *klass) gtk_widget_class->configure_event = ev_annotation_window_configure_event; gtk_widget_class->focus_in_event = ev_annotation_window_focus_in_event; gtk_widget_class->focus_out_event = ev_annotation_window_focus_out_event; + gtk_widget_class->enter_notify_event = ev_annotation_window_enter_notify_event; + gtk_widget_class->leave_notify_event = ev_annotation_window_leave_notify_event; g_object_class_install_property (g_object_class, PROP_ANNOTATION, -- cgit v1.2.1