[epiphany/gnome-3-18] window: add blacklist of events to not deliver to web view



commit 78523b00eadde51f158f756d21c8083c4261c667
Author: Michael Catanzaro <mcatanzaro gnome org>
Date:   Wed Nov 16 15:11:42 2016 -0600

    window: add blacklist of events to not deliver to web view
    
    Certain window and tab management shortcuts are reserved by Epiphany and
    will never be delivered to the webpage, even though webpages should in
    general be allowed to override Epiphany shortcuts (e.g. Ctrl+B in Google
    Docs should embolden text and not open the old bookmarks dialog, Ctrl+I
    should italicize text and not open a new incognito window).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=764653

 src/ephy-window.c |   27 ++++++++++++++++++++++++++-
 1 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/src/ephy-window.c b/src/ephy-window.c
index b22dcf1..18b9bd1 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -835,6 +835,30 @@ ephy_window_bound_accels (GtkWidget *widget,
        return FALSE;
 }
 
+static gboolean
+should_web_view_receive_key_press_event (GdkEventKey *event)
+{
+       if (event->state == GDK_CONTROL_MASK)
+               return event->keyval != GDK_KEY_n &&
+                      event->keyval != GDK_KEY_q &&
+                      event->keyval != GDK_KEY_t &&
+                      event->keyval != GDK_KEY_w &&
+                      event->keyval != GDK_KEY_Page_Up &&
+                      event->keyval != GDK_KEY_KP_9 &&
+                      event->keyval != GDK_KEY_Page_Down &&
+                      event->keyval != GDK_KEY_KP_3;
+
+       if (event->state == (GDK_SHIFT_MASK | GDK_CONTROL_MASK))
+               return event->keyval != GDK_KEY_N &&
+                      event->keyval != GDK_KEY_T &&
+                      event->keyval != GDK_KEY_Page_Up &&
+                      event->keyval != GDK_KEY_KP_9 &&
+                      event->keyval != GDK_KEY_Page_Down &&
+                      event->keyval != GDK_KEY_KP_3;
+
+       return TRUE;
+}
+
 static gboolean 
 ephy_window_key_press_event (GtkWidget *widget,
                             GdkEventKey *event)
@@ -856,7 +880,8 @@ ephy_window_key_press_event (GtkWidget *widget,
         * first propagate the event to the web view. Next, try
         * accelerators only if the web view did not handle the event.
         */
-       if (!gtk_window_propagate_key_event (GTK_WINDOW (widget), event)) {
+       if (!should_web_view_receive_key_press_event (event) ||
+           !gtk_window_propagate_key_event (GTK_WINDOW (widget), event)) {
                if (!gtk_window_activate_key (GTK_WINDOW (widget), event))
                        ephy_window_bound_accels (widget, event);
        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]