mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-17 23:01:59 +00:00
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
This commit is contained in:
parent
c2305aff96
commit
60328a4327
|
@ -1,3 +1,11 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return GTK_WIDGET_CLASS (nautilus_window_parent_class)->key_press_event (widget, event);
|
||||
/* 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 handled;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue