Commit 9d69b8b1 authored by DarkTrick's avatar DarkTrick Committed by Alexander Schwinn

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
parent efa3b55d
...@@ -216,6 +216,9 @@ static void thunar_window_action_about (GtkAction ...@@ -216,6 +216,9 @@ static void thunar_window_action_about (GtkAction
ThunarWindow *window); ThunarWindow *window);
static void thunar_window_action_show_hidden (GtkToggleAction *action, static void thunar_window_action_show_hidden (GtkToggleAction *action,
ThunarWindow *window); 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, static void thunar_window_current_directory_changed (ThunarFile *current_directory,
ThunarWindow *window); ThunarWindow *window);
static void thunar_window_connect_proxy (GtkUIManager *manager, static void thunar_window_connect_proxy (GtkUIManager *manager,
...@@ -762,6 +765,10 @@ thunar_window_init (ThunarWindow *window) ...@@ -762,6 +765,10 @@ thunar_window_init (ThunarWindow *window)
g_closure_sink (window->menu_item_deselected_closure); g_closure_sink (window->menu_item_deselected_closure);
window->icon_factory = thunar_icon_factory_get_default (); 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 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
/* setup the action group for this window */ /* setup the action group for this window */
window->action_group = gtk_action_group_new ("ThunarWindow"); window->action_group = gtk_action_group_new ("ThunarWindow");
...@@ -3238,6 +3245,31 @@ G_GNUC_END_IGNORE_DEPRECATIONS ...@@ -3238,6 +3245,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 static void
thunar_window_poke_location_finish (ThunarBrowser *browser, thunar_window_poke_location_finish (ThunarBrowser *browser,
GFile *location, GFile *location,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment