Code

Warning cleanup.
[inkscape.git] / src / file.cpp
index d38efb3046cd20f16990adef47864758f7d43770..5c729eeeb65b1032a8c61cb0ca255d6bdbcad34a 100644 (file)
@@ -18,8 +18,8 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-/**
- * Note: This file needs to be cleaned up extensively.
+/** @file
+ * @note This file needs to be cleaned up extensively.
  * What it probably needs is to have one .h file for
  * the API, and two or more .cpp files for the implementations.
  */
@@ -28,6 +28,7 @@
 # include "config.h"
 #endif
 
+#include <gtk/gtk.h>
 #include <glib/gmem.h>
 #include <libnr/nr-pixops.h>
 
 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)
+{
+    GtkRecentManager *recent = gtk_recent_manager_get_default();
+    gchar *fn = g_filename_from_utf8(uri, -1, NULL, NULL, NULL);
+    if (fn) {
+        gchar *uri_to_add = g_filename_to_uri(fn, NULL, NULL);
+        if (uri_to_add) {
+            gtk_recent_manager_add_item(recent, uri_to_add);
+            g_free(uri_to_add);
+        }
+        g_free(fn);
+    }
+}
+
 
 /*######################
 ## N E W
@@ -182,6 +198,10 @@ sp_file_open(const Glib::ustring &uri,
              Inkscape::Extension::Extension *key,
              bool add_to_recent, bool replace_empty)
 {
+    SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+    if (desktop)
+        desktop->setWaitingCursor();
+
     SPDocument *doc = NULL;
     try {
         doc = Inkscape::Extension::open(key, uri.c_str());
@@ -191,8 +211,10 @@ sp_file_open(const Glib::ustring &uri,
         doc = NULL;
     }
 
+    if (desktop)
+        desktop->clearWaitingCursor();
+
     if (doc) {
-        SPDesktop *desktop = SP_ACTIVE_DESKTOP;
         SPDocument *existing = desktop ? sp_desktop_document(desktop) : NULL;
 
         if (existing && existing->virgin && replace_empty) {
@@ -219,7 +241,7 @@ sp_file_open(const Glib::ustring &uri,
         sp_namedview_update_layers_from_document(desktop);
 
         if (add_to_recent) {
-            prefs_set_recent_file(SP_DOCUMENT_URI(doc), SP_DOCUMENT_NAME(doc));
+            sp_file_add_recent(SP_DOCUMENT_URI(doc));
         }
 
         return TRUE;
@@ -386,7 +408,7 @@ sp_file_open_dialog(Gtk::Window &parentWindow, gpointer /*object*/, gpointer /*d
 
     if(open_path.empty())
     {
-        Glib::ustring attr = prefs->getString("dialogs.open", "path");
+        Glib::ustring attr = prefs->getString("/dialogs/open/path");
         if (!attr.empty()) open_path = attr;
     }
 
@@ -498,7 +520,7 @@ sp_file_open_dialog(Gtk::Window &parentWindow, gpointer /*object*/, gpointer /*d
 
         open_path = Glib::path_get_dirname (fileName);
         open_path.append(G_DIR_SEPARATOR_S);
-        prefs->setString("dialogs.open", "path", open_path);
+        prefs->setString("/dialogs/open/path", open_path);
 
         sp_file_open(fileName, selection);
     }
@@ -577,6 +599,9 @@ file_save(Gtk::Window &parentWindow, SPDocument *doc, const Glib::ustring &uri,
         g_free(text);
         g_free(safeUri);
         return FALSE;
+    } catch (Inkscape::Extension::Output::save_cancelled &e) {
+        SP_ACTIVE_DESKTOP->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("Document not saved."));
+        return FALSE;
     } catch (Inkscape::Extension::Output::no_overwrite &e) {
         return sp_file_save_dialog(parentWindow, doc);
     }
@@ -689,7 +714,7 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, bool is_copy)
     Glib::ustring default_extension;
     char *attr = (char *)repr->attribute("inkscape:output_extension");
     if (!attr) {
-        Glib::ustring attr2 = prefs->getString("dialogs.save_as", "default");
+        Glib::ustring attr2 = prefs->getString("/dialogs/save_as/default");
         if(!attr2.empty()) default_extension = attr2;
     } else {
         default_extension = attr;
@@ -710,7 +735,7 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, bool is_copy)
         if (extension)
             filename_extension = extension->get_extension();
 
-        Glib::ustring attr3 = prefs->getString("dialogs.save_as", "path");
+        Glib::ustring attr3 = prefs->getString("/dialogs/save_as/path");
         if (!attr3.empty())
             save_path = attr3;
 
@@ -793,12 +818,13 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, bool is_copy)
 
         success = file_save(parentWindow, doc, fileName, selectionType, TRUE, !is_copy);
 
-        if (success)
-            prefs_set_recent_file(SP_DOCUMENT_URI(doc), SP_DOCUMENT_NAME(doc));
+        if (success) {
+            sp_file_add_recent(SP_DOCUMENT_URI(doc));
+        }
 
         save_path = Glib::path_get_dirname(fileName);
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-        prefs->setString("dialogs.save_as", "path", save_path);
+        prefs->setString("/dialogs/save_as/path", save_path);
 
         return success;
     }
@@ -987,15 +1013,15 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
             // object" option.
             {
                 Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-                bool const saved_pref = prefs->getBool("options.transform", "pattern", true);
-                prefs->setBool("options.transform", "pattern", true);
+                bool const saved_pref = prefs->getBool("/options/transform/pattern", true);
+                prefs->setBool("/options/transform/pattern", true);
                 sp_document_ensure_up_to_date(sp_desktop_document(desktop));
-                boost::optional<Geom::Rect> sel_bbox = selection->bounds_2geom();
+                Geom::OptRect sel_bbox = selection->bounds();
                 if (sel_bbox) {
                     Geom::Point m( desktop->point() - sel_bbox->midpoint() );
                     sp_selection_move_relative(selection, m);
                 }
-                prefs->setBool("options.transform", "pattern", saved_pref);
+                prefs->setBool("/options/transform/pattern", saved_pref);
             }
         }
 
@@ -1100,7 +1126,7 @@ sp_file_export_dialog(void *widget)
     Glib::ustring default_extension;
     char *attr = (char *)repr->attribute("inkscape:output_extension");
     if (!attr) {
-        Glib::ustring attr2 = prefs->getString("dialogs.save_as", "default");
+        Glib::ustring attr2 = prefs->getString("/dialogs/save_as/default");
         if(!attr2.empty()) default_extension = attr2;
     } else {
         default_extension = attr;
@@ -1118,7 +1144,7 @@ sp_file_export_dialog(void *widget)
         if (extension)
             filename_extension = extension->get_extension();
 
-        Glib::ustring attr3 = prefs->getString("dialogs.save_as", "path");
+        Glib::ustring attr3 = prefs->getString("/dialogs/save_as/path");
         if (!attr3.empty())
             export_path = attr3;
 
@@ -1177,11 +1203,13 @@ sp_file_export_dialog(void *widget)
 
         success = file_save(doc, fileName, selectionType, TRUE, FALSE);
 
-        if (success)
-            prefs_set_recent_file(SP_DOCUMENT_URI(doc), SP_DOCUMENT_NAME(doc));
+        if (success) {
+            Glib::RefPtr<Gtk::RecentManager> recent = Gtk::RecentManager::get_default();
+            recent->add_item(SP_DOCUMENT_URI(doc));
+        }
 
         export_path = fileName;
-        prefs->setString("dialogs.save_as", "path", export_path);
+        prefs->setString("/dialogs/save_as/path", export_path);
 
         return success;
     }
@@ -1301,8 +1329,8 @@ sp_file_export_to_ocal_dialog(Gtk::Window &parentWindow)
     // Create the uri
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     Glib::ustring uri = "dav://";
-    Glib::ustring username = prefs->getString("options.ocalusername", "str");
-    Glib::ustring password = prefs->getString("options.ocalpassword", "str");
+    Glib::ustring username = prefs->getString("/options/ocalusername/str");
+    Glib::ustring password = prefs->getString("/options/ocalpassword/str");
     if (username.empty() || password.empty())
     {
         if(!gotSuccess)
@@ -1322,7 +1350,7 @@ sp_file_export_to_ocal_dialog(Gtk::Window &parentWindow)
     uri.append(":");
     uri.append(password);
     uri.append("@");
-    uri.append(prefs->getString("options.ocalurl", "str"));
+    uri.append(prefs->getString("/options/ocalurl/str"));
     uri.append("/dav.php/");
     uri.append(Glib::path_get_basename(fileName));