summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2015-01-26 12:18:51 +0000
committerCosimo Cecchi <cosimoc@gnome.org>2015-01-26 12:19:46 +0000
commitb4ca64a4877d954eb287d7b563fab16da06d2663 (patch)
tree89aa2f41d1a15ac8b3990d191456f8bfbd21c1ab
parent44ce04113c5b1a4ccd6d78849f511d2cf1f95041 (diff)
downloadnautilus-b4ca64a4877d954eb287d7b563fab16da06d2663.tar.gz
toolbar: use g_simple_action_set_state_hint() for sort action
This way we can avoid directly poking at the toolbar.
-rw-r--r--configure.ac2
-rw-r--r--src/nautilus-canvas-view.c46
-rw-r--r--src/nautilus-toolbar.c29
-rw-r--r--src/nautilus-toolbar.h3
4 files changed, 54 insertions, 26 deletions
diff --git a/configure.ac b/configure.ac
index 728a65213..4d2912732 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ AC_PREREQ(2.54)
dnl ===========================================================================
-m4_define(glib_minver, 2.35.3)
+m4_define(glib_minver, 2.43.4)
m4_define(gnome_desktop_minver, 3.0.0)
m4_define(pango_minver, 1.28.3)
m4_define(gtk_minver, 3.13.2)
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index e93871804..98e2c2c67 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -72,10 +72,13 @@ enum
static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
+typedef gboolean (* SortCriterionMatchFunc) (NautilusFile *file);
+
typedef struct {
const NautilusFileSortType sort_type;
const char *metadata_text;
const char *action_target_name;
+ SortCriterionMatchFunc match_func;
} SortCriterion;
typedef enum {
@@ -137,12 +140,14 @@ static const SortCriterion sort_criteria[] = {
{
NAUTILUS_FILE_SORT_BY_TRASHED_TIME,
"trashed",
- "trash-time"
+ "trash-time",
+ nautilus_file_is_in_trash
},
{
NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE,
NULL,
"search-relevance",
+ nautilus_file_is_in_search
}
};
@@ -1023,6 +1028,34 @@ const GActionEntry canvas_view_entries[] = {
};
static void
+update_sort_action_state_hint (NautilusCanvasView *canvas_view)
+{
+ NautilusFile *file;
+ GVariantBuilder builder;
+ GActionGroup *action_group;
+ GAction *action;
+ GVariant *state_hint;
+ gint idx;
+
+ file = nautilus_view_get_directory_as_file (NAUTILUS_VIEW (canvas_view));
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("as"));
+
+ for (idx = 0; idx < G_N_ELEMENTS (sort_criteria); idx++) {
+ if (sort_criteria[idx].match_func == NULL ||
+ (file != NULL && sort_criteria[idx].match_func (file)))
+ g_variant_builder_add (&builder, "s", sort_criteria[idx].action_target_name);
+ }
+
+ state_hint = g_variant_builder_end (&builder);
+
+ action_group = nautilus_view_get_action_group (NAUTILUS_VIEW (canvas_view));
+ action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "sort");
+ g_simple_action_set_state_hint (G_SIMPLE_ACTION (action), state_hint);
+
+ g_variant_unref (state_hint);
+}
+
+static void
nautilus_canvas_view_update_actions_state (NautilusView *view)
{
GActionGroup *view_action_group;
@@ -1052,12 +1085,13 @@ nautilus_canvas_view_update_actions_state (NautilusView *view)
keep_aligned = nautilus_canvas_container_is_keep_aligned (get_canvas_container (canvas_view));
g_action_change_state (action, g_variant_new_boolean (keep_aligned));
}
+
+ update_sort_action_state_hint (canvas_view);
}
static void
nautilus_canvas_view_update_toolbar_menus (NautilusView *view)
{
- NautilusFile *file;
NautilusToolbar *toolbar;
NautilusCanvasContainer *canvas_container;
gint zoom_level;
@@ -1065,14 +1099,6 @@ nautilus_canvas_view_update_toolbar_menus (NautilusView *view)
NAUTILUS_VIEW_CLASS (nautilus_canvas_view_parent_class)->update_toolbar_menus (view);
toolbar = NAUTILUS_TOOLBAR (nautilus_window_get_toolbar (nautilus_view_get_window (view)));
-
- file = nautilus_view_get_directory_as_file (NAUTILUS_VIEW (view));
- if (file != NULL && nautilus_file_is_in_trash (file))
- nautilus_toolbar_show_sort_trash_time (toolbar);
-
- if (file != NULL && nautilus_file_is_in_search (file))
- nautilus_toolbar_show_sort_search_relevance (toolbar);
-
canvas_container = get_canvas_container (NAUTILUS_CANVAS_VIEW (view));
zoom_level = nautilus_canvas_container_get_zoom_level (canvas_container);
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index 4a2052a01..66a999498 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -570,6 +570,10 @@ nautilus_toolbar_reset_menus (NautilusToolbar *self)
NautilusWindowSlot *slot;
NautilusView *view;
GActionGroup *view_action_group;
+ GVariant *sort_hint;
+ GVariantIter iter;
+ gboolean sort_trash, sort_search;
+ const gchar *hint;
/* Allow actions from the current view to be activated through
* the view menu and action menu of the toolbar */
@@ -585,20 +589,21 @@ nautilus_toolbar_reset_menus (NautilusToolbar *self)
gtk_widget_set_visible (self->priv->sort_menu,
g_action_group_has_action (view_action_group, "sort"));
- gtk_widget_hide (self->priv->sort_trash_time);
- gtk_widget_hide (self->priv->sort_search_relevance);
-}
+ sort_hint = g_action_group_get_action_state_hint (view_action_group, "sort");
+ sort_trash = sort_search = FALSE;
-void
-nautilus_toolbar_show_sort_trash_time (NautilusToolbar *self)
-{
- gtk_widget_show (self->priv->sort_trash_time);
-}
+ g_variant_iter_init (&iter, sort_hint);
+ while (g_variant_iter_next (&iter, "&s", &hint)) {
+ if (g_strcmp0 (hint, "trash-time") == 0)
+ sort_trash = TRUE;
+ if (g_strcmp0 (hint, "search-relevance") == 0)
+ sort_search = TRUE;
+ }
-void
-nautilus_toolbar_show_sort_search_relevance (NautilusToolbar *self)
-{
- gtk_widget_show (self->priv->sort_search_relevance);
+ g_variant_unref (sort_hint);
+
+ gtk_widget_set_visible (self->priv->sort_trash_time, sort_trash);
+ gtk_widget_set_visible (self->priv->sort_search_relevance, sort_search);
}
void
diff --git a/src/nautilus-toolbar.h b/src/nautilus-toolbar.h
index a2caf496e..10b77e52d 100644
--- a/src/nautilus-toolbar.h
+++ b/src/nautilus-toolbar.h
@@ -76,7 +76,4 @@ void nautilus_toolbar_reset_menus (NautilusToolbar *self);
void nautilus_toolbar_view_menu_widget_set_zoom_level (NautilusToolbar *self,
gdouble level);
-void nautilus_toolbar_show_sort_trash_time (NautilusToolbar *self);
-void nautilus_toolbar_show_sort_search_relevance (NautilusToolbar *self);
-
#endif /* __NAUTILUS_TOOLBAR_H__ */