From d6d8f88498fc57a151f280eb8ee0db724c39bea2 Mon Sep 17 00:00:00 2001 From: William Skaggs Date: Sat, 9 Feb 2008 16:46:09 +0000 Subject: [PATCH] Bill Skaggs Initial implementation of two-column docks. Needs some fixes and a lot of cleanup. Docks are made to contain a GtkHPaned instead of just a VBox. * app/widgets/gimpviewrenderer.c * app/widgets/gimptoolbox.[ch] * app/widgets/gimpsessioninfo.h * app/widgeapp/widgets/gimpsessioninfo-dock.c * app/widgets/gimpsessioninfo-dock.c * app/widgets/gimpdock.[ch] * app/widgets/gimpdockseparator.[ch] * app/widgets/gimpdockbook.[ch] * app/widgets/gimpviewrenderer.c * app/widgets/gimpviewrendererimage.c: Kludged workaround for missing context whose cause I couldn't figure out; needs fixing. * etc/sessionrc: New default setup with all important dockables in a single dock. svn path=/branches/weskaggs/; revision=24840 --- ChangeLog | 23 +++ app/widgets/gimpdock.c | 244 ++++++++++++++++++++++++---- app/widgets/gimpdock.h | 10 ++ app/widgets/gimpdockbook.c | 1 + app/widgets/gimpdockbook.h | 2 + app/widgets/gimpdockseparator.c | 9 +- app/widgets/gimpdockseparator.h | 2 + app/widgets/gimpsessioninfo-book.c | 23 ++- app/widgets/gimpsessioninfo-book.h | 2 + app/widgets/gimpsessioninfo-dock.c | 28 +++- app/widgets/gimpsessioninfo.h | 3 + app/widgets/gimptoolbox.c | 19 ++- app/widgets/gimptoolbox.h | 6 +- app/widgets/gimpviewrenderer.c | 2 +- app/widgets/gimpviewrendererimage.c | 5 + etc/sessionrc | 32 ++-- 16 files changed, 352 insertions(+), 59 deletions(-) diff --git a/ChangeLog b/ChangeLog index 00f60be6a7..9c689a2a5a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2008-02-09 Bill Skaggs + + Initial implementation of two-column docks. Needs + some fixes and a lot of cleanup. Docks are made + to contain a GtkHPaned instead of just a VBox. + + * app/widgets/gimpviewrenderer.c + * app/widgets/gimptoolbox.[ch] + * app/widgets/gimpsessioninfo.h + * app/widgeapp/widgets/gimpsessioninfo-dock.c + * app/widgets/gimpsessioninfo-dock.c + * app/widgets/gimpdock.[ch] + * app/widgets/gimpdockseparator.[ch] + * app/widgets/gimpdockbook.[ch] + + * app/widgets/gimpviewrenderer.c + * app/widgets/gimpviewrendererimage.c: Kludged workaround + for missing context whose cause I couldn't figure out; + needs fixing. + + * etc/sessionrc: New default setup with all important + dockables in a single dock. + 2008-02-06 Bill Skaggs Merged 24759:24821 from trunk. diff --git a/app/widgets/gimpdock.c b/app/widgets/gimpdock.c index 835b2de40d..67c778ef19 100644 --- a/app/widgets/gimpdock.c +++ b/app/widgets/gimpdock.c @@ -168,12 +168,17 @@ gimp_dock_init (GimpDock *dock) dock->context = NULL; dock->dialog_factory = NULL; dock->dockbooks = NULL; + dock->dockbooks2 = NULL; gtk_window_set_role (GTK_WINDOW (dock), "gimp-dock"); gtk_window_set_resizable (GTK_WINDOW (dock), TRUE); + dock->paned = gtk_hpaned_new (); + gtk_container_add (GTK_CONTAINER (dock), dock->paned); + gtk_widget_show (dock->paned); + dock->main_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (dock), dock->main_vbox); + gtk_paned_add1 (GTK_PANED (dock->paned), dock->main_vbox); gtk_widget_show (dock->main_vbox); dock->vbox = gtk_vbox_new (FALSE, 0); @@ -260,6 +265,9 @@ gimp_dock_destroy (GtkObject *object) while (dock->dockbooks) gimp_dock_remove_book (dock, GIMP_DOCKBOOK (dock->dockbooks->data)); + while (dock->dockbooks2) + gimp_dock_remove_book (dock, GIMP_DOCKBOOK (dock->dockbooks2->data)); + if (dock->context) { g_object_unref (dock->context); @@ -276,9 +284,12 @@ gimp_dock_delete_event (GtkWidget *widget, GimpDock *dock = GIMP_DOCK (widget); gboolean retval = FALSE; GList *list; - gint n; + gint n = 0; - for (list = dock->dockbooks, n = 0; list; list = list->next) + for (list = dock->dockbooks; list; list = list->next) + n += gtk_notebook_get_n_pages (GTK_NOTEBOOK (list->data)); + + for (list = dock->dockbooks2; list; list = list->next) n += gtk_notebook_get_n_pages (GTK_NOTEBOOK (list->data)); if (n > 1) @@ -378,7 +389,7 @@ static void gimp_dock_real_book_removed (GimpDock *dock, GimpDockbook *dockbook) { - if (dock->dockbooks == NULL) + if (dock->dockbooks == NULL && dock->dockbooks2 == NULL ) gtk_widget_destroy (GTK_WIDGET (dock)); } @@ -434,6 +445,23 @@ gimp_dock_add (GimpDock *dock, gimp_dockbook_add (dockbook, dockable, position); } +void +gimp_dock_add2 (GimpDock *dock, + GimpDockable *dockable, + gint section, + gint position) +{ + GimpDockbook *dockbook; + + g_return_if_fail (GIMP_IS_DOCK (dock)); + g_return_if_fail (GIMP_IS_DOCKABLE (dockable)); + g_return_if_fail (dockable->dockbook == NULL); + + dockbook = GIMP_DOCKBOOK (dock->dockbooks2->data); + + gimp_dockbook_add (dockbook, dockable, position); +} + void gimp_dock_remove (GimpDock *dock, GimpDockable *dockable) @@ -463,6 +491,7 @@ gimp_dock_add_book (GimpDock *dock, index = old_length; dockbook->dock = dock; + dockbook->pane = 1; dock->dockbooks = g_list_insert (dock->dockbooks, dockbook, index); if (old_length == 0) @@ -535,6 +564,97 @@ gimp_dock_add_book (GimpDock *dock, g_signal_emit (dock, dock_signals[BOOK_ADDED], 0, dockbook); } +/* add a book to the right pane */ +void +gimp_dock_add2_book (GimpDock *dock, + GimpDockbook *dockbook, + gint index) +{ + gint old_length; + + g_return_if_fail (GIMP_IS_DOCK (dock)); + g_return_if_fail (GIMP_IS_DOCKBOOK (dockbook)); + g_return_if_fail (dockbook->dock == NULL); + + old_length = g_list_length (dock->dockbooks2); + + if (index >= old_length || index < 0) + index = old_length; + + dockbook->dock = dock; + dockbook->pane = 2; + dock->dockbooks2 = g_list_insert (dock->dockbooks2, dockbook, index); + + if (old_length == 0) + { + GtkWidget *separator; + + gtk_box_pack_start (GTK_BOX (dock->vbox2), GTK_WIDGET (dockbook), + TRUE, TRUE, 0); + + separator = gimp_dock_separator_new (dock); + gtk_box_pack_end (GTK_BOX (dock->vbox2), separator, FALSE, FALSE, 0); + gtk_widget_show (separator); + } + else + { + GtkWidget *old_book; + GtkWidget *parent; + GtkWidget *paned; + + if (index == 0) + old_book = g_list_nth_data (dock->dockbooks2, index + 1); + else + old_book = g_list_nth_data (dock->dockbooks2, index - 1); + + parent = old_book->parent; + + if ((old_length > 1) && (index > 0)) + { + GtkWidget *grandparent; + + grandparent = parent->parent; + + old_book = parent; + parent = grandparent; + } + + g_object_ref (old_book); + + gtk_container_remove (GTK_CONTAINER (parent), old_book); + + paned = gtk_vpaned_new (); + + if (GTK_IS_VPANED (parent)) + gtk_paned_pack1 (GTK_PANED (parent), paned, TRUE, FALSE); + else + gtk_box_pack_start (GTK_BOX (parent), paned, TRUE, TRUE, 0); + + gtk_widget_show (paned); + + if (index == 0) + { + gtk_paned_pack1 (GTK_PANED (paned), GTK_WIDGET (dockbook), + TRUE, FALSE); + gtk_paned_pack2 (GTK_PANED (paned), old_book, + TRUE, FALSE); + } + else + { + gtk_paned_pack1 (GTK_PANED (paned), old_book, + TRUE, FALSE); + gtk_paned_pack2 (GTK_PANED (paned), GTK_WIDGET (dockbook), + TRUE, FALSE); + } + + g_object_unref (old_book); + } + + gtk_widget_show (GTK_WIDGET (dockbook)); + + g_signal_emit (dock, dock_signals[BOOK_ADDED], 0, dockbook); +} + void gimp_dock_remove_book (GimpDock *dock, GimpDockbook *dockbook) @@ -550,52 +670,108 @@ gimp_dock_remove_book (GimpDock *dock, old_length = g_list_length (dock->dockbooks); index = g_list_index (dock->dockbooks, dockbook); - dockbook->dock = NULL; - dock->dockbooks = g_list_remove (dock->dockbooks, dockbook); - - g_object_ref (dockbook); - - if (old_length == 1) + if (index == -1) /* book is in the right pane */ { - GtkWidget *separator; - GList *children; + old_length = g_list_length (dock->dockbooks2); + index = g_list_index (dock->dockbooks2, dockbook); - children = gtk_container_get_children (GTK_CONTAINER (dock->vbox)); + dockbook->dock = NULL; + dock->dockbooks2 = g_list_remove (dock->dockbooks2, dockbook); - separator = g_list_nth_data (children, 2); + g_object_ref (dockbook); - gtk_container_remove (GTK_CONTAINER (dock->vbox), separator); - gtk_container_remove (GTK_CONTAINER (dock->vbox), GTK_WIDGET (dockbook)); + if (old_length == 1) + { + GtkWidget *separator; + GList *children; - g_list_free (children); + children = gtk_container_get_children (GTK_CONTAINER (dock->vbox2)); + + separator = g_list_nth_data (children, 2); + + gtk_container_remove (GTK_CONTAINER (dock->vbox2), separator); + gtk_container_remove (GTK_CONTAINER (dock->vbox2), GTK_WIDGET (dockbook)); + + g_list_free (children); + } + else + { + GtkWidget *other_book; + GtkWidget *parent; + GtkWidget *grandparent; + + parent = GTK_WIDGET (dockbook)->parent; + grandparent = parent->parent; + + if (index == 0) + other_book = GTK_PANED (parent)->child2; + else + other_book = GTK_PANED (parent)->child1; + + g_object_ref (other_book); + + gtk_container_remove (GTK_CONTAINER (parent), other_book); + gtk_container_remove (GTK_CONTAINER (parent), GTK_WIDGET (dockbook)); + + gtk_container_remove (GTK_CONTAINER (grandparent), parent); + + if (GTK_IS_VPANED (grandparent)) + gtk_paned_pack1 (GTK_PANED (grandparent), other_book, TRUE, FALSE); + else + gtk_box_pack_start (GTK_BOX (dock->vbox2), other_book, TRUE, TRUE, 0); + + g_object_unref (other_book); + } } else { - GtkWidget *other_book; - GtkWidget *parent; - GtkWidget *grandparent; + dockbook->dock = NULL; + dock->dockbooks = g_list_remove (dock->dockbooks, dockbook); - parent = GTK_WIDGET (dockbook)->parent; - grandparent = parent->parent; + g_object_ref (dockbook); - if (index == 0) - other_book = GTK_PANED (parent)->child2; + if (old_length == 1) + { + GtkWidget *separator; + GList *children; + + children = gtk_container_get_children (GTK_CONTAINER (dock->vbox)); + + separator = g_list_nth_data (children, 2); + + gtk_container_remove (GTK_CONTAINER (dock->vbox), separator); + gtk_container_remove (GTK_CONTAINER (dock->vbox), GTK_WIDGET (dockbook)); + + g_list_free (children); + } else - other_book = GTK_PANED (parent)->child1; + { + GtkWidget *other_book; + GtkWidget *parent; + GtkWidget *grandparent; - g_object_ref (other_book); + parent = GTK_WIDGET (dockbook)->parent; + grandparent = parent->parent; - gtk_container_remove (GTK_CONTAINER (parent), other_book); - gtk_container_remove (GTK_CONTAINER (parent), GTK_WIDGET (dockbook)); + if (index == 0) + other_book = GTK_PANED (parent)->child2; + else + other_book = GTK_PANED (parent)->child1; - gtk_container_remove (GTK_CONTAINER (grandparent), parent); + g_object_ref (other_book); - if (GTK_IS_VPANED (grandparent)) - gtk_paned_pack1 (GTK_PANED (grandparent), other_book, TRUE, FALSE); - else - gtk_box_pack_start (GTK_BOX (dock->vbox), other_book, TRUE, TRUE, 0); + gtk_container_remove (GTK_CONTAINER (parent), other_book); + gtk_container_remove (GTK_CONTAINER (parent), GTK_WIDGET (dockbook)); - g_object_unref (other_book); + gtk_container_remove (GTK_CONTAINER (grandparent), parent); + + if (GTK_IS_VPANED (grandparent)) + gtk_paned_pack1 (GTK_PANED (grandparent), other_book, TRUE, FALSE); + else + gtk_box_pack_start (GTK_BOX (dock->vbox), other_book, TRUE, TRUE, 0); + + g_object_unref (other_book); + } } g_signal_emit (dock, dock_signals[BOOK_REMOVED], 0, dockbook); diff --git a/app/widgets/gimpdock.h b/app/widgets/gimpdock.h index 249cba0999..adf6e525c8 100644 --- a/app/widgets/gimpdock.h +++ b/app/widgets/gimpdock.h @@ -43,10 +43,13 @@ struct _GimpDock GimpDialogFactory *dialog_factory; GimpContext *context; + GtkWidget *paned; GtkWidget *main_vbox; GtkWidget *vbox; + GtkWidget *vbox2; GList *dockbooks; + GList *dockbooks2; }; struct _GimpDockClass @@ -80,12 +83,19 @@ void gimp_dock_add (GimpDock *dock, GimpDockable *dockable, gint book, gint index); +void gimp_dock_add2 (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_add2_book (GimpDock *dock, + GimpDockbook *dockbook, + gint index); void gimp_dock_remove_book (GimpDock *dock, GimpDockbook *dockbook); diff --git a/app/widgets/gimpdockbook.c b/app/widgets/gimpdockbook.c index b538bf5d94..057fac9580 100644 --- a/app/widgets/gimpdockbook.c +++ b/app/widgets/gimpdockbook.c @@ -188,6 +188,7 @@ gimp_dockbook_init (GimpDockbook *dockbook) { dockbook->dock = NULL; dockbook->ui_manager = NULL; + dockbook->pane = 0; gtk_notebook_popup_enable (GTK_NOTEBOOK (dockbook)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (dockbook), TRUE); diff --git a/app/widgets/gimpdockbook.h b/app/widgets/gimpdockbook.h index 4a94eea9ef..2274421554 100644 --- a/app/widgets/gimpdockbook.h +++ b/app/widgets/gimpdockbook.h @@ -45,6 +45,8 @@ struct _GimpDockbook guint tab_hover_timeout; GimpDockable *tab_hover_dockable; + + gint pane; }; struct _GimpDockbookClass diff --git a/app/widgets/gimpdockseparator.c b/app/widgets/gimpdockseparator.c index 61155edcb7..c513575051 100644 --- a/app/widgets/gimpdockseparator.c +++ b/app/widgets/gimpdockseparator.c @@ -95,6 +95,8 @@ gimp_dock_separator_init (GimpDockSeparator *separator) separator->dock = NULL; separator->label = NULL; + separator->pane = 1; + separator->frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (separator->frame), GTK_SHADOW_OUT); gtk_container_add (GTK_CONTAINER (separator), separator->frame); @@ -236,7 +238,12 @@ gimp_dock_separator_drag_drop (GtkWidget *widget, gimp_dockbook_remove (dockable->dockbook, dockable); dockbook = gimp_dockbook_new (dock->dialog_factory->menu_factory); - gimp_dock_add_book (dock, GIMP_DOCKBOOK (dockbook), index); + + if (separator->pane == 2) + gimp_dock_add2_book (dock, GIMP_DOCKBOOK (dockbook), index); + else + gimp_dock_add_book (dock, GIMP_DOCKBOOK (dockbook), index); + gimp_dockbook_add (GIMP_DOCKBOOK (dockbook), dockable, -1); diff --git a/app/widgets/gimpdockseparator.h b/app/widgets/gimpdockseparator.h index 73335090ff..3e68fbf0d2 100644 --- a/app/widgets/gimpdockseparator.h +++ b/app/widgets/gimpdockseparator.h @@ -44,6 +44,8 @@ struct _GimpDockSeparator GtkWidget *frame; GtkWidget *label; + + gint pane; }; struct _GimpDockSeparatorClass diff --git a/app/widgets/gimpsessioninfo-book.c b/app/widgets/gimpsessioninfo-book.c index c1ec3ef4f1..14eccc4ead 100644 --- a/app/widgets/gimpsessioninfo-book.c +++ b/app/widgets/gimpsessioninfo-book.c @@ -38,6 +38,7 @@ enum { SESSION_INFO_BOOK_POSITION, + SESSION_INFO_BOOK_PANE, SESSION_INFO_BOOK_CURRENT_PAGE, SESSION_INFO_BOOK_DOCKABLE }; @@ -98,6 +99,10 @@ gimp_session_info_book_serialize (GimpConfigWriter *writer, gimp_config_writer_printf (writer, "%d", current_page); gimp_config_writer_close (writer); + gimp_config_writer_open (writer, "pane"); + gimp_config_writer_printf (writer, "%d", dockbook->pane); + gimp_config_writer_close (writer); + children = gtk_container_get_children (GTK_CONTAINER (dockbook)); for (pages = children; pages; pages = g_list_next (pages)) @@ -121,6 +126,8 @@ gimp_session_info_book_deserialize (GScanner *scanner, g_scanner_scope_add_symbol (scanner, scope, "position", GINT_TO_POINTER (SESSION_INFO_BOOK_POSITION)); + g_scanner_scope_add_symbol (scanner, scope, "pane", + GINT_TO_POINTER (SESSION_INFO_BOOK_PANE)); g_scanner_scope_add_symbol (scanner, scope, "current-page", GINT_TO_POINTER (SESSION_INFO_BOOK_CURRENT_PAGE)); g_scanner_scope_add_symbol (scanner, scope, "dockable", @@ -128,6 +135,9 @@ gimp_session_info_book_deserialize (GScanner *scanner, book = gimp_session_info_book_new (); + /* FIXME */ + book->pane = 1; + token = G_TOKEN_LEFT_PAREN; while (g_scanner_peek_next_token (scanner) == token) @@ -149,6 +159,12 @@ gimp_session_info_book_deserialize (GScanner *scanner, goto error; break; + case SESSION_INFO_BOOK_PANE: + token = G_TOKEN_INT; + if (! gimp_scanner_parse_int (scanner, &book->pane)) + goto error; + break; + case SESSION_INFO_BOOK_CURRENT_PAGE: token = G_TOKEN_INT; if (! gimp_scanner_parse_int (scanner, &book->current_page)) @@ -186,6 +202,7 @@ gimp_session_info_book_deserialize (GScanner *scanner, info->books = g_list_append (info->books, book); g_scanner_scope_remove_symbol (scanner, scope, "position"); + g_scanner_scope_remove_symbol (scanner, scope, "pane"); g_scanner_scope_remove_symbol (scanner, scope, "current-page"); g_scanner_scope_remove_symbol (scanner, scope, "dockable"); @@ -209,7 +226,11 @@ gimp_session_info_book_restore (GimpSessionInfoBook *info, dockbook = gimp_dockbook_new (dock->dialog_factory->menu_factory); - gimp_dock_add_book (dock, GIMP_DOCKBOOK (dockbook), -1); + if (info->pane == 1) + gimp_dock_add_book (dock, GIMP_DOCKBOOK (dockbook), -1); + else + gimp_dock_add2_book (dock, GIMP_DOCKBOOK (dockbook), -1); + info->widget = dockbook; diff --git a/app/widgets/gimpsessioninfo-book.h b/app/widgets/gimpsessioninfo-book.h index 8c8dfd7644..a603f2d745 100644 --- a/app/widgets/gimpsessioninfo-book.h +++ b/app/widgets/gimpsessioninfo-book.h @@ -28,6 +28,8 @@ struct _GimpSessionInfoBook gint position; gint current_page; + gint pane; + GtkWidget *widget; /* list of GimpSessionInfoDockable */ diff --git a/app/widgets/gimpsessioninfo-dock.c b/app/widgets/gimpsessioninfo-dock.c index f13ecda0c7..d7d676fb44 100644 --- a/app/widgets/gimpsessioninfo-dock.c +++ b/app/widgets/gimpsessioninfo-dock.c @@ -29,6 +29,7 @@ #include "gimpdialogfactory.h" #include "gimpdock.h" +#include "gimptoolbox.h" #include "gimpsessioninfo.h" #include "gimpsessioninfo-aux.h" #include "gimpsessioninfo-book.h" @@ -37,7 +38,8 @@ enum { - SESSION_INFO_BOOK + SESSION_INFO_BOOK, + SESSION_INFO_GUTTER_POSITION }; @@ -54,9 +56,21 @@ gimp_session_info_dock_serialize (GimpConfigWriter *writer, gimp_config_writer_open (writer, "dock"); + if (GIMP_IS_TOOLBOX (dock)) + { + gint pos = gtk_paned_get_position (GTK_PANED (dock->paned)); + + gimp_config_writer_open (writer, "gutter-position"); + gimp_config_writer_printf (writer, "%d", pos); + gimp_config_writer_close (writer); + } + for (books = dock->dockbooks; books; books = g_list_next (books)) gimp_session_info_book_serialize (writer, books->data); + for (books = dock->dockbooks2; books; books = g_list_next (books)) + gimp_session_info_book_serialize (writer, books->data); + gimp_config_writer_close (writer); } @@ -72,6 +86,8 @@ gimp_session_info_dock_deserialize (GScanner *scanner, g_scanner_scope_add_symbol (scanner, scope, "book", GINT_TO_POINTER (SESSION_INFO_BOOK)); + g_scanner_scope_add_symbol (scanner, scope, "gutter-position", + GINT_TO_POINTER (SESSION_INFO_GUTTER_POSITION)); token = G_TOKEN_LEFT_PAREN; @@ -100,6 +116,12 @@ gimp_session_info_dock_deserialize (GScanner *scanner, break; + case SESSION_INFO_GUTTER_POSITION: + token = G_TOKEN_INT; + /* FIXME: check for errors */ + gimp_scanner_parse_int (scanner, &info->gutter_position); + break; + default: return token; } @@ -116,6 +138,7 @@ gimp_session_info_dock_deserialize (GScanner *scanner, } g_scanner_scope_remove_symbol (scanner, scope, "book"); + g_scanner_scope_remove_symbol (scanner, scope, "gutter-position"); return token; } @@ -162,6 +185,9 @@ gimp_session_info_dock_restore (GimpSessionInfo *info, if (dock && info->aux_info) gimp_session_info_aux_set_list (GTK_WIDGET (dock), info->aux_info); + if (GIMP_IS_TOOLBOX (dock) && info->gutter_position > 0) + gtk_paned_set_position (GTK_PANED (dock->paned), info->gutter_position); + for (books = info->books; books; books = g_list_next (books)) gimp_session_info_book_restore (books->data, dock); diff --git a/app/widgets/gimpsessioninfo.h b/app/widgets/gimpsessioninfo.h index 06f0a733af..7a868fb4eb 100644 --- a/app/widgets/gimpsessioninfo.h +++ b/app/widgets/gimpsessioninfo.h @@ -30,6 +30,9 @@ struct _GimpSessionInfo gint width; gint height; + /* only applies to docks */ + gint gutter_position; + /* only valid while restoring and saving the session */ gboolean open; gint screen; diff --git a/app/widgets/gimptoolbox.c b/app/widgets/gimptoolbox.c index 8979a149b3..ae90e37a12 100644 --- a/app/widgets/gimptoolbox.c +++ b/app/widgets/gimptoolbox.c @@ -121,7 +121,7 @@ static void toolbox_paste_received (GtkClipboard *clipboard, gpointer data); -G_DEFINE_TYPE (GimpToolbox, gimp_toolbox, GIMP_TYPE_IMAGE_DOCK) +G_DEFINE_TYPE (GimpToolbox, gimp_toolbox, GIMP_TYPE_MENU_DOCK) #define parent_class gimp_toolbox_parent_class @@ -163,6 +163,18 @@ gimp_toolbox_class_init (GimpToolboxClass *klass) static void gimp_toolbox_init (GimpToolbox *toolbox) { + GimpDock *dock = GIMP_DOCK (toolbox); + GtkWidget *separator; + + dock->vbox2 = gtk_vbox_new (FALSE, 0); + gtk_paned_add2 (GTK_PANED (dock->paned), dock->vbox2); + gtk_widget_show (dock->vbox2); + + separator = gimp_dock_separator_new (dock); + gtk_box_pack_start (GTK_BOX (dock->vbox2), separator, FALSE, FALSE, 0); + gtk_widget_show (separator); + GIMP_DOCK_SEPARATOR (separator)->pane = 2; + gtk_window_set_role (GTK_WINDOW (toolbox), "gimp-toolbox"); gimp_help_connect (GTK_WIDGET (toolbox), gimp_standard_help_func, @@ -348,6 +360,7 @@ gimp_toolbox_size_allocate (GtkWidget *widget, if (tool_button) { GtkRequisition button_requisition; + GtkAllocation *alloc2; GList *list; gint n_tools; gint tool_rows; @@ -365,7 +378,9 @@ gimp_toolbox_size_allocate (GtkWidget *widget, n_tools++; } - tool_columns = MAX (1, (allocation->width / button_requisition.width)); + alloc2 = &GIMP_DOCK (toolbox)->vbox->allocation; + + tool_columns = MAX (1, (alloc2->width / button_requisition.width)); tool_rows = n_tools / tool_columns; if (n_tools % tool_columns) diff --git a/app/widgets/gimptoolbox.h b/app/widgets/gimptoolbox.h index 051ce6c61e..40b8615c0c 100644 --- a/app/widgets/gimptoolbox.h +++ b/app/widgets/gimptoolbox.h @@ -20,7 +20,7 @@ #define __GIMP_TOOLBOX_H__ -#include "gimpimagedock.h" +#include "gimpmenudock.h" #define GIMP_TYPE_TOOLBOX (gimp_toolbox_get_type ()) @@ -35,7 +35,7 @@ typedef struct _GimpToolboxClass GimpToolboxClass; struct _GimpToolbox { - GimpImageDock parent_instance; + GimpMenuDock parent_instance; GtkWidget *menu_bar; GtkWidget *tool_wbox; @@ -52,7 +52,7 @@ struct _GimpToolbox struct _GimpToolboxClass { - GimpImageDockClass parent_class; + GimpMenuDockClass parent_class; }; diff --git a/app/widgets/gimpviewrenderer.c b/app/widgets/gimpviewrenderer.c index 7a8d1b9919..0075d03132 100644 --- a/app/widgets/gimpviewrenderer.c +++ b/app/widgets/gimpviewrenderer.c @@ -588,7 +588,7 @@ gimp_view_renderer_draw (GimpViewRenderer *renderer, g_return_if_fail (expose_area != NULL); if (G_UNLIKELY (renderer->context == NULL)) - g_warning ("%s: renderer->context is NULL", G_STRFUNC); + g_print ("gimp_view_renderer_draw: renderer->context is NULL\n"); if (! GTK_WIDGET_DRAWABLE (widget)) return; diff --git a/app/widgets/gimpviewrendererimage.c b/app/widgets/gimpviewrendererimage.c index e0c8d80fb6..6923d3e897 100644 --- a/app/widgets/gimpviewrendererimage.c +++ b/app/widgets/gimpviewrendererimage.c @@ -29,6 +29,7 @@ #include "base/temp-buf.h" +#include "core/gimp.h" #include "core/gimpimage.h" #include "gimpviewrendererimage.h" @@ -66,6 +67,10 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer, GimpImage *image = GIMP_IMAGE (renderer->viewable); const gchar *stock_id; + /* XXXX FIXME FIXME XXXX */ + if (! renderer->context) + renderer->context = gimp_get_user_context (image->gimp); + /* The conditions checked here are mostly a hack to hide the fact that * we are creating the channel preview from the image preview and turning * off visibility of a channel has the side-effect of painting the channel diff --git a/etc/sessionrc b/etc/sessionrc index 77122585a0..51f3847fb8 100644 --- a/etc/sessionrc +++ b/etc/sessionrc @@ -1,35 +1,35 @@ # GIMP sessionrc # # This file takes session-specific info (that is info, you want to keep -# between two GIMP sessions). You are not supposed to edit it manually, but -# of course you can do. The sessionrc will be entirely rewritten every time -# you quit GIMP. If this file isn't found, defaults are used. +# between two GIMP sessions). You are not supposed to edit it manually, but +# of course you can do. The sessionrc will be entirely rewritten every time +# you quit GIMP. If this file isn't found, defaults are used. (session-info "toolbox" "dock" (position 48 48) - (size 204 720) - (open-on-exit) - (dock - (book - (dockable "gimp-tool-options")))) -(session-info "dock" "dock" - (position 300 48) - (size 240 720) + (size 444 720) (open-on-exit) (aux-info - (show-image-menu "true") + (show-image-menu "false") (follow-active-image "true")) (dock + (gutter-position 204) (book + (pane 1) + (dockable "gimp-tool-options" + (tab-style icon))) + (book + (pane 2) (dockable "gimp-layer-list" - (tab-style icon)) + (tab-style icon)) (dockable "gimp-channel-list" - (tab-style icon)) + (tab-style icon)) (dockable "gimp-vectors-list" - (tab-style icon)) + (tab-style icon)) (dockable "gimp-undo-history" - (tab-style icon))) + (tab-style icon))) (book + (pane 2) (position 360) (dockable "gimp-color-editor" (tab-style preview))