[gimp] app: Set a GimpContext on GimpDockColumns
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Set a GimpContext on GimpDockColumns
- Date: Tue, 5 Jan 2010 10:30:20 +0000 (UTC)
commit 4fcd3024f1d13ddaeca18060d1bb5d93468fdb58
Author: Martin Nordholts <martinn src gnome org>
Date: Tue Jan 5 11:08:10 2010 +0100
app: Set a GimpContext on GimpDockColumns
In order to make a GimpDock get hold of a GimpContext both in
single-window mode and in multi-window mode, don't make it look for a
GimpContext in a GimpDockWindow, put the context in GimpDockColumns
instead. GimpDockColumns exists both in s-w-m and m-w-m, contrary to
GimpDockWindow. Still use the GimpDockWindow as a backup though.
app/display/gimpimagewindow.c | 4 ++
app/widgets/gimpdock.c | 64 +++++++++++++++++++++++++++++++---------
app/widgets/gimpdockcolumns.c | 23 +++++++++++++-
app/widgets/gimpdockcolumns.h | 3 ++
app/widgets/gimpdockwindow.c | 7 ++++
5 files changed, 84 insertions(+), 17 deletions(-)
---
diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c
index 1bdcae8..42b4051 100644
--- a/app/display/gimpimagewindow.c
+++ b/app/display/gimpimagewindow.c
@@ -311,6 +311,8 @@ gimp_image_window_constructor (GType type,
/* Create the left dock columns widget */
private->left_docks = g_object_new (GIMP_TYPE_DOCK_COLUMNS, NULL);
+ gimp_dock_columns_set_context (GIMP_DOCK_COLUMNS (private->left_docks),
+ gimp_get_user_context (private->gimp));
gtk_paned_pack1 (GTK_PANED (private->left_hpane), private->left_docks,
FALSE, FALSE);
if (config->single_window_mode)
@@ -338,6 +340,8 @@ gimp_image_window_constructor (GType type,
/* Create the right dock columns widget */
private->right_docks = g_object_new (GIMP_TYPE_DOCK_COLUMNS, NULL);
+ gimp_dock_columns_set_context (GIMP_DOCK_COLUMNS (private->right_docks),
+ gimp_get_user_context (private->gimp));
gtk_paned_pack2 (GTK_PANED (private->right_hpane), private->right_docks,
FALSE, FALSE);
if (config->single_window_mode)
diff --git a/app/widgets/gimpdock.c b/app/widgets/gimpdock.c
index b187fab..eed6a07 100644
--- a/app/widgets/gimpdock.c
+++ b/app/widgets/gimpdock.c
@@ -36,6 +36,7 @@
#include "gimpdock.h"
#include "gimpdockable.h"
#include "gimpdockbook.h"
+#include "gimpdockcolumns.h"
#include "gimpdockwindow.h"
#include "gimppanedbox.h"
#include "gimpuimanager.h"
@@ -68,18 +69,17 @@ struct _GimpDockPrivate
};
-static void gimp_dock_style_set (GtkWidget *widget,
- GtkStyle *prev_style);
-
-static void gimp_dock_destroy (GtkObject *object);
-
-static void gimp_dock_real_book_added (GimpDock *dock,
- GimpDockbook *dockbook);
-static void gimp_dock_real_book_removed (GimpDock *dock,
- GimpDockbook *dockbook);
-static gboolean gimp_dock_dropped_cb (GtkWidget *source,
- gint insert_index,
- gpointer data);
+static void gimp_dock_style_set (GtkWidget *widget,
+ GtkStyle *prev_style);
+static void gimp_dock_destroy (GtkObject *object);
+static void gimp_dock_real_book_added (GimpDock *dock,
+ GimpDockbook *dockbook);
+static void gimp_dock_real_book_removed (GimpDock *dock,
+ GimpDockbook *dockbook);
+static gboolean gimp_dock_dropped_cb (GtkWidget *source,
+ gint insert_index,
+ gpointer data);
+static GimpDockColumns * gimp_dock_get_dock_columns (GimpDock *dock);
G_DEFINE_TYPE (GimpDock, gimp_dock, GTK_TYPE_VBOX)
@@ -299,6 +299,24 @@ gimp_dock_dropped_cb (GtkWidget *source,
return TRUE;
}
+/**
+ * gimp_dock_get_dock_columns:
+ * @dock:
+ *
+ * Returns: The first #GimpDockColumns parent for the dock, or %NULL
+ * if there is no #GimpDockColumns parent.
+ **/
+static GimpDockColumns *
+gimp_dock_get_dock_columns (GimpDock *dock)
+{
+ GtkWidget *widget = gtk_widget_get_parent (GTK_WIDGET (dock));
+
+ while (widget != NULL && ! GIMP_IS_DOCK_COLUMNS (widget))
+ widget = gtk_widget_get_parent (widget);
+
+ return widget ? GIMP_DOCK_COLUMNS (widget) : NULL;
+}
+
/* public functions */
gchar *
@@ -364,13 +382,29 @@ gimp_dock_invalidate_geometry (GimpDock *dock)
GimpContext *
gimp_dock_get_context (GimpDock *dock)
{
- GimpDockWindow *dock_window = NULL;
+ GimpContext *context = NULL;
g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
- dock_window = gimp_dock_window_from_dock (dock);
+ /* First try GimpDockColumns */
+ if (! context)
+ {
+ GimpDockColumns *dock_columns = gimp_dock_get_dock_columns (dock);
+
+ if (dock_columns)
+ context = gimp_dock_columns_get_context (dock_columns);
+ }
+
+ /* Then GimpDockWindow */
+ if (! context)
+ {
+ GimpDockWindow *dock_window = gimp_dock_window_from_dock (dock);
+
+ if (dock_window)
+ context = gimp_dock_window_get_context (dock_window);
+ }
- return gimp_dock_window_get_context (dock_window);
+ return context;
}
/**
diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c
index 2bc0c3f..18d78cd 100644
--- a/app/widgets/gimpdockcolumns.c
+++ b/app/widgets/gimpdockcolumns.c
@@ -52,9 +52,11 @@ enum
struct _GimpDockColumnsPrivate
{
- GList *docks;
+ GimpContext *context;
- GtkWidget *paned_hbox;
+ GList *docks;
+
+ GtkWidget *paned_hbox;
};
@@ -243,3 +245,20 @@ gimp_dock_columns_get_docks (GimpDockColumns *dock_columns)
return dock_columns->p->docks;
}
+
+GimpContext *
+gimp_dock_columns_get_context (GimpDockColumns *dock_columns)
+{
+ g_return_val_if_fail (GIMP_IS_DOCK_COLUMNS (dock_columns), NULL);
+
+ return dock_columns->p->context;
+}
+
+void
+gimp_dock_columns_set_context (GimpDockColumns *dock_columns,
+ GimpContext *context)
+{
+ g_return_if_fail (GIMP_IS_DOCK_COLUMNS (dock_columns));
+
+ dock_columns->p->context = context;
+}
diff --git a/app/widgets/gimpdockcolumns.h b/app/widgets/gimpdockcolumns.h
index 076ebcf..7f6d71a 100644
--- a/app/widgets/gimpdockcolumns.h
+++ b/app/widgets/gimpdockcolumns.h
@@ -64,6 +64,9 @@ void gimp_dock_columns_add_dock (GimpDockColumns *dock_colu
void gimp_dock_columns_remove_dock (GimpDockColumns *dock_columns,
GimpDock *dock);
GList * gimp_dock_columns_get_docks (GimpDockColumns *dock_columns);
+GimpContext * gimp_dock_columns_get_context (GimpDockColumns *dock_columns);
+void gimp_dock_columns_set_context (GimpDockColumns *dock_columns,
+ GimpContext *context);
#endif /* __GIMP_DOCK_COLUMNS_H__ */
diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c
index c3bb8bd..d998bfa 100644
--- a/app/widgets/gimpdockwindow.c
+++ b/app/widgets/gimpdockwindow.c
@@ -334,6 +334,13 @@ gimp_dock_window_constructor (GType type,
dock_window->p->image_container = gimp->images;
dock_window->p->display_container = gimp->displays;
+ /* Let the GimpDockColumns mirror the context so that a GimpDock can
+ * get it when inside a dock window. We do the same thing in the
+ * GimpImageWindow so docks can get the GimpContext there as well
+ */
+ gimp_dock_columns_set_context (dock_window->p->dock_columns,
+ dock_window->p->context);
+
/* Setup hints */
gimp_window_set_hint (GTK_WINDOW (dock_window), config->dock_window_hint);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]