[anjuta] MessageManager: Moved tabs of message views into grip to save space (requires latest gdl)



commit 4174917061f0eaaaa42db1568d2adcc5cb526c59
Author: Johannes Schmid <jhs gnome org>
Date:   Fri Jun 5 14:28:50 2009 +0200

    MessageManager: Moved tabs of message views into grip to save space (requires latest gdl)
---
 libanjuta/anjuta-shell.c             |   28 +++++++
 libanjuta/anjuta-shell.h             |   17 ++++-
 plugins/message-view/anjuta-msgman.c |  147 +++++++++++++++++++++++++---------
 plugins/message-view/anjuta-msgman.h |    2 +
 plugins/message-view/plugin.c        |   12 +++-
 src/anjuta-app.c                     |  126 +++++++++++++++++++----------
 6 files changed, 249 insertions(+), 83 deletions(-)

diff --git a/libanjuta/anjuta-shell.c b/libanjuta/anjuta-shell.c
index 64a039d..babb0f8 100644
--- a/libanjuta/anjuta-shell.c
+++ b/libanjuta/anjuta-shell.c
@@ -294,6 +294,34 @@ anjuta_shell_add_widget_full (AnjutaShell *shell,
 }
 
 /**
+ * anjuta_shell_add_widget_full:
+ * @shell: A #AnjutaShell interface.
+ * @widget: Then widget to add
+ * @name: Name of the widget. None translated string used to identify it in 
+ * the shell.
+ * @title: title of the widget (translated)
+ * @label: Label widget to use
+ * @placement: Placement of the widget in shell.
+ * @error: Error propagation object.
+ *
+ * Adds @widget in the shell. The @placement tells where the widget should
+ * appear, but generally it will be overridden by the container
+ * (dock, notebook, GtkContainer etc.) saved layout.
+ * use locking. Using this method you can pass a custom widget as label
+ */
+void   anjuta_shell_add_widget_custom (AnjutaShell   *shell,
+                                       GtkWidget     *widget,
+                                       const char      *name,
+                                       const char      *title,
+                                       GtkWidget     *label,
+                                       AnjutaShellPlacement placement,
+                                       GError        **error)
+{
+	ANJUTA_SHELL_GET_IFACE (shell)->add_widget_custom (shell, widget, name, title, label,
+	                                                   placement, error);
+}
+
+/**
  * anjuta_shell_remove_widget:
  * @shell: A #AnjutaShell interface
  * @widget: The widget to remove
diff --git a/libanjuta/anjuta-shell.h b/libanjuta/anjuta-shell.h
index ec4e165..c812041 100644
--- a/libanjuta/anjuta-shell.h
+++ b/libanjuta/anjuta-shell.h
@@ -82,7 +82,7 @@ struct _AnjutaShellIface {
 	AnjutaProfileManager* (*get_profile_manager) (AnjutaShell *shell,
 												  GError **err);
 	
-	void (*add_widget_full)        (AnjutaShell  *shell,
+	void (*add_widget_full)   (AnjutaShell  *shell,
 							   GtkWidget    *widget,
 							   const char   *name,
 							   const char   *title,
@@ -90,6 +90,13 @@ struct _AnjutaShellIface {
 							   AnjutaShellPlacement placement,
 							   gboolean locked,
 							   GError      **error);
+	void (*add_widget_custom)  (AnjutaShell  *shell,
+							   GtkWidget    *widget,
+							   const char   *name,
+							   const char   *title,
+							   GtkWidget    *label,
+							   AnjutaShellPlacement placement,
+							   GError      **error);
 	
 	void (*remove_widget)     (AnjutaShell  *shell,
 							   GtkWidget    *widget,
@@ -142,6 +149,14 @@ void   anjuta_shell_add_widget      (AnjutaShell     *shell,
 									 AnjutaShellPlacement placement,
 									 GError         **error);
 
+void   anjuta_shell_add_widget_custom (AnjutaShell   *shell,
+                                       GtkWidget     *widget,
+                                       const char      *name,
+                                       const char      *title,
+                                       GtkWidget     *label,
+                                       AnjutaShellPlacement placement,
+                                       GError        **error);
+
 void   anjuta_shell_add_widget_full      (AnjutaShell     *shell,
 									 GtkWidget       *widget,
 									 const char      *name,
diff --git a/plugins/message-view/anjuta-msgman.c b/plugins/message-view/anjuta-msgman.c
index 903ad81..8a642a6 100644
--- a/plugins/message-view/anjuta-msgman.c
+++ b/plugins/message-view/anjuta-msgman.c
@@ -30,6 +30,9 @@ struct _AnjutaMsgmanPriv
 	GtkWidget* popup_menu;
 	GtkWidget* tab_popup;
 	GList *views;
+
+	GtkWidget* hbox;
+	GSList* button_group;
 };
 
 struct _AnjutaMsgmanPage
@@ -37,14 +40,38 @@ struct _AnjutaMsgmanPage
 	GtkWidget *widget;
 	GtkWidget *pixmap;
 	GtkWidget *label;
-	GtkWidget *box;
 	GtkWidget *button;
+	GtkWidget *box;
+	GtkWidget *close_button;
 	GtkWidget *close_icon;
 };
 
 typedef struct _AnjutaMsgmanPage AnjutaMsgmanPage;
 
 static void
+on_page_button_toggled (GtkToggleButton* button,
+                        AnjutaMsgman* msgman)
+{
+	AnjutaMsgmanPage* page;
+	int page_num;
+	
+	page = g_object_get_data (G_OBJECT (button), "__page");
+	page_num = gtk_notebook_page_num (GTK_NOTEBOOK(msgman), page->widget);
+
+	if (page_num == gtk_notebook_get_current_page (GTK_NOTEBOOK(msgman)))
+	{
+		if (!gtk_toggle_button_get_active (button))
+		{
+			g_signal_handlers_block_by_func (button, on_page_button_toggled, msgman);
+			gtk_toggle_button_set_active (button, TRUE);
+			g_signal_handlers_unblock_by_func (button, on_page_button_toggled, msgman);
+		}
+	}
+	else
+		gtk_notebook_set_current_page (GTK_NOTEBOOK(msgman), page_num);	
+}
+
+static void
 on_msgman_close_page (GtkButton* button, 
 									AnjutaMsgman *msgman)
 {
@@ -106,6 +133,7 @@ anjuta_msgman_page_new (GtkWidget * view, const gchar * name,
 {
 	AnjutaMsgmanPage *page;
 	int h, w;
+	GtkWidget* box;
 	
 	g_return_val_if_fail (view != NULL, NULL);
 
@@ -114,8 +142,8 @@ anjuta_msgman_page_new (GtkWidget * view, const gchar * name,
 	
 	page->label = gtk_label_new (name);
 	gtk_misc_set_alignment (GTK_MISC(page->label), 0.0, 0.5);
-	page->box = gtk_hbox_new (FALSE, 0);
-	gtk_box_set_spacing (GTK_BOX (page->box), 5);
+	box = gtk_hbox_new (FALSE, 0);
+	gtk_box_set_spacing (GTK_BOX (box), 5);
 	if (pixmap  && strlen(pixmap))
 	{
 		GtkStockItem unused;
@@ -127,48 +155,97 @@ anjuta_msgman_page_new (GtkWidget * view, const gchar * name,
 		{
 			page->pixmap = anjuta_res_get_image_sized (pixmap, 16, 16);
 		}
-		gtk_box_pack_start (GTK_BOX (page->box), page->pixmap, FALSE, FALSE, 0);
+		gtk_box_pack_start (GTK_BOX (box), page->pixmap, FALSE, FALSE, 0);
 	}
-	gtk_box_pack_start (GTK_BOX (page->box), page->label, TRUE, TRUE, 0);
+	gtk_box_pack_start (GTK_BOX (box), page->label, TRUE, TRUE, 0);
 	gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &w, &h);
 	page->close_icon = gtk_image_new_from_stock(GTK_STOCK_CLOSE,
 												GTK_ICON_SIZE_MENU);
 	gtk_widget_set_size_request(page->close_icon, w, h);
 	
-	page->button = gtk_button_new();
-	gtk_container_add(GTK_CONTAINER(page->button), page->close_icon);
-	gtk_widget_set_size_request (page->button, w, h);	
-	gtk_button_set_focus_on_click (GTK_BUTTON (page->button), FALSE);
-	gtk_button_set_relief(GTK_BUTTON(page->button), GTK_RELIEF_NONE);
+	page->close_button = gtk_button_new();
+	gtk_container_add(GTK_CONTAINER(page->close_button), page->close_icon);
+	gtk_widget_set_size_request (page->close_button, w, h);	
+	gtk_button_set_focus_on_click (GTK_BUTTON (page->close_button), FALSE);
+	gtk_button_set_relief(GTK_BUTTON(page->close_button), GTK_RELIEF_NONE);
 	/* This style is created int the document-manager which we simply
 	 * assume is loaded before this plugin
      */
-	gtk_widget_set_name (page->button, "anjuta-tab-close-button");
-	
-	gtk_box_pack_start (GTK_BOX (page->box), page->button, FALSE, FALSE, 0);
-	
-	g_object_set_data (G_OBJECT (page->button), "message_view", page->widget);
-	g_signal_connect (GTK_OBJECT (page->button), "clicked",
+	gtk_widget_set_name (page->close_button, "anjuta-tab-close-button");
+		
+	g_object_set_data (G_OBJECT (page->close_button), "message_view", page->widget);
+	g_signal_connect (GTK_OBJECT (page->close_button), "clicked",
 						G_CALLBACK(on_msgman_close_page),
 						msgman);
+
+	page->button = gtk_toggle_button_new ();
+	g_signal_connect (page->button, "toggled", G_CALLBACK(on_page_button_toggled),
+	                  msgman);
+	g_object_set_data (G_OBJECT(page->button), "__page", page);
+	gtk_container_add (GTK_CONTAINER (page->button), box);
+
+	page->box = gtk_hbox_new (FALSE, 0);
+	gtk_box_pack_start (GTK_BOX(page->box), page->button, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX(page->box), page->close_button, FALSE, FALSE, 0);
+	
+	
+	gtk_widget_show_all (page->box);
+	
 	return page;
 }
 
 static void
 anjuta_msgman_page_destroy (AnjutaMsgmanPage * page)
 {
+	gtk_widget_destroy (page->box);
 	g_free (page);
 }
 
+static AnjutaMsgmanPage *
+anjuta_msgman_page_from_widget (AnjutaMsgman * msgman, MessageView * mv)
+{
+	GList *node;
+	node = msgman->priv->views;
+	while (node)
+	{
+		AnjutaMsgmanPage *page;
+		page = node->data;
+		g_assert (page);
+		if (page->widget == GTK_WIDGET (mv))
+			return page;
+		node = g_list_next (node);
+	}
+	return NULL;
+}
+
 static void
 on_notebook_switch_page (GtkNotebook * notebook,
-			 GtkNotebookPage * page,
+			 GtkNotebookPage * npage,
 			 gint page_num, AnjutaMsgman * msgman)
 {
+	GList* node;
+	AnjutaMsgmanPage* page = anjuta_msgman_page_from_widget(msgman,
+	                                                        MESSAGE_VIEW (gtk_notebook_get_nth_page(GTK_NOTEBOOK(msgman), page_num)));
+	
 	g_return_if_fail (notebook != NULL);
 	g_return_if_fail (page != NULL);
 	g_return_if_fail (msgman != NULL);
-	
+
+	for (node = msgman->priv->views; node != NULL; node = g_list_next (node))
+	{
+		AnjutaMsgmanPage* cur_page = node->data;
+		g_signal_handlers_block_by_func (cur_page->button, on_page_button_toggled, msgman);
+		if (cur_page != page)
+		{
+			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cur_page->button), FALSE);
+		}
+		else
+		{
+			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cur_page->button), TRUE);	
+		}
+		g_signal_handlers_unblock_by_func (cur_page->button, on_page_button_toggled, msgman);			
+	}
+
 	anjuta_msgman_set_current_view(msgman, NULL);
 }
 
@@ -202,6 +279,8 @@ anjuta_msgman_instance_init (AnjutaMsgman * msgman)
 	msgman->priv = g_new0(AnjutaMsgmanPriv, 1);
 	msgman->priv->views = NULL;
 	msgman->priv->tab_popup = create_tab_popup_menu(msgman);
+	msgman->priv->hbox = gtk_hbox_new (FALSE, 5);
+	msgman->priv->button_group = NULL;
 	g_signal_connect(GTK_OBJECT(msgman), "popup-menu", 
                        G_CALLBACK(on_msgman_popup_menu), msgman);
     g_signal_connect(GTK_OBJECT(msgman), "button-press-event", 
@@ -268,7 +347,7 @@ GtkWidget*
 anjuta_msgman_new (GtkWidget *popup_menu)
 {
 	GtkWidget *msgman = NULL;
-	msgman = gtk_widget_new (ANJUTA_TYPE_MSGMAN, NULL);
+	msgman = gtk_widget_new (ANJUTA_TYPE_MSGMAN, "show-tabs", FALSE, NULL);
 	if (msgman)
 	{
 	    ANJUTA_MSGMAN (msgman)->priv->popup_menu = popup_menu;
@@ -280,23 +359,6 @@ anjuta_msgman_new (GtkWidget *popup_menu)
 ANJUTA_TYPE_BEGIN (AnjutaMsgman, anjuta_msgman, GTK_TYPE_NOTEBOOK);
 ANJUTA_TYPE_END;
 
-static AnjutaMsgmanPage *
-anjuta_msgman_page_from_widget (AnjutaMsgman * msgman, MessageView * mv)
-{
-	GList *node;
-	node = msgman->priv->views;
-	while (node)
-	{
-		AnjutaMsgmanPage *page;
-		page = node->data;
-		g_assert (page);
-		if (page->widget == GTK_WIDGET (mv))
-			return page;
-		node = g_list_next (node);
-	}
-	return NULL;
-}
-
 static void
 on_message_view_destroy (MessageView *view, AnjutaMsgman *msgman)
 {
@@ -334,6 +396,7 @@ anjuta_msgman_append_view (AnjutaMsgman * msgman, GtkWidget *mv,
 						   const gchar * name, const gchar * pixmap)
 {
 	AnjutaMsgmanPage *page;
+	int page_num;
 
 	g_return_if_fail (msgman != NULL);
 	g_return_if_fail (mv != NULL);
@@ -341,7 +404,6 @@ anjuta_msgman_append_view (AnjutaMsgman * msgman, GtkWidget *mv,
 
 	gtk_widget_show_all (mv);
 	page = anjuta_msgman_page_new (mv, name, pixmap, msgman);
-	gtk_widget_show_all (page->box);
 	
 	g_signal_handlers_block_by_func (GTK_OBJECT (msgman),
 									 G_CALLBACK
@@ -349,14 +411,16 @@ anjuta_msgman_append_view (AnjutaMsgman * msgman, GtkWidget *mv,
 	msgman->priv->views =
 		g_list_prepend (msgman->priv->views, (gpointer) page);
 
-	gtk_notebook_prepend_page (GTK_NOTEBOOK (msgman), mv, page->box);
-	gtk_notebook_set_current_page (GTK_NOTEBOOK (msgman), 0);
+	page_num = gtk_notebook_append_page (GTK_NOTEBOOK (msgman), mv, NULL);
+
+	gtk_box_pack_start (GTK_BOX(msgman->priv->hbox), page->box, FALSE, FALSE, 0);
 	
 	g_signal_connect (G_OBJECT (mv), "destroy",
 					  G_CALLBACK (on_message_view_destroy), msgman);
 	g_signal_handlers_unblock_by_func (GTK_OBJECT (msgman),
 									   G_CALLBACK
 									   (on_notebook_switch_page), msgman);
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (page->button), TRUE);	
 	g_signal_emit_by_name(G_OBJECT(msgman), "view_changed");
 }
 
@@ -570,3 +634,8 @@ anjuta_msgman_deserialize (AnjutaMsgman *msgman, AnjutaSerializer *serializer)
 	}
 	return TRUE;
 }
+
+GtkWidget* anjuta_msgman_get_hbox (AnjutaMsgman* msgman)
+{
+	return msgman->priv->hbox;
+}
diff --git a/plugins/message-view/anjuta-msgman.h b/plugins/message-view/anjuta-msgman.h
index 3abfebc..cdad12c 100644
--- a/plugins/message-view/anjuta-msgman.h
+++ b/plugins/message-view/anjuta-msgman.h
@@ -79,6 +79,8 @@ gboolean anjuta_msgman_serialize (AnjutaMsgman *msgman,
 gboolean anjuta_msgman_deserialize (AnjutaMsgman *msgman,
 									AnjutaSerializer *serializer);
 
+GtkWidget* anjuta_msgman_get_hbox (AnjutaMsgman* msgman);
+
 void
 on_notify_message_pref (AnjutaPreferences* prefs, const gchar* key,
                         const gchar* value, gpointer user_data);
diff --git a/plugins/message-view/plugin.c b/plugins/message-view/plugin.c
index 6c1c482..f4d2ba3 100644
--- a/plugins/message-view/plugin.c
+++ b/plugins/message-view/plugin.c
@@ -321,9 +321,17 @@ ianjuta_msgman_add_view (IAnjutaMessageManager *plugin,
 	GtkWidget *msgman = ANJUTA_PLUGIN_MESSAGE_VIEW (plugin)->msgman;
 	if (ANJUTA_PLUGIN_MESSAGE_VIEW (plugin)->widget_shown == FALSE)
 	{
-		anjuta_shell_add_widget (shell, msgman,
+		GtkWidget* label = gtk_label_new (_("Messages"));
+		GtkImage* image = gtk_image_new_from_stock ("message-manager-plugin-icon",
+		                                            GTK_ICON_SIZE_MENU);
+		GtkWidget* hbox = anjuta_msgman_get_hbox (msgman);
+		gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+		gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+		gtk_widget_show_all (hbox);
+		
+		anjuta_shell_add_widget_custom (shell, msgman,
 							 "AnjutaMessageView", _("Messages"),
-							 "message-manager-plugin-icon",
+							 hbox,
 							 ANJUTA_SHELL_PLACEMENT_BOTTOM, NULL);
 		ANJUTA_PLUGIN_MESSAGE_VIEW (plugin)->widget_shown = TRUE;
 	}
diff --git a/src/anjuta-app.c b/src/anjuta-app.c
index c6ae648..5144ed7 100644
--- a/src/anjuta-app.c
+++ b/src/anjuta-app.c
@@ -856,6 +856,58 @@ on_widget_removed_from_hash (gpointer widget)
 	g_object_unref (G_OBJECT (widget));
 }
 
+static void
+anjuta_app_setup_widget (AnjutaApp* app,
+                         const gchar* name,
+                         GtkWidget *widget,
+                         GtkWidget* item,
+                         const gchar* title,
+                         gboolean locked)
+{
+	GtkCheckMenuItem* menuitem;
+
+
+	/* Add the widget to hash */
+	if (app->widgets == NULL)
+	{
+		app->widgets = g_hash_table_new_full (g_str_hash, g_str_equal,
+											  g_free,
+											  on_widget_removed_from_hash);
+	}
+	g_hash_table_insert (app->widgets, g_strdup (name), widget);
+	g_object_ref (widget);
+	
+	/* Add toggle button for the widget */
+	menuitem = GTK_CHECK_MENU_ITEM (gtk_check_menu_item_new_with_label (title));
+	gtk_widget_show (GTK_WIDGET (menuitem));
+	gtk_check_menu_item_set_active (menuitem, TRUE);
+	gtk_menu_shell_append (GTK_MENU_SHELL (app->view_menu), GTK_WIDGET (menuitem));
+
+	if (locked)
+		g_object_set( G_OBJECT(menuitem), "visible", FALSE, NULL);
+
+	
+	g_object_set_data (G_OBJECT (widget), "app-object", app);
+	g_object_set_data (G_OBJECT (widget), "menuitem", menuitem);
+	g_object_set_data (G_OBJECT (widget), "dockitem", item);
+	
+	/* For toggling widget view on/off */
+	g_signal_connect (G_OBJECT (menuitem), "toggled",
+					  G_CALLBACK (on_toggle_widget_view), item);
+	
+	/*
+	  Watch for widget removal/destruction so that it could be
+	  removed from widgets hash.
+	*/
+	g_signal_connect (G_OBJECT (item), "remove",
+					  G_CALLBACK (on_widget_remove), app);
+	g_signal_connect_after (G_OBJECT (widget), "destroy",
+					  G_CALLBACK (on_widget_destroy), app);
+
+	gtk_widget_show_all (item);
+}
+                         
+
 static void 
 anjuta_app_add_widget_full (AnjutaShell *shell, 
 					   GtkWidget *widget,
@@ -868,7 +920,6 @@ anjuta_app_add_widget_full (AnjutaShell *shell,
 {
 	AnjutaApp *app;
 	GtkWidget *item;
-	GtkCheckMenuItem* menuitem;
 
 	g_return_if_fail (ANJUTA_IS_APP (shell));
 	g_return_if_fail (GTK_IS_WIDGET (widget));
@@ -877,21 +928,6 @@ anjuta_app_add_widget_full (AnjutaShell *shell,
 
 	app = ANJUTA_APP (shell);
 	
-	/*
-	anjuta_shell_add (shell, name, G_TYPE_FROM_INSTANCE (widget),
-					  widget, NULL);
-	*/
-
-	/* Add the widget to hash */
-	if (app->widgets == NULL)
-	{
-		app->widgets = g_hash_table_new_full (g_str_hash, g_str_equal,
-											  g_free,
-											  on_widget_removed_from_hash);
-	}
-	g_hash_table_insert (app->widgets, g_strdup (name), widget);
-	g_object_ref (widget);
-	
 	/* Add the widget to dock */
 	if (stock_id == NULL)
 		item = gdl_dock_item_new (name, title, GDL_DOCK_ITEM_BEH_NORMAL);
@@ -914,35 +950,42 @@ anjuta_app_add_widget_full (AnjutaShell *shell,
 	
 	if (locked)
 		gdl_dock_item_set_default_position(GDL_DOCK_ITEM(item), GDL_DOCK_OBJECT(app->dock));
-	
-	gtk_widget_show_all (item);
-	
-	/* Add toggle button for the widget */
-	menuitem = GTK_CHECK_MENU_ITEM (gtk_check_menu_item_new_with_label (title));
-	gtk_widget_show (GTK_WIDGET (menuitem));
-	gtk_check_menu_item_set_active (menuitem, TRUE);
-	gtk_menu_shell_append (GTK_MENU_SHELL (app->view_menu), GTK_WIDGET (menuitem));
 
-	if (locked)
-		g_object_set( G_OBJECT(menuitem), "visible", FALSE, NULL);
+	anjuta_app_setup_widget (app, name, widget, item, title, locked);
+}
 
+static void
+anjuta_app_add_widget_custom (AnjutaShell *shell, 
+                              GtkWidget *widget,
+                              const char *name,
+                              const char *title,
+                              GtkWidget *label,
+                              AnjutaShellPlacement placement,
+                              GError **error)
+{
+	AnjutaApp *app;
+	GtkWidget *item;
+	GtkWidget *grip;
 	
-	g_object_set_data (G_OBJECT (widget), "app-object", app);
-	g_object_set_data (G_OBJECT (widget), "menuitem", menuitem);
-	g_object_set_data (G_OBJECT (widget), "dockitem", item);
-	
-	/* For toggling widget view on/off */
-	g_signal_connect (G_OBJECT (menuitem), "toggled",
-					  G_CALLBACK (on_toggle_widget_view), item);
+	g_return_if_fail (ANJUTA_IS_APP (shell));
+	g_return_if_fail (GTK_IS_WIDGET (widget));
+	g_return_if_fail (name != NULL);
+	g_return_if_fail (title != NULL);
+
+	app = ANJUTA_APP (shell);
+
+	/* Add the widget to dock */
+	item = gdl_dock_item_new (name, title, GDL_DOCK_ITEM_BEH_NORMAL);
+
+	gtk_container_add (GTK_CONTAINER (item), widget);
+    gdl_dock_add_item (GDL_DOCK (app->dock),
+                       GDL_DOCK_ITEM (item), placement);
 	
-	/*
-	  Watch for widget removal/destruction so that it could be
-	  removed from widgets hash.
-	*/
-	g_signal_connect (G_OBJECT (item), "remove",
-					  G_CALLBACK (on_widget_remove), app);
-	g_signal_connect_after (G_OBJECT (widget), "destroy",
-					  G_CALLBACK (on_widget_destroy), app);
+	grip = gdl_dock_item_get_grip (GDL_DOCK_ITEM (item));
+
+	gdl_dock_item_grip_set_label (GDL_DOCK_ITEM_GRIP (grip), label);
+
+	anjuta_app_setup_widget (app, name, widget, item, title, FALSE);
 }
 
 static void 
@@ -1055,6 +1098,7 @@ static void
 anjuta_shell_iface_init (AnjutaShellIface *iface)
 {
 	iface->add_widget_full = anjuta_app_add_widget_full;
+	iface->add_widget_custom = anjuta_app_add_widget_custom;
 	iface->remove_widget = anjuta_app_remove_widget;
 	iface->present_widget = anjuta_app_present_widget;
 	iface->add_value = anjuta_app_add_value;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]