Also, *do* add the file to the recently-used list, even if the file does not
exist yet. This is used from the Save dialog, so even shitty apps which don't
add the file to GtkRecentManager, will get the file added from the Save dialog.
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
Thanks to Kean Johnston for pointing this out.
There are a few places in GTK that use "struct stat",
and then g_stat(), rather than using GStatBuf.This breaks things on
Windows. Since the size of struct stat can vary depending on other
flags specified, this has the potential to cause overwrites and is
trivial to fix.
Based on patch submitted by Kean Johnston
Async callbacks are delivered in idles, so we need to make sure
we get the gdk lock before calling any gdk/gtk stuff. This was
missing in a few places.
Since the ::changed implementation of GtkRecentManager implies a
synchronous write operation, when we receive multiple requests to emit a
::changed signal we might end up blocking.
This change coalesces multiple ::changed emission requests using the
following sequence:
• the first request will install a timeout in 250 ms, which will
emit the ::changed signal
• each further request while the timeout has not been emitted
will increase a counter
‣ if the counter reaches 250 before the timeout has been
emitted, then the RecentManager will remove the timeout
source and force a signal emission and reset the counter
This sequence should guarantee that frequent ::changed emission requests
are coalesced, and also guarantee that we don't let them dangle for too
long.
https://bugzilla.gnome.org/show_bug.cgi?id=616997
The gtkprivate.h header contains GtkWidget-specific private symbols that
are not useful except in a handful of cases. Basically everything
includes gtkprivate.h for the GTK_PARAM_* macros.
https://bugzilla.gnome.org/show_bug.cgi?id=632539
The :limit property of GtkRecentManager does not serve any useful
purpose: the length of the list should be managed by the view
(implementing GtkRecentChooser), and not by the model (the recent
manager).
https://bugzilla.gnome.org/show_bug.cgi?id=624333
This commit was created using a script that searched for all docstrings
containing a parameter and the string 'or %NULL'.
Gdk backends and demos excluded as they are not part of a public API
https://bugzilla.gnome.org/show_bug.cgi?id=610474
The Gtk-custom.c file in gir-repository contained a number of
introspection annotations. Merge those into the GTK source files.
Some documentation was moved from the tmpl/ files to accomodate
the addition of annotations.
The documentation for the function says that the app_exec string
should be freed, but we return a pointer to the internal string
without duplicating it. Since the app_exec string is valid as long
as the GtkRecentInfo is valid the documentation should be fixed
and the out argument should be constified. Fixes#584832.
2008-08-07 Emmanuele Bassi <ebassi@gnome.org>
Bug 545031 – list of recently used files is created world-readable
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_real_changed): Set the recently-used.xbel
file to 0600. (Guido Berhoerster)
svn path=/trunk/; revision=21028
2008-07-21 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(recent_app_info_new), (recent_app_info_free): Use GSlice to
allocate the application data for recently used resources;
do not call time() to initialize the timestamp, as it will
be overwritten anyway later. (#535223, Michael Meeks)
svn path=/trunk/; revision=20884
2008-06-30 Cody Russell <bratsche@gnome.org>
* Practically everything changed.
Change all references of GIMP Toolkit (and variations of it)
to GTK+ Toolkit, showing no mercy at all to our beloved
ancestry. (#540529)
svn path=/trunk/; revision=20709
2008-06-17 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_remove_item),
(gtk_recent_manager_move_item): Increase the consistency of the
errors returned by GtkRecentManager. (Paolo Borelli)
svn path=/trunk/; revision=20424
2008-06-17 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_remove_item): Consistently use the same
error when removing a URI from an empty GtkRecentManager.
svn path=/trunk/; revision=20422
2008-05-31 Emmanuele Bassi <ebassi@gnome.org>
Bug 535830 – wrong content type adding an item
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_add_item_query_info): Use the correct API
for retrieving the fast MIME type of a URI. (Carlos Garcia
Campos)
svn path=/trunk/; revision=20262
2008-04-18 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_set_filename): Keep the default storage
file in $HOME, as we don't have a migration code in place yet.
svn path=/trunk/; revision=20020
2008-04-18 Michael Natterer <mitch@imendio.com>
* gtk/gtkrecentmanager.c (gtk_recent_manager_clamp_to_age):
g_strfreev() the uris returned by g_bookmark_file_get_uris().
svn path=/trunk/; revision=20019
2008-04-15 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_real_changed): Fix last commit, and
complete the gtk-recent-files-max-age semantics: if the
property is set to 0 then purge the list.
svn path=/trunk/; revision=20007
2008-04-15 Emmanuele Bassi <ebassi@gnome.org>
Bug 488507 – boundless growth of .recently-used.xbel file
slows down applications
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_init),
(gtk_recent_manager_real_changed),
(gtk_recent_manager_set_filename),
(gtk_recent_manager_clamp_to_age): Clamp the recently
used resources list by the age of its items, using
the newly added GtkSettings property.
* gtk/gtksettings.c (gtk_settings_class_init): Add the
gtk-recent-files-max-age property, controlling the
maximum age of the items in the recently used resources
list.
svn path=/trunk/; revision=20006
2008-04-15 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_add_item_query_info),
(gtk_recent_manager_add_item): Emit the ::changed signal
at the end of the asynchronous MIME type query.
svn path=/trunk/; revision=20005
2008-04-15 Emmanuele Bassi <ebassi@gnome.org>
Bug 487375 – gtkrecent apps poll ~/.recently-used.xbel
every 5 seconds
* gtk/gtkrecentmanager.c: Use GFileMonitor to check for
changes in the recently used resources storage file, and
drop the timeout-based poll.
* ChangeLog: Fix attribution of the patch of the previous
commit.
svn path=/trunk/; revision=20004
2008-04-15 Emmanuele Bassi <ebassi@gnome.org>
Bug 506062 – gtk_recent_manager_add_item does not detect mime
type on Windows
* configure.in: Depend on gio-2.0
* gtk/gtkrecentmanager.c:
(gtk_recent_manager_add_item_query_info_cb),
(gtk_recent_manager_add_item): Use GIO to (asynchronously) query
the MIME type of the passed URI.
svn path=/trunk/; revision=20003
2007-10-10 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c (gtk_recent_info_get_icon): Document
that you need to unref the returned GdkPixbuf. (#484132,
Christian Persch)
(build_recent_info): Use g_slist_prepend() when building
the applications list.
svn path=/trunk/; revision=18904
2007-09-03 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c
(gtk_recent_manager_poll_timeout): Remove the stat() time barrier,
as it seems to cause bug #463907 (thanks to Sebastien Bacher).
svn path=/trunk/; revision=18713
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
2007-06-29 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c (get_icon_for_mime_type): Do not
cache the icon pixbufs but rely on the GtkIconTheme not to
hit the disk cache too much (should tentatively fix#426987).
svn path=/trunk/; revision=18288
2007-06-25 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(build_recent_info): building a GtkRecentInfo can never fail.
(gtk_recent_manager_get_items): Clamp the list while building
it so we don't need to traverse it more than once. (#446532,
Philip Withnall)
svn path=/trunk/; revision=18228
2007-06-19 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c: Use g_timeout_add_seconds_full() for
the timed poll of the storage file, since we are using multiple
seconds intervals and we don't actually care about millisecond
precision.
(threads_dispatch), (threads_free), (gtk_recent_manager_init),
(gtk_recent_manager_set_filename): Roll our own version of
gdk_threads_add_timeout() using g_timeout_add_seconds_full()
while holding the GDK main lock.
svn path=/trunk/; revision=18185
2007-06-19 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c: Use a static variable to hold the
singleton and remove the code that binds a recent manager to
a GdkScreen.
(gtk_recent_manager_set_screen): Make it a NOOP.
(gtk_recent_manager_get_for_screen): Proxy for
gtk_recent_manager_get_default().
* gtk/gtk.symbols:
* gtk/gtkrecentmanager.h: Deprecate gtk_recent_manager_set_screen()
and gtk_recent_manager_get_for_screen().
* gtk/gtkmain.c: Force a synchronisation of the GtkRecentManager
singleton (if any) when reaching main loop depth of 0.
* gtk/gtkrecentchooserdefault.c:
(gtk_recent_chooser_default_dispose): Disconnect the changed
signal only if we have a manager and we are connected to it.
(set_recent_manager): Ditto.
* README.in: Document the deprecations.
svn path=/trunk/; revision=18184
2007-04-18 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c (gtk_recent_manager_lookup_item): Fix
a leak by not increasing the refcount of the GtkRecentInfo
object when returning it (thanks to Matthias Clasen).
svn path=/trunk/; revision=17606
2007-03-15 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c (gtk_recent_manager_add_item): Remove
unused GError; do not allocate GtkRecentData and use a variable
on the stack. (#418673, Morten Welinder)
svn path=/trunk/; revision=17525
2006-11-21 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(get_uri_shortname_for_display): g_filename_from_uri() might
fail; catch the failure and fall back to the non-local URI
case. (#363437)
2006-11-16 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c:
(gtk_recent_info_get_uri_display): Return the URI
of the GtkRecentInfo object (upgraded to UTF-8 if
needed) in case of non-local file. (#351945)
2006-11-16 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c: Provide a fast path returning
NULL when the limit is set to 0.
* gtk/gtkrecentchooserdefault.c:
* gtk/gtkrecentchoosermenu.c: Add the same fast path
inside the RecentChooser implementation; add a check
in the list clamping code. (#373466 and duplicates)
2006-07-28 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c (gtk_recent_manager_init): Add the
timeout for polling the file; change the default polling
delta to 2000 msec.
2006-06-02 Emmanuele Bassi <ebassi@gnome.org>
* gtk/gtkrecentmanager.c
(gtk_recent_info_get_application_info): Fix a typo (spotted by
Paolo Borelli and coverity).
2006-05-12 Alexander Larsson <alexl@redhat.com>
* gtk/gtkrecentmanager.c:
Fix build errors.
* gtk/gtk.symbols:
* demos/gtk-demo/printing.c:
* gtk/gtkprintoperation-win32.c:
* gtk/gtkprintoperation.[ch]:
* gtk/gtkprintsettings.[ch]:
* modules/printbackends/cups/gtkprintbackendcups.c:
* modules/printbackends/lpr/gtkprintbackendlpr.c:
* modules/printbackends/pdf/gtkprintbackendpdf.c:
* tests/print-editor.c:
* tests/testnouiprint.c:
* tests/testprint.c:
* tests/testprintfileoperation.c:
Rename functions from nr_of_pages to n_pages, and num_copies to
n_copies to match other gtk+ names.
* gtk/gtkmenu.c: (gtk_menu_popdown):
Only re-set window group on popdown if we set it on popup (i.e.
if there is a parent menu shell).
Fixed part of bug #340401
* gtk/gtkwindow.c:
Add (contruct) property "transient-for" to GtkWindow. This
is needed for the fix to bug #340401.
* gtk/gtkprintunixdialog.c:
Use the transient-for property on construction and populate the dialog
with widgets after that. This fixes bug #340401.
More n_pages renames.
2006-05-11 Emmanuele Bassi <ebassi@cvs.gnome.org>
* gtk/gtkrecentmanager.h: Remove the error parameter to the
gtk_recent_manager_add() and gtk_recent_manager_add_full()
functions; remove the unneeded error codes from the error
enumeration. (#336774).
* gtk/gtkrecentmanager.c: Make gtk_recent_manager_add() and
gtk_recent_manager_add_full() complain loudly about wrong or
missing meta-data, instead of using a GError. (#336774)
2006-04-11 Emmanuele Bassi <ebassi@cvs.gnome.org>
* gtk/gtkrecentmanager.c (gtk_recent_manager_init)
(gtk_recent_manager_new): Remove the unneeded setting of the
storage file inside the constructor. (Murray Cumming)
(build_recent_items_list): Reset the dirty bit when done rebuilding
the list from the storage file.
2006-04-03 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkrecentchooser.c (gtk_recent_chooser_error_quark):
* gtk/gtkrecentmanager.c (gtk_recent_manager_error_quark):
* gtk/gtkfilechooser.c (gtk_file_chooser_error_quark):
* gtk/gtkfilesystem.c (gtk_file_system_error_quark):
* gtk/gtkicontheme.c (gtk_icon_theme_error_quark): No point
in making the error path fast by caching quarks.
2006-04-02 Emmanuele Bassi <ebassi@cvs.gnome.org>
* gtk/gtkrecentmanager.c (gtk_recent_manager_set_filename): Build
the items list after setting the storage file.
* gtk/gtkrecentmanager.c (display_closed): Use the right string
for unsetting the default manager object from the screen.
2006-03-31 Behdad Esfahbod <behdad@gnome.org>
* gtk/gtkrecentmanager.c: Convert filenames to UTF-8 before printing
them out in warning messages. (#336770, Morten Welinder)
2006-03-31 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkrecentmanager.c (gtk_recent_info_get_age): Don't
assert that the age is positive. (#336773, Morten Welinder)
2006-03-29 Emmanuele Bassi <ebassi@cvs.gnome.org>
Import GtkRecent* from libegg.
* gtk/gtkrecentmanager.[ch]: Add GtkRecentManager, an object
for managing a list of recently used resources.
* gtk/gtkrecentchooser.[ch]:
* gtk/gtkrecentchooserdefault.[ch]:
* gtk/gtkrecentchooserdialog.[ch]:
* gtk/gtkrecentchoosermenu.[ch]:
* gtk/gtkrecentchooserprivate.h:
* gtk/gtkrecentchooserutils.[ch]:
* gtk/gtkrecentchooserwidget.[ch]: Add GtkRecentChooser, a
GTypeInterface for widgets implementing viewers for recently
used resources.
* gtk/gtkrecentfilter.[ch]: GtkRecentFilter, a filter object
for GtkRecentChooser implementations.
* gtk/gtk.h:
* gtk/gtk.symbols:
* gtk/Makefile.am: Build glue for GtkRecent*.