[gimp] app: Move out dock window logic from gimp_session_info_dock_restore()



commit 3bb15eac782f1633e86955c1dae7e143ff296194
Author: Martin Nordholts <martinn src gnome org>
Date:   Sat Dec 5 22:43:32 2009 +0100

    app: Move out dock window logic from gimp_session_info_dock_restore()
    
    Move out dock window logic, most notably aux info, from
    gimp_session_info_dock_restore() and put it in
    gimp_session_info_restore() where it belongs.

 app/widgets/gimpsessioninfo-dock.c |   39 ++++++++++++++++++++---------------
 app/widgets/gimpsessioninfo-dock.h |    5 ++-
 app/widgets/gimpsessioninfo.c      |   16 ++++++++++++-
 3 files changed, 39 insertions(+), 21 deletions(-)
---
diff --git a/app/widgets/gimpsessioninfo-dock.c b/app/widgets/gimpsessioninfo-dock.c
index bce46ca..10a1a9e 100644
--- a/app/widgets/gimpsessioninfo-dock.c
+++ b/app/widgets/gimpsessioninfo-dock.c
@@ -172,33 +172,39 @@ gimp_session_info_dock_paned_map (GtkWidget *paned,
 }
 
 void
-gimp_session_info_dock_restore (GimpSessionInfo   *info,
+gimp_session_info_dock_restore (GList             *books,
                                 GimpDialogFactory *factory,
-                                GdkScreen         *screen)
+                                GdkScreen         *screen,
+                                GimpDockWindow    *dock_window)
 {
-  GimpDock       *dock        = NULL;
-  GimpDockWindow *dock_window = NULL;
-  GList          *books       = NULL;
+  GtkWidget     *dock       = NULL;
+  GList         *iter       = NULL;
+  GimpUIManager *ui_manager = NULL;
 
-  g_return_if_fail (info != NULL);
   g_return_if_fail (GIMP_IS_DIALOG_FACTORY (factory));
   g_return_if_fail (GDK_IS_SCREEN (screen));
 
-  dock        = GIMP_DOCK (gimp_dialog_factory_dock_with_window_new (factory, screen));
-  dock_window = gimp_dock_window_from_dock (GIMP_DOCK (dock));
+  ui_manager = gimp_dock_window_get_ui_manager (GIMP_DOCK_WINDOW (dock_window));
+  dock       = gimp_dialog_factory_dock_new (factory, screen, ui_manager);
 
-  if (dock && info->p->aux_info)
-    gimp_session_info_aux_set_list (GTK_WIDGET (dock_window), info->p->aux_info);
+  g_return_if_fail (GIMP_IS_DOCK (dock));
 
-  for (books = info->p->books; books; books = g_list_next (books))
+  /* Add the dock to the dock window immediately so the stuff in the
+   * dock has access to e.g. a dialog factory
+   */
+  gimp_dock_window_add_dock (GIMP_DOCK_WINDOW (dock_window),
+                             GIMP_DOCK (dock),
+                             -1);
+
+  for (iter = books; iter; iter = g_list_next (iter))
     {
-      GimpSessionInfoBook *book_info = books->data;
+      GimpSessionInfoBook *book_info = iter->data;
       GtkWidget           *dockbook;
       GtkWidget           *parent;
 
-      dockbook = GTK_WIDGET (gimp_session_info_book_restore (book_info, dock));
-
-      parent = gtk_widget_get_parent (dockbook);
+      dockbook = GTK_WIDGET (gimp_session_info_book_restore (book_info,
+                                                             GIMP_DOCK (dock)));
+      parent   = gtk_widget_get_parent (dockbook);
 
       if (GTK_IS_VPANED (parent))
         {
@@ -211,6 +217,5 @@ gimp_session_info_dock_restore (GimpSessionInfo   *info,
         }
     }
 
-  gtk_widget_show (GTK_WIDGET (dock_window));
-  gtk_widget_show (GTK_WIDGET (dock));
+  gtk_widget_show (dock);
 }
diff --git a/app/widgets/gimpsessioninfo-dock.h b/app/widgets/gimpsessioninfo-dock.h
index d5f383d..6933fa8 100644
--- a/app/widgets/gimpsessioninfo-dock.h
+++ b/app/widgets/gimpsessioninfo-dock.h
@@ -30,9 +30,10 @@ GTokenType   gimp_session_info_dock_deserialize (GScanner          *scanner,
 
 GList      * gimp_session_info_dock_from_widget (GimpDock          *dock);
 
-void         gimp_session_info_dock_restore     (GimpSessionInfo   *info,
+void         gimp_session_info_dock_restore     (GList             *books,
                                                  GimpDialogFactory *factory,
-                                                 GdkScreen         *screen);
+                                                 GdkScreen         *screen,
+                                                 GimpDockWindow    *dock_window);
 
 
 #endif  /* __GIMP_SESSION_INFO_DOCK_H__ */
diff --git a/app/widgets/gimpsessioninfo.c b/app/widgets/gimpsessioninfo.c
index de9ed6a..f877a95 100644
--- a/app/widgets/gimpsessioninfo.c
+++ b/app/widgets/gimpsessioninfo.c
@@ -385,10 +385,22 @@ gimp_session_info_restore (GimpSessionInfo   *info,
     }
   else
     {
-      GIMP_LOG (DIALOG_FACTORY, "restoring dock  (info %p)",
+      GtkWidget *dock_window = NULL;
+
+      GIMP_LOG (DIALOG_FACTORY, "restoring dock window (info %p)",
                 info);
 
-      gimp_session_info_dock_restore (info, factory, screen);
+      dock_window = gimp_dialog_factory_dock_window_new (factory, screen);
+
+      if (dock_window && info->p->aux_info)
+        gimp_session_info_aux_set_list (GTK_WIDGET (dock_window), info->p->aux_info);
+
+      gimp_session_info_dock_restore (info->p->books,
+                                      factory,
+                                      screen,
+                                      GIMP_DOCK_WINDOW (dock_window));
+
+      gtk_widget_show (GTK_WIDGET (dock_window));
     }
 }
 



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