diff options
author | Jason Crain <jason@inspiresomeone.us> | 2017-08-14 09:57:50 -0500 |
---|---|---|
committer | Carlos Soriano <csoriano@localhost.localdomain> | 2017-08-17 15:40:31 +0200 |
commit | d0bb9c7610e0358b0126b914ee4475e958ac88eb (patch) | |
tree | baa83bb4fe74f25508507388f8a4751735ba11bc /src/nautilus-application.c | |
parent | 292f43d3f7177510c4146121f15c2d71e68106b7 (diff) | |
download | nautilus-d0bb9c7610e0358b0126b914ee4475e958ac88eb.tar.gz |
Save sidebar visibility state
Save sidebar visibility to GSettings so the sidebar state is persistent.
https://bugzilla.gnome.org/show_bug.cgi?id=785323
Diffstat (limited to 'src/nautilus-application.c')
-rw-r--r-- | src/nautilus-application.c | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/src/nautilus-application.c b/src/nautilus-application.c index 77443f5f6..98e6f35d4 100644 --- a/src/nautilus-application.c +++ b/src/nautilus-application.c @@ -828,11 +828,12 @@ action_quit (GSimpleAction *action, } static void -action_show_hide_sidebar (GSimpleAction *action, - GVariant *state, - gpointer user_data) +action_show_hide_sidebar (GObject *object, + GParamSpec *pspec, + gpointer *user_data) { GList *window, *windows; + GVariant *state = g_action_get_state (G_ACTION (object)); windows = gtk_application_get_windows (GTK_APPLICATION (user_data)); @@ -847,8 +848,6 @@ action_show_hide_sidebar (GSimpleAction *action, nautilus_window_hide_sidebar (window->data); } } - - g_simple_action_set_state (action, state); } static void @@ -862,12 +861,29 @@ action_show_help_overlay (GSimpleAction *action, g_action_group_activate_action (G_ACTION_GROUP (window), "show-help-overlay", NULL); } +static gboolean +variant_get_mapping (GValue *value, + GVariant *variant, + gpointer user_data) +{ + g_value_set_variant (value, variant); + return TRUE; +} + +static GVariant * +variant_set_mapping (const GValue *value, + const GVariantType *expected_type, + gpointer user_data) +{ + return g_value_get_variant (value); +} + static GActionEntry app_entries[] = { { "new-window", action_new_window, NULL, NULL, NULL }, { "clone-window", action_clone_window, NULL, NULL, NULL }, { "preferences", action_preferences, NULL, NULL, NULL }, - { "show-hide-sidebar", NULL, NULL, "true", action_show_hide_sidebar }, + { "show-hide-sidebar", NULL, NULL, "true", NULL }, { "about", action_about, NULL, NULL, NULL }, { "help", action_help, NULL, NULL, NULL }, { "quit", action_quit, NULL, NULL, NULL }, @@ -878,8 +894,8 @@ static GActionEntry app_entries[] = static void nautilus_init_application_actions (NautilusApplication *app) { - gboolean show_sidebar; const gchar *debug_no_app_menu; + GAction *sidebar_action; g_action_map_add_action_entries (G_ACTION_MAP (app), app_entries, G_N_ELEMENTS (app_entries), @@ -894,12 +910,22 @@ nautilus_init_application_actions (NautilusApplication *app) NULL); } - show_sidebar = g_settings_get_boolean (nautilus_window_state, - NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR); - g_action_group_change_action_state (G_ACTION_GROUP (app), - "show-hide-sidebar", - g_variant_new_boolean (show_sidebar)); + + sidebar_action = g_action_map_lookup_action (G_ACTION_MAP (app), + "show-hide-sidebar"); + g_signal_connect (sidebar_action, + "notify::state", + G_CALLBACK (action_show_hide_sidebar), + app); + g_settings_bind_with_mapping (nautilus_window_state, + NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR, + sidebar_action, + "state", + G_SETTINGS_BIND_DEFAULT, + variant_get_mapping, + variant_set_mapping, + NULL, NULL); nautilus_application_set_accelerator (G_APPLICATION (app), "app.show-hide-sidebar", "F9"); } |