rendered paste bodyIndex: 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),