[gimp] app: Allow more than one dock inside a dock window
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Allow more than one dock inside a dock window
- Date: Sun, 25 Oct 2009 12:07:24 +0000 (UTC)
commit e81c4f44dec9b7671db8136e37e76baf45ca78d9
Author: Martin Nordholts <martinn src gnome org>
Date: Sun Oct 25 13:10:08 2009 +0100
app: Allow more than one dock inside a dock window
Put a GimpDockColumns inside GimpDockWindow so that there can be more
than one dock inside a dock window. For now,
gimp_dock_window_get_dock() returns the first dock. Eventually need to
return all docks and refactor the other code as needed.
app/widgets/gimpdialogfactory.c | 5 ++-
app/widgets/gimpdockwindow.c | 40 ++++++++++++++++++++++++++++++++++----
app/widgets/gimpdockwindow.h | 5 +++-
3 files changed, 42 insertions(+), 8 deletions(-)
---
diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c
index 75476c2..c9036a7 100644
--- a/app/widgets/gimpdialogfactory.c
+++ b/app/widgets/gimpdialogfactory.c
@@ -795,8 +795,9 @@ gimp_dialog_factory_dock_new (GimpDialogFactory *factory,
if (dock)
{
/* Put the dock in the dock window */
- gimp_dock_window_set_dock (GIMP_DOCK_WINDOW (dock_window),
- GIMP_DOCK (dock));
+ gimp_dock_window_add_dock (GIMP_DOCK_WINDOW (dock_window),
+ GIMP_DOCK (dock),
+ -1);
}
return dock;
diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c
index 4455119..c79342e 100644
--- a/app/widgets/gimpdockwindow.c
+++ b/app/widgets/gimpdockwindow.c
@@ -39,6 +39,7 @@
#include "gimpdialogfactory.h"
#include "gimpdock.h"
#include "gimpdockbook.h"
+#include "gimpdockcolumns.h"
#include "gimpdockwindow.h"
#include "gimpmenufactory.h"
#include "gimpsessioninfo.h"
@@ -73,6 +74,8 @@ struct _GimpDockWindowPrivate
GimpUIManager *ui_manager;
GQuark image_flush_handler_id;
+ GimpDockColumns *dock_columns;
+
gboolean allow_dockbook_absence;
guint update_title_idle_id;
@@ -191,8 +194,13 @@ gimp_dock_window_init (GimpDockWindow *dock_window)
dock_window->p->image_flush_handler_id = 0;
dock_window->p->ID = dock_ID++;
dock_window->p->update_title_idle_id = 0;
+ dock_window->p->dock_columns = g_object_new (GIMP_TYPE_DOCK_COLUMNS,
+ NULL);
/* Some common initialization for all dock windows */
+ gtk_container_add (GTK_CONTAINER (dock_window),
+ GTK_WIDGET (dock_window->p->dock_columns));
+ gtk_widget_show (GTK_WIDGET (dock_window->p->dock_columns));
gtk_window_set_resizable (GTK_WINDOW (dock_window), TRUE);
gtk_window_set_focus_on_map (GTK_WINDOW (dock_window), FALSE);
@@ -526,14 +534,16 @@ gimp_dock_window_dock_book_removed (GimpDockWindow *dock_window,
}
void
-gimp_dock_window_set_dock (GimpDockWindow *dock_window,
- GimpDock *dock)
+gimp_dock_window_add_dock (GimpDockWindow *dock_window,
+ GimpDock *dock,
+ gint index)
{
g_return_if_fail (GIMP_IS_DOCK_WINDOW (dock_window));
g_return_if_fail (GIMP_IS_DOCK (dock));
- /* FIXME: Handle more than one call to this function */
- gtk_container_add (GTK_CONTAINER (dock_window), GTK_WIDGET (dock));
+ gimp_dock_columns_add_dock (dock_window->p->dock_columns,
+ GIMP_DOCK (dock),
+ index);
/* Update window title now and when docks title is invalidated */
gimp_dock_window_update_title (dock_window);
@@ -557,6 +567,24 @@ gimp_dock_window_set_dock (GimpDockWindow *dock_window,
G_CONNECT_SWAPPED);
}
+void
+gimp_dock_window_remove_dock (GimpDockWindow *dock_window,
+ GimpDock *dock)
+{
+ gimp_dock_columns_remove_dock (dock_window->p->dock_columns,
+ GIMP_DOCK (dock));
+
+ g_signal_handlers_disconnect_by_func (dock,
+ gimp_dock_window_update_title,
+ dock_window);
+ g_signal_handlers_disconnect_by_func (dock,
+ gimp_dock_set_host_geometry_hints,
+ dock_window);
+ g_signal_handlers_disconnect_by_func (dock,
+ gimp_dock_window_dock_book_removed,
+ dock_window);
+}
+
gint
gimp_dock_window_get_id (GimpDockWindow *dock_window)
{
@@ -608,5 +636,7 @@ gimp_dock_window_from_dock (GimpDock *dock)
GimpDock *
gimp_dock_window_get_dock (GimpDockWindow *dock_window)
{
- return GIMP_DOCK (gtk_bin_get_child (GTK_BIN (dock_window)));
+ GList *docks = gimp_dock_columns_get_docks (dock_window->p->dock_columns);
+
+ return g_list_length (docks) > 0 ? GIMP_DOCK (docks->data) : NULL;
}
diff --git a/app/widgets/gimpdockwindow.h b/app/widgets/gimpdockwindow.h
index c52803c..e3c8617 100644
--- a/app/widgets/gimpdockwindow.h
+++ b/app/widgets/gimpdockwindow.h
@@ -57,7 +57,10 @@ struct _GimpDockWindowClass
GType gimp_dock_window_get_type (void) G_GNUC_CONST;
gint gimp_dock_window_get_id (GimpDockWindow *dock_window);
-void gimp_dock_window_set_dock (GimpDockWindow *dock_window,
+void gimp_dock_window_add_dock (GimpDockWindow *dock_window,
+ GimpDock *dock,
+ gint index);
+void gimp_dock_window_remove_dock (GimpDockWindow *dock_window,
GimpDock *dock);
GimpUIManager * gimp_dock_window_get_ui_manager (GimpDockWindow *dock_window);
GimpDockWindow * gimp_dock_window_from_dock (GimpDock *dock);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]