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).
This commit is contained in:
Martin Nordholts 2011-05-11 18:06:59 +02:00
parent 00c2d15a3a
commit 0f19471e22
5 changed files with 46 additions and 18 deletions

View File

@ -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);
}
}
}

View File

@ -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

View File

@ -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)
{

View File

@ -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*/);
}

View File

@ -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);
}
}