From e87ed66ba7365efb385a4a4f51ba0a22aca1ec7a Mon Sep 17 00:00:00 2001 From: Martin Nordholts Date: Tue, 15 Sep 2009 07:58:14 +0200 Subject: [PATCH] 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 36299a6326..de9f872d29 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 643b38a909..b4ae215928 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 2e3df1c73c..dc823c4ca7 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 dc34665a12..9973a5542a 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 8a4a064942..228a8a5264 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 0892df9007..7e36d5364d 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)