static void tools_activate_enum_action (const gchar *action_desc, gint value) { gchar *group_name; gchar *action_name; group_name = g_strdup (action_desc); action_name = strchr (group_name, '/'); if (action_name) { GList *managers; GtkAction *action; *action_name++ = '\0'; managers = gimp_ui_managers_from_name ("<Image>"); action = gimp_ui_manager_find_action (managers->data, group_name, action_name); if (GIMP_IS_ENUM_ACTION (action) && GIMP_ENUM_ACTION (action)->value_variable) { gimp_enum_action_selected (GIMP_ENUM_ACTION (action), value); } } g_free (group_name); }
static gboolean gimp_controllers_event_mapped (GimpControllerInfo *info, GimpController *controller, const GimpControllerEvent *event, const gchar *action_name, GimpControllerManager *manager) { GtkUIManager *ui_manager = GTK_UI_MANAGER (manager->ui_manager); GList *list; for (list = gtk_ui_manager_get_action_groups (ui_manager); list; list = g_list_next (list)) { GtkActionGroup *group = list->data; GtkAction *action; action = gtk_action_group_get_action (group, action_name); if (action) { switch (event->type) { case GIMP_CONTROLLER_EVENT_VALUE: if (G_VALUE_HOLDS_DOUBLE (&event->value.value) && GIMP_IS_ENUM_ACTION (action) && GIMP_ENUM_ACTION (action)->value_variable) { gdouble value = g_value_get_double (&event->value.value); gimp_enum_action_selected (GIMP_ENUM_ACTION (action), value * 1000); break; } /* else fallthru */ case GIMP_CONTROLLER_EVENT_TRIGGER: default: gtk_action_activate (action); break; } return TRUE; } } return FALSE; }