[gimp] app: Update docks with new context when switching to window modes



commit 3015b0d0d020831af2a91cfcadc9b11a616eec2c
Author: Martin Nordholts <martinn src gnome org>
Date:   Wed Jan 6 13:33:47 2010 +0100

    app: Update docks with new context when switching to window modes
    
    When moving dockables from a dock window to an image window, they need
    to start listening to the user context. So update the dockables with
    the new context when we switch window mode.

 app/widgets/gimpdock.c        |   23 +++++++++++++++++++++++
 app/widgets/gimpdock.h        |    2 ++
 app/widgets/gimpdockbook.c    |   26 ++++++++++++++++++++++++++
 app/widgets/gimpdockbook.h    |    2 ++
 app/widgets/gimpdockcolumns.c |    4 ++++
 5 files changed, 57 insertions(+), 0 deletions(-)
---
diff --git a/app/widgets/gimpdock.c b/app/widgets/gimpdock.c
index eed6a07..b297fa4 100644
--- a/app/widgets/gimpdock.c
+++ b/app/widgets/gimpdock.c
@@ -374,6 +374,29 @@ gimp_dock_invalidate_geometry (GimpDock *dock)
 }
 
 /**
+ * gimp_dock_update_with_context:
+ * @dock:
+ * @context:
+ *
+ * Set the @context on all dockables in the @dock.
+ **/
+void
+gimp_dock_update_with_context (GimpDock    *dock,
+                               GimpContext *context)
+{
+  GList *iter = NULL;
+
+  for (iter = gimp_dock_get_dockbooks (dock);
+       iter;
+       iter = g_list_next (iter))
+    {
+      GimpDockbook *dockbook = GIMP_DOCKBOOK (iter->data);
+
+      gimp_dockbook_update_with_context (dockbook, context);
+    }
+}
+
+/**
  * gimp_dock_get_context:
  * @dock:
  *
diff --git a/app/widgets/gimpdock.h b/app/widgets/gimpdock.h
index 6077f4e..1aa5795 100644
--- a/app/widgets/gimpdock.h
+++ b/app/widgets/gimpdock.h
@@ -71,6 +71,8 @@ void                gimp_dock_invalidate_title        (GimpDock       *dock);
 void                gimp_dock_set_host_geometry_hints (GimpDock       *dock,
                                                        GtkWindow      *window);
 void                gimp_dock_invalidate_geometry     (GimpDock       *dock);
+void                gimp_dock_update_with_context     (GimpDock       *dock,
+                                                       GimpContext    *context);
 GimpContext       * gimp_dock_get_context             (GimpDock       *dock);
 GimpDialogFactory * gimp_dock_get_dialog_factory      (GimpDock       *dock);
 GimpUIManager     * gimp_dock_get_ui_manager          (GimpDock       *dock);
diff --git a/app/widgets/gimpdockbook.c b/app/widgets/gimpdockbook.c
index 3f7d1d3..55bc9df 100644
--- a/app/widgets/gimpdockbook.c
+++ b/app/widgets/gimpdockbook.c
@@ -545,6 +545,32 @@ gimp_dockbook_remove (GimpDockbook *dockbook,
   g_list_free (children);
 }
 
+/**
+ * gimp_dockbook_update_with_context:
+ * @dockbook:
+ * @context:
+ *
+ * Set @context on all dockables in @dockbook.
+ **/
+void
+gimp_dockbook_update_with_context (GimpDockbook *dockbook,
+                                   GimpContext  *context)
+{
+  GList *children = gtk_container_get_children (GTK_CONTAINER (dockbook));
+  GList *iter     = NULL;
+
+  for (iter = children;
+       iter;
+       iter = g_list_next (iter))
+    {
+      GimpDockable *dockable = GIMP_DOCKABLE (iter->data);
+
+      gimp_dockable_set_context (dockable, context);
+    }
+
+  g_list_free (children);
+}
+
 GtkWidget *
 gimp_dockbook_create_tab_widget (GimpDockbook *dockbook,
                                  GimpDockable *dockable)
diff --git a/app/widgets/gimpdockbook.h b/app/widgets/gimpdockbook.h
index fd3ba73..f43b680 100644
--- a/app/widgets/gimpdockbook.h
+++ b/app/widgets/gimpdockbook.h
@@ -70,6 +70,8 @@ void            gimp_dockbook_add                       (GimpDockbook    *dockbo
                                                          gint             position);
 void            gimp_dockbook_remove                    (GimpDockbook    *dockbook,
                                                          GimpDockable    *dockable);
+void            gimp_dockbook_update_with_context       (GimpDockbook    *dockbook,
+                                                         GimpContext     *context);
 GtkWidget    *  gimp_dockbook_create_tab_widget         (GimpDockbook    *dockbook,
                                                          GimpDockable    *dockable);
 gboolean        gimp_dockbook_drop_dockable             (GimpDockbook    *dockbook,
diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c
index 18d78cd..ef316c6 100644
--- a/app/widgets/gimpdockcolumns.c
+++ b/app/widgets/gimpdockcolumns.c
@@ -202,6 +202,8 @@ gimp_dock_columns_add_dock (GimpDockColumns *dock_columns,
 
   dock_columns->p->docks = g_list_append (dock_columns->p->docks, dock);
 
+  gimp_dock_update_with_context (dock, dock_columns->p->context);
+
   gimp_paned_box_add_widget (GIMP_PANED_BOX (dock_columns->p->paned_hbox),
                              GTK_WIDGET (dock),
                              index);
@@ -226,6 +228,8 @@ gimp_dock_columns_remove_dock (GimpDockColumns *dock_columns,
 
   dock_columns->p->docks = g_list_remove (dock_columns->p->docks, dock);
 
+  gimp_dock_update_with_context (dock, NULL);
+
   g_signal_handlers_disconnect_by_func (dock,
                                         gimp_dock_columns_dock_book_removed,
                                         dock_columns);



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