[nautilus] toolbar: fix toolbar with split pane



commit 1373f01db2180f080e1d7b02e1655fecb33c21f2
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Tue Feb 15 12:50:28 2011 -0500

    toolbar: fix toolbar with split pane
    
    The way we used to instantiate the toolbar, from the navigation window
    UIManager, did not work fine in the new UI design, as we have a toolbar
    for each pane now; so we must instantiate a new UIManager for each pane,
    and add to it the navigation action group to fetch actions from.

 src/Makefile.am                       |    1 +
 src/nautilus-location-bar.c           |   10 +------
 src/nautilus-location-bar.h           |    2 +-
 src/nautilus-navigation-window-pane.c |   13 +++++++-
 src/nautilus-navigation-window-ui.xml |    5 ---
 src/nautilus-toolbar-ui.xml           |    7 ++++
 src/nautilus-toolbar.c                |   50 +++++++++++++++++++++++----------
 src/nautilus-toolbar.h                |    2 +-
 8 files changed, 57 insertions(+), 33 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index ec6246b..7093745 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -230,6 +230,7 @@ ui_DATA = 					\
 	nautilus-directory-view-ui.xml		\
 	nautilus-icon-view-ui.xml		\
 	nautilus-list-view-ui.xml		\
+	nautilus-toolbar-ui.xml			\
 	$(NULL)
 
 CLEANFILES = \
diff --git a/src/nautilus-location-bar.c b/src/nautilus-location-bar.c
index 4076dea..eee748d 100644
--- a/src/nautilus-location-bar.c
+++ b/src/nautilus-location-bar.c
@@ -522,19 +522,11 @@ nautilus_location_bar_init (NautilusLocationBar *bar)
 }
 
 GtkWidget *
-nautilus_location_bar_new (GtkUIManager *ui_manager)
+nautilus_location_bar_new (void)
 {
 	GtkWidget *bar;
-	NautilusLocationBar *location_bar;
 
 	bar = gtk_widget_new (NAUTILUS_TYPE_LOCATION_BAR, NULL);
-	location_bar = NAUTILUS_LOCATION_BAR (bar);
-
-	/* Clipboard */
-	nautilus_clipboard_set_up_editable
-		(GTK_EDITABLE (location_bar->details->entry),
-		 ui_manager,
-		 TRUE);
 
 	return bar;
 }
diff --git a/src/nautilus-location-bar.h b/src/nautilus-location-bar.h
index 45f450e..dd66716 100644
--- a/src/nautilus-location-bar.h
+++ b/src/nautilus-location-bar.h
@@ -62,7 +62,7 @@ typedef struct {
 } NautilusLocationBarClass;
 
 GType      nautilus_location_bar_get_type     	(void);
-GtkWidget* nautilus_location_bar_new          	(GtkUIManager *ui_manager);
+GtkWidget* nautilus_location_bar_new          	(void);
 void       nautilus_location_bar_set_active     (NautilusLocationBar *location_bar,
 						 gboolean is_active);
 NautilusEntry * nautilus_location_bar_get_entry (NautilusLocationBar *location_bar);
diff --git a/src/nautilus-navigation-window-pane.c b/src/nautilus-navigation-window-pane.c
index 7cd8c6b..7b5d859 100644
--- a/src/nautilus-navigation-window-pane.c
+++ b/src/nautilus-navigation-window-pane.c
@@ -24,6 +24,8 @@
 
 #include "nautilus-navigation-window-pane.h"
 #include "nautilus-window-private.h"
+
+#include "nautilus-clipboard.h"
 #include "nautilus-window-manage-views.h"
 #include "nautilus-pathbar.h"
 #include "nautilus-location-bar.h"
@@ -618,13 +620,15 @@ nautilus_navigation_window_pane_setup (NautilusNavigationWindowPane *pane)
 {
 	NautilusEntry *entry;
 	GtkSizeGroup *header_size_group;
+	NautilusNavigationWindow *window;
 
 	pane->widget = gtk_vbox_new (FALSE, 0);
+	window = NAUTILUS_NAVIGATION_WINDOW (NAUTILUS_WINDOW_PANE (pane)->window);
 
-	header_size_group = NAUTILUS_NAVIGATION_WINDOW (NAUTILUS_WINDOW_PANE (pane)->window)->details->header_size_group;
+	header_size_group = window->details->header_size_group;
 
 	/* build the toolbar */
-	pane->tool_bar = nautilus_toolbar_new (nautilus_window_get_ui_manager (NAUTILUS_WINDOW_PANE (pane)->window));
+	pane->tool_bar = nautilus_toolbar_new (window->details->navigation_action_group);
 	gtk_box_pack_start (GTK_BOX (pane->widget),
 			    pane->tool_bar,
 			    FALSE, FALSE, 0);
@@ -648,6 +652,11 @@ nautilus_navigation_window_pane_setup (NautilusNavigationWindowPane *pane)
 	pane->location_bar = nautilus_toolbar_get_location_bar (NAUTILUS_TOOLBAR (pane->tool_bar));
 	gtk_size_group_add_widget (header_size_group, pane->location_bar);
 
+	nautilus_clipboard_set_up_editable
+		(GTK_EDITABLE (nautilus_location_bar_get_entry (NAUTILUS_LOCATION_BAR (pane->location_bar))),
+		 nautilus_window_get_ui_manager (NAUTILUS_WINDOW (window)),
+		 TRUE);
+
 	g_signal_connect_object (pane->location_bar, "location-changed",
 				 G_CALLBACK (navigation_bar_location_changed_callback), pane, 0);
 	g_signal_connect_object (pane->location_bar, "cancel",
diff --git a/src/nautilus-navigation-window-ui.xml b/src/nautilus-navigation-window-ui.xml
index e354624..6b74dae 100644
--- a/src/nautilus-navigation-window-ui.xml
+++ b/src/nautilus-navigation-window-ui.xml
@@ -60,9 +60,4 @@
 		</menu>
         </placeholder>
 </menubar>
-<toolbar name="Toolbar">
-	<toolitem name="Back" action="Back"/>
-	<toolitem name="Forward" action="Forward"/>
-        <toolitem name="Search" action="Search"/>
-</toolbar>
 </ui>
diff --git a/src/nautilus-toolbar-ui.xml b/src/nautilus-toolbar-ui.xml
new file mode 100644
index 0000000..42c88e7
--- /dev/null
+++ b/src/nautilus-toolbar-ui.xml
@@ -0,0 +1,7 @@
+<ui>
+<toolbar name="Toolbar">
+	<toolitem name="Back" action="Back"/>
+	<toolitem name="Forward" action="Forward"/>
+        <toolitem name="Search" action="Search"/>
+</toolbar>
+</ui>
\ No newline at end of file
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index c163c0f..c9c91ef 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -31,10 +31,12 @@
 #include "nautilus-pathbar.h"
 #include "nautilus-window-private.h"
 #include "nautilus-global-preferences.h"
+#include "nautilus-ui-utilities.h"
 
 struct _NautilusToolbarPriv {
 	GtkWidget *toolbar;
 
+	GtkActionGroup *action_group;
 	GtkUIManager *ui_manager;
 
 	GtkWidget *path_bar;
@@ -47,7 +49,7 @@ struct _NautilusToolbarPriv {
 };
 
 enum {
-	PROP_UI_MANAGER = 1,
+	PROP_ACTION_GROUP = 1,
 	PROP_SHOW_LOCATION_ENTRY,
 	PROP_SHOW_SEARCH_BAR,
 	PROP_SHOW_MAIN_BAR,
@@ -83,14 +85,21 @@ nautilus_toolbar_constructed (GObject *obj)
 {
 	NautilusToolbar *self = NAUTILUS_TOOLBAR (obj);
 	GtkToolItem *item;
-	GtkWidget *hbox;
+	GtkWidget *hbox, *toolbar;
+	const gchar *ui;
 
 	G_OBJECT_CLASS (nautilus_toolbar_parent_class)->constructed (obj);
 
-	self->priv->toolbar = gtk_ui_manager_get_widget (self->priv->ui_manager, "/Toolbar");
-	
+	/* add the UI */
+	ui = nautilus_ui_string_get ("nautilus-toolbar-ui.xml");
+	self->priv->ui_manager = gtk_ui_manager_new ();
+	gtk_ui_manager_add_ui_from_string (self->priv->ui_manager, ui, -1, NULL);
+	gtk_ui_manager_insert_action_group (self->priv->ui_manager, self->priv->action_group, 0);
+
+	toolbar = gtk_ui_manager_get_widget (self->priv->ui_manager, "/Toolbar");
+	self->priv->toolbar = toolbar;
 	gtk_box_pack_start (GTK_BOX (self), self->priv->toolbar, TRUE, TRUE, 0);
-	gtk_widget_show (self->priv->toolbar);
+	gtk_widget_show_all (self->priv->toolbar);
 
 	hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_widget_show (hbox);
@@ -100,7 +109,7 @@ nautilus_toolbar_constructed (GObject *obj)
 	gtk_box_pack_start (GTK_BOX (hbox), self->priv->path_bar, TRUE, TRUE, 0);
 
 	/* entry-like location bar */
-	self->priv->location_bar = nautilus_location_bar_new (self->priv->ui_manager);
+	self->priv->location_bar = nautilus_location_bar_new ();
 	gtk_box_pack_start (GTK_BOX (hbox), self->priv->location_bar, TRUE, TRUE, 0);
 
 	item = gtk_tool_item_new ();
@@ -161,8 +170,8 @@ nautilus_toolbar_set_property (GObject *object,
 	NautilusToolbar *self = NAUTILUS_TOOLBAR (object);
 
 	switch (property_id) {
-	case PROP_UI_MANAGER:
-		self->priv->ui_manager = g_value_get_object (value);
+	case PROP_ACTION_GROUP:
+		self->priv->action_group = g_value_get_object (value);
 		break;
 	case PROP_SHOW_LOCATION_ENTRY:
 		nautilus_toolbar_set_show_location_entry (self, g_value_get_boolean (value));
@@ -180,6 +189,16 @@ nautilus_toolbar_set_property (GObject *object,
 }
 
 static void
+nautilus_toolbar_dispose (GObject *obj)
+{
+	NautilusToolbar *self = NAUTILUS_TOOLBAR (obj);
+
+	g_clear_object (&self->priv->ui_manager);
+
+	G_OBJECT_CLASS (nautilus_toolbar_parent_class)->dispose (obj);
+}
+
+static void
 nautilus_toolbar_class_init (NautilusToolbarClass *klass)
 {
 	GObjectClass *oclass;
@@ -188,12 +207,13 @@ nautilus_toolbar_class_init (NautilusToolbarClass *klass)
 	oclass->get_property = nautilus_toolbar_get_property;
 	oclass->set_property = nautilus_toolbar_set_property;
 	oclass->constructed = nautilus_toolbar_constructed;
+	oclass->dispose = nautilus_toolbar_dispose;
 
-	properties[PROP_UI_MANAGER] =
-		g_param_spec_object ("ui-manager",
-				     "The UI manager",
-				     "The UI manager to get actions from",
-				     GTK_TYPE_UI_MANAGER,
+	properties[PROP_ACTION_GROUP] =
+		g_param_spec_object ("action-group",
+				     "The action group",
+				     "The action group to get actions from",
+				     GTK_TYPE_ACTION_GROUP,
 				     G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
 				     G_PARAM_STATIC_STRINGS);
 	properties[PROP_SHOW_LOCATION_ENTRY] =
@@ -220,10 +240,10 @@ nautilus_toolbar_class_init (NautilusToolbarClass *klass)
 }
 
 GtkWidget *
-nautilus_toolbar_new (GtkUIManager *ui_manager)
+nautilus_toolbar_new (GtkActionGroup *action_group)
 {
 	return g_object_new (NAUTILUS_TYPE_TOOLBAR,
-			     "ui-manager", ui_manager,
+			     "action-group", action_group,
 			     "orientation", GTK_ORIENTATION_VERTICAL,
 			     NULL);
 }
diff --git a/src/nautilus-toolbar.h b/src/nautilus-toolbar.h
index 6015edc..0a0cf25 100644
--- a/src/nautilus-toolbar.h
+++ b/src/nautilus-toolbar.h
@@ -64,7 +64,7 @@ struct _NautilusToolbarClass {
 
 GType nautilus_toolbar_get_type (void);
 
-GtkWidget *nautilus_toolbar_new (GtkUIManager *ui_manager);
+GtkWidget *nautilus_toolbar_new (GtkActionGroup *action_group);
 
 GtkWidget *nautilus_toolbar_get_path_bar (NautilusToolbar *self);
 GtkWidget *nautilus_toolbar_get_location_bar (NautilusToolbar *self);



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