All pastes #37390 Raw Edit

Anonymous

public text v1 · immutable
#37390 ·published 2006-01-19 10:15 UTC
rendered paste body
Index: bindings/python/gedit.defs
===================================================================
RCS file: /cvs/gnome/gedit/bindings/python/gedit.defs,v
retrieving revision 1.3
diff -u -p -r1.3 gedit.defs
--- bindings/python/gedit.defs	2 Jan 2006 14:26:39 -0000	1.3
+++ bindings/python/gedit.defs	19 Jan 2006 10:09:37 -0000
@@ -526,6 +526,12 @@
   (return-type "GtkOrientation")
 )
 
+(define-method get_n_items
+  (of-object "GeditPanel")
+  (c-name "gedit_panel_get_n_items")
+  (return-type "gint")
+)
+
 
 ;; From ../../gedit/gedit-plugin.h
 
Index: gedit/gedit-panel.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-panel.c,v
retrieving revision 1.4
diff -u -p -r1.4 gedit-panel.c
--- gedit/gedit-panel.c	9 Jan 2006 00:25:28 -0000	1.4
+++ gedit/gedit-panel.c	19 Jan 2006 10:09:38 -0000
@@ -77,6 +77,8 @@ enum {
 
 /* Signals */
 enum {
+	ITEM_ADDED,
+	ITEM_REMOVED,
 	CLOSE,
 	FOCUS_DOCUMENT,
 	LAST_SIGNAL
@@ -125,7 +127,6 @@ gedit_panel_get_property (GObject    *ob
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 			break;
-
 	}
 }
 
@@ -214,20 +215,44 @@ gedit_panel_class_init (GeditPanelClass 
 	klass->close = gedit_panel_close;
 	klass->focus_document = gedit_panel_focus_document;
 
-	signals[CLOSE] =  g_signal_new ("close",
-					G_OBJECT_CLASS_TYPE (klass),
-					G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-					G_STRUCT_OFFSET (GeditPanelClass, close),
-		  			NULL, NULL,
-		  			g_cclosure_marshal_VOID__VOID,
-					G_TYPE_NONE, 0);
-	signals[FOCUS_DOCUMENT] =  g_signal_new ("focus_document",
-					G_OBJECT_CLASS_TYPE (klass),
-					G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-					G_STRUCT_OFFSET (GeditPanelClass, focus_document),
-		  			NULL, NULL,
-		  			g_cclosure_marshal_VOID__VOID,
-					G_TYPE_NONE, 0);					
+	signals[ITEM_ADDED] =
+		g_signal_new ("item_added",
+			      G_OBJECT_CLASS_TYPE (klass),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (GeditPanelClass, item_added),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__OBJECT,
+			      G_TYPE_NONE,
+			      1,
+			      GEDIT_TYPE_TAB);
+	signals[ITEM_REMOVED] =
+		g_signal_new ("item_removed",
+			      G_OBJECT_CLASS_TYPE (klass),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (GeditPanelClass, item_removed),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__OBJECT,
+			      G_TYPE_NONE,
+			      1,
+			      GTK_TYPE_WIDGET);
+
+	/* Keybinding signals */
+	signals[CLOSE] =
+		g_signal_new ("close",
+			      G_OBJECT_CLASS_TYPE (klass),
+			      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+			      G_STRUCT_OFFSET (GeditPanelClass, close),
+		  	      NULL, NULL,
+		  	      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
+	signals[FOCUS_DOCUMENT] =
+		g_signal_new ("focus_document",
+			      G_OBJECT_CLASS_TYPE (klass),
+			      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+			      G_STRUCT_OFFSET (GeditPanelClass, focus_document),
+		  	      NULL, NULL,
+		  	      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);					
 	binding_set = gtk_binding_set_by_class (klass);
   
 	gtk_binding_entry_add_signal (binding_set, 
@@ -740,6 +765,8 @@ gedit_panel_add_item (GeditPanel  *panel
 				       item,
 				       tab_label,
 				       menu_label);
+
+	g_signal_emit (G_OBJECT (panel), signals[ITEM_ADDED], 0, item);
 }
 
 void
@@ -803,7 +830,10 @@ gedit_panel_remove_item (GeditPanel *pan
 		}
 		gtk_widget_destroy (data->toolbar);
 	}
-	
+
+	/* ref the item to keep it alive during signal emission */
+	g_object_ref (G_OBJECT (item));
+
 	gtk_notebook_remove_page (GTK_NOTEBOOK (panel->priv->notebook), 
 				  page_num);
 
@@ -814,6 +844,10 @@ gedit_panel_remove_item (GeditPanel *pan
 		sync_toolbar (panel, NULL);
 	}
 
+	g_signal_emit (G_OBJECT (panel), signals[ITEM_REMOVED], 0, item);
+
+	g_object_unref (G_OBJECT (item));
+
 	return TRUE;
 }
 
@@ -864,4 +898,10 @@ GtkOrientation
 gedit_panel_get_orientation (GeditPanel *panel)
 {
 	return panel->priv->orientation;
+}
+
+gint
+gedit_panel_get_n_items (GeditPanel *panel)
+{
+	return gtk_notebook_get_n_pages (panel->priv->notebook);
 }
Index: gedit/gedit-panel.h
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-panel.h,v
retrieving revision 1.3
diff -u -p -r1.3 gedit-panel.h
--- gedit/gedit-panel.h	2 Jan 2006 14:26:40 -0000	1.3
+++ gedit/gedit-panel.h	19 Jan 2006 10:09:38 -0000
@@ -70,10 +70,21 @@ typedef struct _GeditPanelClass GeditPan
 struct _GeditPanelClass 
 {
 	GtkVBoxClass parent_class;
-	
+
+	void (* item_added)     (GeditPanel     *panel,
+				 GtkWidget      *item);
+	void (* item_removed)   (GeditPanel     *panel,
+				 GtkWidget      *item);
+
 	/* Keybinding signals */
 	void (* close)          (GeditPanel     *panel);
-	void (* focus_document) (GeditPanel     *panel);	
+	void (* focus_document) (GeditPanel     *panel);
+
+	/* Padding for future expansion */
+	void (*_gedit_reserved1) (void);
+	void (*_gedit_reserved2) (void);
+	void (*_gedit_reserved3) (void);
+	void (*_gedit_reserved4) (void);	
 };
 
 /*
@@ -103,6 +114,8 @@ gboolean	 gedit_panel_item_is_active 	(G
 					    	 GtkWidget      *item);
 
 GtkOrientation	 gedit_panel_get_orientation	(GeditPanel	*panel);
+
+gint		 gedit_panel_get_n_items	(GeditPanel	*panel);
 
 
 G_END_DECLS
Index: gedit/gedit-window.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/gedit-window.c,v
retrieving revision 1.11
diff -u -p -r1.11 gedit-window.c
--- gedit/gedit-window.c	6 Jan 2006 16:50:49 -0000	1.11
+++ gedit/gedit-window.c	19 Jan 2006 10:09:41 -0000
@@ -2482,6 +2482,15 @@ bottom_panel_hide (GtkWidget   *panel,
 }
 
 static void
+bottom_panel_item_removed (GtkWidget   *panel,
+			   GtkWidget   *item,
+			   GeditWindow *window)
+{
+	if (gedit_panel_get_n_items (panel) == 0)
+		_gedit_window_set_bottom_panel_visible (window, FALSE);
+}
+
+static void
 create_bottom_panel (GeditWindow *window) 
 {
 	GtkAction *action;
@@ -2500,10 +2509,13 @@ create_bottom_panel (GeditWindow *window
 			  "size_allocate",
 			  G_CALLBACK (bottom_panel_size_allocate),
 			  window);
-
   	g_signal_connect (window->priv->bottom_panel,
 			  "hide",
 			  G_CALLBACK (bottom_panel_hide),
+			  window);
+  	g_signal_connect (window->priv->bottom_panel,
+			  "item_removed",
+			  G_CALLBACK (bottom_panel_item_removed),
 			  window);
 
 	gtk_paned_set_position (GTK_PANED (window->priv->vpaned),