[nautilus] toolbar: fix toolbar with split pane
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] toolbar: fix toolbar with split pane
- Date: Thu, 17 Feb 2011 16:30:13 +0000 (UTC)
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]