Fixed crash on start on some Windows configurations
see issue 1022
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include <fcntl.h>
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#include <shlobj.h>
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
@@ -351,3 +352,22 @@ int safe_g_mkdir_with_parents(const Glib::ustring& dirName, int mode)
|
||||
{
|
||||
return ::g_mkdir_with_parents(dirName.c_str(), mode);
|
||||
}
|
||||
|
||||
Glib::ustring safe_get_user_picture_dir() {
|
||||
#ifdef WIN32
|
||||
|
||||
// get_user_special_dir/pictures crashes on some Windows configurations.
|
||||
// so we use the safe native functions here
|
||||
WCHAR pathW[MAX_PATH]={0};
|
||||
if (SHGetSpecialFolderPathW(NULL,pathW,CSIDL_MYPICTURES,false)) {
|
||||
char pathA[MAX_PATH];
|
||||
WideCharToMultiByte(CP_UTF8,0,pathW,-1,pathA,MAX_PATH,0,0);
|
||||
return Glib::ustring(pathA);
|
||||
} else return Glib::ustring("C:\\");
|
||||
|
||||
#else
|
||||
|
||||
return Glib::get_user_special_dir (G_USER_DIRECTORY_PICTURES);
|
||||
|
||||
#endif
|
||||
}
|
@@ -39,4 +39,6 @@ bool safe_file_test (const Glib::ustring& filename, Glib::FileTest test);
|
||||
int safe_g_remove(const Glib::ustring& filename);
|
||||
int safe_g_rename(const Glib::ustring& oldFilename, const Glib::ustring& newFilename);
|
||||
int safe_g_mkdir_with_parents(const Glib::ustring& dirName, int mode);
|
||||
|
||||
Glib::ustring safe_get_user_picture_dir();
|
||||
#endif
|
||||
|
@@ -258,7 +258,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel)
|
||||
if (safe_file_test (options.lastSaveAsPath, Glib::FILE_TEST_IS_DIR))
|
||||
saveAsDialog = new SaveAsDialog (options.lastSaveAsPath);
|
||||
else
|
||||
saveAsDialog = new SaveAsDialog (Glib::get_user_special_dir (G_USER_DIRECTORY_PICTURES));
|
||||
saveAsDialog = new SaveAsDialog (safe_get_user_picture_dir());
|
||||
|
||||
saveAsDialog->set_default_size (options.saveAsDialogWidth, options.saveAsDialogHeight);
|
||||
|
||||
|
@@ -1475,7 +1475,7 @@ void FileCatalog::buttonBrowsePathPressed () {
|
||||
}
|
||||
else if (FirstChar=="!"){ // user's pictures directory
|
||||
//DecodedPathPrefix = g_get_user_special_dir(G_USER_DIRECTORY_PICTURES);
|
||||
DecodedPathPrefix = Glib::get_user_special_dir (G_USER_DIRECTORY_PICTURES);
|
||||
DecodedPathPrefix = safe_get_user_picture_dir();
|
||||
}
|
||||
|
||||
if (DecodedPathPrefix!=""){
|
||||
|
@@ -102,7 +102,7 @@ void PlacesBrowser::refreshPlacesList () {
|
||||
}
|
||||
|
||||
// append pictures directory
|
||||
hfile = Gio::File::create_for_path (Glib::get_user_special_dir (G_USER_DIRECTORY_PICTURES));
|
||||
hfile = Gio::File::create_for_path (safe_get_user_picture_dir());
|
||||
if (hfile && hfile->query_exists()) {
|
||||
try {
|
||||
Glib::RefPtr<Gio::FileInfo> info = safe_query_file_info (hfile);
|
||||
|
Reference in New Issue
Block a user