From ec0f879ca6e7b41d8bd850e37180c3fa92c35e88 Mon Sep 17 00:00:00 2001
From: Ettore Perazzoli <ettore@src.gnome.org>
Date: Wed, 22 Oct 2003 17:24:38 +0000
Subject: (PADDING): Increase to 6 pixels. (button_toggled_callback): Add a
 cast. (e_sidebar_set_selection_widget): Handle the NULL widget case properly.
 (impl_remove): New, implementation for GtkContainer::remove. (do_layout): Add
 padding between the selection_widget and the button box.

svn path=/trunk/; revision=22989
---
 shell/ChangeLog        | 10 ++++++++++
 shell/e-shell-window.c |  4 ++--
 shell/e-sidebar.c      | 35 +++++++++++++++++++++++++++++++----
 3 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/shell/ChangeLog b/shell/ChangeLog
index 375b7133ee..6ae50e37fd 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,13 @@
+2003-10-22  Ettore Perazzoli  <ettore@ximian.com>
+
+	* e-sidebar.c (PADDING): Increase to 6 pixels.
+	(button_toggled_callback): Add a cast.
+	(e_sidebar_set_selection_widget): Handle the NULL widget case
+	properly.
+	(impl_remove): New, implementation for GtkContainer::remove.
+	(do_layout): Add padding between the selection_widget and the
+	button box.
+
 2003-10-22  Ettore Perazzoli  <ettore@ximian.com>
 
 	* e-shell-window.c (struct _ComponentView): New member button_id.
diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c
index 9cf807e858..7769577a40 100644
--- a/shell/e-shell-window.c
+++ b/shell/e-shell-window.c
@@ -285,7 +285,7 @@ setup_widgets (EShellWindow *window)
 	priv->sidebar = e_sidebar_new ();
 	g_signal_connect (priv->sidebar, "button_selected",
 			  G_CALLBACK (sidebar_button_selected_callback), window);
-	gtk_paned_pack1 (GTK_PANED (paned), priv->sidebar, TRUE, FALSE);
+	gtk_paned_pack1 (GTK_PANED (paned), priv->sidebar, FALSE, FALSE);
 
 	priv->sidebar_notebook = gtk_notebook_new ();
 	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->sidebar_notebook), FALSE);
@@ -293,7 +293,7 @@ setup_widgets (EShellWindow *window)
 
 	priv->view_notebook = gtk_notebook_new ();
 	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->view_notebook), FALSE);
-	gtk_paned_pack2 (GTK_PANED (paned), priv->view_notebook, FALSE, TRUE);
+	gtk_paned_pack2 (GTK_PANED (paned), priv->view_notebook, TRUE, TRUE);
 
 	gtk_paned_set_position (GTK_PANED (paned), 200);
 
diff --git a/shell/e-sidebar.c b/shell/e-sidebar.c
index 1f6df8c451..ce0a29325f 100644
--- a/shell/e-sidebar.c
+++ b/shell/e-sidebar.c
@@ -59,7 +59,7 @@ enum {
 static unsigned int signals[NUM_SIGNALS] = { 0 };
 
 
-#define PADDING 3
+#define PADDING 6
 
 
 /* Callbacks.  */
@@ -79,7 +79,7 @@ button_toggled_callback (GtkToggleButton *toggle_button,
 	for (p = sidebar->priv->buttons; p != NULL; p = p->next) {
 		Button *button = p->data;
 
-		if (button->button_widget != toggle_button) {
+		if (button->button_widget != GTK_WIDGET (toggle_button)) {
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->button_widget), FALSE);
 		} else {
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->button_widget), TRUE);
@@ -201,7 +201,7 @@ do_layout (ESidebar *sidebar)
 		child_allocation.x = allocation->x + PADDING;
 		child_allocation.y = allocation->y + PADDING;
 		child_allocation.width = allocation->width - PADDING * 2;
-		child_allocation.height = y - allocation->y;
+		child_allocation.height = y - allocation->y - PADDING;
 
 		gtk_widget_size_allocate (sidebar->priv->selection_widget, & child_allocation);
 	}
@@ -234,6 +234,30 @@ impl_forall (GtkContainer *container,
 	}
 }
 
+static void
+impl_remove (GtkContainer *container,
+	     GtkWidget *widget)
+{
+	ESidebar *sidebar = E_SIDEBAR (container);
+	GSList *p;
+
+	if (widget == sidebar->priv->selection_widget) {
+		e_sidebar_set_selection_widget (sidebar, NULL);
+		return;
+	}
+
+	for (p = sidebar->priv->buttons; p != NULL; p = p->next) {
+		GtkWidget *button_widget = ((Button *) p->data)->button_widget;
+
+		if (button_widget == widget) {
+			gtk_widget_unparent (button_widget);
+			sidebar->priv->buttons = g_slist_remove_link (sidebar->priv->buttons, p);
+			gtk_widget_queue_resize (GTK_WIDGET (sidebar));
+			break;
+		}
+	}
+}
+
 
 /* GtkWidget methods.  */
 
@@ -309,6 +333,7 @@ class_init (ESidebarClass *class)
 	GObjectClass *object_class = G_OBJECT_CLASS (class);
 
 	container_class->forall = impl_forall;
+	container_class->remove = impl_remove;
 
 	widget_class->size_request = impl_size_request;
 	widget_class->size_allocate = impl_size_allocate;
@@ -358,7 +383,9 @@ e_sidebar_set_selection_widget (ESidebar *sidebar, GtkWidget *widget)
 		gtk_widget_unparent (sidebar->priv->selection_widget);
 
 	sidebar->priv->selection_widget = widget;
-	gtk_widget_set_parent (widget, GTK_WIDGET (sidebar));
+
+	if (widget != NULL)
+		gtk_widget_set_parent (widget, GTK_WIDGET (sidebar));
 
 	gtk_widget_queue_resize (GTK_WIDGET (sidebar));
 }
-- 
cgit v1.2.3