[evince/dont_grab_focus_from_mouse: 2/3] sidebar pages: dont grab focus from mouse clicks
- From: Nelson Ben <nbenitez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince/dont_grab_focus_from_mouse: 2/3] sidebar pages: dont grab focus from mouse clicks
- Date: Sun, 16 Jan 2022 21:27:17 +0000 (UTC)
commit 6204d0e71b1a1908bdf330a76d96836dc27980db
Author: Nelson Benítez León <nbenitezl gmail com>
Date: Sun Jan 16 16:05:44 2022 -0400
sidebar pages: dont grab focus from mouse clicks
When the mouse is used to click on sidebar
elements (Outline entries, Annotation entries,
Bookmark entries, Thumbnail pictures) the focus
should not be passed from main view to sidebar,
that should only happen when the user explicitly
uses the TAB key to switch keyboard focus.
Part of issue #704
shell/ev-sidebar-thumbnails.c | 18 ++++++++++++++++++
shell/ev-sidebar.c | 31 +++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
---
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c
index 1993fd53a..b2c227709 100644
--- a/shell/ev-sidebar-thumbnails.c
+++ b/shell/ev-sidebar-thumbnails.c
@@ -104,6 +104,7 @@ static void ev_sidebar_thumbnails_reload (EvSidebarThumbnails
static void adjustment_changed_cb (EvSidebarThumbnails *sidebar_thumbnails);
static void check_toggle_blank_first_dual_mode (EvSidebarThumbnails *sidebar_thumbnails);
static void check_toggle_blank_first_dual_mode_when_resizing (EvSidebarThumbnails
*sidebar_thumbnails);
+static EvWindow * ev_sidebar_thumbnails_get_ev_window (EvSidebarThumbnails *sidebar);
G_DEFINE_TYPE_EXTENDED (EvSidebarThumbnails,
ev_sidebar_thumbnails,
@@ -653,6 +654,20 @@ ev_sidebar_thumbnails_fill_model (EvSidebarThumbnails *sidebar_thumbnails)
}
}
+static gboolean
+button_release_cb (GtkIconView *icon_view,
+ GdkEventButton *event,
+ EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvWindow *ev_window;
+
+ ev_window = ev_sidebar_thumbnails_get_ev_window (sidebar_thumbnails);
+ if (ev_window)
+ ev_window_focus_view (ev_window);
+
+ return GDK_EVENT_STOP;
+}
+
static void
ev_sidebar_icon_selection_changed (GtkIconView *icon_view,
EvSidebarThumbnails *ev_sidebar_thumbnails)
@@ -731,6 +746,9 @@ ev_sidebar_init_icon_view (EvSidebarThumbnails *ev_sidebar_thumbnails)
g_signal_connect_data (priv->model, "notify::dual-odd-left",
G_CALLBACK (check_toggle_blank_first_dual_mode), ev_sidebar_thumbnails,
NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+ g_signal_connect (priv->icon_view, "button-release-event",
+ G_CALLBACK (button_release_cb), ev_sidebar_thumbnails);
+
check_toggle_blank_first_dual_mode (ev_sidebar_thumbnails);
gtk_container_add (GTK_CONTAINER (priv->swindow), priv->icon_view);
diff --git a/shell/ev-sidebar.c b/shell/ev-sidebar.c
index ff8ca1d16..17eef23a1 100644
--- a/shell/ev-sidebar.c
+++ b/shell/ev-sidebar.c
@@ -35,6 +35,7 @@
#include "ev-sidebar.h"
#include "ev-sidebar-page.h"
+#include "ev-window.h"
enum
{
@@ -186,6 +187,34 @@ ev_sidebar_child_change_cb (GObject *gobject,
g_object_notify (G_OBJECT (ev_sidebar), "current-page");
}
+static EvWindow *
+ev_sidebar_get_ev_window (EvSidebar *sidebar)
+{
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (sidebar));
+
+ if (toplevel && EV_IS_WINDOW (toplevel))
+ return EV_WINDOW (toplevel);
+
+ return NULL;
+}
+
+static gboolean
+button_release_cb (EvSidebar *ev_sidebar,
+ GdkEventButton *event,
+ gpointer data)
+{
+ EvWindow *ev_window;
+
+ ev_window = ev_sidebar_get_ev_window (ev_sidebar);
+ if (ev_window)
+ ev_window_focus_view (ev_window);
+
+ return GDK_EVENT_STOP;
+}
+
+
static void
ev_sidebar_init (EvSidebar *ev_sidebar)
{
@@ -224,6 +253,8 @@ ev_sidebar_init (EvSidebar *ev_sidebar)
g_signal_connect (stack, "notify::visible-child",
G_CALLBACK (ev_sidebar_child_change_cb),
ev_sidebar);
+ g_signal_connect (ev_sidebar, "button-release-event",
+ G_CALLBACK (button_release_cb), NULL);
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]