From 0f19471e22820e336f9f2966caa1d6a2bdd62aa7 Mon Sep 17 00:00:00 2001 From: Martin Nordholts Date: Wed, 11 May 2011 18:06:59 +0200 Subject: [PATCH] app: Make GimpDockContainer::get_docks() return a new list Make GimpDockContainer::get_docks() return a new list and not just a pointer to a list so that GimpImageWindow can implement it (who needs to merge its two GimpDockColumns lists). --- app/gui/gimpuiconfigurer.c | 21 +++++++++++++++------ app/tests/test-ui.c | 11 +++++++++-- app/widgets/gimpdockcontainer.c | 7 +++++++ app/widgets/gimpdockwindow.c | 18 +++++++++--------- app/widgets/gimpsessioninfo.c | 7 ++++++- 5 files changed, 46 insertions(+), 18 deletions(-) diff --git a/app/gui/gimpuiconfigurer.c b/app/gui/gimpuiconfigurer.c index 2aad4d15fb..0f2c938a71 100644 --- a/app/gui/gimpuiconfigurer.c +++ b/app/gui/gimpuiconfigurer.c @@ -176,7 +176,7 @@ gimp_ui_configurer_move_docks_to_columns (GimpUIConfigurer *ui_configurer, dock_window = GIMP_DOCK_WINDOW (dialog_iter->data); dock_container = GIMP_DOCK_CONTAINER (dock_window); - docks = g_list_copy (gimp_dock_container_get_docks (dock_container)); + docks = gimp_dock_container_get_docks (dock_container); for (dock_iter = docks; dock_iter; dock_iter = dock_iter->next) { GimpDock *dock = GIMP_DOCK (dock_iter->data); @@ -202,12 +202,21 @@ gimp_ui_configurer_move_docks_to_columns (GimpUIConfigurer *ui_configurer, * complains about invalid reads when the dock window already is * destroyed */ - if (GTK_IS_WIDGET (dock_window) && - g_list_length (gimp_dock_container_get_docks (dock_container)) == 0) + if (GTK_IS_WIDGET (dock_window)) { - gimp_dialog_factory_remove_dialog (gimp_dialog_factory_get_singleton (), - GTK_WIDGET (dock_window)); - gtk_widget_destroy (GTK_WIDGET (dock_window)); + guint docks_len; + + docks = gimp_dock_container_get_docks (dock_container); + docks_len = g_list_length (docks); + + if (docks_len == 0) + { + gimp_dialog_factory_remove_dialog (gimp_dialog_factory_get_singleton (), + GTK_WIDGET (dock_window)); + gtk_widget_destroy (GTK_WIDGET (dock_window)); + } + + g_list_free (docks); } } } diff --git a/app/tests/test-ui.c b/app/tests/test-ui.c index 60ee3a5901..8a1a472c8e 100644 --- a/app/tests/test-ui.c +++ b/app/tests/test-ui.c @@ -735,17 +735,24 @@ gimp_ui_not_toolbox_window (GObject *object) static gboolean gimp_ui_multicolumn_not_toolbox_window (GObject *object) { + gboolean not_toolbox_window; GimpDockWindow *dock_window; GimpDockContainer *dock_container; + GList *docks; if (! GIMP_IS_DOCK_WINDOW (object)) return FALSE; dock_window = GIMP_DOCK_WINDOW (object); dock_container = GIMP_DOCK_CONTAINER (object); + docks = gimp_dock_container_get_docks (dock_container); - return (! gimp_dock_window_has_toolbox (dock_window) && - g_list_length (gimp_dock_container_get_docks (dock_container)) > 1); + not_toolbox_window = (! gimp_dock_window_has_toolbox (dock_window) && + g_list_length (docks) > 1); + + g_list_free (docks); + + return not_toolbox_window; } static gboolean diff --git a/app/widgets/gimpdockcontainer.c b/app/widgets/gimpdockcontainer.c index 54b9a271a7..95404954ca 100644 --- a/app/widgets/gimpdockcontainer.c +++ b/app/widgets/gimpdockcontainer.c @@ -68,6 +68,13 @@ gimp_dock_container_iface_base_init (GimpDockContainerInterface *container_iface container_iface->get_docks = NULL; } +/** + * gimp_dock_container_get_docks: + * @container: A #GimpDockContainer + * + * Returns: A list of #GimpDock:s in the dock container. Free with + * g_list_free() when done. + **/ GList * gimp_dock_container_get_docks (GimpDockContainer *container) { diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c index 0c3efcbef0..dca6bd3479 100644 --- a/app/widgets/gimpdockwindow.c +++ b/app/widgets/gimpdockwindow.c @@ -681,13 +681,6 @@ gimp_dock_window_delete_event (GtkWidget *widget, return FALSE; } -/** - * gimp_dock_window_get_docks: - * - * Get a list of docks in the dock window. - * - * Returns: - **/ static GList * gimp_dock_window_get_docks (GimpDockContainer *dock_container) { @@ -697,7 +690,7 @@ gimp_dock_window_get_docks (GimpDockContainer *dock_container) dock_window = GIMP_DOCK_WINDOW (dock_container); - return gimp_dock_columns_get_docks (dock_window->p->dock_columns); + return g_list_copy (gimp_dock_columns_get_docks (dock_window->p->dock_columns)); } static GimpUIManager * @@ -765,6 +758,8 @@ gimp_dock_window_should_add_to_recent (GimpDockWindow *dock_window) } } + g_list_free (docks); + return should_add; } @@ -823,9 +818,12 @@ gimp_dock_window_get_description (GimpDockWindow *dock_window, gboolean complete) { GString *complete_desc = g_string_new (NULL); + GList *docks = NULL; GList *iter = NULL; - for (iter = gimp_dock_container_get_docks (GIMP_DOCK_CONTAINER (dock_window)); + docks = gimp_dock_container_get_docks (GIMP_DOCK_CONTAINER (dock_window)); + + for (iter = docks; iter; iter = g_list_next (iter)) { @@ -837,6 +835,8 @@ gimp_dock_window_get_description (GimpDockWindow *dock_window, g_string_append (complete_desc, GIMP_DOCK_COLUMN_SEPARATOR); } + g_list_free (docks); + return g_string_free (complete_desc, FALSE /*free_segment*/); } diff --git a/app/widgets/gimpsessioninfo.c b/app/widgets/gimpsessioninfo.c index 8f718ba484..5101eec1ae 100644 --- a/app/widgets/gimpsessioninfo.c +++ b/app/widgets/gimpsessioninfo.c @@ -750,8 +750,11 @@ gimp_session_info_get_info (GimpSessionInfo *info) { GimpDockContainer *dock_container = GIMP_DOCK_CONTAINER (info->p->widget); GList *iter = NULL; + GList *docks; - for (iter = gimp_dock_container_get_docks (dock_container); + docks = gimp_dock_container_get_docks (dock_container); + + for (iter = docks; iter; iter = g_list_next (iter)) { @@ -761,6 +764,8 @@ gimp_session_info_get_info (GimpSessionInfo *info) g_list_append (info->p->docks, gimp_session_info_dock_from_widget (dock)); } + + g_list_free (docks); } }