|
|
|
@ -827,10 +827,13 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
@@ -827,10 +827,13 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
|
|
|
|
|
{ |
|
|
|
|
# define FLPREFS_RESOURCE "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" |
|
|
|
|
# define FLPREFS_RESOURCEW L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" |
|
|
|
|
static char filename[ FL_PATH_MAX ]; |
|
|
|
|
static char *filename = 0L; |
|
|
|
|
// make enough room for a UTF16 pathname
|
|
|
|
|
if (!filename) filename = (char*)::malloc(2*FL_PATH_MAX); |
|
|
|
|
filename[0] = 0; |
|
|
|
|
filename[1] = 0; |
|
|
|
|
size_t appDataLen = strlen(vendor) + strlen(application) + 8; |
|
|
|
|
DWORD type, nn; |
|
|
|
|
DWORD nn; |
|
|
|
|
LONG err; |
|
|
|
|
HKEY key; |
|
|
|
|
|
|
|
|
@ -839,9 +842,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
@@ -839,9 +842,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
|
|
|
|
|
err = RegOpenKeyW( HKEY_LOCAL_MACHINE, FLPREFS_RESOURCEW, &key ); |
|
|
|
|
if (err == ERROR_SUCCESS) { |
|
|
|
|
nn = (DWORD) (FL_PATH_MAX - appDataLen); |
|
|
|
|
err = RegQueryValueExW( key, L"Common AppData", 0L, &type, |
|
|
|
|
err = RegQueryValueExW( key, L"Common AppData", 0L, 0L, |
|
|
|
|
(BYTE*)filename, &nn ); |
|
|
|
|
if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) { |
|
|
|
|
if ( err != ERROR_SUCCESS ) { |
|
|
|
|
filename[0] = 0; |
|
|
|
|
filename[1] = 0; |
|
|
|
|
} |
|
|
|
@ -852,9 +855,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
@@ -852,9 +855,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
|
|
|
|
|
err = RegOpenKeyW( HKEY_CURRENT_USER, FLPREFS_RESOURCEW, &key ); |
|
|
|
|
if (err == ERROR_SUCCESS) { |
|
|
|
|
nn = (DWORD) (FL_PATH_MAX - appDataLen); |
|
|
|
|
err = RegQueryValueExW( key, L"AppData", 0L, &type, |
|
|
|
|
err = RegQueryValueExW( key, L"AppData", 0L,0L, |
|
|
|
|
(BYTE*)filename, &nn ); |
|
|
|
|
if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) { |
|
|
|
|
if ( err != ERROR_SUCCESS ) { |
|
|
|
|
filename[0] = 0; |
|
|
|
|
filename[1] = 0; |
|
|
|
|
} |
|
|
|
@ -863,7 +866,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
@@ -863,7 +866,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
if (!filename[1] && !filename[0]) { |
|
|
|
|
strcpy(filename, "C:\\FLTK"); |
|
|
|
|
// Don't write data into some arbitrary directory! Just return NULL.
|
|
|
|
|
//strcpy(filename, "C:\\FLTK");
|
|
|
|
|
return 0L; |
|
|
|
|
} else { |
|
|
|
|
#if 0 |
|
|
|
|
wchar_t *b = (wchar_t*)_wcsdup((wchar_t *)filename); |
|
|
|
@ -879,6 +884,13 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
@@ -879,6 +884,13 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
|
|
|
|
|
filename[len] = 0; |
|
|
|
|
free(b); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Make sure that the parameters are not NULL
|
|
|
|
|
if ( (vendor==0L) || (vendor[0]==0) ) |
|
|
|
|
vendor = "unknown"; |
|
|
|
|
if ( (application==0L) || (application[0]==0) ) |
|
|
|
|
application = "unknown"; |
|
|
|
|
|
|
|
|
|
snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename), |
|
|
|
|
"/%s/%s.prefs", vendor, application); |
|
|
|
|
for (char *s = filename; *s; s++) if (*s == '\\') *s = '/'; |
|
|
|
|