[nautilus] slot: make NautilusWindowSlot a GtkBox



commit ec391bf3de51ab4ee7f510ab6570fc240a7754c0
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Mon Jan 9 15:48:01 2012 +0100

    slot: make NautilusWindowSlot a GtkBox
    
    Simplifies management of the slot quite a bit.

 src/nautilus-notebook.c            |   14 +++++++-------
 src/nautilus-window-manage-views.c |    3 +--
 src/nautilus-window-manage-views.h |    3 +--
 src/nautilus-window-pane.c         |   32 ++++++--------------------------
 src/nautilus-window-pane.h         |    3 ---
 src/nautilus-window-slot.c         |   16 ++++++++--------
 src/nautilus-window-slot.h         |    7 +++----
 7 files changed, 26 insertions(+), 52 deletions(-)
---
diff --git a/src/nautilus-notebook.c b/src/nautilus-notebook.c
index 000294d..c4e2139 100644
--- a/src/nautilus-notebook.c
+++ b/src/nautilus-notebook.c
@@ -262,7 +262,8 @@ nautilus_notebook_sync_loading (NautilusNotebook *notebook,
 	g_return_if_fail (NAUTILUS_IS_NOTEBOOK (notebook));
 	g_return_if_fail (NAUTILUS_IS_WINDOW_SLOT (slot));
 
-	tab_label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), slot->content_box);
+	tab_label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), 
+						GTK_WIDGET (slot));
 	g_return_if_fail (GTK_IS_WIDGET (tab_label));
 
 	spinner = GTK_WIDGET (g_object_get_data (G_OBJECT (tab_label), "spinner"));
@@ -295,9 +296,8 @@ nautilus_notebook_sync_tab_label (NautilusNotebook *notebook,
 
 	g_return_if_fail (NAUTILUS_IS_NOTEBOOK (notebook));
 	g_return_if_fail (NAUTILUS_IS_WINDOW_SLOT (slot));
-	g_return_if_fail (GTK_IS_WIDGET (slot->content_box));
 
-	hbox = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), slot->content_box);
+	hbox = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), GTK_WIDGET (slot));
 	g_return_if_fail (GTK_IS_WIDGET (hbox));
 
 	label = GTK_WIDGET (g_object_get_data (G_OBJECT (hbox), "label"));
@@ -323,7 +323,7 @@ close_button_clicked_cb (GtkWidget *widget,
 {
 	GtkWidget *notebook;
 
-	notebook = gtk_widget_get_ancestor (slot->content_box, NAUTILUS_TYPE_NOTEBOOK);
+	notebook = gtk_widget_get_ancestor (GTK_WIDGET (slot), NAUTILUS_TYPE_NOTEBOOK);
 	if (notebook != NULL) {
 		g_signal_emit (notebook, signals[TAB_CLOSE_REQUEST], 0, slot);
 	}
@@ -424,12 +424,12 @@ nautilus_notebook_add_tab (NautilusNotebook *notebook,
 	tab_label = build_tab_label (notebook, slot);
 
 	position = gtk_notebook_insert_page (GTK_NOTEBOOK (notebook),
-					     slot->content_box,
+					     GTK_WIDGET (slot),
 					     tab_label,
 					     position);
 
 	gtk_container_child_set (GTK_CONTAINER (notebook),
-				 slot->content_box,
+				 GTK_WIDGET (slot),
 				 "tab-expand", TRUE,
 				 NULL);
 
@@ -440,7 +440,7 @@ nautilus_notebook_add_tab (NautilusNotebook *notebook,
 	/* FIXME gtk bug! */
 	/* FIXME: this should be fixed in gtk 2.12; check & remove this! */
 	/* The signal handler may have reordered the tabs */
-	position = gtk_notebook_page_num (gnotebook, slot->content_box);
+	position = gtk_notebook_page_num (gnotebook, GTK_WIDGET (slot));
 
 	if (jump_to)
 	{
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index 2720ce4..c338569 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -1728,8 +1728,7 @@ nautilus_window_slot_set_content_view (NautilusWindowSlot *slot,
 }
 
 void
-nautilus_window_manage_views_close_slot (NautilusWindowPane *pane,
-					 NautilusWindowSlot *slot)
+nautilus_window_manage_views_close_slot (NautilusWindowSlot *slot)
 {
 	if (slot->content_view != NULL) {
 		nautilus_window_disconnect_content_view (nautilus_window_slot_get_window (slot), 
diff --git a/src/nautilus-window-manage-views.h b/src/nautilus-window-manage-views.h
index 4cb9c02..0a601de 100644
--- a/src/nautilus-window-manage-views.h
+++ b/src/nautilus-window-manage-views.h
@@ -30,8 +30,7 @@
 #include "nautilus-window.h"
 #include "nautilus-window-pane.h"
 
-void nautilus_window_manage_views_close_slot (NautilusWindowPane *pane,
-                                              NautilusWindowSlot *slot);
+void nautilus_window_manage_views_close_slot (NautilusWindowSlot *slot);
 
 
 /* NautilusWindowInfo implementation: */
diff --git a/src/nautilus-window-pane.c b/src/nautilus-window-pane.c
index 7a3a0b2..418ecc4 100644
--- a/src/nautilus-window-pane.c
+++ b/src/nautilus-window-pane.c
@@ -588,7 +588,7 @@ notebook_switch_page_cb (GtkNotebook *notebook,
 	g_assert (widget != NULL);
 
 	/* find slot corresponding to the target page */
-	slot = nautilus_window_pane_get_slot_for_content_box (pane, widget);
+	slot = NAUTILUS_WINDOW_SLOT (widget);
 	g_assert (slot != NULL);
 
 	nautilus_window_set_active_slot (nautilus_window_slot_get_window (slot),
@@ -860,23 +860,6 @@ nautilus_window_pane_new (NautilusWindow *window)
 			     NULL);
 }
 
-NautilusWindowSlot *
-nautilus_window_pane_get_slot_for_content_box (NautilusWindowPane *pane,
-					       GtkWidget *content_box)
-{
-	NautilusWindowSlot *slot;
-	GList *l;
-
-	for (l = pane->slots; l != NULL; l = l->next) {
-		slot = NAUTILUS_WINDOW_SLOT (l->data);
-
-		if (slot->content_box == content_box) {
-			return slot;
-		}
-	}
-	return NULL;
-}
-
 void
 nautilus_window_pane_set_active (NautilusWindowPane *pane,
 				 gboolean is_active)
@@ -1068,12 +1051,15 @@ nautilus_window_pane_close_slot (NautilusWindowPane *pane,
 	pane = slot->pane;
 	notebook = GTK_NOTEBOOK (pane->notebook);
 
-	page_num = gtk_notebook_page_num (notebook, GTK_WIDGET (slot->content_box));
+	nautilus_window_manage_views_close_slot (slot);
+
+	page_num = gtk_notebook_page_num (notebook, GTK_WIDGET (slot));
 	g_assert (page_num >= 0);
 
 	g_signal_handlers_block_by_func (notebook,
-                                        G_CALLBACK (notebook_switch_page_cb),
+					 G_CALLBACK (notebook_switch_page_cb),
 					 pane);
+	/* this will call gtk_widget_destroy on the slot */
 	gtk_notebook_remove_page (notebook, page_num);
 	g_signal_handlers_unblock_by_func (notebook,
 					   G_CALLBACK (notebook_switch_page_cb),
@@ -1082,11 +1068,7 @@ nautilus_window_pane_close_slot (NautilusWindowPane *pane,
 	gtk_notebook_set_show_tabs (notebook,
 				    gtk_notebook_get_n_pages (notebook) > 1);
 
-	nautilus_window_manage_views_close_slot (pane, slot);
-
-	g_object_run_dispose (G_OBJECT (slot));
 	slot->pane = NULL;
-	g_object_unref (slot);
 	pane->slots = g_list_remove (pane->slots, slot);
 }
 
@@ -1114,8 +1096,6 @@ nautilus_window_pane_open_slot (NautilusWindowPane *pane,
 					   G_CALLBACK (notebook_switch_page_cb),
 					   pane);
 
-	gtk_widget_show (GTK_WIDGET (slot->content_box));
-
 	pane->slots = g_list_append (pane->slots, slot);
 
 	return slot;
diff --git a/src/nautilus-window-pane.h b/src/nautilus-window-pane.h
index ec83e17..c7bf583 100644
--- a/src/nautilus-window-pane.h
+++ b/src/nautilus-window-pane.h
@@ -96,9 +96,6 @@ void nautilus_window_pane_sync_search_widgets  (NautilusWindowPane *pane);
 void nautilus_window_pane_set_active (NautilusWindowPane *pane, gboolean is_active);
 void nautilus_window_pane_slot_close (NautilusWindowPane *pane, NautilusWindowSlot *slot);
 
-NautilusWindowSlot* nautilus_window_pane_get_slot_for_content_box (NautilusWindowPane *pane,
-								   GtkWidget *content_box);
-
 void nautilus_window_pane_grab_focus (NautilusWindowPane *pane);
 
 /* bars */
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 54dcb78..69ccebf 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -36,7 +36,7 @@
 
 #include <eel/eel-string.h>
 
-G_DEFINE_TYPE (NautilusWindowSlot, nautilus_window_slot, G_TYPE_OBJECT);
+G_DEFINE_TYPE (NautilusWindowSlot, nautilus_window_slot, GTK_TYPE_BOX);
 
 enum {
 	ACTIVE,
@@ -130,7 +130,7 @@ real_active (NautilusWindowSlot *slot)
 	window = nautilus_window_slot_get_window (slot);
 	pane = slot->pane;
 	page_num = gtk_notebook_page_num (GTK_NOTEBOOK (pane->notebook),
-					  slot->content_box);
+					  GTK_WIDGET (slot));
 	g_assert (page_num >= 0);
 
 	gtk_notebook_set_current_page (GTK_NOTEBOOK (pane->notebook), page_num);
@@ -171,22 +171,22 @@ floating_bar_action_cb (NautilusFloatingBar *floating_bar,
 static void
 nautilus_window_slot_init (NautilusWindowSlot *slot)
 {
-	GtkWidget *content_box, *extras_vbox;
+	GtkWidget *extras_vbox;
 
-	content_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-	slot->content_box = content_box;
-	gtk_widget_show (content_box);
+	gtk_orientable_set_orientation (GTK_ORIENTABLE (slot),
+					GTK_ORIENTATION_VERTICAL);
+	gtk_widget_show (GTK_WIDGET (slot));
 
 	extras_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 	slot->extra_location_widgets = extras_vbox;
-	gtk_box_pack_start (GTK_BOX (content_box), extras_vbox, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (slot), extras_vbox, FALSE, FALSE, 0);
 	gtk_widget_show (extras_vbox);
 
 	slot->view_overlay = gtk_overlay_new ();
 	gtk_widget_add_events (slot->view_overlay,
 			       GDK_ENTER_NOTIFY_MASK |
 			       GDK_LEAVE_NOTIFY_MASK);
-	gtk_box_pack_start (GTK_BOX (content_box), slot->view_overlay, TRUE, TRUE, 0);
+	gtk_box_pack_start (GTK_BOX (slot), slot->view_overlay, TRUE, TRUE, 0);
 	gtk_widget_show (slot->view_overlay);
 
 	slot->floating_bar = nautilus_floating_bar_new ("", FALSE);
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 11faeda..a0ca169 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -44,7 +44,7 @@ typedef enum {
 } NautilusLocationChangeType;
 
 struct NautilusWindowSlotClass {
-	GObjectClass parent_class;
+	GtkBoxClass parent_class;
 
 	/* wrapped NautilusWindowInfo signals, for overloading */
 	void (* active)   (NautilusWindowSlot *slot);
@@ -59,15 +59,14 @@ struct NautilusWindowSlotClass {
  * tab, while spatial windows only have one slot.
  */
 struct NautilusWindowSlot {
-	GObject parent;
+	GtkBox parent;
 
 	NautilusWindowPane *pane;
 
-	/* content_box contains
+	/* slot contains
  	 *  1) an event box containing extra_location_widgets
  	 *  2) the view box for the content view
  	 */
-	GtkWidget *content_box;
 	GtkWidget *extra_location_widgets;
 
 	GtkWidget *view_overlay;



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