From c3619fb85c42a838e4e47f5ea5194e4bca15d0d5 Mon Sep 17 00:00:00 2001 From: Martin Nordholts Date: Sat, 20 Feb 2010 10:58:29 +0100 Subject: [PATCH] app: Merge "toplevel" and "display" factories Merge "toplevel" and "display" factories so that we only have one dialog factory. This allows us to get rid of a lot of special casing. --- app/dialogs/dialogs.c | 49 ++++++++++++---------------- app/dialogs/dialogs.h | 2 -- app/gui/gimpuiconfigurer.c | 2 +- app/gui/gui-vtable.c | 2 +- app/gui/session.c | 12 ++++--- app/tests/gimpdir/sessionrc-expected | 2 +- 6 files changed, 30 insertions(+), 39 deletions(-) diff --git a/app/dialogs/dialogs.c b/app/dialogs/dialogs.c index 7da5f536fb..fa2001935e 100644 --- a/app/dialogs/dialogs.c +++ b/app/dialogs/dialogs.c @@ -43,8 +43,6 @@ GimpDialogFactory *global_dialog_factory = NULL; -GimpDialogFactory *global_display_factory = NULL; - GimpContainer *global_recent_docks = NULL; @@ -63,6 +61,21 @@ GimpContainer *global_recent_docks = NULL; TRUE /* hideable */, \ FALSE /* dockable */} +#define FOREIGN_NOT_HIDEABLE(id, singleton, remember_size) \ + { id /* identifier */, \ + NULL /* name */, \ + NULL /* blurb */, \ + NULL /* stock_id */, \ + NULL /* help_id */, \ + NULL /* new_func */, \ + 0 /* view_size */, \ + singleton /* singleton */, \ + TRUE /* session_managed */, \ + remember_size /* remember_size */, \ + FALSE /* remember_if_open */, \ + FALSE /* hideable */, \ + FALSE /* dockable */} + #define TOPLEVEL(id, new_func, singleton, session_managed, remember_size) \ { id /* identifier */, \ NULL /* name */, \ @@ -347,7 +360,11 @@ static const GimpDialogFactoryEntry entries[] = DOCKABLE ("gimp-palette-editor", N_("Palette Editor"), NULL, GIMP_STOCK_PALETTE, GIMP_HELP_PALETTE_EDITOR_DIALOG, - dialogs_palette_editor_get, 0, TRUE) + dialogs_palette_editor_get, 0, TRUE), + + /* emtpy image window */ + FOREIGN_NOT_HIDEABLE ("gimp-empty-image-window", + TRUE, TRUE) }; @@ -362,17 +379,10 @@ dialogs_init (Gimp *gimp, g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_MENU_FACTORY (menu_factory)); - /* Toplevel */ global_dialog_factory = gimp_dialog_factory_new ("toplevel", gimp_get_user_context (gimp), menu_factory); - /* Display */ - global_display_factory = gimp_dialog_factory_new ("display", - gimp_get_user_context (gimp), - menu_factory); - - for (i = 0; i < G_N_ELEMENTS (entries); i++) gimp_dialog_factory_register_entry (global_dialog_factory, entries[i].identifier, @@ -389,19 +399,6 @@ dialogs_init (Gimp *gimp, entries[i].hideable, entries[i].dockable); - gimp_dialog_factory_register_entry (global_display_factory, - "gimp-empty-image-window", - NULL, NULL, - NULL, NULL, - NULL, - -1, - TRUE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE); - global_recent_docks = gimp_list_new (GIMP_TYPE_SESSION_INFO, FALSE); } @@ -416,12 +413,6 @@ dialogs_exit (Gimp *gimp) global_dialog_factory = NULL; } - if (global_display_factory) - { - g_object_unref (global_display_factory); - global_display_factory = NULL; - } - if (global_recent_docks) { g_object_unref (global_recent_docks); diff --git a/app/dialogs/dialogs.h b/app/dialogs/dialogs.h index 3148c2e6c4..b727c28fa9 100644 --- a/app/dialogs/dialogs.h +++ b/app/dialogs/dialogs.h @@ -20,8 +20,6 @@ extern GimpDialogFactory *global_dialog_factory; -extern GimpDialogFactory *global_display_factory; - extern GimpContainer *global_recent_docks; diff --git a/app/gui/gimpuiconfigurer.c b/app/gui/gimpuiconfigurer.c index d2c2e17f67..961c8e81c1 100644 --- a/app/gui/gimpuiconfigurer.c +++ b/app/gui/gimpuiconfigurer.c @@ -325,7 +325,7 @@ gimp_ui_configurer_separate_shells (GimpUIConfigurer *ui_configurer, new_image_window = gimp_image_window_new (ui_configurer->p->gimp, NULL, global_menu_factory, - global_display_factory, + global_dialog_factory, global_dialog_factory); /* Move the shell there */ shell = gimp_image_window_get_shell (source_image_window, 1); diff --git a/app/gui/gui-vtable.c b/app/gui/gui-vtable.c index 020a519147..95711ff8d2 100644 --- a/app/gui/gui-vtable.c +++ b/app/gui/gui-vtable.c @@ -351,7 +351,7 @@ gui_display_create (Gimp *gimp, display = gimp_display_new (gimp, image, unit, scale, global_menu_factory, image_managers->data, - global_display_factory, + global_dialog_factory, global_dialog_factory); } diff --git a/app/gui/session.c b/app/gui/session.c index 0752c89914..6c1ab32edd 100644 --- a/app/gui/session.c +++ b/app/gui/session.c @@ -139,13 +139,15 @@ session_init (Gimp *gimp) break; /* In versions <= GIMP 2.6 there was a "toolbox", a - * "dock" and a "toplevel" factory. These are now merged - * so if the factory name is "toolbox" or "dock", get - * the "toplevel" factory instead. We don't change - * factory_name because we need it below + * "dock", a "display" and a "toplevel" factory. These + * are now merged so if the factory name is "toolbox", + * "dock" or "display", get the "toplevel" factory + * instead. We don't change factory_name though because + * we need it below */ factory = gimp_dialog_factory_from_name ((strcmp ("toolbox", factory_name) == 0 || - strcmp ("dock", factory_name) == 0) ? + strcmp ("dock", factory_name) == 0 || + strcmp ("display", factory_name) == 0) ? "toplevel" : factory_name); diff --git a/app/tests/gimpdir/sessionrc-expected b/app/tests/gimpdir/sessionrc-expected index a44971a764..3d93d40293 100644 --- a/app/tests/gimpdir/sessionrc-expected +++ b/app/tests/gimpdir/sessionrc-expected @@ -88,7 +88,7 @@ (size 902 816)) (session-info "toplevel" "gimp-image-new-dialog" (position 100 100)) -(session-info "display" "gimp-empty-image-window" +(session-info "toplevel" "gimp-empty-image-window" (position 140 32) (size 610 190))