Index: gedit/gedit-window.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-window.c,v retrieving revision 1.13 diff -u -p -r1.13 gedit-window.c --- gedit/gedit-window.c 19 Jan 2006 12:24:37 -0000 1.13 +++ gedit/gedit-window.c 19 Jan 2006 18:48:23 -0000 @@ -2408,6 +2408,33 @@ notebook_popup_menu (GtkNotebook *notebo } static void +hpaned_restore_position (GtkWidget *widget, + GeditWindow *window) +{ + gint pos; + + pos = MAX (100, gedit_prefs_manager_get_side_panel_size ()); + gtk_paned_set_position (GTK_PANED (window->priv->hpaned), pos); + + /* run this only once */ + g_signal_handlers_disconnect_by_func (widget, hpaned_restore_position, window); +} + +static void +vpaned_restore_position (GtkWidget *widget, + GeditWindow *window) +{ + gint pos; + + pos = widget->allocation.height - + MAX (50, gedit_prefs_manager_get_bottom_panel_size ()); + gtk_paned_set_position (GTK_PANED (window->priv->vpaned), pos); + + /* run this only once */ + g_signal_handlers_disconnect_by_func (widget, vpaned_restore_position, window); +} + +static void side_panel_size_allocate (GtkWidget *widget, GtkAllocation *allocation, GeditWindow *window) @@ -2530,14 +2557,6 @@ create_bottom_panel (GeditWindow *window "hide", G_CALLBACK (bottom_panel_hide), window); - g_signal_connect (window->priv->bottom_panel, - "item_removed", - G_CALLBACK (bottom_panel_item_removed), - window); - g_signal_connect (window->priv->bottom_panel, - "item_added", - G_CALLBACK (bottom_panel_item_added), - window); gtk_paned_set_position (GTK_PANED (window->priv->vpaned), MAX (50, gedit_prefs_manager_get_bottom_panel_size ())); @@ -2581,11 +2600,22 @@ init_panes_visibility (GeditWindow *wind { gtk_action_set_sensitive (action, FALSE); } + + /* start track sensitivity after the initial state is set */ + g_signal_connect (window->priv->bottom_panel, + "item_removed", + G_CALLBACK (bottom_panel_item_removed), + window); + g_signal_connect (window->priv->bottom_panel, + "item_added", + G_CALLBACK (bottom_panel_item_added), + window); } static void gedit_window_init (GeditWindow *window) { + static is_first = TRUE; GtkWidget *main_box; gedit_debug (DEBUG_WINDOW); @@ -2619,17 +2649,12 @@ gedit_window_init (GeditWindow *window) TRUE, TRUE, 0); - gtk_widget_show (window->priv->hpaned); - gedit_debug_message (DEBUG_WINDOW, "Create side panel"); - create_side_panel (window); - window->priv->vpaned = gtk_vpaned_new (); gtk_paned_pack2 (GTK_PANED (window->priv->hpaned), window->priv->vpaned, TRUE, FALSE); - gtk_widget_show (window->priv->vpaned); gedit_debug_message (DEBUG_WINDOW, "Create gedit notebook"); window->priv->notebook = gedit_notebook_new (); @@ -2639,9 +2664,32 @@ gedit_window_init (GeditWindow *window) TRUE); gtk_widget_show (window->priv->notebook); - gedit_debug_message (DEBUG_WINDOW, "Create bottom panel"); + /* side and bottom panels */ + create_side_panel (window); create_bottom_panel (window); + /* restore paned positions as soon as we know the panes allocation. + * This needs to be done only for the first window, the successive + * windows are created by cloning the firts one */ + if (is_first) + { + is_first = FALSE; + + window->priv->side_panel_size = gedit_prefs_manager_get_side_panel_size (); + window->priv->bottom_panel_size = gedit_prefs_manager_get_bottom_panel_size (); + g_signal_connect_after (window->priv->hpaned, + "map", + G_CALLBACK (hpaned_restore_position), + window); + g_signal_connect_after (window->priv->vpaned, + "map", + G_CALLBACK (vpaned_restore_position), + window); + } + + gtk_widget_show (window->priv->hpaned); + gtk_widget_show (window->priv->vpaned); + gedit_debug_message (DEBUG_WINDOW, "Connect signals"); /* Drag and drop support */ gtk_drag_dest_set (GTK_WIDGET (window), @@ -3063,7 +3111,7 @@ _gedit_window_set_bottom_panel_visible ( if (gedit_prefs_manager_bottom_panel_visible_can_set ()) gedit_prefs_manager_set_bottom_panel_visible (visible); - action = gtk_action_group_get_action (window->priv->always_sensitive_action_group, + action = gtk_action_group_get_action (window->priv->action_group, "ViewBottomPanel"); if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) != visible)