[gimp] app: Introduce gimp_dialog_factory_get_singleton()



commit 11b1300b6f6752124f765305f3d78c54c1fa795a
Author: Martin Nordholts <martinn src gnome org>
Date:   Sun Feb 28 23:20:57 2010 +0100

    app: Introduce gimp_dialog_factory_get_singleton()
    
    Instead of including dialogs/dialogs.h everywhere, introduce
    gimp_dialog_factory_get_singleton(). The dialog factory singleton is
    still initialized by dialogs.c though.
    
    Right now the assumption is that we never will have another dialog
    factory instance around. There were so many problems before when we
    had four of them, so let's just keep one of them around.

 app/actions/colormap-commands.c        |    4 +--
 app/actions/context-commands.c         |   10 +++-----
 app/actions/data-commands.c            |    4 +--
 app/actions/dialogs-commands.c         |    6 +---
 app/actions/dockable-commands.c        |    2 -
 app/actions/edit-commands.c            |    3 +-
 app/actions/file-commands.c            |   11 ++++-----
 app/actions/gradient-editor-commands.c |    7 ++---
 app/actions/image-commands.c           |    3 +-
 app/actions/palette-editor-commands.c  |    4 +--
 app/actions/palettes-commands.c        |    4 +--
 app/actions/select-commands.c          |    3 +-
 app/actions/templates-commands.c       |    1 -
 app/actions/view-commands.c            |    4 +--
 app/actions/windows-actions.c          |    8 +++---
 app/actions/windows-commands.c         |   10 ++++----
 app/dialogs/dialogs.c                  |   27 ++++++++++++-----------
 app/dialogs/preferences-dialog.c       |    6 +---
 app/display/gimpdisplayshell-cursor.c  |    6 +---
 app/gui/gimpuiconfigurer.c             |   10 +++-----
 app/gui/gui-message.c                  |    8 ++----
 app/gui/gui-vtable.c                   |    8 ++----
 app/gui/gui.c                          |    4 +-
 app/gui/session.c                      |    8 +++---
 app/menus/windows-menu.c               |    8 +++---
 app/tests.c                            |    2 -
 app/tests/test-session-management.c    |    2 -
 app/tests/test-ui.c                    |   16 ++++++-------
 app/tests/test-window-management.c     |    6 +---
 app/tools/gimpcolortool.c              |    8 ++----
 app/tools/gimptexttool-editor.c        |    4 +--
 app/tools/gimptexttool.c               |    4 +--
 app/widgets/gimpcontrollereditor.c     |    4 +--
 app/widgets/gimpcontrollerlist.c       |    4 +--
 app/widgets/gimpdevicestatus.c         |    4 +--
 app/widgets/gimpdialogfactory.c        |   37 ++++++++++++++++++++++++++++++++
 app/widgets/gimpdialogfactory.h        |    3 ++
 app/widgets/gimpdockable.c             |    4 +--
 app/widgets/gimpdockcolumns.c          |    2 -
 app/widgets/gimpdockwindow.c           |    2 +-
 app/widgets/gimppanedbox.c             |    2 -
 app/widgets/gimpsessioninfo.c          |    4 +--
 app/widgets/gimptoolbox-color-area.c   |    4 +--
 app/widgets/gimptooldialog.c           |    4 +--
 app/widgets/gimpviewablebox.c          |    6 +---
 45 files changed, 133 insertions(+), 158 deletions(-)
---
diff --git a/app/actions/colormap-commands.c b/app/actions/colormap-commands.c
index e71fbe6..3a522d6 100644
--- a/app/actions/colormap-commands.c
+++ b/app/actions/colormap-commands.c
@@ -33,8 +33,6 @@
 #include "widgets/gimpcolormapeditor.h"
 #include "widgets/gimpdialogfactory.h"
 
-#include "dialogs/dialogs.h"
-
 #include "actions.h"
 #include "colormap-commands.h"
 
@@ -83,7 +81,7 @@ colormap_edit_color_cmd_callback (GtkAction *action,
                                GIMP_STOCK_COLORMAP,
                                desc,
                                GTK_WIDGET (editor),
-                               global_dialog_factory,
+                               gimp_dialog_factory_get_singleton (),
                                "gimp-colormap-editor-color-dialog",
                                (const GimpRGB *) &color,
                                FALSE, FALSE);
diff --git a/app/actions/context-commands.c b/app/actions/context-commands.c
index 2987874..4bdf86b 100644
--- a/app/actions/context-commands.c
+++ b/app/actions/context-commands.c
@@ -41,8 +41,6 @@
 #include "widgets/gimppaletteeditor.h"
 #include "widgets/gimpcolormapeditor.h"
 
-#include "dialogs/dialogs.h"
-
 #include "actions.h"
 #include "context-commands.h"
 
@@ -872,9 +870,9 @@ context_get_palette_editor (void)
 {
   GimpSessionInfo *info = NULL;
 
-  g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (global_dialog_factory), NULL);
+  g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (gimp_dialog_factory_get_singleton ()), NULL);
 
-  info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+  info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                 "gimp-palette-editor");
   if (info && gimp_session_info_get_widget (info))
     return GIMP_PALETTE_EDITOR (gtk_bin_get_child (GTK_BIN (gimp_session_info_get_widget (info))));
@@ -887,9 +885,9 @@ context_get_colormap_editor (void)
 {
   GimpSessionInfo *info = NULL;
 
-  g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (global_dialog_factory), NULL);
+  g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (gimp_dialog_factory_get_singleton ()), NULL);
 
-  info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+  info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                 "gimp-indexed-palette");
   if (info && gimp_session_info_get_widget (info))
     return GIMP_COLORMAP_EDITOR (gtk_bin_get_child (GTK_BIN (gimp_session_info_get_widget (info))));
diff --git a/app/actions/data-commands.c b/app/actions/data-commands.c
index f6b3f39..66fb5a8 100644
--- a/app/actions/data-commands.c
+++ b/app/actions/data-commands.c
@@ -41,8 +41,6 @@
 #include "widgets/gimpmessagebox.h"
 #include "widgets/gimpmessagedialog.h"
 
-#include "dialogs/dialogs.h"
-
 #include "actions.h"
 #include "data-commands.h"
 
@@ -302,7 +300,7 @@ data_edit_cmd_callback (GtkAction   *action,
       GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (view));
       GtkWidget *dockable;
 
-      dockable = gimp_dialog_factory_dialog_raise (global_dialog_factory, screen,
+      dockable = gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (), screen,
                                                    value, -1);
 
       gimp_data_editor_set_data (GIMP_DATA_EDITOR (gtk_bin_get_child (GTK_BIN (dockable))),
diff --git a/app/actions/dialogs-commands.c b/app/actions/dialogs-commands.c
index 9b10b84..f576bda 100644
--- a/app/actions/dialogs-commands.c
+++ b/app/actions/dialogs-commands.c
@@ -25,8 +25,6 @@
 
 #include "widgets/gimpdialogfactory.h"
 
-#include "dialogs/dialogs.h"
-
 #include "actions.h"
 #include "dialogs-commands.h"
 
@@ -42,7 +40,7 @@ dialogs_create_toplevel_cmd_callback (GtkAction   *action,
   return_if_no_widget (widget, data);
 
   if (value)
-    gimp_dialog_factory_dialog_new (global_dialog_factory,
+    gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                     gtk_widget_get_screen (widget),
                                     value, -1, TRUE);
 }
@@ -56,7 +54,7 @@ dialogs_create_dockable_cmd_callback (GtkAction   *action,
   return_if_no_widget (widget, data);
 
   if (value)
-    gimp_dialog_factory_dialog_raise (global_dialog_factory,
+    gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                       gtk_widget_get_screen (widget),
                                       value, -1);
 }
diff --git a/app/actions/dockable-commands.c b/app/actions/dockable-commands.c
index 846efcc..8623849 100644
--- a/app/actions/dockable-commands.c
+++ b/app/actions/dockable-commands.c
@@ -34,8 +34,6 @@
 #include "widgets/gimpdocked.h"
 #include "widgets/gimpsessioninfo.h"
 
-#include "dialogs/dialogs.h"
-
 #include "dockable-commands.h"
 
 
diff --git a/app/actions/edit-commands.c b/app/actions/edit-commands.c
index abfcb30..37e9b16 100644
--- a/app/actions/edit-commands.c
+++ b/app/actions/edit-commands.c
@@ -49,7 +49,6 @@
 #include "display/gimpdisplayshell.h"
 #include "display/gimpdisplayshell-transform.h"
 
-#include "dialogs/dialogs.h"
 #include "dialogs/fade-dialog.h"
 
 #include "actions.h"
@@ -449,7 +448,7 @@ edit_named_paste_cmd_callback (GtkAction *action,
   GtkWidget *widget;
   return_if_no_widget (widget, data);
 
-  gimp_dialog_factory_dialog_raise (global_dialog_factory,
+  gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                     gtk_widget_get_screen (widget),
                                     "gimp-buffer-list|gimp-buffer-grid", -1);
 }
diff --git a/app/actions/file-commands.c b/app/actions/file-commands.c
index 38debaf..5060d69 100644
--- a/app/actions/file-commands.c
+++ b/app/actions/file-commands.c
@@ -52,7 +52,6 @@
 #include "display/gimpdisplay.h"
 #include "display/gimpdisplay-foreach.h"
 
-#include "dialogs/dialogs.h"
 #include "dialogs/file-save-dialog.h"
 
 #include "actions.h"
@@ -142,7 +141,7 @@ file_open_location_cmd_callback (GtkAction *action,
   GtkWidget *widget;
   return_if_no_widget (widget, data);
 
-  gimp_dialog_factory_dialog_new (global_dialog_factory,
+  gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                   gtk_widget_get_screen (widget),
                                   "gimp-file-open-location-dialog", -1, TRUE);
 }
@@ -450,7 +449,7 @@ file_close_all_cmd_callback (GtkAction *action,
       GtkWidget *widget;
       return_if_no_widget (widget, data);
 
-      gimp_dialog_factory_dialog_raise (global_dialog_factory,
+      gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                         gtk_widget_get_screen (widget),
                                         "gimp-close-all-dialog", -1);
     }
@@ -489,7 +488,7 @@ file_open_dialog_show (Gimp        *gimp,
 {
   GtkWidget *dialog;
 
-  dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
+  dialog = gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                            gtk_widget_get_screen (parent),
                                            "gimp-file-open-dialog", -1, FALSE);
 
@@ -531,7 +530,7 @@ file_save_dialog_show (Gimp        *gimp,
 
   if (! dialog)
     {
-      dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
+      dialog = gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                                gtk_widget_get_screen (parent),
                                                "gimp-file-save-dialog",
                                                -1, FALSE);
@@ -581,7 +580,7 @@ file_export_dialog_show (Gimp      *gimp,
 
   if (! dialog)
     {
-      dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
+      dialog = gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                                gtk_widget_get_screen (parent),
                                                "gimp-file-export-dialog",
                                                -1, FALSE);
diff --git a/app/actions/gradient-editor-commands.c b/app/actions/gradient-editor-commands.c
index 1e2aee1..204e10d 100644
--- a/app/actions/gradient-editor-commands.c
+++ b/app/actions/gradient-editor-commands.c
@@ -29,13 +29,12 @@
 #include "core/gimpgradient.h"
 
 #include "widgets/gimpcolordialog.h"
+#include "widgets/gimpdialogfactory.h"
 #include "widgets/gimpgradienteditor.h"
 #include "widgets/gimphelp-ids.h"
 #include "widgets/gimpuimanager.h"
 #include "widgets/gimpviewabledialog.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gradient-editor-commands.h"
 
 #include "gimp-intl.h"
@@ -86,7 +85,7 @@ gradient_editor_left_color_cmd_callback (GtkAction *action,
                            GIMP_STOCK_GRADIENT,
                            _("Gradient Segment's Left Endpoint Color"),
                            GTK_WIDGET (editor),
-                           global_dialog_factory,
+                           gimp_dialog_factory_get_singleton (),
                            "gimp-gradient-editor-color-dialog",
                            &editor->control_sel_l->left_color,
                            editor->instant_update, TRUE);
@@ -237,7 +236,7 @@ gradient_editor_right_color_cmd_callback (GtkAction *action,
                            GIMP_STOCK_GRADIENT,
                            _("Gradient Segment's Right Endpoint Color"),
                            GTK_WIDGET (editor),
-                           global_dialog_factory,
+                           gimp_dialog_factory_get_singleton (),
                            "gimp-gradient-editor-color-dialog",
                            &editor->control_sel_l->right_color,
                            editor->instant_update, TRUE);
diff --git a/app/actions/image-commands.c b/app/actions/image-commands.c
index 3342ffc..d1f0740 100644
--- a/app/actions/image-commands.c
+++ b/app/actions/image-commands.c
@@ -50,7 +50,6 @@
 #include "display/gimpdisplayshell.h"
 
 #include "dialogs/convert-dialog.h"
-#include "dialogs/dialogs.h"
 #include "dialogs/grid-dialog.h"
 #include "dialogs/image-merge-layers-dialog.h"
 #include "dialogs/image-new-dialog.h"
@@ -127,7 +126,7 @@ image_new_cmd_callback (GtkAction *action,
   GtkWidget *dialog;
   return_if_no_widget (widget, data);
 
-  dialog = gimp_dialog_factory_dialog_new (global_dialog_factory,
+  dialog = gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                            gtk_widget_get_screen (widget),
                                            "gimp-image-new-dialog", -1, FALSE);
 
diff --git a/app/actions/palette-editor-commands.c b/app/actions/palette-editor-commands.c
index 5346dee..43fe8c0 100644
--- a/app/actions/palette-editor-commands.c
+++ b/app/actions/palette-editor-commands.c
@@ -32,8 +32,6 @@
 #include "widgets/gimpdialogfactory.h"
 #include "widgets/gimppaletteeditor.h"
 
-#include "dialogs/dialogs.h"
-
 #include "palette-editor-commands.h"
 
 #include "gimp-intl.h"
@@ -71,7 +69,7 @@ palette_editor_edit_color_cmd_callback (GtkAction *action,
                                GIMP_STOCK_PALETTE,
                                _("Edit Color Palette Entry"),
                                GTK_WIDGET (editor),
-                               global_dialog_factory,
+                               gimp_dialog_factory_get_singleton (),
                                "gimp-palette-editor-color-dialog",
                                &editor->color->color,
                                FALSE, FALSE);
diff --git a/app/actions/palettes-commands.c b/app/actions/palettes-commands.c
index 6acd9cc..6bd2efb 100644
--- a/app/actions/palettes-commands.c
+++ b/app/actions/palettes-commands.c
@@ -34,8 +34,6 @@
 #include "widgets/gimphelp-ids.h"
 #include "widgets/gimpview.h"
 
-#include "dialogs/dialogs.h"
-
 #include "actions.h"
 #include "palettes-commands.h"
 
@@ -58,7 +56,7 @@ palettes_import_cmd_callback (GtkAction *action,
   GtkWidget *widget;
   return_if_no_widget (widget, data);
 
-  gimp_dialog_factory_dialog_new (global_dialog_factory,
+  gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                   gtk_widget_get_screen (widget),
                                   "gimp-palette-import-dialog", -1, TRUE);
 }
diff --git a/app/actions/select-commands.c b/app/actions/select-commands.c
index df69d96..4c4bc4b 100644
--- a/app/actions/select-commands.c
+++ b/app/actions/select-commands.c
@@ -38,7 +38,6 @@
 #include "display/gimpdisplay.h"
 #include "display/gimpdisplayshell.h"
 
-#include "dialogs/dialogs.h"
 #include "dialogs/stroke-dialog.h"
 
 #include "actions.h"
@@ -319,7 +318,7 @@ select_save_cmd_callback (GtkAction *action,
   gimp_selection_save (GIMP_SELECTION (gimp_image_get_mask (image)));
   gimp_image_flush (image);
 
-  gimp_dialog_factory_dialog_raise (global_dialog_factory,
+  gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                     gtk_widget_get_screen (widget),
                                     "gimp-channel-list", -1);
 }
diff --git a/app/actions/templates-commands.c b/app/actions/templates-commands.c
index 045d814..57d413a 100644
--- a/app/actions/templates-commands.c
+++ b/app/actions/templates-commands.c
@@ -41,7 +41,6 @@
 #include "widgets/gimptemplateeditor.h"
 #include "widgets/gimptemplateview.h"
 
-#include "dialogs/dialogs.h"
 #include "dialogs/template-options-dialog.h"
 
 #include "actions.h"
diff --git a/app/actions/view-commands.c b/app/actions/view-commands.c
index 67ef2e9..c0e10fd 100644
--- a/app/actions/view-commands.c
+++ b/app/actions/view-commands.c
@@ -50,8 +50,6 @@
 #include "widgets/gimpdialogfactory.h"
 #include "widgets/gimpuimanager.h"
 
-#include "dialogs/dialogs.h"
-
 #include "actions.h"
 #include "view-commands.h"
 
@@ -320,7 +318,7 @@ view_navigation_window_cmd_callback (GtkAction *action,
   GimpDisplayShell *shell;
   return_if_no_shell (shell, data);
 
-  gimp_dialog_factory_dialog_raise (global_dialog_factory,
+  gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                     gtk_widget_get_screen (GTK_WIDGET (shell)),
                                     "gimp-navigation-view", -1);
 }
diff --git a/app/actions/windows-actions.c b/app/actions/windows-actions.c
index bb4dc37..adf4572 100644
--- a/app/actions/windows-actions.c
+++ b/app/actions/windows-actions.c
@@ -151,21 +151,21 @@ windows_actions_setup (GimpActionGroup *group)
       windows_actions_display_add (group->gimp->displays, display, group);
     }
 
-  g_signal_connect_object (global_dialog_factory, "dock-window-added",
+  g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-added",
                            G_CALLBACK (windows_actions_dock_window_added),
                            group, 0);
-  g_signal_connect_object (global_dialog_factory, "dock-window-removed",
+  g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-removed",
                            G_CALLBACK (windows_actions_dock_window_removed),
                            group, 0);
 
-  for (list = gimp_dialog_factory_get_open_dialogs (global_dialog_factory);
+  for (list = gimp_dialog_factory_get_open_dialogs (gimp_dialog_factory_get_singleton ());
        list;
        list = g_list_next (list))
     {
       GimpDockWindow *dock_window = list->data;
 
       if (GIMP_IS_DOCK_WINDOW (dock_window))
-        windows_actions_dock_window_added (global_dialog_factory,
+        windows_actions_dock_window_added (gimp_dialog_factory_get_singleton (),
                                            dock_window,
                                            group);
     }
diff --git a/app/actions/windows-commands.c b/app/actions/windows-commands.c
index 6318e87..16f2024 100644
--- a/app/actions/windows-commands.c
+++ b/app/actions/windows-commands.c
@@ -54,7 +54,7 @@ windows_hide_docks_cmd_callback (GtkAction *action,
                                  gpointer   data)
 {
   gboolean         active    = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
-  GimpDialogsState state     = gimp_dialog_factory_get_state (global_dialog_factory);
+  GimpDialogsState state     = gimp_dialog_factory_get_state (gimp_dialog_factory_get_singleton ());
   GimpDialogsState new_state = state;
   Gimp            *gimp      = NULL;
   return_if_no_gimp (gimp, data);
@@ -69,7 +69,7 @@ windows_hide_docks_cmd_callback (GtkAction *action,
     new_state = GIMP_DIALOGS_SHOWN;
 
   if (state != new_state)
-    gimp_dialog_factory_set_state (global_dialog_factory, new_state);
+    gimp_dialog_factory_set_state (gimp_dialog_factory_get_singleton (), new_state);
 
   g_object_set (gimp->config,
                 "hide-docks", active,
@@ -119,9 +119,9 @@ windows_open_recent_cmd_callback (GtkAction *action,
   g_object_ref (info);
   gimp_container_remove (global_recent_docks, GIMP_OBJECT (info));
 
-  gimp_dialog_factory_add_session_info (global_dialog_factory, info);
+  gimp_dialog_factory_add_session_info (gimp_dialog_factory_get_singleton (), info);
 
-  gimp_session_info_restore (info, global_dialog_factory);
+  gimp_session_info_restore (info, gimp_dialog_factory_get_singleton ());
   gimp_session_info_clear_info (info);
 }
 
@@ -132,7 +132,7 @@ windows_show_toolbox (void)
 
   if (! dialogs_get_toolbox ())
     {
-      toolbox = gimp_dock_with_window_new (global_dialog_factory,
+      toolbox = gimp_dock_with_window_new (gimp_dialog_factory_get_singleton (),
                                            gdk_screen_get_default (),
                                            TRUE /*toolbox*/);
 
diff --git a/app/dialogs/dialogs.c b/app/dialogs/dialogs.c
index 62f1fbf..d31a9b0 100644
--- a/app/dialogs/dialogs.c
+++ b/app/dialogs/dialogs.c
@@ -45,8 +45,7 @@
 #include "gimp-intl.h"
 
 
-GimpDialogFactory *global_dialog_factory  = NULL;
-GimpContainer     *global_recent_docks    = NULL;
+GimpContainer *global_recent_docks = NULL;
 
 
 #define FOREIGN(id, singleton, remember_size) \
@@ -377,17 +376,19 @@ void
 dialogs_init (Gimp            *gimp,
               GimpMenuFactory *menu_factory)
 {
-  gint i;
+  GimpDialogFactory *factory = NULL;
+  gint               i       = 0;
 
   g_return_if_fail (GIMP_IS_GIMP (gimp));
   g_return_if_fail (GIMP_IS_MENU_FACTORY (menu_factory));
 
-  global_dialog_factory = gimp_dialog_factory_new ("toplevel",
-                                                   gimp_get_user_context (gimp),
-                                                   menu_factory);
+  factory = gimp_dialog_factory_new ("toplevel",
+                                     gimp_get_user_context (gimp),
+                                     menu_factory);
+  gimp_dialog_factory_set_singleton (factory);
 
   for (i = 0; i < G_N_ELEMENTS (entries); i++)
-    gimp_dialog_factory_register_entry (global_dialog_factory,
+    gimp_dialog_factory_register_entry (gimp_dialog_factory_get_singleton (),
                                         entries[i].identifier,
                                         gettext (entries[i].name),
                                         gettext (entries[i].blurb),
@@ -410,10 +411,10 @@ dialogs_exit (Gimp *gimp)
 {
   g_return_if_fail (GIMP_IS_GIMP (gimp));
 
-  if (global_dialog_factory)
+  if (gimp_dialog_factory_get_singleton ())
     {
-      g_object_unref (global_dialog_factory);
-      global_dialog_factory = NULL;
+      g_object_unref (gimp_dialog_factory_get_singleton ());
+      gimp_dialog_factory_set_singleton (NULL);
     }
 
   if (global_recent_docks)
@@ -433,7 +434,7 @@ dialogs_ensure_factory_entry_on_recent_dock (GimpSessionInfo *info)
       /* The recent docks container only contains session infos for
        * dock windows
        */
-      entry = gimp_dialog_factory_find_entry (global_dialog_factory,
+      entry = gimp_dialog_factory_find_entry (gimp_dialog_factory_get_singleton (),
                                               "gimp-dock-window");
 
       gimp_session_info_set_factory_entry (info, entry);
@@ -506,9 +507,9 @@ dialogs_get_toolbox (void)
 {
   GList *list;
 
-  g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (global_dialog_factory), NULL);
+  g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (gimp_dialog_factory_get_singleton ()), NULL);
 
-  for (list = gimp_dialog_factory_get_open_dialogs (global_dialog_factory);
+  for (list = gimp_dialog_factory_get_open_dialogs (gimp_dialog_factory_get_singleton ());
        list;
        list = g_list_next (list))
     {
diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c
index fe6c1ae..39feb42 100644
--- a/app/dialogs/preferences-dialog.c
+++ b/app/dialogs/preferences-dialog.c
@@ -59,8 +59,6 @@
 #include "gui/session.h"
 #include "gui/themes.h"
 
-#include "dialogs/dialogs.h"
-
 #include "preferences-dialog.h"
 #include "resolution-calibrate-dialog.h"
 
@@ -493,7 +491,7 @@ static void
 prefs_input_devices_dialog (GtkWidget *widget,
                             Gimp      *gimp)
 {
-  gimp_dialog_factory_dialog_raise (global_dialog_factory,
+  gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                     gtk_widget_get_screen (widget),
                                     "gimp-input-devices-dialog", 0);
 }
@@ -502,7 +500,7 @@ static void
 prefs_keyboard_shortcuts_dialog (GtkWidget *widget,
                                  Gimp      *gimp)
 {
-  gimp_dialog_factory_dialog_raise (global_dialog_factory,
+  gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                     gtk_widget_get_screen (widget),
                                     "gimp-keyboard-shortcuts-dialog", 0);
 }
diff --git a/app/display/gimpdisplayshell-cursor.c b/app/display/gimpdisplayshell-cursor.c
index 1aea1c9..29be4cd 100644
--- a/app/display/gimpdisplayshell-cursor.c
+++ b/app/display/gimpdisplayshell-cursor.c
@@ -31,8 +31,6 @@
 #include "widgets/gimpdialogfactory.h"
 #include "widgets/gimpsessioninfo.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpdisplay.h"
 #include "gimpcursorview.h"
 #include "gimpdisplayshell.h"
@@ -166,7 +164,7 @@ gimp_display_shell_update_cursor (GimpDisplayShell    *shell,
 
   gimp_statusbar_update_cursor (statusbar, precision, image_x, image_y);
 
-  session_info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+  session_info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                         "gimp-cursor-view");
   if (session_info && gimp_session_info_get_widget (session_info))
     {
@@ -203,7 +201,7 @@ gimp_display_shell_clear_cursor (GimpDisplayShell *shell)
 
   gimp_statusbar_clear_cursor (statusbar);
 
-  session_info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+  session_info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                         "gimp-cursor-view");
   if (session_info && gimp_session_info_get_widget (session_info))
     {
diff --git a/app/gui/gimpuiconfigurer.c b/app/gui/gimpuiconfigurer.c
index d4dfa7e..7537384 100644
--- a/app/gui/gimpuiconfigurer.c
+++ b/app/gui/gimpuiconfigurer.c
@@ -37,8 +37,6 @@
 #include "display/gimpdisplayshell.h"
 #include "display/gimpimagewindow.h"
 
-#include "dialogs/dialogs.h"
-
 #include "menus/menus.h"
 
 #include "gimpuiconfigurer.h"
@@ -161,7 +159,7 @@ gimp_ui_configurer_move_docks_to_columns (GimpUIConfigurer  *ui_configurer,
   GList *dialog_iter = NULL;
 
   dialogs =
-    g_list_copy (gimp_dialog_factory_get_open_dialogs (global_dialog_factory));
+    g_list_copy (gimp_dialog_factory_get_open_dialogs (gimp_dialog_factory_get_singleton ()));
 
   for (dialog_iter = dialogs; dialog_iter; dialog_iter = dialog_iter->next)
     {
@@ -203,7 +201,7 @@ gimp_ui_configurer_move_docks_to_columns (GimpUIConfigurer  *ui_configurer,
       if (GTK_IS_WIDGET (dock_window) &&
           g_list_length (gimp_dock_window_get_docks (dock_window)) == 0)
         {
-          gimp_dialog_factory_remove_dialog (global_dialog_factory,
+          gimp_dialog_factory_remove_dialog (gimp_dialog_factory_get_singleton (),
                                              GTK_WIDGET (dock_window));
           gtk_widget_destroy (GTK_WIDGET (dock_window));
         }
@@ -283,7 +281,7 @@ gimp_ui_configurer_move_docks_to_window (GimpUIConfigurer *ui_configurer,
        * toolbox
        */
       dock_window =
-        gimp_dialog_factory_dialog_new (global_dialog_factory,
+        gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                         screen,
                                         (GIMP_IS_TOOLBOX (dock) ?
                                          "gimp-toolbox-window" :
@@ -325,7 +323,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_dialog_factory);
+                                                gimp_dialog_factory_get_singleton ());
       /* Move the shell there */
       shell = gimp_image_window_get_shell (source_image_window, 1);
 
diff --git a/app/gui/gui-message.c b/app/gui/gui-message.c
index 4ec2f9b..38523c3 100644
--- a/app/gui/gui-message.c
+++ b/app/gui/gui-message.c
@@ -41,8 +41,6 @@
 #include "widgets/gimpsessioninfo.h"
 #include "widgets/gimpwidgets-utils.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gui-message.h"
 
 #include "gimp-intl.h"
@@ -102,7 +100,7 @@ gui_message_error_console (GimpMessageSeverity  severity,
     {
       GimpSessionInfo *info;
 
-      info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+      info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                     "gimp-error-console");
 
       if (info && GIMP_IS_DOCKABLE (gimp_session_info_get_widget (info)))
@@ -110,7 +108,7 @@ gui_message_error_console (GimpMessageSeverity  severity,
     }
 
   if (! dockable)
-    dockable = gimp_dialog_factory_dialog_raise (global_dialog_factory,
+    dockable = gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                                  gdk_screen_get_default (),
                                                  "gimp-error-console", -1);
 
@@ -175,7 +173,7 @@ progress_error_dialog (GimpProgress *progress)
 static GtkWidget *
 global_error_dialog (void)
 {
-  return gimp_dialog_factory_dialog_new (global_dialog_factory,
+  return gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                          gdk_screen_get_default (),
                                          "gimp-error-dialog", -1,
                                          FALSE);
diff --git a/app/gui/gui-vtable.c b/app/gui/gui-vtable.c
index 917efa9..023e3b8 100644
--- a/app/gui/gui-vtable.c
+++ b/app/gui/gui-vtable.c
@@ -70,8 +70,6 @@
 
 #include "menus/menus.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gui-message.h"
 #include "gui-vtable.h"
 #include "themes.h"
@@ -199,7 +197,7 @@ static void
 gui_set_busy (Gimp *gimp)
 {
   gimp_displays_set_busy (gimp);
-  gimp_dialog_factory_set_busy (global_dialog_factory);
+  gimp_dialog_factory_set_busy (gimp_dialog_factory_get_singleton ());
 
   gdk_flush ();
 }
@@ -208,7 +206,7 @@ static void
 gui_unset_busy (Gimp *gimp)
 {
   gimp_displays_unset_busy (gimp);
-  gimp_dialog_factory_unset_busy (global_dialog_factory);
+  gimp_dialog_factory_unset_busy (gimp_dialog_factory_get_singleton ());
 
   gdk_flush ();
 }
@@ -351,7 +349,7 @@ gui_display_create (Gimp      *gimp,
       display = gimp_display_new (gimp, image, unit, scale,
                                   global_menu_factory,
                                   image_managers->data,
-                                  global_dialog_factory);
+                                  gimp_dialog_factory_get_singleton ());
    }
 
   if (gimp_context_get_display (context) == display)
diff --git a/app/gui/gui.c b/app/gui/gui.c
index a872bc1..70148a3 100644
--- a/app/gui/gui.c
+++ b/app/gui/gui.c
@@ -560,7 +560,7 @@ gui_exit_callback (Gimp     *gimp,
 
   if (! force && gimp_displays_dirty (gimp))
     {
-      gimp_dialog_factory_dialog_raise (global_dialog_factory,
+      gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                         gdk_screen_get_default (),
                                         "gimp-quit-dialog", -1);
 
@@ -697,7 +697,7 @@ gui_device_change_notify (Gimp *gimp)
 {
   GimpSessionInfo *session_info;
 
-  session_info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+  session_info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                         "gimp-device-status");
 
   if (session_info && gimp_session_info_get_widget (session_info))
diff --git a/app/gui/session.c b/app/gui/session.c
index d07f1c9..e457448 100644
--- a/app/gui/session.c
+++ b/app/gui/session.c
@@ -139,10 +139,10 @@ session_init (Gimp *gimp)
 
               /* In versions <= GIMP 2.6 there was a "toolbox", a
                * "dock", a "display" and a "toplevel" factory. These
-               * are now merged to a single global_dialog_factory. We
+               * are now merged to a single gimp_dialog_factory_get_singleton (). We
                * need the legacy name though, so keep it around.
                */
-              factory = global_dialog_factory;
+              factory = gimp_dialog_factory_get_singleton ();
 
               info = gimp_session_info_new ();
 
@@ -268,7 +268,7 @@ session_restore (Gimp *gimp)
 {
   g_return_if_fail (GIMP_IS_GIMP (gimp));
 
-  gimp_dialog_factory_restore (global_dialog_factory);
+  gimp_dialog_factory_restore (gimp_dialog_factory_get_singleton ());
 }
 
 void
@@ -307,7 +307,7 @@ session_save (Gimp     *gimp,
   if (!writer)
     return;
 
-  gimp_dialog_factory_save (global_dialog_factory, writer);
+  gimp_dialog_factory_save (gimp_dialog_factory_get_singleton (), writer);
   gimp_config_writer_linefeed (writer);
 
   /* save last tip shown
diff --git a/app/menus/windows-menu.c b/app/menus/windows-menu.c
index 6b27cbb..57ab241 100644
--- a/app/menus/windows-menu.c
+++ b/app/menus/windows-menu.c
@@ -104,21 +104,21 @@ windows_menu_setup (GimpUIManager *manager,
       windows_menu_display_add (manager->gimp->displays, display, manager);
     }
 
-  g_signal_connect_object (global_dialog_factory, "dock-window-added",
+  g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-added",
                            G_CALLBACK (windows_menu_dock_window_added),
                            manager, 0);
-  g_signal_connect_object (global_dialog_factory, "dock-window-removed",
+  g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-removed",
                            G_CALLBACK (windows_menu_dock_window_removed),
                            manager, 0);
 
-  for (list = gimp_dialog_factory_get_open_dialogs (global_dialog_factory);
+  for (list = gimp_dialog_factory_get_open_dialogs (gimp_dialog_factory_get_singleton ());
        list;
        list = g_list_next (list))
     {
       GimpDockWindow *dock_window = list->data;
 
       if (GIMP_IS_DOCK_WINDOW (dock_window))
-        windows_menu_dock_window_added (global_dialog_factory,
+        windows_menu_dock_window_added (gimp_dialog_factory_get_singleton (),
                                         dock_window,
                                         manager);
     }
diff --git a/app/tests.c b/app/tests.c
index fdbfe7d..e78102a 100644
--- a/app/tests.c
+++ b/app/tests.c
@@ -25,8 +25,6 @@
 
 #include "actions/actions.h"
 
-#include "dialogs/dialogs.h"
-
 #include "menus/menus.h"
 
 #include "base/base.h"
diff --git a/app/tests/test-session-management.c b/app/tests/test-session-management.c
index f998e81..1543e66 100644
--- a/app/tests/test-session-management.c
+++ b/app/tests/test-session-management.c
@@ -26,8 +26,6 @@
 
 #include "dialogs/dialogs-types.h"
 
-#include "dialogs/dialogs.h"
-
 #include "widgets/gimpdialogfactory.h"
 #include "widgets/gimpsessioninfo.h"
 
diff --git a/app/tests/test-ui.c b/app/tests/test-ui.c
index 1d66426..21f4cfc 100644
--- a/app/tests/test-ui.c
+++ b/app/tests/test-ui.c
@@ -25,8 +25,6 @@
 
 #include "dialogs/dialogs-types.h"
 
-#include "dialogs/dialogs.h"
-
 #include "display/gimpdisplay.h"
 #include "display/gimpdisplayshell.h"
 #include "display/gimpdisplayshell-transform.h"
@@ -181,7 +179,7 @@ gimp_ui_tool_options_editor_updates (GimpTestFixture *fixture,
   GtkWidget             *toplevel     = gtk_widget_get_toplevel (GTK_WIDGET (shell));
   GimpImageWindow       *image_window = GIMP_IMAGE_WINDOW (toplevel);
   GimpUIManager         *ui_manager   = gimp_image_window_get_ui_manager (image_window);
-  GtkWidget             *dockable     = gimp_dialog_factory_dialog_new (global_dialog_factory,
+  GtkWidget             *dockable     = gimp_dialog_factory_dialog_new (gimp_dialog_factory_get_singleton (),
                                                                         gtk_widget_get_screen (toplevel),
                                                                         "gimp-tool-options",
                                                                         -1 /*view_size*/,
@@ -234,7 +232,7 @@ gimp_ui_create_new_image_via_dialog (GimpTestFixture *fixture,
 
   /* Get the GtkWindow of the dialog */
   new_image_dialog =
-    gimp_dialog_factory_dialog_raise (global_dialog_factory,
+    gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                       gtk_widget_get_screen (GTK_WIDGET (shell)),
                                       "gimp-image-new-dialog",
                                       -1 /*view_size*/);
@@ -270,11 +268,11 @@ gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
   GList     *session_infos                 = NULL;
 
   /* Find a non-toolbox dock window */
-  dock_window = gimp_ui_find_non_toolbox_dock_window (global_dialog_factory);
+  dock_window = gimp_ui_find_non_toolbox_dock_window (gimp_dialog_factory_get_singleton ());
   g_assert (dock_window != NULL);
 
   /* Count number of docks */
-  session_infos = gimp_dialog_factory_get_session_infos (global_dialog_factory);
+  session_infos = gimp_dialog_factory_get_session_infos (gimp_dialog_factory_get_singleton ());
   n_session_infos_before_close = g_list_length (session_infos);
 
   /* Close one of the dock windows */
@@ -282,7 +280,7 @@ gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
   gimp_test_run_mainloop_until_idle ();
 
   /* Make sure the number of session infos went down */
-  session_infos = gimp_dialog_factory_get_session_infos (global_dialog_factory);
+  session_infos = gimp_dialog_factory_get_session_infos (gimp_dialog_factory_get_singleton ());
   n_session_infos_after_close = g_list_length (session_infos);
   g_assert_cmpint (n_session_infos_before_close,
                    >,
@@ -296,7 +294,7 @@ gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
                                    /* FIXME: This is severly hardcoded */
                                    "windows-recent-0003");
   gimp_test_run_mainloop_until_idle ();
-  session_infos = gimp_dialog_factory_get_session_infos (global_dialog_factory);
+  session_infos = gimp_dialog_factory_get_session_infos (gimp_dialog_factory_get_singleton ());
   n_session_infos_after_restore = g_list_length (session_infos);
   g_assert_cmpint (n_session_infos_after_close,
                    <,
@@ -328,7 +326,7 @@ gimp_ui_tab_toggle_dont_change_position (GimpTestFixture *fixture,
   gint       h_after_show  = -1;
 
   /* Find a non-toolbox dock window */
-  dock_window = gimp_ui_find_non_toolbox_dock_window (global_dialog_factory);
+  dock_window = gimp_ui_find_non_toolbox_dock_window (gimp_dialog_factory_get_singleton ());
   g_assert (dock_window != NULL);
   g_assert (gtk_widget_get_visible (dock_window));
 
diff --git a/app/tests/test-window-management.c b/app/tests/test-window-management.c
index 95a4ea6..dd00984 100644
--- a/app/tests/test-window-management.c
+++ b/app/tests/test-window-management.c
@@ -20,8 +20,6 @@
 
 #include "dialogs/dialogs-types.h"
 
-#include "dialogs/dialogs.h"
-
 #include "widgets/gimpdialogfactory.h"
 #include "widgets/gimpdock.h"
 #include "widgets/gimpdockwindow.h"
@@ -99,10 +97,10 @@ gimp_test_window_roles (GimpTestFixture *fixture,
   GimpDockWindow *dock_window    = NULL;
   GimpDockWindow *toolbox_window = NULL;
 
-  dock           = gimp_dock_with_window_new (global_dialog_factory,
+  dock           = gimp_dock_with_window_new (gimp_dialog_factory_get_singleton (),
                                               gdk_screen_get_default (),
                                               FALSE /*toolbox*/);
-  toolbox        = gimp_dock_with_window_new (global_dialog_factory,
+  toolbox        = gimp_dock_with_window_new (gimp_dialog_factory_get_singleton (),
                                               gdk_screen_get_default (),
                                               TRUE /*toolbox*/);
   dock_window    = gimp_dock_window_from_dock (GIMP_DOCK (dock));
diff --git a/app/tools/gimpcolortool.c b/app/tools/gimpcolortool.c
index aae7b0b..07c382d 100644
--- a/app/tools/gimpcolortool.c
+++ b/app/tools/gimpcolortool.c
@@ -50,8 +50,6 @@
 #include "display/gimpdisplayshell-selection.h"
 #include "display/gimpdisplayshell-transform.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpcoloroptions.h"
 #include "gimpcolortool.h"
 #include "gimptoolcontrol.h"
@@ -646,7 +644,7 @@ gimp_color_tool_real_picked (GimpColorTool      *color_tool,
 
       if (GIMP_IMAGE_TYPE_IS_INDEXED (sample_type))
         {
-          info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+          info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                         "gimp-indexed-palette");
           if (info && gimp_session_info_get_widget (info))
             {
@@ -660,7 +658,7 @@ gimp_color_tool_real_picked (GimpColorTool      *color_tool,
 
       if (TRUE)
         {
-          info = gimp_dialog_factory_find_session_info (global_dialog_factory,
+          info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
                                                         "gimp-palette-editor");
           if (info && gimp_session_info_get_widget (info))
             {
@@ -696,7 +694,7 @@ gimp_color_tool_real_picked (GimpColorTool      *color_tool,
         GtkWidget        *dockable;
 
         screen = gtk_widget_get_screen (GTK_WIDGET (shell));
-        dockable = gimp_dialog_factory_dialog_raise (global_dialog_factory,
+        dockable = gimp_dialog_factory_dialog_raise (gimp_dialog_factory_get_singleton (),
                                                      screen,
                                                      "gimp-palette-editor",
                                                      -1);
diff --git a/app/tools/gimptexttool-editor.c b/app/tools/gimptexttool-editor.c
index 477dfd3..29f40d7 100644
--- a/app/tools/gimptexttool-editor.c
+++ b/app/tools/gimptexttool-editor.c
@@ -45,8 +45,6 @@
 #include "display/gimpdisplay.h"
 #include "display/gimpdisplayshell.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimprectangletool.h"
 #include "gimptextoptions.h"
 #include "gimptexttool.h"
@@ -1139,7 +1137,7 @@ gimp_text_tool_editor_dialog (GimpTextTool *text_tool)
       return;
     }
 
-  dialog_factory = global_dialog_factory;
+  dialog_factory = gimp_dialog_factory_get_singleton ();
 
   if (tool->display)
     {
diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c
index 2b4108e..20ac045 100644
--- a/app/tools/gimptexttool.c
+++ b/app/tools/gimptexttool.c
@@ -58,8 +58,6 @@
 #include "display/gimpdisplay.h"
 #include "display/gimpdisplayshell.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimprectangletool.h"
 #include "gimptextoptions.h"
 #include "gimptexttool.h"
@@ -662,7 +660,7 @@ gimp_text_tool_get_popup (GimpTool         *tool,
           GtkWidget         *im_menu;
           GList             *children;
 
-          dialog_factory = global_dialog_factory;
+          dialog_factory = gimp_dialog_factory_get_singleton ();
 
           text_tool->ui_manager =
             gimp_menu_factory_manager_new (gimp_dialog_factory_get_menu_factory (dialog_factory),
diff --git a/app/widgets/gimpcontrollereditor.c b/app/widgets/gimpcontrollereditor.c
index 8f44d9a..c9d6ca7 100644
--- a/app/widgets/gimpcontrollereditor.c
+++ b/app/widgets/gimpcontrollereditor.c
@@ -33,8 +33,6 @@
 
 #include "core/gimpcontext.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpactioneditor.h"
 #include "gimpactionview.h"
 #include "gimpcontrollereditor.h"
@@ -683,7 +681,7 @@ gimp_controller_editor_edit_clicked (GtkWidget            *button,
       g_object_add_weak_pointer (G_OBJECT (editor->edit_dialog),
                                  (gpointer) &editor->edit_dialog);
 
-      gimp_dialog_factory_add_foreign (global_dialog_factory,
+      gimp_dialog_factory_add_foreign (gimp_dialog_factory_get_singleton (),
                                        "gimp-controller-action-dialog",
                                        editor->edit_dialog);
 
diff --git a/app/widgets/gimpcontrollerlist.c b/app/widgets/gimpcontrollerlist.c
index e600a8e..bc40a10 100644
--- a/app/widgets/gimpcontrollerlist.c
+++ b/app/widgets/gimpcontrollerlist.c
@@ -34,8 +34,6 @@
 #include "core/gimp.h"
 #include "core/gimpcontainer.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpcontainertreeview.h"
 #include "gimpcontainerview.h"
 #include "gimpcontrollereditor.h"
@@ -636,7 +634,7 @@ gimp_controller_list_edit_clicked (GtkWidget          *button,
 
                             NULL);
 
-  gimp_dialog_factory_add_foreign (global_dialog_factory,
+  gimp_dialog_factory_add_foreign (gimp_dialog_factory_get_singleton (),
                                    "gimp-controller-editor-dialog",
                                    dialog);
 
diff --git a/app/widgets/gimpdevicestatus.c b/app/widgets/gimpdevicestatus.c
index fb0b8a1..b5b885e 100644
--- a/app/widgets/gimpdevicestatus.c
+++ b/app/widgets/gimpdevicestatus.c
@@ -35,8 +35,6 @@
 #include "core/gimppattern.h"
 #include "core/gimptoolinfo.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpdnd.h"
 #include "gimpdeviceinfo.h"
 #include "gimpdevices.h"
@@ -471,7 +469,7 @@ gimp_device_status_view_clicked (GtkWidget       *widget,
 {
   GimpDialogFactory *dialog_factory;
 
-  dialog_factory = global_dialog_factory;
+  dialog_factory = gimp_dialog_factory_get_singleton ();
 
   gimp_dialog_factory_dialog_raise (dialog_factory,
                                     gtk_widget_get_screen (widget),
diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c
index 22caa80..c99c8af 100644
--- a/app/widgets/gimpdialogfactory.c
+++ b/app/widgets/gimpdialogfactory.c
@@ -96,6 +96,14 @@ G_DEFINE_TYPE (GimpDialogFactory, gimp_dialog_factory, GIMP_TYPE_OBJECT)
 static guint factory_signals[LAST_SIGNAL] = { 0 };
 
 
+/* Is set by dialogs.c to a dialog factory initialized there.
+ *
+ * FIXME: The layer above should not do this kind of initialization of
+ * layers below.
+ */
+static GimpDialogFactory *gimp_toplevel_factory = NULL;
+
+
 static void
 gimp_dialog_factory_class_init (GimpDialogFactoryClass *klass)
 {
@@ -1429,3 +1437,32 @@ gimp_dialog_factory_unset_busy (GimpDialogFactory *factory)
         }
     }
 }
+
+/**
+ * gimp_dialog_factory_get_singleton:
+ *
+ * Returns: The toplevel GimpDialogFactory instance.
+ **/
+GimpDialogFactory *
+gimp_dialog_factory_get_singleton (void)
+{
+  g_return_val_if_fail (gimp_toplevel_factory != NULL, NULL);
+
+  return gimp_toplevel_factory;
+}
+
+/**
+ * gimp_dialog_factory_set_singleton:
+ * @:
+ *
+ * Set the toplevel GimpDialogFactory instance. Must only be called by
+ * dialogs_init()!.
+ **/
+void
+gimp_dialog_factory_set_singleton (GimpDialogFactory *factory)
+{
+  g_return_if_fail (gimp_toplevel_factory == NULL ||
+                    factory               == NULL);
+
+  gimp_toplevel_factory = factory;
+}
diff --git a/app/widgets/gimpdialogfactory.h b/app/widgets/gimpdialogfactory.h
index 4fd33d2..56cca12 100644
--- a/app/widgets/gimpdialogfactory.h
+++ b/app/widgets/gimpdialogfactory.h
@@ -171,5 +171,8 @@ void                gimp_dialog_factory_set_has_min_size     (GtkWindow
                                                               gboolean                 has_min_size);
 gboolean            gimp_dialog_factory_get_has_min_size     (GtkWindow               *window);
 
+GimpDialogFactory * gimp_dialog_factory_get_singleton        (void);
+void                gimp_dialog_factory_set_singleton        (GimpDialogFactory       *factory);
+
 
 #endif  /*  __GIMP_DIALOG_FACTORY_H__  */
diff --git a/app/widgets/gimpdockable.c b/app/widgets/gimpdockable.c
index 362ba66..a94da9f 100644
--- a/app/widgets/gimpdockable.c
+++ b/app/widgets/gimpdockable.c
@@ -32,8 +32,6 @@
 
 #include "menus/menus.h"
 
-#include "dialogs/dialogs.h"
-
 #include "core/gimpcontext.h"
 
 #include "gimpdialogfactory.h"
@@ -1205,7 +1203,7 @@ gimp_dockable_detach (GimpDockable *dockable)
   src_dock = gimp_dockbook_get_dock (dockable->p->dockbook);
   src_dock_window = gimp_dock_window_from_dock (src_dock);
 
-  dock = gimp_dock_with_window_new (global_dialog_factory,
+  dock = gimp_dock_with_window_new (gimp_dialog_factory_get_singleton (),
                                     gtk_widget_get_screen (GTK_WIDGET (dockable)),
                                     FALSE /*toolbox*/);
   dock_window = gimp_dock_window_from_dock (GIMP_DOCK (dock));
diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c
index d7d1dde..e4e9328 100644
--- a/app/widgets/gimpdockcolumns.c
+++ b/app/widgets/gimpdockcolumns.c
@@ -30,8 +30,6 @@
 #include "core/gimpcontext.h"
 #include "core/gimpmarshal.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpdialogfactory.h"
 #include "gimpdock.h"
 #include "gimpdockable.h"
diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c
index 1e99244..8980b69 100644
--- a/app/widgets/gimpdockwindow.c
+++ b/app/widgets/gimpdockwindow.c
@@ -637,7 +637,7 @@ gimp_dock_window_delete_event (GtkWidget   *widget,
   entry_name = (gimp_dock_window_has_toolbox (dock_window) ?
                 "gimp-toolbox-window" :
                 "gimp-dock-window");
-  entry = gimp_dialog_factory_find_entry (global_dialog_factory, entry_name);
+  entry = gimp_dialog_factory_find_entry (gimp_dialog_factory_get_singleton (), entry_name);
   gimp_session_info_set_factory_entry (info, entry);
 
   gimp_container_add (global_recent_docks, GIMP_OBJECT (info));
diff --git a/app/widgets/gimppanedbox.c b/app/widgets/gimppanedbox.c
index 18f5b94..e7b6606 100644
--- a/app/widgets/gimppanedbox.c
+++ b/app/widgets/gimppanedbox.c
@@ -29,8 +29,6 @@
 #include "core/gimpcontext.h"
 #include "core/gimpmarshal.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpdialogfactory.h"
 #include "gimpdnd.h"
 #include "gimpdockable.h"
diff --git a/app/widgets/gimpsessioninfo.c b/app/widgets/gimpsessioninfo.c
index f00ac42..2e83a31 100644
--- a/app/widgets/gimpsessioninfo.c
+++ b/app/widgets/gimpsessioninfo.c
@@ -28,8 +28,6 @@
 
 #include "widgets-types.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpdialogfactory.h"
 #include "gimpdock.h"
 #include "gimpdockwindow.h"
@@ -264,7 +262,7 @@ gimp_session_info_deserialize (GimpConfig *config,
                 if (! gimp_scanner_parse_string (scanner, &identifier))
                   goto error;
 
-                entry = gimp_dialog_factory_find_entry (global_dialog_factory,
+                entry = gimp_dialog_factory_find_entry (gimp_dialog_factory_get_singleton (),
                                                         identifier);
                 if (! entry)
                   goto error;
diff --git a/app/widgets/gimptoolbox-color-area.c b/app/widgets/gimptoolbox-color-area.c
index e142ae6..b1eeb88 100644
--- a/app/widgets/gimptoolbox-color-area.c
+++ b/app/widgets/gimptoolbox-color-area.c
@@ -26,8 +26,6 @@
 #include "core/gimp.h"
 #include "core/gimpcontext.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpcolordialog.h"
 #include "gimpdialogfactory.h"
 #include "gimpfgbgeditor.h"
@@ -154,7 +152,7 @@ color_area_color_clicked (GimpFgBgEditor  *editor,
       color_dialog = gimp_color_dialog_new (NULL, context,
                                             NULL, NULL, NULL,
                                             GTK_WIDGET (editor),
-                                            global_dialog_factory,
+                                            gimp_dialog_factory_get_singleton (),
                                             "gimp-toolbox-color-dialog",
                                             &color,
                                             TRUE, FALSE);
diff --git a/app/widgets/gimptooldialog.c b/app/widgets/gimptooldialog.c
index 82db78a..8e8c5e8 100644
--- a/app/widgets/gimptooldialog.c
+++ b/app/widgets/gimptooldialog.c
@@ -29,8 +29,6 @@
 #include "core/gimpobject.h"
 #include "core/gimptoolinfo.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpdialogfactory.h"
 #include "gimptooldialog.h"
 
@@ -96,7 +94,7 @@ gimp_tool_dialog_new (GimpToolInfo *tool_info,
 
   identifier = g_strconcat (gimp_object_get_name (tool_info), "-dialog", NULL);
 
-  gimp_dialog_factory_add_foreign (global_dialog_factory,
+  gimp_dialog_factory_add_foreign (gimp_dialog_factory_get_singleton (),
                                    identifier,
                                    dialog);
 
diff --git a/app/widgets/gimpviewablebox.c b/app/widgets/gimpviewablebox.c
index d7e4ef2..21172fd 100644
--- a/app/widgets/gimpviewablebox.c
+++ b/app/widgets/gimpviewablebox.c
@@ -30,8 +30,6 @@
 #include "core/gimpcontext.h"
 #include "core/gimpdatafactory.h"
 
-#include "dialogs/dialogs.h"
-
 #include "gimpcontainerentry.h"
 #include "gimpdialogfactory.h"
 #include "gimppropwidgets.h"
@@ -199,7 +197,7 @@ gradient_box_new (GimpContainer *container,
   button = gimp_viewable_button_new (container, context,
                                      view_type,
                                      GIMP_VIEW_SIZE_LARGE, view_size, 1,
-                                     global_dialog_factory,
+                                     gimp_dialog_factory_get_singleton (),
                                      "gimp-gradient-list|gimp-gradient-grid",
                                      GIMP_STOCK_GRADIENT,
                                      _("Open the gradient selection dialog"));
@@ -425,7 +423,7 @@ gimp_viewable_box_new (GimpContainer *container,
 
   button = gimp_viewable_button_new (container, context,
                                      view_type, button_view_size, view_size, 1,
-                                     global_dialog_factory,
+                                     gimp_dialog_factory_get_singleton (),
                                      dialog_identifier,
                                      dialog_stock_id,
                                      dialog_tooltip);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]