Commit 60328a43 authored by Cosimo Cecchi's avatar Cosimo Cecchi Committed by Cosimo Cecchi

Reverse the order in which the keybindings are processed by the

2008-04-27  Cosimo Cecchi  <cosimoc@gnome.org>

	* src/nautilus-window.c: (nautilus_window_key_press_event):
	Reverse the order in which the keybindings are processed by the
	NautilusWindow, and use the same approach as GEdit.
	This fixes some bugs where the GtkWindow accelerators were executed
	before the focused widget one. (#314431).

svn path=/trunk/; revision=14098
parent c2305aff
2008-04-27 Cosimo Cecchi <cosimoc@gnome.org>
* src/nautilus-window.c: (nautilus_window_key_press_event):
Reverse the order in which the keybindings are processed by the
NautilusWindow, and use the same approach as GEdit.
This fixes some bugs where the GtkWindow accelerators were executed
before the focused widget one. (#314431).
2008-04-27 Christian Neumair <cneumair@gnome.org>
* src/file-manager/fm-list-view.c (button_press_callback):
......
......@@ -744,15 +744,32 @@ nautilus_window_realize (GtkWidget *widget)
update_cursor (NAUTILUS_WINDOW (widget));
}
/* Here we use an approach similar to the GEdit one. We override
* GtkWindow's handler to reverse the order in which keybindings are
* processed, and then we chain up to the grand parent handler.
*/
static gboolean
nautilus_window_key_press_event (GtkWidget *widget,
GdkEventKey *event)
{
static gpointer grand_parent_class = NULL;
NautilusWindow *window;
gboolean handled;
int i;
window = NAUTILUS_WINDOW (widget);
handled = FALSE;
if (!grand_parent_class) {
grand_parent_class = g_type_class_peek_parent (nautilus_window_parent_class);
}
/* handle currently focused widget */
if (!handled) {
handled = gtk_window_propagate_key_event (GTK_WINDOW (window), event);
}
/* handle extra window keybindings */
if (!handled) {
for (i = 0; i < G_N_ELEMENTS (extra_window_keybindings); i++) {
if (extra_window_keybindings[i].keyval == event->keyval) {
const GList *action_groups;
......@@ -762,21 +779,33 @@ nautilus_window_key_press_event (GtkWidget *widget,
action_groups = gtk_ui_manager_get_action_groups (window->details->ui_manager);
while (action_groups != NULL && action == NULL) {
action = gtk_action_group_get_action (action_groups->data, extra_window_keybindings[i].action);
action = gtk_action_group_get_action (action_groups->data,
extra_window_keybindings[i].action);
action_groups = action_groups->next;
}
g_assert (action != NULL);
if (gtk_action_is_sensitive (action)) {
gtk_action_activate (action);
return TRUE;
handled = TRUE;
}
break;
}
}
}
/* handle mnemonics and accelerators */
if (!handled) {
handled = gtk_window_activate_key (GTK_WINDOW (window), event);
}
/* chain up to the grand parent */
if (!handled) {
handled = GTK_WIDGET_CLASS (grand_parent_class)->key_press_event (widget, event);
}
return GTK_WIDGET_CLASS (nautilus_window_parent_class)->key_press_event (widget, event);
return handled;
}
/*
......
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