[gimp] app: Allow multi-column dock windows by drag-and-drop
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Allow multi-column dock windows by drag-and-drop
- Date: Sun, 25 Oct 2009 22:36:06 +0000 (UTC)
commit dd967055491c542183cf2934ceb44eb39eb58511
Author: Martin Nordholts <martinn src gnome org>
Date: Sun Oct 25 23:34:43 2009 +0100
app: Allow multi-column dock windows by drag-and-drop
When dropping a dockable on a dock separator on the side of e.g. a
dock window, a new column of dockables will be created. This allows
multi-column dock window setups.
app/widgets/gimpdockcolumns.c | 44 ++++++++++++++++++++++++++++++++++++++--
1 files changed, 41 insertions(+), 3 deletions(-)
---
diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c
index dee49a6..c85cb11 100644
--- a/app/widgets/gimpdockcolumns.c
+++ b/app/widgets/gimpdockcolumns.c
@@ -24,8 +24,18 @@
#include "widgets-types.h"
+#include "core/gimp.h"
+#include "core/gimpcontext.h"
+
+#include "dialogs/dialogs.h"
+
+#include "gimpdialogfactory.h"
#include "gimpdock.h"
+#include "gimpdockable.h"
+#include "gimpdockbook.h"
#include "gimpdockcolumns.h"
+#include "gimpdockseparator.h"
+#include "gimpmenudock.h"
#include "gimppanedbox.h"
@@ -74,9 +84,37 @@ gimp_dock_columns_dropped_cb (GimpDockSeparator *separator,
GtkWidget *source,
gpointer data)
{
- g_printerr ("%s: WiP: Will create a new column soon!\n", G_STRFUNC);
-
- return FALSE;
+ GimpDockColumns *dock_columns = GIMP_DOCK_COLUMNS (data);
+ GimpDockable *dockable = gimp_dockbook_drag_source_to_dockable (source);
+ GtkWidget *dock = NULL;
+ GtkWidget *dockbook = NULL;
+ gint index = gimp_dock_separator_get_insert_pos (separator);
+
+ if (!dockable )
+ return FALSE;
+
+ /* Create and insert new dock into columns */
+ dock = gimp_menu_dock_new (global_dock_factory,
+ global_dock_factory->context->gimp->images,
+ global_dock_factory->context->gimp->displays);
+ gimp_dock_columns_add_dock (dock_columns, GIMP_DOCK (dock), index);
+
+ /* Put a now dockbook in the dock */
+ dockbook = gimp_dockbook_new (gimp_dock_get_dialog_factory (GIMP_DOCK (dock))->menu_factory);
+ g_object_ref (dockbook);
+ gimp_dock_add_book (GIMP_DOCK (dock), GIMP_DOCKBOOK (dockbook), -1);
+
+ /* Move the dockable to the new dockbook */
+ g_object_ref (dockable);
+ gimp_dockbook_remove (dockable->dockbook, dockable);
+ gimp_dockbook_add (GIMP_DOCKBOOK (dockbook), dockable, -1);
+ g_object_unref (dockable);
+ g_object_unref (dockbook);
+
+ /* Show! */
+ gtk_widget_show (GTK_WIDGET (dock));
+
+ return TRUE;
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]