All pastes #37456 Raw Edit

Mine

public text v1 · immutable
#37456 ·published 2006-01-19 18:49 UTC
rendered paste body
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)