From d21ee683ed80338f958a2d1368727523a89a936d Mon Sep 17 00:00:00 2001 From: Patrick Storz Date: Wed, 27 Mar 2019 19:06:31 +0100 Subject: Fix adding/lookup of recent files. Avoid setting an application name as Gtk::RecentManager calls g_get_application_name () internally to determine the default "name" attribute used for new entries in the list of recently used files (recently-used.xbel) Our Gtk::RecentFilter in menubar.cpp expects the name to equal to g_get_prgname () though (which happens to be the fallback of g_get_application_name, but only if no application name is set as in earlier versions) The alternative would be to set metadata manually, but it would require us to set *all* fields manually (including mime type, etc.). See also https://gitlab.gnome.org/GNOME/gtk/issues/1775 Fixes https://gitlab.com/inkscape/inkscape/issues/160 --- src/file.cpp | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) (limited to 'src/file.cpp') diff --git a/src/file.cpp b/src/file.cpp index 70b2b3817..f492017f8 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -98,25 +98,6 @@ using Inkscape::IO::Resource::USER; void dump_str(gchar const *str, gchar const *prefix); void dump_ustr(Glib::ustring const &ustr); -// what gets passed here is not actually an URI... it is an UTF-8 encoded filename (!) -static void sp_file_add_recent(gchar const *uri) -{ - if(uri == nullptr) { - g_warning("sp_file_add_recent: uri == NULL"); - return; - } - GtkRecentManager *recent = gtk_recent_manager_get_default(); - gchar *fn = g_filename_from_utf8(uri, -1, nullptr, nullptr, nullptr); - if (fn) { - gchar *uri_to_add = g_filename_to_uri(fn, nullptr, nullptr); - if (uri_to_add) { - gtk_recent_manager_add_item(recent, uri_to_add); - g_free(uri_to_add); - } - g_free(fn); - } -} - /*###################### ## N E W @@ -717,7 +698,12 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, Inkscape::Extens success = file_save(parentWindow, doc, fileName, selectionType, TRUE, !is_copy, save_method); if (success && doc->getDocumentURI()) { - sp_file_add_recent( doc->getDocumentURI() ); + // getDocumentURI does not return an actual URI... it is an UTF-8 encoded filename (!) + std::string filename = Glib::filename_from_utf8(doc->getDocumentURI()); + Glib::ustring uri = Glib::filename_to_uri(filename); + + Glib::RefPtr recent = Gtk::RecentManager::get_default(); + recent->add_item(uri); } save_path = Glib::path_get_dirname(fileName); -- cgit v1.2.3