diff options
author | Matthias Clasen <mclasen@redhat.com> | 2007-07-20 10:39:03 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-07-20 10:39:03 +0000 |
commit | 13277b42e28a987c0e26f4e0ecb458b73d7f06ff (patch) | |
tree | 7eac6762224e958e7215c5754c33a453ba2d05e3 /gtk/gtkrecentmanager.c | |
parent | 5a58d1ab187546908a81c1525e9bc435021ce2f1 (diff) | |
download | gtk+-13277b42e28a987c0e26f4e0ecb458b73d7f06ff.tar.gz |
Apply a patch by Emmanuele Bassi to limit the number of shown recent
2007-07-20 Matthias Clasen <mclasen@redhat.com>
Apply a patch by Emmanuele Bassi to limit the number
of shown recent files. (#439715)
* gtk/gtksettings.c: Add a setting for the number
of recent files to display by default.
* gtk/gtkrecentchooserdefault.c:
* gtk/gtkfilechooserdefault.c: Respect the limit.
* gtk/gtkrecentmanager.c: Remove the poll timeout in
dispose, and do not stat more often than every 5 seconds.
* gtk/gtkrecentchooserutils.c:
* gtk/gtkrecentchoosermenu.c: Cleanups
* tests/testrecentchoosermenu.c: Test limits.
svn path=/trunk/; revision=18510
Diffstat (limited to 'gtk/gtkrecentmanager.c')
-rw-r--r-- | gtk/gtkrecentmanager.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/gtk/gtkrecentmanager.c b/gtk/gtkrecentmanager.c index e9bfa2d469..de5b396639 100644 --- a/gtk/gtkrecentmanager.c +++ b/gtk/gtkrecentmanager.c @@ -125,6 +125,7 @@ enum PROP_SIZE }; +static void gtk_recent_manager_dispose (GObject *object); static void gtk_recent_manager_finalize (GObject *object); static void gtk_recent_manager_set_property (GObject *object, @@ -232,6 +233,7 @@ gtk_recent_manager_class_init (GtkRecentManagerClass *klass) gobject_class->set_property = gtk_recent_manager_set_property; gobject_class->get_property = gtk_recent_manager_get_property; + gobject_class->dispose = gtk_recent_manager_dispose; gobject_class->finalize = gtk_recent_manager_finalize; /** @@ -388,21 +390,31 @@ gtk_recent_manager_get_property (GObject *object, } static void -gtk_recent_manager_finalize (GObject *object) +gtk_recent_manager_dispose (GObject *object) { GtkRecentManager *manager = GTK_RECENT_MANAGER (object); GtkRecentManagerPrivate *priv = manager->priv; - /* remove the poll timeout */ if (priv->poll_timeout) - g_source_remove (priv->poll_timeout); - + { + g_source_remove (priv->poll_timeout); + priv->poll_timeout = 0; + } + + G_OBJECT_CLASS (gtk_recent_manager_parent_class)->dispose (object); +} + +static void +gtk_recent_manager_finalize (GObject *object) +{ + GtkRecentManager *manager = GTK_RECENT_MANAGER (object); + GtkRecentManagerPrivate *priv = manager->priv; + g_free (priv->filename); if (priv->recent_items) g_bookmark_file_free (priv->recent_items); - /* chain up parent's finalize method */ G_OBJECT_CLASS (gtk_recent_manager_parent_class)->finalize (object); } @@ -435,10 +447,7 @@ gtk_recent_manager_real_changed (GtkRecentManager *manager) } write_error = NULL; - g_bookmark_file_to_file (priv->recent_items, - priv->filename, - &write_error); - + g_bookmark_file_to_file (priv->recent_items, priv->filename, &write_error); if (write_error) { filename_warning ("Attempting to store changes into `%s', " @@ -491,6 +500,7 @@ gtk_recent_manager_poll_timeout (gpointer data) { GtkRecentManager *manager = GTK_RECENT_MANAGER (data); GtkRecentManagerPrivate *priv = manager->priv; + time_t now; struct stat stat_buf; int stat_res; @@ -498,6 +508,11 @@ gtk_recent_manager_poll_timeout (gpointer data) if (priv->write_in_progress || priv->read_in_progress) return TRUE; + /* do not stat the file if we're within 5 seconds from the last stat() */ + now = time (NULL); + if (now < priv->last_mtime + 5); + return TRUE; + stat_res = g_stat (priv->filename, &stat_buf); if (stat_res < 0) { @@ -513,7 +528,7 @@ gtk_recent_manager_poll_timeout (gpointer data) return TRUE; } - /* the file didn't change from the last poll(), so we bail out */ + /* the file didn't change from the last poll, so we bail out */ if (stat_buf.st_mtime == priv->last_mtime) return TRUE; @@ -796,11 +811,11 @@ gtk_recent_manager_get_limit (GtkRecentManager *manager) * Adds a new resource, pointed by @uri, into the recently used * resources list. * - * This function automatically retrieving some of the needed + * This function automatically retrieves some of the needed * metadata and setting other metadata to common default values; it * then feeds the data to gtk_recent_manager_add_full(). * - * See gtk_recent_manager_add_full() if you want to explicitely + * See gtk_recent_manager_add_full() if you want to explicitly * define the metadata for the resource pointed by @uri. * * Return value: %TRUE if the new item was successfully added |