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/gimpdialogfactory.h"
#include "widgets/gimpdock.h" #include "widgets/gimpdock.h"
#include "widgets/gimpdockcolumns.h" #include "widgets/gimpdockcolumns.h"
#include "widgets/gimpdockcontainer.h"
#include "widgets/gimpdockwindow.h" #include "widgets/gimpdockwindow.h"
#include "widgets/gimptoolbox.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) for (dialog_iter = dialogs; dialog_iter; dialog_iter = dialog_iter->next)
{ {
GimpDockWindow *dock_window = NULL; GimpDockWindow *dock_window = NULL;
GList *docks = NULL; GimpDockContainer *dock_container = NULL;
GList *dock_iter = NULL; GList *docks = NULL;
GList *dock_iter = NULL;
if (!GIMP_IS_DOCK_WINDOW (dialog_iter->data)) if (!GIMP_IS_DOCK_WINDOW (dialog_iter->data))
continue; 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) for (dock_iter = docks; dock_iter; dock_iter = dock_iter->next)
{ {
GimpDock *dock = GIMP_DOCK (dock_iter->data); GimpDock *dock = GIMP_DOCK (dock_iter->data);
@ -200,7 +203,7 @@ gimp_ui_configurer_move_docks_to_columns (GimpUIConfigurer *ui_configurer,
* destroyed * destroyed
*/ */
if (GTK_IS_WIDGET (dock_window) && 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 (), gimp_dialog_factory_remove_dialog (gimp_dialog_factory_get_singleton (),
GTK_WIDGET (dock_window)); GTK_WIDGET (dock_window));

View File

@ -38,6 +38,7 @@
#include "widgets/gimpdock.h" #include "widgets/gimpdock.h"
#include "widgets/gimpdockable.h" #include "widgets/gimpdockable.h"
#include "widgets/gimpdockbook.h" #include "widgets/gimpdockbook.h"
#include "widgets/gimpdockcontainer.h"
#include "widgets/gimpdocked.h" #include "widgets/gimpdocked.h"
#include "widgets/gimpdockwindow.h" #include "widgets/gimpdockwindow.h"
#include "widgets/gimphelp-ids.h" #include "widgets/gimphelp-ids.h"
@ -734,15 +735,17 @@ gimp_ui_not_toolbox_window (GObject *object)
static gboolean static gboolean
gimp_ui_multicolumn_not_toolbox_window (GObject *object) 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)) if (! GIMP_IS_DOCK_WINDOW (object))
return FALSE; 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) && 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 static gboolean

View File

@ -48,6 +48,7 @@
#include "gimpdock.h" #include "gimpdock.h"
#include "gimpdockbook.h" #include "gimpdockbook.h"
#include "gimpdockcolumns.h" #include "gimpdockcolumns.h"
#include "gimpdockcontainer.h"
#include "gimpdockwindow.h" #include "gimpdockwindow.h"
#include "gimphelp-ids.h" #include "gimphelp-ids.h"
#include "gimpmenufactory.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_constructed (GObject *object);
static void gimp_dock_window_dispose (GObject *object); static void gimp_dock_window_dispose (GObject *object);
static void gimp_dock_window_finalize (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); GtkStyle *prev_style);
static gboolean gimp_dock_window_delete_event (GtkWidget *widget, static gboolean gimp_dock_window_delete_event (GtkWidget *widget,
GdkEventAny *event); 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 gboolean gimp_dock_window_should_add_to_recent (GimpDockWindow *dock_window);
static void gimp_dock_window_display_changed (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); 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 #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); 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 static void
gimp_dock_window_constructed (GObject *object) gimp_dock_window_constructed (GObject *object)
{ {
@ -668,6 +682,25 @@ gimp_dock_window_delete_event (GtkWidget *widget,
return FALSE; 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: * gimp_dock_window_should_add_to_recent:
* @dock_window: * @dock_window:
@ -680,9 +713,11 @@ gimp_dock_window_delete_event (GtkWidget *widget,
static gboolean static gboolean
gimp_dock_window_should_add_to_recent (GimpDockWindow *dock_window) 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; gboolean should_add = TRUE;
docks = gimp_dock_container_get_docks (GIMP_DOCK_CONTAINER (dock_window));
if (g_list_length (docks) < 1) if (g_list_length (docks) < 1)
{ {
should_add = FALSE; should_add = FALSE;
@ -763,7 +798,7 @@ gimp_dock_window_get_description (GimpDockWindow *dock_window,
GString *complete_desc = g_string_new (NULL); GString *complete_desc = g_string_new (NULL);
GList *iter = 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;
iter = g_list_next (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; 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 gboolean
gimp_dock_window_get_auto_follow_active (GimpDockWindow *dock_window) 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); GimpUIManager * gimp_dock_window_get_ui_manager (GimpDockWindow *dock_window);
GimpContext * gimp_dock_window_get_context (GimpDockWindow *dock); GimpContext * gimp_dock_window_get_context (GimpDockWindow *dock);
GimpDialogFactory * gimp_dock_window_get_dialog_factory (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); gboolean gimp_dock_window_get_auto_follow_active (GimpDockWindow *menu_dock);
void gimp_dock_window_set_auto_follow_active (GimpDockWindow *menu_dock, void gimp_dock_window_set_auto_follow_active (GimpDockWindow *menu_dock,
gboolean show); gboolean show);

View File

@ -30,6 +30,8 @@
#include "config/gimpguiconfig.h" #include "config/gimpguiconfig.h"
#include "widgets/gimpdockcontainer.h"
#include "core/gimp.h" #include "core/gimp.h"
#include "core/gimpcontext.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); 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;
iter = g_list_next (iter)) iter = g_list_next (iter))
{ {