[gimp] app: Don't cast GimpDock to GimpDockWindow



commit e87ed66ba7365efb385a4a4f51ba0a22aca1ec7a
Author: Martin Nordholts <martinn src gnome org>
Date:   Tue Sep 15 07:58:14 2009 +0200

    app: Don't cast GimpDock to GimpDockWindow
    
    In preparation for making GimpDock inherit from a non-window, stop
    casting GimpDocks to GimpDockWindows. Instead look up the toplevel
    widget for a dock and get the dock window that way.

 app/actions/windows-actions.c |    5 +++--
 app/menus/windows-menu.c      |    4 +++-
 app/widgets/gimpdockbook.c    |   14 ++++++++------
 app/widgets/gimpdockwindow.c  |   24 ++++++++++++++++++++++++
 app/widgets/gimpdockwindow.h  |    1 +
 app/widgets/gimptoolbox.c     |   17 ++++++++++-------
 6 files changed, 49 insertions(+), 16 deletions(-)
---
diff --git a/app/actions/windows-actions.c b/app/actions/windows-actions.c
index 36299a6..de9f872 100644
--- a/app/actions/windows-actions.c
+++ b/app/actions/windows-actions.c
@@ -34,6 +34,7 @@
 #include "widgets/gimpactiongroup.h"
 #include "widgets/gimpdialogfactory.h"
 #include "widgets/gimpdock.h"
+#include "widgets/gimpdockwindow.h"
 #include "widgets/gimphelp-ids.h"
 
 #include "display/gimpdisplay.h"
@@ -161,10 +162,10 @@ windows_actions_update (GimpActionGroup *group,
 gchar *
 windows_actions_dock_to_action_name (GimpDock *dock)
 {
-  g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
+  GimpDockWindow *dock_window = gimp_dock_window_from_dock (dock);
 
   return g_strdup_printf ("windows-dock-%04d",
-                          gimp_dock_window_get_id (GIMP_DOCK_WINDOW (dock)));
+                          gimp_dock_window_get_id (dock_window));
 }
 
 
diff --git a/app/menus/windows-menu.c b/app/menus/windows-menu.c
index 643b38a..b4ae215 100644
--- a/app/menus/windows-menu.c
+++ b/app/menus/windows-menu.c
@@ -295,8 +295,10 @@ windows_menu_dock_removed (GimpDialogFactory *factory,
 static gchar *
 windows_menu_dock_to_merge_id (GimpDock *dock)
 {
+  GimpDockWindow *dock_window = gimp_dock_window_from_dock (dock);
+
   return g_strdup_printf ("windows-dock-%04d-merge-id",
-                          gimp_dock_window_get_id (GIMP_DOCK_WINDOW (dock)));
+                          gimp_dock_window_get_id (dock_window));
 }
 
 static void
diff --git a/app/widgets/gimpdockbook.c b/app/widgets/gimpdockbook.c
index 2e3df1c..dc823c4 100644
--- a/app/widgets/gimpdockbook.c
+++ b/app/widgets/gimpdockbook.c
@@ -36,6 +36,7 @@
 #include "gimpdockable.h"
 #include "gimpdockbook.h"
 #include "gimpdocked.h"
+#include "gimpdockwindow.h"
 #include "gimphelp-ids.h"
 #include "gimpmenufactory.h"
 #include "gimpstringaction.h"
@@ -463,9 +464,10 @@ GtkWidget *
 gimp_dockbook_create_tab_widget (GimpDockbook *dockbook,
                                  GimpDockable *dockable)
 {
-  GtkWidget   *tab_widget;
-  GtkIconSize  tab_size = DEFAULT_TAB_ICON_SIZE;
-  GtkAction   *action   = NULL;
+  GtkWidget      *tab_widget;
+  GimpDockWindow *dock_window;
+  GtkIconSize     tab_size = DEFAULT_TAB_ICON_SIZE;
+  GtkAction      *action   = NULL;
 
   gtk_widget_style_get (GTK_WIDGET (dockbook),
                         "tab-icon-size", &tab_size,
@@ -490,8 +492,8 @@ gimp_dockbook_create_tab_widget (GimpDockbook *dockbook,
     }
 
   /* EEK */
-  if (GIMP_IS_DOCK_WINDOW (dockbook->p->dock) &&
-      gimp_dock_window_get_ui_manager (GIMP_DOCK_WINDOW (dockbook->p->dock)))
+  dock_window = gimp_dock_window_from_dock (dockbook->p->dock);
+  if (dock_window && gimp_dock_window_get_ui_manager (dock_window))
     {
       const gchar *dialog_id;
 
@@ -503,7 +505,7 @@ gimp_dockbook_create_tab_widget (GimpDockbook *dockbook,
           GimpActionGroup *group;
 
           group = gimp_ui_manager_get_action_group
-            (gimp_dock_window_get_ui_manager (GIMP_DOCK_WINDOW (dockbook->p->dock)), "dialogs");
+            (gimp_dock_window_get_ui_manager (dock_window), "dialogs");
 
           if (group)
             {
diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c
index dc34665..9973a55 100644
--- a/app/widgets/gimpdockwindow.c
+++ b/app/widgets/gimpdockwindow.c
@@ -527,3 +527,27 @@ gimp_dock_window_get_ui_manager (GimpDockWindow *dock_window)
 
   return dock_window->p->ui_manager;
 }
+
+/**
+ * gimp_dock_window_from_dock:
+ * @dock:
+ *
+ * For convenience.
+ *
+ * Returns: If the toplevel widget for the dock is a GimpDockWindow,
+ * return that. Otherwise return %NULL.
+ **/
+GimpDockWindow *
+gimp_dock_window_from_dock (GimpDock *dock)
+{
+  GtkWidget *toplevel = NULL;
+  
+  g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
+
+  toplevel = gtk_widget_get_toplevel (GTK_WIDGET (dock));
+
+  if (GIMP_IS_DOCK_WINDOW (toplevel))
+    return GIMP_DOCK_WINDOW (toplevel);
+  else
+    return NULL;
+}
diff --git a/app/widgets/gimpdockwindow.h b/app/widgets/gimpdockwindow.h
index 8a4a064..228a8a5 100644
--- a/app/widgets/gimpdockwindow.h
+++ b/app/widgets/gimpdockwindow.h
@@ -56,6 +56,7 @@ struct _GimpDockWindowClass
 GType               gimp_dock_window_get_type       (void) G_GNUC_CONST;
 gint                gimp_dock_window_get_id         (GimpDockWindow *dock_window);
 GimpUIManager *     gimp_dock_window_get_ui_manager (GimpDockWindow *dock_window);
+GimpDockWindow    * gimp_dock_window_from_dock      (GimpDock       *dock);
 
 
 #endif /* __GIMP_DOCK_WINDOW_H__ */
diff --git a/app/widgets/gimptoolbox.c b/app/widgets/gimptoolbox.c
index 0892df9..7e36d53 100644
--- a/app/widgets/gimptoolbox.c
+++ b/app/widgets/gimptoolbox.c
@@ -39,6 +39,7 @@
 #include "gimpdevices.h"
 #include "gimpdialogfactory.h"
 #include "gimpdockseparator.h"
+#include "gimpdockwindow.h"
 #include "gimphelp-ids.h"
 #include "gimptoolbox.h"
 #include "gimptoolbox-color-area.h"
@@ -690,10 +691,11 @@ toolbox_create_tools (GimpToolbox *toolbox,
        list;
        list = g_list_next (list))
     {
-      GimpToolInfo *tool_info = list->data;
-      GtkWidget    *button;
-      GtkWidget    *image;
-      const gchar  *stock_id;
+      GimpToolInfo   *tool_info = list->data;
+      GtkWidget      *button;
+      GtkWidget      *image;
+      GimpDockWindow *dock_window;
+      const gchar    *stock_id;
 
       button = gtk_radio_button_new (group);
       group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
@@ -728,7 +730,8 @@ toolbox_create_tools (GimpToolbox *toolbox,
                         G_CALLBACK (toolbox_tool_button_press),
                         toolbox);
 
-      if (gimp_dock_window_get_ui_manager (GIMP_DOCK_WINDOW (toolbox)))
+      dock_window = gimp_dock_window_from_dock (GIMP_DOCK (toolbox));
+      if (gimp_dock_window_get_ui_manager (dock_window))
         {
           GimpUIManager *ui_manager;
           GtkAction     *action;
@@ -743,8 +746,8 @@ toolbox_create_tools (GimpToolbox *toolbox,
           name = g_strdup_printf ("tools-%s", tmp);
           g_free (tmp);
 
-          ui_manager = gimp_dock_window_get_ui_manager (GIMP_DOCK_WINDOW (toolbox));
-          action = gimp_ui_manager_find_action (ui_manager, "tools", name);
+          ui_manager  = gimp_dock_window_get_ui_manager (dock_window);
+          action      = gimp_ui_manager_find_action (ui_manager, "tools", name);
           g_free (name);
 
           if (action)



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