#include "gtkshortcutcontrollerprivate.h"
+#include "gtkflattenlistmodel.h"
#include "gtkeventcontrollerprivate.h"
#include "gtkintl.h"
#include "gtkshortcut.h"
GdkModifierType mnemonics_modifiers;
guint custom_shortcuts : 1;
- guint run_managed : 1;
};
struct _GtkShortcutControllerClass
static gboolean
gtk_shortcut_controller_trigger_shortcut (GtkShortcutController *self,
GtkShortcut *shortcut,
+ guint position,
GdkEvent *event,
gboolean enable_mnemonics)
{
+ GtkWidget *widget;
+
if (!gtk_shortcut_trigger_trigger (gtk_shortcut_get_trigger (shortcut), event, enable_mnemonics))
return FALSE;
+ widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (self));
+ if (!self->custom_shortcuts &&
+ GTK_IS_FLATTEN_LIST_MODEL (self->shortcuts))
+ {
+ GListModel *model = gtk_flatten_list_model_get_model_for_item (GTK_FLATTEN_LIST_MODEL (self->shortcuts), position);
+ if (GTK_IS_SHORTCUT_CONTROLLER (model))
+ widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (model));
+ }
+
return gtk_shortcut_action_activate (gtk_shortcut_get_action (shortcut),
GTK_SHORTCUT_ACTION_EXCLUSIVE, /* FIXME */
- gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (self)),
+ widget,
gtk_shortcut_get_arguments (shortcut));
}
gboolean enable_mnemonics)
{
GtkShortcutController *self = GTK_SHORTCUT_CONTROLLER (controller);
- GtkWidget *widget;
- const GSList *l;
guint i;
for (i = 0; i < g_list_model_get_n_items (self->shortcuts); i++)
{
+ GtkShortcut *shortcut = g_list_model_get_item (self->shortcuts, i);
+ g_object_unref (shortcut);
+
if (gtk_shortcut_controller_trigger_shortcut (self,
- g_list_model_get_item (self->shortcuts, i),
+ shortcut,
+ i,
event,
enable_mnemonics))
return TRUE;
}
- if (self->run_managed)
- {
- GtkPropagationPhase current_phase = gtk_event_controller_get_propagation_phase (controller);
- widget = gtk_event_controller_get_widget (controller);
-
- for (l = g_object_get_data (G_OBJECT (widget), "gtk-shortcut-controllers"); l; l = l->next)
- {
- if (gtk_event_controller_get_propagation_phase (l->data) != current_phase)
- continue;
-
- if (gtk_shortcut_controller_run_controllers (l->data, event, x, y, enable_mnemonics))
- return TRUE;
- }
- }
-
return FALSE;
}
NULL);
}
-void
-gtk_shortcut_controller_set_run_managed (GtkShortcutController *controller,
- gboolean run_managed)
-{
- controller->run_managed = run_managed;
-}
-
/**
* gtk_shortcut_controller_add_shortcut:
* @self: the controller