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
This commit is contained in:
Matthias Clasen 2012-11-25 16:51:34 -05:00 committed by Bastien Nocera
parent 4d3208a6e1
commit 83bf04840d
2 changed files with 310 additions and 5 deletions

View file

@ -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",

View file

@ -62,6 +62,8 @@
<property name="label" translatable="yes">_Done</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
@ -262,6 +264,192 @@
</row>
</data>
</object>
<object class="GtkListStore" id="retain_history_model">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name value -->
<column type="gint"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Don't retain history</col>
<col id="1">0</col>
</row>
<row>
<col id="0" translatable="yes">1 day</col>
<col id="1">1</col>
</row>
<row>
<col id="0" translatable="yes">7 days</col>
<col id="1">7</col>
</row>
<row>
<col id="0" translatable="yes">30 days</col>
<col id="1">30</col>
</row>
<row>
<col id="0" translatable="yes">Forever</col>
<col id="1">-1</col>
</row>
</data>
</object>
<object class="GtkDialog" id="recent_dialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="type_hint">dialog</property>
<property name="title" translatable="yes">Usage &amp; History</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox5">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">12</property>
<property name="margin_right">6</property>
<property name="margin_top">12</property>
<property name="margin_bottom">12</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Remembering your history makes things easier to find again. These items are never shared over the network.</property>
<property name="wrap">True</property>
<property name="max_width_chars">50</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area5">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="clear_recent_button">
<property name="label" translatable="yes">_Clear Recent History</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="recent_done">
<property name="label" translatable="yes">_Done</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">12</property>
<property name="margin_right">6</property>
<property name="margin_top">12</property>
<property name="margin_bottom">12</property>
<property name="row_spacing">12</property>
<property name="column_spacing">6</property>
<child>
<object class="GtkLabel" id="recently_used_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">_Recently Used</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">recently_used_switch</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="recently_used_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="retain_history_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Retain _History</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">retain_history_combo</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="retain_history_combo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="entry_text_column">0</property>
<property name="model">retain_history_model</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="0">clear_recent_button</action-widget>
<action-widget response="0">recent_done</action-widget>
</action-widgets>
</object>
<object class="GtkDialog" id="screen_lock_dialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
@ -281,6 +469,8 @@
<property name="label" translatable="yes">_Done</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
@ -485,6 +675,8 @@
<property name="label" translatable="yes">_Done</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>