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); }
gboolean gimp_ui_manager_activate_action (GimpUIManager *manager, const gchar *group_name, const gchar *action_name) { GtkAction *action; g_return_val_if_fail (GIMP_IS_UI_MANAGER (manager), FALSE); g_return_val_if_fail (action_name != NULL, FALSE); action = gimp_ui_manager_find_action (manager, group_name, action_name); if (action) gtk_action_activate (action); return (action != NULL); }
/* Search all history actions which match "keyword" with function * match_func(action, keyword). * * @return a list of GtkAction*, to free with: * g_list_free_full (result, (GDestroyNotify) g_object_unref); */ GList * gimp_action_history_search (Gimp *gimp, GimpActionMatchFunc match_func, const gchar *keyword) { GimpGuiConfig *config; GimpUIManager *manager; GList *actions; GList *result = NULL; gint i; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (match_func != NULL, NULL); config = GIMP_GUI_CONFIG (gimp->config); manager = gimp_ui_managers_from_name ("<Image>")->data; for (actions = history.items, i = 0; actions && i < config->action_history_size; actions = g_list_next (actions), i++) { GimpActionHistoryItem *item = actions->data; GtkAction *action; action = gimp_ui_manager_find_action (manager, NULL, item->action_name); if (action == NULL) continue; if (! gtk_action_is_sensitive (action) && ! config->search_show_unavailable) continue; if (match_func (action, keyword, NULL, gimp)) result = g_list_prepend (result, g_object_ref (action)); } return g_list_reverse (result); }
static void windows_menu_image_notify (GimpDisplay *display, const GParamSpec *unused, GimpUIManager *manager) { if (gimp_display_get_image (display)) { gchar *merge_key = g_strdup_printf ("windows-display-%04d-merge-id", gimp_display_get_ID (display)); guint merge_id; merge_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (manager), merge_key)); if (! merge_id) { GtkWidget *widget; const gchar *ui_path; gchar *action_name; gchar *action_path; gchar *full_path; ui_path = g_object_get_data (G_OBJECT (manager), "image-menu-ui-path"); action_name = gimp_display_get_action_name (display); action_path = g_strdup_printf ("%s/Windows/Images", ui_path); merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (manager)); g_object_set_data (G_OBJECT (manager), merge_key, GUINT_TO_POINTER (merge_id)); gtk_ui_manager_add_ui (GTK_UI_MANAGER (manager), merge_id, action_path, action_name, action_name, GTK_UI_MANAGER_MENUITEM, FALSE); full_path = g_strconcat (action_path, "/", action_name, NULL); widget = gtk_ui_manager_get_widget (GTK_UI_MANAGER (manager), full_path); if (widget) { GtkAction *action; action = gimp_ui_manager_find_action (manager, "windows", action_name); g_signal_connect_object (widget, "query-tooltip", G_CALLBACK (windows_menu_display_query_tooltip), action, 0); } g_free (action_name); g_free (action_path); g_free (full_path); } g_free (merge_key); } else { windows_menu_display_remove (manager->gimp->displays, display, manager); } }