diff --git a/src/file.cpp b/src/file.cpp
index 355b1c50ab461dcdd215a6f8cfff3ffb8d047513..51dce81cf7a8433a57dec6288bf3bb9584e9d151 100644 (file)
--- a/src/file.cpp
+++ b/src/file.cpp
#include "jabber_whiteboard/session-manager.h"
#endif
#include "jabber_whiteboard/session-manager.h"
#endif
+#ifdef WIN32
+#include <windows.h>
+#endif
//#define INK_DUMP_FILENAME_CONV 1
#undef INK_DUMP_FILENAME_CONV
//#define INK_DUMP_FILENAME_CONV 1
#undef INK_DUMP_FILENAME_CONV
}
bool do_revert = true;
}
bool do_revert = true;
- if (repr->attribute("sodipodi:modified") != NULL) {
+ if (doc->isModifiedSinceSave()) {
gchar *text = g_strdup_printf(_("Changes will be lost! Are you sure you want to reload document %s?"), uri);
bool response = desktop->warnDialog (text);
gchar *text = g_strdup_printf(_("Changes will be lost! Are you sure you want to reload document %s?"), uri);
bool response = desktop->warnDialog (text);
g_message("---------------");
}
g_message("---------------");
}
-static Inkscape::UI::Dialog::FileOpenDialog *openDialogInstance = NULL;
-
/**
* Display an file Open selector. Open a document if OK is pressed.
* Can select single or multiple files for opening.
/**
* Display an file Open selector. Open a document if OK is pressed.
* Can select single or multiple files for opening.
void
sp_file_open_dialog(Gtk::Window &parentWindow, gpointer /*object*/, gpointer /*data*/)
{
void
sp_file_open_dialog(Gtk::Window &parentWindow, gpointer /*object*/, gpointer /*data*/)
{
-
//# Get the current directory for finding files
//# Get the current directory for finding files
- Glib::ustring open_path;
- char *attr = (char *)prefs_get_string_attribute("dialogs.open", "path");
- if (attr)
- open_path = attr;
+ static Glib::ustring open_path;
+ if(open_path.empty())
+ {
+ gchar const *attr = prefs_get_string_attribute("dialogs.open", "path");
+ if (attr)
+ open_path = attr;
+ }
//# Test if the open_path directory exists
if (!Inkscape::IO::file_test(open_path.c_str(),
(GFileTest)(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
open_path = "";
//# Test if the open_path directory exists
if (!Inkscape::IO::file_test(open_path.c_str(),
(GFileTest)(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)))
open_path = "";
- //# If no open path, default to our home directory
- if (open_path.size() < 1)
+#ifdef WIN32
+ //# If no open path, default to our win32 documents folder
+ if (open_path.empty())
+ {
+ // The path to the My Documents folder is read from the
+ // value "HKEY_CURRENT_USER\Software\Windows\CurrentVersion\Explorer\Shell Folders\Personal"
+ HKEY key = NULL;
+ if(RegOpenKeyExA(HKEY_CURRENT_USER,
+ "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
+ 0, KEY_QUERY_VALUE, &key) == ERROR_SUCCESS)
{
{
+ WCHAR utf16path[_MAX_PATH];
+ DWORD value_type;
+ DWORD data_size = sizeof(utf16path);
+ if(RegQueryValueExW(key, L"Personal", NULL, &value_type,
+ (BYTE*)utf16path, &data_size) == ERROR_SUCCESS)
+ {
+ g_assert(value_type == REG_SZ);
+ gchar *utf8path = g_utf16_to_utf8(
+ (const gunichar2*)utf16path, -1, NULL, NULL, NULL);
+ if(utf8path)
+ {
+ open_path = Glib::ustring(utf8path);
+ g_free(utf8path);
+ }
+ }
+ }
+ }
+#endif
+
+ //# If no open path, default to our home directory
+ if (open_path.empty())
+ {
open_path = g_get_home_dir();
open_path.append(G_DIR_SEPARATOR_S);
open_path = g_get_home_dir();
open_path.append(G_DIR_SEPARATOR_S);
- }
+ }
//# Create a dialog if we don't already have one
//# Create a dialog if we don't already have one
- if (!openDialogInstance) {
- openDialogInstance =
+ Inkscape::UI::Dialog::FileOpenDialog *openDialogInstance =
Inkscape::UI::Dialog::FileOpenDialog::create(
Inkscape::UI::Dialog::FileOpenDialog::create(
- parentWindow,
- open_path,
+ parentWindow, open_path,
Inkscape::UI::Dialog::SVG_TYPES,
Inkscape::UI::Dialog::SVG_TYPES,
- (char const *)_("Select file to open"));
- }
-
+ _("Select file to open"));
//# Show the dialog
bool const success = openDialogInstance->show();
//# Show the dialog
bool const success = openDialogInstance->show();
+
+ //# Save the folder the user selected for later
+ open_path = openDialogInstance->getCurrentDirectory();
+
if (!success)
if (!success)
+ {
+ delete openDialogInstance;
return;
return;
+ }
//# User selected something. Get name and type
Glib::ustring fileName = openDialogInstance->getFilename();
//# User selected something. Get name and type
Glib::ustring fileName = openDialogInstance->getFilename();
+
Inkscape::Extension::Extension *selection =
openDialogInstance->getSelectionType();
Inkscape::Extension::Extension *selection =
openDialogInstance->getSelectionType();
- //# Code to check & open iff multiple files.
- std::vector<Glib::ustring> flist=openDialogInstance->getFilenames();
+ //# Code to check & open if multiple files.
+ std::vector<Glib::ustring> flist = openDialogInstance->getFilenames();
+
+ //# We no longer need the file dialog object - delete it
+ delete openDialogInstance;
+ openDialogInstance = NULL;
//# Iterate through filenames if more than 1
if (flist.size() > 1)
//# Iterate through filenames if more than 1
if (flist.size() > 1)
+ {
+ for (unsigned int i = 0; i < flist.size(); i++)
{
{
- for (unsigned int i=1 ; i<flist.size() ; i++)
- {
- Glib::ustring fName = flist[i];
+ fileName = flist[i];
- if (Glib::file_test(fileName, Glib::FILE_TEST_IS_DIR)) {
- Glib::ustring newFileName = Glib::filename_to_utf8(fName);
+ Glib::ustring newFileName = Glib::filename_to_utf8(fileName);
if ( newFileName.size() > 0 )
if ( newFileName.size() > 0 )
- fName = newFileName;
+ fileName = newFileName;
else
g_warning( "ERROR CONVERTING OPEN FILENAME TO UTF-8" );
#ifdef INK_DUMP_FILENAME_CONV
else
g_warning( "ERROR CONVERTING OPEN FILENAME TO UTF-8" );
#ifdef INK_DUMP_FILENAME_CONV
- g_message("Opening File %s\n",fileName);
+ g_message("Opening File %s\n", fileName.c_str());
#endif
sp_file_open(fileName, selection);
#endif
sp_file_open(fileName, selection);
- }
}
}
+
return;
}
return;
}
- if (fileName.size() > 0) {
-
+ if (!fileName.empty())
+ {
Glib::ustring newFileName = Glib::filename_to_utf8(fileName);
if ( newFileName.size() > 0)
Glib::ustring newFileName = Glib::filename_to_utf8(fileName);
if ( newFileName.size() > 0)
}
return true;
#else
}
return true;
#else
- // in case we do not have GNOME_VFS
- return false;
+ // in case we do not have GNOME_VFS
+ return false;
#endif
}
#endif
}
}
Inkscape::UI::Dialog::FileSaveDialog *saveDialog =
Inkscape::UI::Dialog::FileSaveDialog::create(
}
Inkscape::UI::Dialog::FileSaveDialog *saveDialog =
Inkscape::UI::Dialog::FileSaveDialog::create(
- parentWindow,
+ parentWindow,
save_loc,
Inkscape::UI::Dialog::SVG_TYPES,
save_loc,
Inkscape::UI::Dialog::SVG_TYPES,
- (char const *) _("Select file to save to"),
+ dialog_title,
default_extension
);
default_extension
);
- saveDialog->change_title(dialog_title);
saveDialog->setSelectionType(extension);
saveDialog->setSelectionType(extension);
- // allow easy access to the user's own templates folder
- gchar *templates = profile_path ("templates");
- if (Inkscape::IO::file_test(templates, (GFileTest)(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
- dynamic_cast<Gtk::FileChooser *>(saveDialog)->add_shortcut_folder(templates);
- }
- g_free (templates);
-
bool success = saveDialog->show();
if (!success) {
delete saveDialog;
bool success = saveDialog->show();
if (!success) {
delete saveDialog;
{
bool success = true;
{
bool success = true;
- Inkscape::XML::Node *repr = sp_document_repr_root(doc);
-
- gchar const *fn = repr->attribute("sodipodi:modified");
- if (fn != NULL) {
+ if (doc->isModifiedSinceSave()) {
+ Inkscape::XML::Node *repr = sp_document_repr_root(doc);
if ( doc->uri == NULL
|| repr->attribute("inkscape:output_extension") == NULL )
{
return sp_file_save_dialog(parentWindow, doc, FALSE);
} else {
if ( doc->uri == NULL
|| repr->attribute("inkscape:output_extension") == NULL )
{
return sp_file_save_dialog(parentWindow, doc, FALSE);
} else {
- fn = g_strdup(doc->uri);
+ gchar const *fn = g_strdup(doc->uri);
gchar const *ext = repr->attribute("inkscape:output_extension");
success = file_save(parentWindow, doc, fn, Inkscape::Extension::db.get(ext), FALSE, TRUE);
g_free((void *) fn);
gchar const *ext = repr->attribute("inkscape:output_extension");
success = file_save(parentWindow, doc, fn, Inkscape::Extension::db.get(ext), FALSE, TRUE);
g_free((void *) fn);
importDialogInstance =
Inkscape::UI::Dialog::FileOpenDialog::create(
parentWindow,
importDialogInstance =
Inkscape::UI::Dialog::FileOpenDialog::create(
parentWindow,
- import_path,
+ import_path,
Inkscape::UI::Dialog::IMPORT_TYPES,
(char const *)_("Select file to import"));
}
Inkscape::UI::Dialog::IMPORT_TYPES,
(char const *)_("Select file to import"));
}
static bool gotSuccess = false;
Inkscape::XML::Node *repr = sp_document_repr_root(doc);
static bool gotSuccess = false;
Inkscape::XML::Node *repr = sp_document_repr_root(doc);
- // Verify whether the document is saved, so save this as temporary
+ (void)repr;
- char *str = (char *) repr->attribute("sodipodi:modified");
- if ((!doc->uri) && (!str))
+ if (!doc->uri && !doc->isModifiedSinceSave())
return false;
return false;
- // Get the default extension name
+ // Get the default extension name
Glib::ustring default_extension = "org.inkscape.output.svg.inkscape";
char formatBuf[256];
Glib::ustring default_extension = "org.inkscape.output.svg.inkscape";
char formatBuf[256];