[evince/860-evince-print-shortcut-doesn-t-work-when-outline-is-focused] ev-window.c: Don't send Ctrl and Alt accels to sidebar
- From: Nelson Benítez León <nbenitez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince/860-evince-print-shortcut-doesn-t-work-when-outline-is-focused] ev-window.c: Don't send Ctrl and Alt accels to sidebar
- Date: Sat, 11 Aug 2018 18:08:35 +0000 (UTC)
commit bab8bbda9abbb1f12a758cb6aa0f8792307c2226
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 | 43 ++++++++++++++++++++++++++++++++++++++++---
shell/ev-window.h | 2 ++
2 files changed, 42 insertions(+), 3 deletions(-)
---
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 522aaed0..696013f6 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -5834,15 +5834,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))
@@ -7450,6 +7471,22 @@ ev_window_get_toolbar (EvWindow *ev_window)
return ev_window->priv->toolbar;
}
+GtkWidget *
+ev_window_get_sidebar (EvWindow *ev_window)
+{
+ g_return_val_if_fail (EV_WINDOW (ev_window), NULL);
+
+ return ev_window->priv->sidebar;
+}
+
+GtkWidget *
+ev_window_get_find_sidebar (EvWindow *ev_window)
+{
+ g_return_val_if_fail (EV_WINDOW (ev_window), NULL);
+
+ return ev_window->priv->find_sidebar;
+}
+
void
ev_window_focus_view (EvWindow *ev_window)
{
diff --git a/shell/ev-window.h b/shell/ev-window.h
index c0c93d2f..28aab412 100644
--- a/shell/ev-window.h
+++ b/shell/ev-window.h
@@ -96,6 +96,8 @@ void ev_window_focus_view (EvWindow *ev_win
GtkWidget *ev_window_get_toolbar (EvWindow *ev_window);
void ev_window_handle_annot_popup (EvWindow *ev_window,
EvAnnotation *annot);
+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]