[evince/860-evince-print-shortcut-doesn-t-work-when-outline-is-focused: 559/559] ev-window.c: Don't send Ctrl and Alt accels to sidebar
- From: Nelson Ben <nbenitez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince/860-evince-print-shortcut-doesn-t-work-when-outline-is-focused: 559/559] ev-window.c: Don't send Ctrl and Alt accels to sidebar
- Date: Fri, 22 May 2020 00:50:04 +0000 (UTC)
commit 0dadc6cdb02b665a3eeb0ee9e02021e717564a3d
Author: Nelson Benítez León <nbenitezl gmail com>
Date: Sat Aug 11 21:15:03 2018 +0500
ev-window.c: Don't send Ctrl and Alt accels to sidebar
Don't send Ctrl and Alt accels to sidebar, as they may be handled by
GtkTreeView or other sidebar focused widgets, while we want them to reach
the main EvApplication accels.
We except GtkEntry's (eg. cell tex editing in tree views) as eg. Ctrl+L
accel should be handled by GtkEntry instead of rotating document.
Issues #860 and #795
shell/ev-window.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
shell/ev-window.h | 2 ++
2 files changed, 50 insertions(+), 3 deletions(-)
---
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 8e9a86fd..760d0f9f 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -6207,15 +6207,36 @@ static gboolean
ev_window_key_press_event (GtkWidget *widget,
GdkEventKey *event)
{
+ GtkWidget *sidebar;
+ GtkWidget *find_sidebar;
+ GtkWidget *focus_widget;
+ gboolean skip_sending_accel_to_sidebar = FALSE;
static gpointer grand_parent_class = NULL;
GtkWindow *window = GTK_WINDOW (widget);
if (grand_parent_class == NULL)
grand_parent_class = g_type_class_peek_parent (ev_window_parent_class);
- /* Handle focus widget key events */
- if (gtk_window_propagate_key_event (window, event))
- return TRUE;
+ /* Don't send Ctrl and Alt accels to sidebar, as they may be handled by
+ * GtkTreeView or other sidebar focused widgets, while we want them to reach
+ * the main EvApplication accels. Issues #860 and #795 */
+ if (event->state & GDK_CONTROL_MASK || event->state & GDK_MOD1_MASK) {
+ sidebar = ev_window_get_sidebar (EV_WINDOW (widget));
+ find_sidebar = ev_window_get_find_sidebar (EV_WINDOW (widget));
+ focus_widget = gtk_window_get_focus (window);
+
+ if (focus_widget && gtk_widget_has_focus (focus_widget) &&
+ !GTK_IS_ENTRY (focus_widget) &&
+ (gtk_widget_is_ancestor (focus_widget, sidebar)
+ || gtk_widget_is_ancestor (focus_widget, find_sidebar)))
+ skip_sending_accel_to_sidebar = TRUE;
+ }
+
+ if (!skip_sending_accel_to_sidebar) {
+ /* Handle focus widget key events */
+ if (gtk_window_propagate_key_event (window, event))
+ return TRUE;
+ }
/* Handle mnemonics and accelerators */
if (gtk_window_activate_key (window, event))
@@ -7889,6 +7910,30 @@ ev_window_get_toolbar (EvWindow *ev_window)
return priv->toolbar;
}
+GtkWidget *
+ev_window_get_sidebar (EvWindow *ev_window)
+{
+ EvWindowPrivate *priv;
+
+ g_return_val_if_fail (EV_WINDOW (ev_window), NULL);
+
+ priv = GET_PRIVATE (ev_window);
+
+ return priv->sidebar;
+}
+
+GtkWidget *
+ev_window_get_find_sidebar (EvWindow *ev_window)
+{
+ EvWindowPrivate *priv;
+
+ g_return_val_if_fail (EV_WINDOW (ev_window), NULL);
+
+ priv = GET_PRIVATE (ev_window);
+
+ return priv->find_sidebar;
+}
+
void
ev_window_focus_view (EvWindow *ev_window)
{
diff --git a/shell/ev-window.h b/shell/ev-window.h
index 3b8be3ae..cd20baaa 100644
--- a/shell/ev-window.h
+++ b/shell/ev-window.h
@@ -97,6 +97,8 @@ void ev_window_handle_annot_popup (EvWindow *ev_win
EvAnnotation *annot);
EvMetadata *ev_window_get_metadata (EvWindow *ev_window);
gint ev_window_get_metadata_sidebar_size (EvWindow *ev_window);
+GtkWidget *ev_window_get_sidebar (EvWindow *ev_window);
+GtkWidget *ev_window_get_find_sidebar (EvWindow *ev_window);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]