From 83bf04840d0800181465e2146cc002a69ce2abf3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 25 Nov 2012 16:51:34 -0500 Subject: [PATCH] privacy: Implement recent files This relies on patches that turn the recent-files-max-age gtk setting into an X setting which is backed by a gsetting. https://bugzilla.gnome.org/show_bug.cgi?id=687774 --- panels/privacy/cc-privacy-panel.c | 123 ++++++++++++++++++- panels/privacy/privacy.ui | 192 ++++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+), 5 deletions(-) diff --git a/panels/privacy/cc-privacy-panel.c b/panels/privacy/cc-privacy-panel.c index d311047ab..406c1db7d 100644 --- a/panels/privacy/cc-privacy-panel.c +++ b/panels/privacy/cc-privacy-panel.c @@ -29,6 +29,8 @@ CC_PANEL_REGISTER (CcPrivacyPanel, cc_privacy_panel) #define WID(s) GTK_WIDGET (gtk_builder_get_object (self->priv->builder, s)) +#define REMEMBER_RECENT_FILES "remember-recent-files" +#define RECENT_FILES_MAX_AGE "recent-files-max-age" #define REMOVE_OLD_TRASH_FILES "remove-old-trash-files" #define REMOVE_OLD_TEMP_FILES "remove-old-temp-files" #define OLD_FILES_AGE "old-files-age" @@ -254,6 +256,7 @@ add_screen_lock (CcPrivacyPanel *self) { GtkWidget *w; GtkWidget *dialog; + GtkWidget *label; w = get_on_off_label (self->priv->lock_settings, "lock-enabled"); add_row (self, _("Screen Lock"), "screen_lock_dialog", w); @@ -268,16 +271,15 @@ add_screen_lock (CcPrivacyPanel *self) w, "active", G_SETTINGS_BIND_DEFAULT); - w = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "lock_after_label")); - g_settings_bind (self->priv->lock_settings, "lock-enabled", - w, "sensitive", - G_SETTINGS_BIND_GET); - w = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "lock_after_combo")); g_settings_bind (self->priv->lock_settings, "lock-enabled", w, "sensitive", G_SETTINGS_BIND_GET); + label = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "lock_after_label")); + + g_object_bind_property (w, "sensitive", label, "sensitive", G_BINDING_DEFAULT); + set_lock_value_for_combo (GTK_COMBO_BOX (w), self); g_signal_connect (w, "changed", G_CALLBACK (lock_combo_changed_cb), self); @@ -348,6 +350,116 @@ add_name_visibility (CcPrivacyPanel *self) G_CALLBACK (stealth_mode_changed), self); } +static void +retain_history_combo_changed_cb (GtkWidget *widget, + CcPrivacyPanel *self) +{ + GtkTreeIter iter; + GtkTreeModel *model; + gint value; + gboolean ret; + + /* no selection */ + ret = gtk_combo_box_get_active_iter (GTK_COMBO_BOX(widget), &iter); + if (!ret) + return; + + /* get entry */ + model = gtk_combo_box_get_model (GTK_COMBO_BOX(widget)); + gtk_tree_model_get (model, &iter, + 1, &value, + -1); + g_settings_set (self->priv->privacy_settings, RECENT_FILES_MAX_AGE, "i", value); +} + +static void +set_retain_history_value_for_combo (GtkComboBox *combo_box, + CcPrivacyPanel *self) +{ + GtkTreeIter iter; + GtkTreeModel *model; + gint value; + gint value_tmp, value_prev; + gboolean ret; + guint i; + + /* get entry */ + model = gtk_combo_box_get_model (combo_box); + ret = gtk_tree_model_get_iter_first (model, &iter); + if (!ret) + return; + + value_prev = 0; + i = 0; + + /* try to make the UI match the setting */ + g_settings_get (self->priv->privacy_settings, RECENT_FILES_MAX_AGE, "i", &value); + do + { + gtk_tree_model_get (model, &iter, + 1, &value_tmp, + -1); + if (value == value_tmp || + (value_tmp > value_prev && value < value_tmp)) + { + gtk_combo_box_set_active_iter (combo_box, &iter); + return; + } + value_prev = value_tmp; + i++; + } while (gtk_tree_model_iter_next (model, &iter)); + + /* If we didn't find the setting in the list */ + gtk_combo_box_set_active (combo_box, i - 1); +} + +static void +clear_recent (CcPrivacyPanel *self) +{ + GtkRecentManager *m; + + m = gtk_recent_manager_get_default (); + gtk_recent_manager_purge_items (m, NULL); +} + +static void +add_usage_history (CcPrivacyPanel *self) +{ + GtkWidget *w; + GtkWidget *dialog; + GtkWidget *label; + + w = get_on_off_label (self->priv->privacy_settings, REMEMBER_RECENT_FILES); + add_row (self, _("Usage & History"), "recent_dialog", w); + + w = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "recent_done")); + dialog = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "recent_dialog")); + g_signal_connect_swapped (w, "clicked", + G_CALLBACK (gtk_widget_hide), dialog); + + w = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "recently_used_switch")); + g_settings_bind (self->priv->privacy_settings, REMEMBER_RECENT_FILES, + w, "active", + G_SETTINGS_BIND_DEFAULT); + + w = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "retain_history_combo")); + set_retain_history_value_for_combo (GTK_COMBO_BOX (w), self); + g_signal_connect (w, "changed", + G_CALLBACK (retain_history_combo_changed_cb), self); + + g_settings_bind (self->priv->privacy_settings, REMEMBER_RECENT_FILES, + w, "sensitive", + G_SETTINGS_BIND_GET); + + label = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "retain_history_label")); + + g_object_bind_property (w, "sensitive", label, "sensitive", G_BINDING_DEFAULT); + w = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "clear_recent_button")); + g_signal_connect_swapped (w, "clicked", + G_CALLBACK (clear_recent), self); + +} + static void purge_after_combo_changed_cb (GtkWidget *widget, CcPrivacyPanel *self) @@ -573,6 +685,7 @@ cc_privacy_panel_init (CcPrivacyPanel *self) add_screen_lock (self); add_name_visibility (self); + add_usage_history (self); add_trash_temp (self); g_signal_connect (self->priv->lockdown_settings, "changed", diff --git a/panels/privacy/privacy.ui b/panels/privacy/privacy.ui index c12d68bfc..8f006cc8e 100644 --- a/panels/privacy/privacy.ui +++ b/panels/privacy/privacy.ui @@ -62,6 +62,8 @@ _Done True True + True + True True True @@ -262,6 +264,192 @@ + + + + + + + + + + Don't retain history + 0 + + + 1 day + 1 + + + 7 days + 7 + + + 30 days + 30 + + + Forever + -1 + + + + + False + 5 + dialog + Usage & History + + + False + vertical + 2 + + + True + False + 12 + 6 + 12 + 12 + 0 + Remembering your history makes things easier to find again. These items are never shared over the network. + True + 50 + + + False + True + 0 + + + + + False + end + + + _Clear Recent History + True + True + True + True + + + False + True + 0 + + + + + _Done + True + True + True + True + True + True + + + False + True + 1 + + + + + False + True + end + 0 + + + + + True + False + 12 + 6 + 12 + 12 + 12 + 6 + + + True + False + 0 + _Recently Used + True + recently_used_switch + + + 0 + 0 + 1 + 1 + + + + + True + True + end + center + + + 1 + 0 + 1 + 1 + + + + + True + False + True + 0 + Retain _History + True + retain_history_combo + + + 0 + 1 + 1 + 1 + + + + + True + False + 0 + retain_history_model + + + 1 + 1 + 1 + 1 + + + + + False + True + 2 + + + + + + clear_recent_button + recent_done + + False 5 @@ -281,6 +469,8 @@ _Done True True + True + True True True @@ -485,6 +675,8 @@ _Done True True + True + True True True