[nautilus/wip/gbsneto/view-menu] toolbar: bind the window slot icon to view button
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/gbsneto/view-menu] toolbar: bind the window slot icon to view button
- Date: Tue, 11 Aug 2015 17:59:13 +0000 (UTC)
commit b1c306e57e147b5d9a721ef52c5ef951b7a946c4
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Tue Aug 11 14:55:43 2015 -0300
toolbar: bind the window slot icon to view button
NautilusWindowSlot currently performs a check on the
window action state in order to determine the correct
icon for the view button.
Since we're trying to isolate the view, hardcoded checks
agains the action state should be avoided.
Fix that by binding the newly added NautilusWindowSlot::icon
property to the view button's icon.
src/nautilus-toolbar-ui.xml | 6 ++++
src/nautilus-toolbar.c | 61 ++++++++++++++++++++++++-------------------
src/nautilus-toolbar.h | 4 +++
src/nautilus-window.c | 2 +
4 files changed, 46 insertions(+), 27 deletions(-)
---
diff --git a/src/nautilus-toolbar-ui.xml b/src/nautilus-toolbar-ui.xml
index a417667..52d5d63 100644
--- a/src/nautilus-toolbar-ui.xml
+++ b/src/nautilus-toolbar-ui.xml
@@ -104,6 +104,12 @@
<style>
<class name="image-button"/>
</style>
+ <child>
+ <object class="GtkImage" id="view_icon">
+ <property name="visible">True</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
<child internal-child="accessible">
<object class="AtkObject">
<property name="accessible-name" translatable="yes">View menu</property>
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index 3e33d28..3607c90 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -72,6 +72,7 @@ struct _NautilusToolbarPrivate {
GtkWidget *operations_revealer;
GtkWidget *operations_icon;
GtkWidget *view_menu_widget;
+ GtkWidget *view_icon;
GtkWidget *sort_menu;
GtkWidget *sort_trash_time;
GtkWidget *sort_search_relevance;
@@ -86,6 +87,10 @@ struct _NautilusToolbarPrivate {
GtkWidget *back_button;
NautilusProgressInfoManager *progress_manager;
+
+ /* active slot & bindings */
+ NautilusWindowSlot *active_slot;
+ GBinding *icon_binding;
};
enum {
@@ -263,31 +268,6 @@ show_menu (NautilusToolbar *self,
}
static void
-action_view_mode_state_changed (GActionGroup *action_group,
- gchar *action_name,
- GVariant *value,
- gpointer user_data)
-{
- NautilusToolbar *self = user_data;
- const gchar *view_mode = g_variant_get_string (value, NULL);
- const gchar *name;
- GtkWidget *image;
-
- if (g_strcmp0 (view_mode, "list") == 0) {
- name = "view-list-symbolic";
- } else if (g_strcmp0 (view_mode, "grid") == 0) {
- name = "view-grid-symbolic";
- } else {
- g_assert_not_reached ();
- }
-
- image = gtk_image_new ();
- gtk_button_set_image (GTK_BUTTON (self->priv->view_button), image);
- gtk_image_set_from_icon_name (GTK_IMAGE (image), name,
- GTK_ICON_SIZE_MENU);
-}
-
-static void
action_reload_enabled_changed (GActionGroup *action_group,
gchar *action_name,
gboolean enabled,
@@ -318,8 +298,6 @@ nautilus_toolbar_set_window (NautilusToolbar *self,
G_CALLBACK (action_stop_enabled_changed), self);
g_signal_connect (self->priv->window, "action-enabled-changed::reload",
G_CALLBACK (action_reload_enabled_changed), self);
- g_signal_connect (self->priv->window, "action-state-changed::view-mode",
- G_CALLBACK (action_view_mode_state_changed), self);
}
#define MENU_POPUP_TIMEOUT 1200
@@ -901,6 +879,7 @@ nautilus_toolbar_class_init (NautilusToolbarClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, NautilusToolbar, operations_container);
gtk_widget_class_bind_template_child_private (widget_class, NautilusToolbar, operations_revealer);
gtk_widget_class_bind_template_child_private (widget_class, NautilusToolbar, view_button);
+ gtk_widget_class_bind_template_child_private (widget_class, NautilusToolbar, view_icon);
gtk_widget_class_bind_template_child_private (widget_class, NautilusToolbar, action_button);
gtk_widget_class_bind_template_child_private (widget_class, NautilusToolbar, path_bar_container);
gtk_widget_class_bind_template_child_private (widget_class, NautilusToolbar,
location_entry_container);
@@ -1000,3 +979,31 @@ nautilus_toolbar_set_show_location_entry (NautilusToolbar *self,
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_LOCATION_ENTRY]);
}
}
+
+void
+nautilus_toolbar_set_active_slot (NautilusToolbar *toolbar,
+ NautilusWindowSlot *slot)
+{
+ g_return_if_fail (NAUTILUS_IS_TOOLBAR (toolbar));
+
+ if (toolbar->priv->icon_binding) {
+ g_clear_pointer (&toolbar->priv->icon_binding, g_binding_unbind);
+ }
+
+ if (toolbar->priv->active_slot != slot) {
+ toolbar->priv->active_slot = slot;
+
+ if (slot) {
+ GIcon *icon;
+
+ icon = nautilus_window_slot_get_icon (slot);
+
+ gtk_image_set_from_gicon (GTK_IMAGE (toolbar->priv->view_icon), icon,
GTK_ICON_SIZE_BUTTON);
+
+ toolbar->priv->icon_binding = g_object_bind_property (slot, "icon",
+ toolbar->priv->view_icon,
"gicon",
+ G_BINDING_DEFAULT);
+ }
+
+ }
+}
diff --git a/src/nautilus-toolbar.h b/src/nautilus-toolbar.h
index f281b95..9f0b3ea 100644
--- a/src/nautilus-toolbar.h
+++ b/src/nautilus-toolbar.h
@@ -27,6 +27,7 @@
#include <gtk/gtk.h>
+#include "nautilus-window-slot.h"
#define NAUTILUS_TYPE_TOOLBAR nautilus_toolbar_get_type()
#define NAUTILUS_TOOLBAR(obj) \
@@ -72,4 +73,7 @@ void nautilus_toolbar_set_show_location_entry (NautilusToolbar *self,
gboolean show_location_entry);
void nautilus_toolbar_reset_menus (NautilusToolbar *self);
+void nautilus_toolbar_set_active_slot (NautilusToolbar *toolbar,
+ NautilusWindowSlot *slot);
+
#endif /* __NAUTILUS_TOOLBAR_H__ */
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 6daebbf..99667d1 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -2278,6 +2278,8 @@ nautilus_window_set_active_slot (NautilusWindow *window, NautilusWindowSlot *new
/* inform sidebar panels */
nautilus_window_report_location_change (window);
+ nautilus_toolbar_set_active_slot (NAUTILUS_TOOLBAR (window->priv->toolbar), new_slot);
+
/* inform slot & view */
g_signal_emit_by_name (new_slot, "active");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]