static void windows_actions_display_remove (GimpContainer *container, GimpDisplay *display, GimpActionGroup *group) { GtkAction *action; gchar *action_name = gimp_display_get_action_name (display); action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name); if (action) gtk_action_group_remove_action (GTK_ACTION_GROUP (group), action); g_free (action_name); windows_actions_update_display_accels (group); }
static void windows_actions_update_display_accels (GimpActionGroup *group) { GList *list; gint i; for (list = gimp_get_display_iter (group->gimp), i = 0; list && i < 10; list = g_list_next (list), i++) { GimpDisplay *display = list->data; GtkAction *action; gchar *action_name; if (! gimp_display_get_image (display)) break; action_name = gimp_display_get_action_name (display); action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name); g_free (action_name); if (action) { const gchar *accel_path; guint accel_key; accel_path = gtk_action_get_accel_path (action); if (i < 9) accel_key = GDK_KEY_1 + i; else accel_key = GDK_KEY_0; gtk_accel_map_change_entry (accel_path, accel_key, GDK_MOD1_MASK, TRUE); } } }
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); } }
static void windows_actions_image_notify (GimpDisplay *display, const GParamSpec *unused, GimpActionGroup *group) { GimpImage *image = gimp_display_get_image (display); if (image) { GtkAction *action; gchar *action_name = gimp_display_get_action_name (display); action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name); if (! action) { GimpActionEntry entry; entry.name = action_name; entry.stock_id = GIMP_STOCK_IMAGE; entry.label = ""; entry.accelerator = NULL; entry.tooltip = NULL; entry.callback = G_CALLBACK (windows_show_display_cmd_callback); entry.help_id = NULL; gimp_action_group_add_actions (group, NULL, &entry, 1); gimp_action_group_set_action_always_show_image (group, action_name, TRUE); action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name); g_object_set_data (G_OBJECT (action), "display", display); } { const gchar *display_name; gchar *escaped; gchar *title; display_name = gimp_image_get_display_name (image); escaped = gimp_escape_uline (display_name); title = g_strdup_printf ("%s-%d.%d", escaped, gimp_image_get_ID (image), gimp_display_get_instance (display)); g_free (escaped); g_object_set (action, "label", title, "tooltip", gimp_image_get_display_path (image), "viewable", image, "context", gimp_get_user_context (group->gimp), NULL); g_free (title); } g_free (action_name); windows_actions_update_display_accels (group); } else { windows_actions_display_remove (group->gimp->displays, display, group); } }