summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYosef Or Boczko <yoseforb@gmail.com>2013-08-20 17:59:58 +0300
committerCosimo Cecchi <cosimoc@gnome.org>2013-08-20 10:09:45 -0700
commit10a7f7b511cddb0648b94a223ddcc367b9cba7a1 (patch)
treece3b813be9a68bfc813cbb35b8d920c93fc59716
parent41f939f1cdb859c252199981ab0350bafce28958 (diff)
downloadnautilus-10a7f7b511cddb0648b94a223ddcc367b9cba7a1.tar.gz
toolbar: port GtkToolbar to GtkBox and add close button
also fix margin in RTL, and set the header bar as titlebar for the window. https://bugzilla.gnome.org/show_bug.cgi?id=706376
-rw-r--r--src/nautilus-toolbar.c178
-rw-r--r--src/nautilus-toolbar.h4
-rw-r--r--src/nautilus-window.c7
3 files changed, 99 insertions, 90 deletions
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index 9ef565bed..742ae32ee 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -50,8 +50,6 @@ struct _NautilusToolbarPriv {
GtkWidget *path_bar;
GtkWidget *location_entry;
- GtkToolItem *back_forward;
-
gboolean show_location_entry;
guint popup_timeout_id;
@@ -65,7 +63,7 @@ enum {
static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
-G_DEFINE_TYPE (NautilusToolbar, nautilus_toolbar, GTK_TYPE_BOX);
+G_DEFINE_TYPE (NautilusToolbar, nautilus_toolbar, GTK_TYPE_FRAME);
static void unschedule_menu_popup_timeout (NautilusToolbar *self);
@@ -83,20 +81,6 @@ toolbar_update_appearance (NautilusToolbar *self)
!show_location_entry);
}
-static gint
-get_icon_margin (NautilusToolbar *self)
-{
- GtkIconSize toolbar_size;
- gint toolbar_size_px, menu_size_px;
-
- toolbar_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (self->priv->toolbar));
-
- gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &menu_size_px, NULL);
- gtk_icon_size_lookup (toolbar_size, &toolbar_size_px, NULL);
-
- return (gint) floor ((toolbar_size_px - menu_size_px) / 2.0);
-}
-
static GtkWidget *
toolbar_create_toolbutton (NautilusToolbar *self,
gboolean create_menu,
@@ -119,7 +103,6 @@ toolbar_create_toolbutton (NautilusToolbar *self,
}
image = gtk_image_new ();
- g_object_set (image, "margin", get_icon_margin (self), NULL);
gtk_button_set_image (GTK_BUTTON (button), image);
@@ -397,21 +380,32 @@ gear_menu_key_press (GtkWidget *widget,
}
static void
+close_button_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ NautilusToolbar *self = user_data;
+
+ gtk_window_close (GTK_WINDOW (self->priv->window));
+}
+
+static void
nautilus_toolbar_constructed (GObject *obj)
{
NautilusToolbar *self = NAUTILUS_TOOLBAR (obj);
- GtkWidget *hbox, *toolbar;
- GtkStyleContext *context;
- GtkWidget *tool_button;
+ GtkWidget *toolbar;
+ GtkWidget *button;
GtkWidget *menu;
GtkWidget *box;
- GtkToolItem *back_forward;
- GtkToolItem *tool_item;
+ GtkWidget *separator;
GtkUIManager *ui_manager;
gboolean rtl;
G_OBJECT_CLASS (nautilus_toolbar_parent_class)->constructed (obj);
+ self->priv->toolbar = toolbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ g_object_set (toolbar, "margin", 6, NULL);
+ gtk_container_add (GTK_CONTAINER (self), toolbar);
+
rtl = gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL;
ui_manager = nautilus_window_get_ui_manager (self->priv->window);
@@ -419,112 +413,131 @@ nautilus_toolbar_constructed (GObject *obj)
gtk_style_context_set_junction_sides (gtk_widget_get_style_context (GTK_WIDGET (self)),
GTK_JUNCTION_BOTTOM);
- toolbar = gtk_toolbar_new ();
- self->priv->toolbar = toolbar;
-
- gtk_box_pack_start (GTK_BOX (self), self->priv->toolbar, TRUE, TRUE, 0);
- gtk_widget_show_all (self->priv->toolbar);
-
- context = gtk_widget_get_style_context (toolbar);
- /* Set the MENUBAR style class so it's possible to drag the app
- * using the toolbar. */
- gtk_style_context_add_class (context, GTK_STYLE_CLASS_MENUBAR);
-
/* Back and Forward */
- back_forward = gtk_tool_item_new ();
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
/* Back */
- tool_button = toolbar_create_toolbutton (self, FALSE, FALSE, NAUTILUS_ACTION_BACK, NULL);
- gtk_action_set_icon_name (gtk_activatable_get_related_action (tool_button),
+ button = toolbar_create_toolbutton (self, FALSE, FALSE, NAUTILUS_ACTION_BACK, NULL);
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_action_set_icon_name (gtk_activatable_get_related_action (GTK_ACTIVATABLE (button)),
rtl ? "go-previous-rtl-symbolic" : "go-previous-symbolic");
- navigation_button_setup_menu (self, tool_button, NAUTILUS_NAVIGATION_DIRECTION_BACK);
- gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (tool_button));
+ navigation_button_setup_menu (self, button, NAUTILUS_NAVIGATION_DIRECTION_BACK);
+ gtk_container_add (GTK_CONTAINER (box), button);
/* Forward */
- tool_button = toolbar_create_toolbutton (self, FALSE, FALSE, NAUTILUS_ACTION_FORWARD, NULL);
- gtk_action_set_icon_name (gtk_activatable_get_related_action (tool_button),
+ button = toolbar_create_toolbutton (self, FALSE, FALSE, NAUTILUS_ACTION_FORWARD, NULL);
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_action_set_icon_name (gtk_activatable_get_related_action (GTK_ACTIVATABLE (button)),
rtl ? "go-next-rtl-symbolic" : "go-next-symbolic");
- navigation_button_setup_menu (self, tool_button, NAUTILUS_NAVIGATION_DIRECTION_FORWARD);
- gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (tool_button));
+ navigation_button_setup_menu (self, button, NAUTILUS_NAVIGATION_DIRECTION_FORWARD);
+ gtk_container_add (GTK_CONTAINER (box), button);
gtk_style_context_add_class (gtk_widget_get_style_context (box),
GTK_STYLE_CLASS_RAISED);
gtk_style_context_add_class (gtk_widget_get_style_context (box),
GTK_STYLE_CLASS_LINKED);
- gtk_container_add (GTK_CONTAINER (back_forward), box);
- gtk_container_add (GTK_CONTAINER (self->priv->toolbar), GTK_WIDGET (back_forward));
+ gtk_box_pack_start (GTK_BOX (toolbar), box, FALSE, FALSE, 0);
- gtk_widget_show_all (GTK_WIDGET (back_forward));
- gtk_widget_set_margin_right (GTK_WIDGET (back_forward), 12);
+ if (rtl) {
+ gtk_widget_set_margin_left (box, 12);
+ } else {
+ gtk_widget_set_margin_right (box, 12);
+ }
/* regular path bar */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_widget_show (hbox);
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
self->priv->path_bar = g_object_new (NAUTILUS_TYPE_PATH_BAR, NULL);
- gtk_box_pack_start (GTK_BOX (hbox), self->priv->path_bar, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (box), self->priv->path_bar, TRUE, TRUE, 0);
/* entry-like location bar */
self->priv->location_entry = nautilus_location_entry_new ();
- gtk_box_pack_start (GTK_BOX (hbox), self->priv->location_entry, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (box), self->priv->location_entry, TRUE, TRUE, 0);
- tool_item = gtk_tool_item_new ();
- gtk_tool_item_set_expand (tool_item, TRUE);
- gtk_container_add (GTK_CONTAINER (tool_item), hbox);
- gtk_container_add (GTK_CONTAINER (self->priv->toolbar), GTK_WIDGET (tool_item));
- gtk_widget_show (GTK_WIDGET (tool_item));
+ gtk_box_pack_start (GTK_BOX (toolbar), box, TRUE, TRUE, 0);
/* search */
- tool_item = gtk_tool_item_new ();
- tool_button = toolbar_create_toolbutton (self, FALSE, TRUE, NAUTILUS_ACTION_SEARCH, NULL);
- gtk_container_add (GTK_CONTAINER (tool_item), GTK_WIDGET (tool_button));
- gtk_container_add (GTK_CONTAINER (self->priv->toolbar), GTK_WIDGET (tool_item));
- gtk_widget_show_all (GTK_WIDGET (tool_item));
- gtk_widget_set_margin_left (GTK_WIDGET (tool_item), 12);
+ button = toolbar_create_toolbutton (self, FALSE, TRUE, NAUTILUS_ACTION_SEARCH, NULL);
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_container_add (GTK_CONTAINER (toolbar), button);
+ if (rtl) {
+ gtk_widget_set_margin_right (button, 76);
+ } else {
+ gtk_widget_set_margin_left (button, 76);
+ }
/* View buttons */
- tool_item = gtk_tool_item_new ();
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- tool_button = toolbar_create_toolbutton (self, FALSE, TRUE, NAUTILUS_ACTION_VIEW_LIST, NULL);
- gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (tool_button));
- tool_button = toolbar_create_toolbutton (self, FALSE, TRUE, NAUTILUS_ACTION_VIEW_GRID, NULL);
- gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (tool_button));
- tool_button = toolbar_create_toolbutton (self, TRUE, FALSE, "go-down-symbolic", _("View options"));
- gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (tool_button));
+ button = toolbar_create_toolbutton (self, FALSE, TRUE, NAUTILUS_ACTION_VIEW_LIST, NULL);
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_container_add (GTK_CONTAINER (box), button);
+ button = toolbar_create_toolbutton (self, FALSE, TRUE, NAUTILUS_ACTION_VIEW_GRID, NULL);
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_container_add (GTK_CONTAINER (box), button);
+ button = toolbar_create_toolbutton (self, TRUE, FALSE, "go-down-symbolic", _("View options"));
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_container_add (GTK_CONTAINER (box), button);
menu = gtk_ui_manager_get_widget (ui_manager, "/ViewMenu");
- gtk_menu_button_set_popup (GTK_MENU_BUTTON (tool_button), menu);
+ gtk_menu_button_set_popup (GTK_MENU_BUTTON (button), menu);
gtk_style_context_add_class (gtk_widget_get_style_context (box),
GTK_STYLE_CLASS_RAISED);
gtk_style_context_add_class (gtk_widget_get_style_context (box),
GTK_STYLE_CLASS_LINKED);
- gtk_container_add (GTK_CONTAINER (tool_item), box);
- gtk_container_add (GTK_CONTAINER (self->priv->toolbar), GTK_WIDGET (tool_item));
- gtk_widget_show_all (GTK_WIDGET (tool_item));
- gtk_widget_set_margin_left (GTK_WIDGET (tool_item), 12);
+ gtk_container_add (GTK_CONTAINER (toolbar), box);
+ if (rtl) {
+ gtk_widget_set_margin_right (box, 12);
+ } else {
+ gtk_widget_set_margin_left (box, 12);
+ }
/* Action Menu */
- tool_item = gtk_tool_item_new ();
- tool_button = toolbar_create_toolbutton (self, TRUE, FALSE, "emblem-system-symbolic", _("Location options"));
+ button = toolbar_create_toolbutton (self, TRUE, FALSE, "emblem-system-symbolic", _("Location options"));
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
menu = gtk_ui_manager_get_widget (ui_manager, "/ActionMenu");
gtk_widget_set_halign (menu, GTK_ALIGN_END);
- gtk_menu_button_set_popup (GTK_MENU_BUTTON (tool_button), menu);
- gtk_actionable_set_action_name (GTK_ACTIONABLE (tool_button), "win.gear-menu");
+ gtk_menu_button_set_popup (GTK_MENU_BUTTON (button), menu);
+ gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "win.gear-menu");
g_signal_connect (menu, "key-press-event", G_CALLBACK (gear_menu_key_press), self);
- gtk_container_add (GTK_CONTAINER (tool_item), tool_button);
- gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET (tool_item));
- gtk_widget_show_all (GTK_WIDGET (tool_item));
- gtk_widget_set_margin_left (GTK_WIDGET (tool_item), 12);
+ gtk_container_add (GTK_CONTAINER (toolbar), button);
+ if (rtl) {
+ gtk_widget_set_margin_right (button, 12);
+ } else {
+ gtk_widget_set_margin_left (button, 12);
+ }
+
+ /* Separator and Close */
+ separator = gtk_separator_new (GTK_ORIENTATION_VERTICAL);
+ gtk_container_add (GTK_CONTAINER (toolbar), separator);
+
+ if (rtl) {
+ gtk_widget_set_margin_right (separator, 8);
+ } else {
+ gtk_widget_set_margin_left (separator, 8);
+ }
+
+ button = gtk_button_new_from_icon_name ("window-close-symbolic",
+ GTK_ICON_SIZE_MENU);
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (close_button_clicked), self);
+ gtk_container_add (GTK_CONTAINER (toolbar), button);
+
+ if (rtl) {
+ gtk_widget_set_margin_right (button, 6);
+ } else {
+ gtk_widget_set_margin_left (button, 6);
+ }
g_signal_connect_swapped (nautilus_preferences,
"changed::" NAUTILUS_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY,
G_CALLBACK (toolbar_update_appearance), self);
+ gtk_widget_show_all (toolbar);
toolbar_update_appearance (self);
}
@@ -620,7 +633,6 @@ nautilus_toolbar_new (NautilusWindow *window)
{
return g_object_new (NAUTILUS_TYPE_TOOLBAR,
"window", window,
- "orientation", GTK_ORIENTATION_VERTICAL,
NULL);
}
diff --git a/src/nautilus-toolbar.h b/src/nautilus-toolbar.h
index b3f6a5e7d..c3ca8e306 100644
--- a/src/nautilus-toolbar.h
+++ b/src/nautilus-toolbar.h
@@ -52,14 +52,14 @@ typedef enum {
} NautilusToolbarMode;
struct _NautilusToolbar {
- GtkBox parent;
+ GtkFrame parent;
/* private */
NautilusToolbarPriv *priv;
};
struct _NautilusToolbarClass {
- GtkBoxClass parent_class;
+ GtkFrameClass parent_class;
};
GType nautilus_toolbar_get_type (void);
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 371e52bfa..08cea59ce 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -1486,11 +1486,9 @@ nautilus_window_constructed (GObject *self)
/* Register to menu provider extension signal managing menu updates */
g_signal_connect_object (nautilus_signaller_get_current (), "popup-menu-changed",
G_CALLBACK (nautilus_window_load_extension_menus), window, G_CONNECT_SWAPPED);
+
window->details->toolbar = create_toolbar (window);
- gtk_container_add (GTK_CONTAINER (grid), window->details->toolbar);
- gtk_widget_set_hexpand (window->details->toolbar, TRUE);
- gtk_widget_set_vexpand (window->details->toolbar, FALSE);
- gtk_widget_show (window->details->toolbar);
+ gtk_window_set_titlebar (GTK_WINDOW (window), window->details->toolbar);
window->details->content_paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
gtk_widget_set_hexpand (window->details->content_paned, TRUE);
@@ -2191,7 +2189,6 @@ nautilus_window_init (NautilusWindow *window)
/* Set initial window title */
gtk_window_set_title (GTK_WINDOW (window), _("Files"));
gtk_window_set_icon_name (GTK_WINDOW (window), "system-file-manager");
- gtk_window_set_hide_titlebar_when_maximized (GTK_WINDOW (window), TRUE);
}
static void