summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkTrick <notebook22312@gmail.com>2020-05-12 12:34:23 +0900
committerAlexander Schwinn <alexxcons@xfce.org>2020-05-14 10:32:41 +0200
commitc3aae2e7d9aa901b5b7efa2f36fe636a4903c9ab (patch)
tree370ca90abbf7e90d489aa8aa8454d636cace5004
parent44208aaa3719091cca314312dea0497d358f664e (diff)
downloadthunar-c3aae2e7d9aa901b5b7efa2f36fe636a4903c9ab.tar.gz
Fix shortcut support for addressbar (Bug #4537 and Bug #13680)
- Key events are now handled bottom-up, if the currently focused widget is GTK_IS_EDITABLE. - key-press/-release are both used to remain consistent event order at widgets
-rw-r--r--thunar/thunar-window.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/thunar/thunar-window.c b/thunar/thunar-window.c
index 7c421cf6..31e0c395 100644
--- a/thunar/thunar-window.c
+++ b/thunar/thunar-window.c
@@ -221,6 +221,9 @@ static void thunar_window_action_about (GtkAction
ThunarWindow *window);
static void thunar_window_action_show_hidden (GtkToggleAction *action,
ThunarWindow *window);
+static gboolean thunar_window_propagate_key_event (GtkWindow *window,
+ GdkEvent *key_event,
+ gpointer user_data);
static void thunar_window_current_directory_changed (ThunarFile *current_directory,
ThunarWindow *window);
static void thunar_window_connect_proxy (GtkUIManager *manager,
@@ -772,6 +775,10 @@ thunar_window_init (ThunarWindow *window)
g_closure_sink (window->menu_item_deselected_closure);
window->icon_factory = thunar_icon_factory_get_default ();
+ /* Catch key events before accelerators get processed */
+ g_signal_connect (window, "key-press-event", G_CALLBACK (thunar_window_propagate_key_event), NULL);
+ g_signal_connect (window, "key-release-event", G_CALLBACK (thunar_window_propagate_key_event), NULL);
+
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
/* setup the action group for this window */
window->action_group = gtk_action_group_new ("ThunarWindow");
@@ -3350,6 +3357,31 @@ G_GNUC_END_IGNORE_DEPRECATIONS
+static gboolean
+thunar_window_propagate_key_event (GtkWindow* window,
+ GdkEvent *key_event,
+ gpointer user_data)
+{
+ GtkWidget* focused_widget;
+
+ _thunar_return_val_if_fail (THUNAR_IS_WINDOW (window), GDK_EVENT_PROPAGATE);
+
+ focused_widget = gtk_window_get_focus (window);
+
+ /* Turn the accelerator priority around globally,
+ * so that the focused widget always gets the accels first.
+ * Implementing this cleanly while maintaining some wanted accels
+ * (like Ctrl+N and exo accels) is a lot of work. So we resort to
+ * only priorize GtkEditable, because that is the easiest way to
+ * fix the right-ahead problem. */
+ if (focused_widget != NULL && GTK_IS_EDITABLE (focused_widget))
+ return gtk_window_propagate_key_event (window, (GdkEventKey *) key_event);
+
+ return GDK_EVENT_PROPAGATE;
+}
+
+
+
static void
thunar_window_poke_location_finish (ThunarBrowser *browser,
GFile *location,