app: Make GimpDockWindow implement GimpDockContainer

Make GimpDockWindow implement the GimpDockContainer interface. The
plan is to make GimpImageWindow also implement the GimpDockContainer
interface when we start to session manage docks in single-window mode.
This commit is contained in:
Martin Nordholts 2011-05-09 18:03:18 +02:00
parent 2287b6e008
commit 4b9243fc60
5 changed files with 59 additions and 32 deletions

View File

@ -30,6 +30,7 @@
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
#include "widgets/gimpdockcolumns.h"
#include "widgets/gimpdockcontainer.h"
#include "widgets/gimpdockwindow.h"
#include "widgets/gimptoolbox.h"
@ -164,16 +165,18 @@ gimp_ui_configurer_move_docks_to_columns (GimpUIConfigurer *ui_configurer,
for (dialog_iter = dialogs; dialog_iter; dialog_iter = dialog_iter->next)
{
GimpDockWindow *dock_window = NULL;
GList *docks = NULL;
GList *dock_iter = NULL;
GimpDockWindow *dock_window = NULL;
GimpDockContainer *dock_container = NULL;
GList *docks = NULL;
GList *dock_iter = NULL;
if (!GIMP_IS_DOCK_WINDOW (dialog_iter->data))
continue;
dock_window = GIMP_DOCK_WINDOW (dialog_iter->data);
dock_window = GIMP_DOCK_WINDOW (dialog_iter->data);
dock_container = GIMP_DOCK_CONTAINER (dock_window);
docks = g_list_copy (gimp_dock_window_get_docks (dock_window));
docks = g_list_copy (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);
@ -200,7 +203,7 @@ gimp_ui_configurer_move_docks_to_columns (GimpUIConfigurer *ui_configurer,
* destroyed
*/
if (GTK_IS_WIDGET (dock_window) &&
g_list_length (gimp_dock_window_get_docks (dock_window)) == 0)
g_list_length (gimp_dock_container_get_docks (dock_container)) == 0)
{
gimp_dialog_factory_remove_dialog (gimp_dialog_factory_get_singleton (),
GTK_WIDGET (dock_window));

View File

@ -38,6 +38,7 @@
#include "widgets/gimpdock.h"
#include "widgets/gimpdockable.h"
#include "widgets/gimpdockbook.h"
#include "widgets/gimpdockcontainer.h"
#include "widgets/gimpdocked.h"
#include "widgets/gimpdockwindow.h"
#include "widgets/gimphelp-ids.h"
@ -734,15 +735,17 @@ gimp_ui_not_toolbox_window (GObject *object)
static gboolean
gimp_ui_multicolumn_not_toolbox_window (GObject *object)
{
GimpDockWindow *dock_window = GIMP_DOCK_WINDOW (object);
GimpDockWindow *dock_window;
GimpDockContainer *dock_container;
if (! GIMP_IS_DOCK_WINDOW (object))
return FALSE;
dock_window = GIMP_DOCK_WINDOW (object);
dock_window = GIMP_DOCK_WINDOW (object);
dock_container = GIMP_DOCK_CONTAINER (object);
return (! gimp_dock_window_has_toolbox (dock_window) &&
g_list_length (gimp_dock_window_get_docks (dock_window)) > 1);
g_list_length (gimp_dock_container_get_docks (dock_container)) > 1);
}
static gboolean

View File

@ -48,6 +48,7 @@
#include "gimpdock.h"
#include "gimpdockbook.h"
#include "gimpdockcolumns.h"
#include "gimpdockcontainer.h"
#include "gimpdockwindow.h"
#include "gimphelp-ids.h"
#include "gimpmenufactory.h"
@ -108,6 +109,9 @@ struct _GimpDockWindowPrivate
};
static void gimp_dock_window_dock_container_iface_init
(GimpDockContainerInterface
*iface);
static void gimp_dock_window_constructed (GObject *object);
static void gimp_dock_window_dispose (GObject *object);
static void gimp_dock_window_finalize (GObject *object);
@ -124,6 +128,8 @@ static void gimp_dock_window_style_set (GtkWidget *widg
GtkStyle *prev_style);
static gboolean gimp_dock_window_delete_event (GtkWidget *widget,
GdkEventAny *event);
static GList * gimp_dock_window_get_docks (GimpDockContainer
*dock_container);
static gboolean gimp_dock_window_should_add_to_recent (GimpDockWindow *dock_window);
static void gimp_dock_window_display_changed (GimpDockWindow *dock_window,
@ -152,7 +158,9 @@ static void gimp_dock_window_auto_clicked (GtkWidget *widg
GimpDock *dock);
G_DEFINE_TYPE (GimpDockWindow, gimp_dock_window, GIMP_TYPE_WINDOW)
G_DEFINE_TYPE_WITH_CODE (GimpDockWindow, gimp_dock_window, GIMP_TYPE_WINDOW,
G_IMPLEMENT_INTERFACE (GIMP_TYPE_DOCK_CONTAINER,
gimp_dock_window_dock_container_iface_init))
#define parent_class gimp_dock_window_parent_class
@ -253,6 +261,12 @@ gimp_dock_window_init (GimpDockWindow *dock_window)
gtk_window_set_focus_on_map (GTK_WINDOW (dock_window), FALSE);
}
static void
gimp_dock_window_dock_container_iface_init (GimpDockContainerInterface *iface)
{
iface->get_docks = gimp_dock_window_get_docks;
}
static void
gimp_dock_window_constructed (GObject *object)
{
@ -668,6 +682,25 @@ 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)
{
GimpDockWindow *dock_window;
g_return_val_if_fail (GIMP_IS_DOCK_WINDOW (dock_container), NULL);
dock_window = GIMP_DOCK_WINDOW (dock_container);
return gimp_dock_columns_get_docks (dock_window->p->dock_columns);
}
/**
* gimp_dock_window_should_add_to_recent:
* @dock_window:
@ -680,9 +713,11 @@ gimp_dock_window_delete_event (GtkWidget *widget,
static gboolean
gimp_dock_window_should_add_to_recent (GimpDockWindow *dock_window)
{
GList *docks = gimp_dock_window_get_docks (dock_window);
GList *docks;
gboolean should_add = TRUE;
docks = gimp_dock_container_get_docks (GIMP_DOCK_CONTAINER (dock_window));
if (g_list_length (docks) < 1)
{
should_add = FALSE;
@ -763,7 +798,7 @@ gimp_dock_window_get_description (GimpDockWindow *dock_window,
GString *complete_desc = g_string_new (NULL);
GList *iter = NULL;
for (iter = gimp_dock_window_get_docks (dock_window);
for (iter = gimp_dock_container_get_docks (GIMP_DOCK_CONTAINER (dock_window));
iter;
iter = g_list_next (iter))
{
@ -1005,22 +1040,6 @@ gimp_dock_window_get_dialog_factory (GimpDockWindow *dock_window)
return dock_window->p->dialog_factory;
}
/**
* gimp_dock_window_get_docks:
* @dock_window:
*
* Get a list of docks in the dock window.
*
* Returns:
**/
GList *
gimp_dock_window_get_docks (GimpDockWindow *dock_window)
{
g_return_val_if_fail (GIMP_IS_DOCK_WINDOW (dock_window), NULL);
return gimp_dock_columns_get_docks (dock_window->p->dock_columns);
}
gboolean
gimp_dock_window_get_auto_follow_active (GimpDockWindow *dock_window)
{

View File

@ -70,7 +70,6 @@ void gimp_dock_window_remove_dock (GimpDockWindow *
GimpUIManager * gimp_dock_window_get_ui_manager (GimpDockWindow *dock_window);
GimpContext * gimp_dock_window_get_context (GimpDockWindow *dock);
GimpDialogFactory * gimp_dock_window_get_dialog_factory (GimpDockWindow *dock);
GList * gimp_dock_window_get_docks (GimpDockWindow *dock_window);
gboolean gimp_dock_window_get_auto_follow_active (GimpDockWindow *menu_dock);
void gimp_dock_window_set_auto_follow_active (GimpDockWindow *menu_dock,
gboolean show);

View File

@ -30,6 +30,8 @@
#include "config/gimpguiconfig.h"
#include "widgets/gimpdockcontainer.h"
#include "core/gimp.h"
#include "core/gimpcontext.h"
@ -740,11 +742,12 @@ gimp_session_info_get_info (GimpSessionInfo *info)
info->p->aux_info = gimp_session_info_aux_get_list (info->p->widget);
if (GIMP_IS_DOCK_WINDOW (info->p->widget))
if (GIMP_IS_DOCK_CONTAINER (info->p->widget))
{
GList *iter = NULL;
GimpDockContainer *dock_container = GIMP_DOCK_CONTAINER (info->p->widget);
GList *iter = NULL;
for (iter = gimp_dock_window_get_docks (GIMP_DOCK_WINDOW (info->p->widget));
for (iter = gimp_dock_container_get_docks (dock_container);
iter;
iter = g_list_next (iter))
{