diff --git a/ChangeLog b/ChangeLog index 5d4d825d3f..5fb12e0894 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2003-11-18 Michael Natterer + + * app/widgets/gimpdialogfactory.[ch] + (gimp_dialog_factory_dialog_raise): support '|'-separated lists of + dialog identifiers and raise any of them if it is already open, or + the first dialog in the list otherwise. + + * app/gui/dialogs-commands.c (dialogs_create_dockable_cmd_callback): + removed the same functionality here. + + * app/gui/edit-commands.c + * app/tools/gimppaintoptions-gui.c + * app/tools/gimptextoptions.c + * app/widgets/gimpdevicestatus.c + * app/widgets/gimptoolbox-indicator-area.c: pass lists of dialog + identifiers to gimp_dialog_factory_dialog_raise(). + 2003-11-18 Michael Natterer * app/core/gimpselection.c (gimp_selection_class_init): use diff --git a/app/actions/dialogs-commands.c b/app/actions/dialogs-commands.c index 466a729bab..112e6a8282 100644 --- a/app/actions/dialogs-commands.c +++ b/app/actions/dialogs-commands.c @@ -83,36 +83,9 @@ dialogs_create_dockable_cmd_callback (GtkWidget *widget, if (!identifier) return; - /* If the identifier is a list, try to find a matching dialog and - * raise it. If there's no match, use the first list item. - */ - if (strchr (identifier, '|')) - { - gchar **ids = g_strsplit (identifier, "|", 0); - gint i; - - for (i = 0; ids[i]; i++) - { - GimpSessionInfo *info; - - info = gimp_dialog_factory_find_session_info (global_dock_factory, - ids[i]); - if (info && info->widget) - break; - } - - gimp_dialog_factory_dialog_raise (global_dock_factory, - gtk_widget_get_screen (widget), - ids[i] ? ids[i] : ids[0], -1); - - g_strfreev (ids); - } - else - { - gimp_dialog_factory_dialog_raise (global_dock_factory, - gtk_widget_get_screen (widget), - identifier, -1); - } + gimp_dialog_factory_dialog_raise (global_dock_factory, + gtk_widget_get_screen (widget), + identifier, -1); } } diff --git a/app/actions/edit-commands.c b/app/actions/edit-commands.c index d80db41e85..b5baf715b9 100644 --- a/app/actions/edit-commands.c +++ b/app/actions/edit-commands.c @@ -228,7 +228,7 @@ edit_named_paste_cmd_callback (GtkWidget *widget, { gimp_dialog_factory_dialog_raise (global_dock_factory, gtk_widget_get_screen (widget), - "gimp-buffer-list", -1); + "gimp-buffer-list|gimp-buffer-grid", -1); } void diff --git a/app/gui/dialogs-commands.c b/app/gui/dialogs-commands.c index 466a729bab..112e6a8282 100644 --- a/app/gui/dialogs-commands.c +++ b/app/gui/dialogs-commands.c @@ -83,36 +83,9 @@ dialogs_create_dockable_cmd_callback (GtkWidget *widget, if (!identifier) return; - /* If the identifier is a list, try to find a matching dialog and - * raise it. If there's no match, use the first list item. - */ - if (strchr (identifier, '|')) - { - gchar **ids = g_strsplit (identifier, "|", 0); - gint i; - - for (i = 0; ids[i]; i++) - { - GimpSessionInfo *info; - - info = gimp_dialog_factory_find_session_info (global_dock_factory, - ids[i]); - if (info && info->widget) - break; - } - - gimp_dialog_factory_dialog_raise (global_dock_factory, - gtk_widget_get_screen (widget), - ids[i] ? ids[i] : ids[0], -1); - - g_strfreev (ids); - } - else - { - gimp_dialog_factory_dialog_raise (global_dock_factory, - gtk_widget_get_screen (widget), - identifier, -1); - } + gimp_dialog_factory_dialog_raise (global_dock_factory, + gtk_widget_get_screen (widget), + identifier, -1); } } diff --git a/app/gui/edit-commands.c b/app/gui/edit-commands.c index d80db41e85..b5baf715b9 100644 --- a/app/gui/edit-commands.c +++ b/app/gui/edit-commands.c @@ -228,7 +228,7 @@ edit_named_paste_cmd_callback (GtkWidget *widget, { gimp_dialog_factory_dialog_raise (global_dock_factory, gtk_widget_get_screen (widget), - "gimp-buffer-list", -1); + "gimp-buffer-list|gimp-buffer-grid", -1); } void diff --git a/app/tools/gimppaintoptions-gui.c b/app/tools/gimppaintoptions-gui.c index bd7e35188b..64daa4c48c 100644 --- a/app/tools/gimppaintoptions-gui.c +++ b/app/tools/gimppaintoptions-gui.c @@ -140,7 +140,7 @@ gimp_paint_options_gui (GimpToolOptions *tool_options) context, GIMP_PREVIEW_SIZE_SMALL, 1, dialog_factory, - "gimp-brush-grid", + "gimp-brush-grid|gimp-brush-list", GIMP_STOCK_TOOL_PAINTBRUSH, _("Open the brush selection dialog")); @@ -157,7 +157,7 @@ gimp_paint_options_gui (GimpToolOptions *tool_options) context, GIMP_PREVIEW_SIZE_SMALL, 1, dialog_factory, - "gimp-pattern-grid", + "gimp-pattern-grid|gimp-pattern-list", GIMP_STOCK_TOOL_BUCKET_FILL, _("Open the pattern selection dialog")); @@ -181,7 +181,7 @@ gimp_paint_options_gui (GimpToolOptions *tool_options) context, GIMP_PREVIEW_SIZE_LARGE, 1, dialog_factory, - "gimp-gradient-list", + "gimp-gradient-list|gimp-gradient-grid", GIMP_STOCK_TOOL_BLEND, _("Open the gradient selection dialog")); diff --git a/app/tools/gimptextoptions.c b/app/tools/gimptextoptions.c index 7b05a9a53e..f62ad2a18b 100644 --- a/app/tools/gimptextoptions.c +++ b/app/tools/gimptextoptions.c @@ -308,7 +308,7 @@ gimp_text_options_gui (GimpToolOptions *tool_options) GIMP_CONTEXT (options), GIMP_PREVIEW_SIZE_SMALL, 1, dialog_factory, - "gimp-font-list", + "gimp-font-list|gimp-font-grid", GTK_STOCK_SELECT_FONT, _("Open the font selection dialog")); diff --git a/app/widgets/gimpdevicestatus.c b/app/widgets/gimpdevicestatus.c index 9b845747ab..81da8bddd8 100644 --- a/app/widgets/gimpdevicestatus.c +++ b/app/widgets/gimpdevicestatus.c @@ -215,7 +215,7 @@ gimp_device_status_init (GimpDeviceStatus *status) g_signal_connect (entry->tool, "clicked", G_CALLBACK (gimp_device_status_preview_clicked), - "gimp-tool-list"); + "gimp-tool-list|gimp-tool-grid"); /* the foreground color */ @@ -253,7 +253,7 @@ gimp_device_status_init (GimpDeviceStatus *status) g_signal_connect (entry->brush, "clicked", G_CALLBACK (gimp_device_status_preview_clicked), - "gimp-brush-grid"); + "gimp-brush-grid|gimp-brush-list"); /* the pattern */ @@ -267,7 +267,7 @@ gimp_device_status_init (GimpDeviceStatus *status) g_signal_connect (entry->pattern, "clicked", G_CALLBACK (gimp_device_status_preview_clicked), - "gimp-pattern-grid"); + "gimp-pattern-grid|gimp-pattern-list"); /* the gradient */ @@ -281,7 +281,7 @@ gimp_device_status_init (GimpDeviceStatus *status) g_signal_connect (entry->gradient, "clicked", G_CALLBACK (gimp_device_status_preview_clicked), - "gimp-gradient-list"); + "gimp-gradient-list|gimp-gradient-list"); gimp_device_status_update_entry (device_info, entry); } diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c index 0d07f8ce7e..1217d86b4d 100644 --- a/app/widgets/gimpdialogfactory.c +++ b/app/widgets/gimpdialogfactory.c @@ -546,10 +546,10 @@ gimp_dialog_factory_dialog_new_internal (GimpDialogFactory *factory, /** * gimp_dialog_factory_dialog_new: - * @factory: a #GimpDialogFactory - * @screen: the #GdkScreen the dialog should appear on - * @identifier: the identifier of the dialog as registered with - * gimp_dialog_factory_register_entry() + * @factory: a #GimpDialogFactory + * @screen: the #GdkScreen the dialog should appear on + * @identifier: the identifier of the dialog as registered with + * gimp_dialog_factory_register_entry() * @preview_size: * * Creates a new toplevel dialog or a #GimpDockable, depending on whether @@ -580,43 +580,76 @@ gimp_dialog_factory_dialog_new (GimpDialogFactory *factory, /** * gimp_dialog_factory_dialog_raise: - * @factory : a #GimpDialogFactory - * @screen: the #GdkScreen the dialog should appear on - * @identifier: the identifier of the dialog as registered with - * gimp_dialog_factory_register_entry() + * @factory: a #GimpDialogFactory + * @screen: the #GdkScreen the dialog should appear on + * @identifiers: a '|' separated list of identifiers of dialogs as + * registered with gimp_dialog_factory_register_entry() * @preview_size: * - * Raises an already existing toplevel dialog or #GimpDockable if it was - * already created by this %facory. + * Raises any of a list of already existing toplevel dialog or + * #GimpDockable if it was already created by this %facory. * - * Implicitly creates a new dialog if it was not found. + * Implicitly creates the first dialog in the list if none of the dialogs + * were found. * * Return value: the raised or newly created dialog. **/ GtkWidget * gimp_dialog_factory_dialog_raise (GimpDialogFactory *factory, GdkScreen *screen, - const gchar *identifier, + const gchar *identifiers, gint preview_size) { + GtkWidget *dialog; + g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (factory), NULL); g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); - g_return_val_if_fail (identifier != NULL, NULL); + g_return_val_if_fail (identifiers != NULL, NULL); - return gimp_dialog_factory_dialog_new_internal (factory, - screen, - NULL, - identifier, - preview_size, - TRUE); + /* If the identifier is a list, try to find a matching dialog and + * raise it. If there's no match, use the first list item. + */ + if (strchr (identifiers, '|')) + { + gchar **ids = g_strsplit (identifiers, "|", 0); + gint i; + + for (i = 0; ids[i]; i++) + { + GimpSessionInfo *info; + + info = gimp_dialog_factory_find_session_info (factory, ids[i]); + if (info && info->widget) + break; + } + + dialog = gimp_dialog_factory_dialog_new_internal (factory, + screen, + NULL, + ids[i] ? ids[i] : ids[0], + preview_size, + TRUE); + g_strfreev (ids); + } + else + { + dialog = gimp_dialog_factory_dialog_new_internal (factory, + screen, + NULL, + identifiers, + preview_size, + TRUE); + } + + return dialog; } /** * gimp_dialog_factory_dockable_new: - * @factory : a #GimpDialogFactory - * @dock : a #GimpDock crated by this %factory. - * @identifier: the identifier of the dialog as registered with - * gimp_dialog_factory_register_entry() + * @factory: a #GimpDialogFactory + * @dock: a #GimpDock crated by this %factory. + * @identifier: the identifier of the dialog as registered with + * gimp_dialog_factory_register_entry() * @preview_size: * * Creates a new #GimpDockable in the context of the #GimpDock it will be @@ -650,7 +683,7 @@ gimp_dialog_factory_dockable_new (GimpDialogFactory *factory, /** * gimp_dialog_factory_dock_new: * @factory: a #GimpDialogFacotry - * @screen: the #GdkScreen the dock should appear on + * @screen: the #GdkScreen the dock should appear on * * Returns a new #GimpDock in this %factory's context. We use a function * pointer passed to this %factory's constructor instead of simply diff --git a/app/widgets/gimpdialogfactory.h b/app/widgets/gimpdialogfactory.h index ffca70b000..7a5a4724e1 100644 --- a/app/widgets/gimpdialogfactory.h +++ b/app/widgets/gimpdialogfactory.h @@ -108,7 +108,7 @@ GtkWidget * gimp_dialog_factory_dialog_new (GimpDialogFactory *factory, gint preview_size); GtkWidget * gimp_dialog_factory_dialog_raise (GimpDialogFactory *factory, GdkScreen *screen, - const gchar *identifier, + const gchar *identifiers, gint preview_size); GtkWidget * gimp_dialog_factory_dockable_new (GimpDialogFactory *factory, GimpDock *dock, diff --git a/app/widgets/gimptoolbox-indicator-area.c b/app/widgets/gimptoolbox-indicator-area.c index 83569f9479..707cfea38b 100644 --- a/app/widgets/gimptoolbox-indicator-area.c +++ b/app/widgets/gimptoolbox-indicator-area.c @@ -54,7 +54,7 @@ brush_preview_clicked (GtkWidget *widget, { gimp_dialog_factory_dialog_raise (GIMP_DOCK (toolbox)->dialog_factory, gtk_widget_get_screen (widget), - "gimp-brush-grid", -1); + "gimp-brush-grid|gimp-brush-list", -1); } static void @@ -76,7 +76,7 @@ pattern_preview_clicked (GtkWidget *widget, { gimp_dialog_factory_dialog_raise (GIMP_DOCK (toolbox)->dialog_factory, gtk_widget_get_screen (widget), - "gimp-pattern-grid", -1); + "gimp-pattern-grid|gimp-pattern-list", -1); } static void @@ -98,7 +98,7 @@ gradient_preview_clicked (GtkWidget *widget, { gimp_dialog_factory_dialog_raise (GIMP_DOCK (toolbox)->dialog_factory, gtk_widget_get_screen (widget), - "gimp-gradient-list", -1); + "gimp-gradient-list|gimp-gradient-grid", -1); } static void