[gimp] app: Only show dock separators when rearranging the UI
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Only show dock separators when rearranging the UI
- Date: Sun, 4 Oct 2009 10:55:20 +0000 (UTC)
commit 3b721864d714149582f63d08ce6b98701433608c
Author: Martin Nordholts <martinn src gnome org>
Date: Sun Oct 4 12:58:30 2009 +0200
app: Only show dock separators when rearranging the UI
For now, only show dock separators when they are needed, not all the
time. We need a better solution eventually, but at least docks in the
image window doesn't look terrible any longer.
app/widgets/gimpdock.c | 82 +++++++++++++++++++++++++++++++++-----------
app/widgets/gimpdock.h | 71 ++++++++++++++++++++------------------
app/widgets/gimpdockbook.c | 10 ++++-
3 files changed, 107 insertions(+), 56 deletions(-)
---
diff --git a/app/widgets/gimpdock.c b/app/widgets/gimpdock.c
index 926a268..fb2b24a 100644
--- a/app/widgets/gimpdock.c
+++ b/app/widgets/gimpdock.c
@@ -68,6 +68,9 @@ struct _GimpDockPrivate
GtkWidget *vbox;
GList *dockbooks;
+
+ GtkWidget *north_separator;
+ GtkWidget *south_separator;
};
@@ -79,6 +82,7 @@ static void gimp_dock_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
+static void gimp_dock_finalize (GObject *object);
static void gimp_dock_destroy (GtkObject *object);
@@ -86,6 +90,8 @@ static void gimp_dock_real_book_added (GimpDock *dock,
GimpDockbook *dockbook);
static void gimp_dock_real_book_removed (GimpDock *dock,
GimpDockbook *dockbook);
+static void gimp_dock_show_separators (GimpDock *dock,
+ gboolean show);
G_DEFINE_TYPE (GimpDock, gimp_dock, GTK_TYPE_VBOX)
@@ -94,6 +100,9 @@ G_DEFINE_TYPE (GimpDock, gimp_dock, GTK_TYPE_VBOX)
static guint dock_signals[LAST_SIGNAL] = { 0 };
+/* Keep the list of instance for gimp_dock_class_show_separators() */
+static GList *dock_instances = NULL;
+
static void
gimp_dock_class_init (GimpDockClass *klass)
@@ -141,6 +150,7 @@ gimp_dock_class_init (GimpDockClass *klass)
object_class->set_property = gimp_dock_set_property;
object_class->get_property = gimp_dock_get_property;
+ object_class->finalize = gimp_dock_finalize;
gtk_object_class->destroy = gimp_dock_destroy;
@@ -177,8 +187,6 @@ gimp_dock_class_init (GimpDockClass *klass)
static void
gimp_dock_init (GimpDock *dock)
{
- GtkWidget *separator;
-
dock->p = G_TYPE_INSTANCE_GET_PRIVATE (dock,
GIMP_TYPE_DOCK,
GimpDockPrivate);
@@ -194,9 +202,10 @@ gimp_dock_init (GimpDock *dock)
gtk_container_add (GTK_CONTAINER (dock->p->main_vbox), dock->p->vbox);
gtk_widget_show (dock->p->vbox);
- separator = gimp_dock_separator_new (dock, GTK_ANCHOR_NORTH);
- gtk_box_pack_start (GTK_BOX (dock->p->vbox), separator, FALSE, FALSE, 0);
- gtk_widget_show (separator);
+ dock->p->north_separator = gimp_dock_separator_new (dock, GTK_ANCHOR_NORTH);
+ gtk_box_pack_start (GTK_BOX (dock->p->vbox), dock->p->north_separator, FALSE, FALSE, 0);
+
+ dock_instances = g_list_prepend (dock_instances, dock);
}
static void
@@ -256,6 +265,12 @@ gimp_dock_get_property (GObject *object,
}
static void
+gimp_dock_finalize (GObject *object)
+{
+ dock_instances = g_list_remove (dock_instances, object);
+}
+
+static void
gimp_dock_destroy (GtkObject *object)
{
GimpDock *dock = GIMP_DOCK (object);
@@ -290,6 +305,20 @@ gimp_dock_real_book_removed (GimpDock *dock,
{
}
+static void
+gimp_dock_show_separators (GimpDock *dock,
+ gboolean show)
+{
+ if (dock->p->north_separator)
+ g_object_set (dock->p->north_separator,
+ "visible", show,
+ NULL);
+
+ if (dock->p->south_separator)
+ g_object_set (dock->p->south_separator,
+ "visible", show,
+ NULL);
+}
/* public functions */
@@ -491,14 +520,11 @@ gimp_dock_add_book (GimpDock *dock,
if (old_length == 0)
{
- GtkWidget *separator;
-
gtk_box_pack_start (GTK_BOX (dock->p->vbox), GTK_WIDGET (dockbook),
TRUE, TRUE, 0);
- separator = gimp_dock_separator_new (dock, GTK_ANCHOR_SOUTH);
- gtk_box_pack_end (GTK_BOX (dock->p->vbox), separator, FALSE, FALSE, 0);
- gtk_widget_show (separator);
+ dock->p->south_separator = gimp_dock_separator_new (dock, GTK_ANCHOR_SOUTH);
+ gtk_box_pack_end (GTK_BOX (dock->p->vbox), dock->p->south_separator, FALSE, FALSE, 0);
}
else
{
@@ -581,17 +607,9 @@ gimp_dock_remove_book (GimpDock *dock,
if (old_length == 1)
{
- GtkWidget *separator;
- GList *children;
-
- children = gtk_container_get_children (GTK_CONTAINER (dock->p->vbox));
-
- separator = g_list_nth_data (children, 2);
-
- gtk_container_remove (GTK_CONTAINER (dock->p->vbox), separator);
+ gtk_container_remove (GTK_CONTAINER (dock->p->vbox), dock->p->south_separator);
gtk_container_remove (GTK_CONTAINER (dock->p->vbox), GTK_WIDGET (dockbook));
-
- g_list_free (children);
+ dock->p->south_separator = NULL;
}
else
{
@@ -626,3 +644,27 @@ gimp_dock_remove_book (GimpDock *dock,
g_object_unref (dockbook);
}
+
+/**
+ * gimp_dock_class_show_separators:
+ * @klass:
+ * @show:
+ *
+ * Show/hide the separators in all docks.
+ **/
+void
+gimp_dock_class_show_separators (GimpDockClass *klass,
+ gboolean show)
+{
+ GList *list;
+
+ /* Conceptually this is a class varaible */
+ g_return_if_fail (GIMP_IS_DOCK_CLASS (klass));
+
+ for (list = dock_instances; list != NULL; list = list->next)
+ {
+ GimpDock *dock = GIMP_DOCK (list->data);
+
+ gimp_dock_show_separators (dock, show);
+ }
+}
diff --git a/app/widgets/gimpdock.h b/app/widgets/gimpdock.h
index 25db978..db8b022 100644
--- a/app/widgets/gimpdock.h
+++ b/app/widgets/gimpdock.h
@@ -67,40 +67,43 @@ struct _GimpDockClass
};
-GType gimp_dock_get_type (void) G_GNUC_CONST;
-
-void gimp_dock_setup (GimpDock *dock,
- const GimpDock *template);
-void gimp_dock_set_aux_info (GimpDock *dock,
- GList *aux_info);
-GList * gimp_dock_get_aux_info (GimpDock *dock);
-gchar * gimp_dock_get_title (GimpDock *dock);
-void gimp_dock_invalidate_title (GimpDock *dock);
-void gimp_dock_set_host_geometry_hints
- (GimpDock *dock,
- GtkWindow *window);
-void gimp_dock_invalidate_geometry(GimpDock *dock);
-GimpContext * gimp_dock_get_context (GimpDock *dock);
-GimpDialogFactory * gimp_dock_get_dialog_factory (GimpDock *dock);
-GimpUIManager * gimp_dock_get_ui_manager (GimpDock *dock);
-GList * gimp_dock_get_dockbooks (GimpDock *dock);
-gint gimp_dock_get_n_dockables (GimpDock *dock);
-GtkWidget * gimp_dock_get_main_vbox (GimpDock *dock);
-GtkWidget * gimp_dock_get_vbox (GimpDock *dock);
-gint gimp_dock_get_id (GimpDock *dock);
-
-void gimp_dock_add (GimpDock *dock,
- GimpDockable *dockable,
- gint book,
- gint index);
-void gimp_dock_remove (GimpDock *dock,
- GimpDockable *dockable);
-
-void gimp_dock_add_book (GimpDock *dock,
- GimpDockbook *dockbook,
- gint index);
-void gimp_dock_remove_book (GimpDock *dock,
- GimpDockbook *dockbook);
+GType gimp_dock_get_type (void) G_GNUC_CONST;
+
+void gimp_dock_setup (GimpDock *dock,
+ const GimpDock *template);
+void gimp_dock_set_aux_info (GimpDock *dock,
+ GList *aux_info);
+GList * gimp_dock_get_aux_info (GimpDock *dock);
+gchar * gimp_dock_get_title (GimpDock *dock);
+void gimp_dock_invalidate_title (GimpDock *dock);
+void gimp_dock_set_host_geometry_hints (GimpDock *dock,
+ GtkWindow *window);
+void gimp_dock_invalidate_geometry (GimpDock *dock);
+GimpContext * gimp_dock_get_context (GimpDock *dock);
+GimpDialogFactory * gimp_dock_get_dialog_factory (GimpDock *dock);
+GimpUIManager * gimp_dock_get_ui_manager (GimpDock *dock);
+GList * gimp_dock_get_dockbooks (GimpDock *dock);
+gint gimp_dock_get_n_dockables (GimpDock *dock);
+GtkWidget * gimp_dock_get_main_vbox (GimpDock *dock);
+GtkWidget * gimp_dock_get_vbox (GimpDock *dock);
+gint gimp_dock_get_id (GimpDock *dock);
+
+void gimp_dock_add (GimpDock *dock,
+ GimpDockable *dockable,
+ gint book,
+ gint index);
+void gimp_dock_remove (GimpDock *dock,
+ GimpDockable *dockable);
+
+void gimp_dock_add_book (GimpDock *dock,
+ GimpDockbook *dockbook,
+ gint index);
+void gimp_dock_remove_book (GimpDock *dock,
+ GimpDockbook *dockbook);
+
+
+void gimp_dock_class_show_separators (GimpDockClass *klass,
+ gboolean show);
#endif /* __GIMP_DOCK_H__ */
diff --git a/app/widgets/gimpdockbook.c b/app/widgets/gimpdockbook.c
index dc823c4..50124e5 100644
--- a/app/widgets/gimpdockbook.c
+++ b/app/widgets/gimpdockbook.c
@@ -649,6 +649,7 @@ gimp_dockbook_tab_drag_begin (GtkWidget *widget,
GdkDragContext *context,
GimpDockable *dockable)
{
+ GimpDockClass *dock_class = GIMP_DOCK_GET_CLASS (dockable->dockbook->p->dock);
GtkWidget *window;
GtkWidget *view;
GtkRequisition requisition;
@@ -680,6 +681,8 @@ gimp_dockbook_tab_drag_begin (GtkWidget *widget,
* it's the dockable that's being dragged around
*/
gtk_widget_set_sensitive (GTK_WIDGET (dockable), FALSE);
+
+ gimp_dock_class_show_separators (dock_class, TRUE);
}
static void
@@ -687,8 +690,9 @@ gimp_dockbook_tab_drag_end (GtkWidget *widget,
GdkDragContext *context,
GimpDockable *dockable)
{
- GtkWidget *drag_widget = g_object_get_data (G_OBJECT (dockable),
- "gimp-dock-drag-widget");
+ GimpDockClass *dock_class = GIMP_DOCK_GET_CLASS (dockable->dockbook->p->dock);
+ GtkWidget *drag_widget = g_object_get_data (G_OBJECT (dockable),
+ "gimp-dock-drag-widget");
/* finding the drag_widget means the drop was not successful, so
* pop up a new dock and move the dockable there
@@ -702,6 +706,8 @@ gimp_dockbook_tab_drag_end (GtkWidget *widget,
dockable->drag_x = GIMP_DOCKABLE_DRAG_OFFSET;
dockable->drag_y = GIMP_DOCKABLE_DRAG_OFFSET;
gtk_widget_set_sensitive (GTK_WIDGET (dockable), TRUE);
+
+ gimp_dock_class_show_separators (dock_class, FALSE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]