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),