diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index 6fe15a11adf588f7e822126add9ed5c594aecd3a..8506f05de30e8cc0a96a51f1e9974916f5d5199c 100644 (file)
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
static void (* abrt_handler) (int) = SIG_DFL;
static void (* fpe_handler) (int) = SIG_DFL;
static void (* ill_handler) (int) = SIG_DFL;
+#ifndef WIN32
static void (* bus_handler) (int) = SIG_DFL;
+#endif
#define INKSCAPE_PROFILE_DIR "inkscape"
#define INKSCAPE_PROFILE_DIR_047DEV "Inkscape"
gchar * location = homedir_path(c);
Inkscape::IO::dump_fopen_call(location, "E");
file = Inkscape::IO::fopen_utf8name(location, "w");
+ g_snprintf (c, 1024, "%s", location); // we want the complete path to be stored in c (for reporting purposes)
g_free(location);
if (!file) {
// try saving to /tmp
}
if (!file) {
// try saving to the current directory
+ gchar *curdir = g_get_current_dir();
g_snprintf (c, 1024, "inkscape-%.256s.%s.%d.svg", docname, sptstr, count);
Inkscape::IO::dump_fopen_call(c, "F");
file = Inkscape::IO::fopen_utf8name(c, "w");
+ // store the complete path in c so that it can be reported later
+ gchar * location = g_build_filename(curdir, c, NULL);
+ g_snprintf (c, 1024, "%s", location);
+ g_free(location);
}
if (file) {
sp_repr_save_stream (repr->document(), file, SP_SVG_NS_URI);
}
}
- inkscape_load_menus(inkscape);
- sp_input_load_from_preferences();
-
+ if (use_gui) {
+ inkscape_load_menus(inkscape);
+ sp_input_load_from_preferences();
+ }
+
/* set language for user interface according setting in preferences */
Glib::ustring ui_language = prefs->getString("/ui/language");
if(!ui_language.empty())
profile_path(const char *filename)
{
static const gchar *prefdir = NULL;
+
+
if (!prefdir) {
+ // First check for a custom environment variable for a "portable app"
+ gchar const *val = g_getenv("INKSCAPE_PORTABLE_PROFILE_DIR");
+ if (val) {
+ prefdir = g_strdup(val);
+ }
+
#ifdef HAS_SHGetSpecialFolderLocation
// prefer c:\Documents and Settings\UserName\Application Data\ to
// c:\Documents and Settings\userName\;
if (needsMigration) {
// TODO here is a point to hook in preference migration
g_warning("Preferences need to be migrated from 0.46 or older %s to %s", legacyDir, prefdir);
+ Inkscape::Preferences::migrate( legacyDir, prefdir );
}
bool needsRenameWarning = ( !Inkscape::IO::file_test( prefdir, G_FILE_TEST_EXISTS ) && Inkscape::IO::file_test( dev47Dir, G_FILE_TEST_EXISTS ) );
g_free(dev47Dir);
dev47Dir = 0;
// In case the XDG user config dir of the moment does not yet exist...
- if ( g_mkdir_with_parents(prefdir, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH) == -1 ) {
+ int mode = S_IRWXU;
+#ifdef S_IRGRP
+ mode |= S_IRGRP;
+#endif
+#ifdef S_IXGRP
+ mode |= S_IXGRP;
+#endif
+#ifdef S_IXOTH
+ mode |= S_IXOTH;
+#endif
+ if ( g_mkdir_with_parents(prefdir, mode) == -1 ) {
int problem = errno;
g_warning("Unable to create profile directory (%s) (%d)", g_strerror(problem), problem);
+ } else {
+ gchar const *userDirs[] = {"keys", "templates", "icons", "extensions", "palettes", NULL};
+ for (gchar const** name = userDirs; *name; ++name) {
+ gchar *dir = g_build_filename(prefdir, *name, NULL);
+ g_mkdir_with_parents(dir, mode);
+ g_free(dir);
+ }
}
}
}