diff options
Diffstat (limited to 'src/Fl_Preferences.cxx')
| -rw-r--r-- | src/Fl_Preferences.cxx | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/src/Fl_Preferences.cxx b/src/Fl_Preferences.cxx index 049c24de9..fbe714e58 100644 --- a/src/Fl_Preferences.cxx +++ b/src/Fl_Preferences.cxx @@ -33,6 +33,7 @@ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> +#include <FL/fl_utf8.H> #include "flstring.h" #include <sys/stat.h> @@ -609,6 +610,7 @@ static char makePath( const char *path ) { return 1; } +#if 0 // strip the filename and create a path static void makePathForFile( const char *path ) { @@ -621,6 +623,7 @@ static void makePathForFile( const char *path ) makePath( p ); free( p ); } +#endif // create the root node // - construct the name of the file that will hold our preferences @@ -629,6 +632,7 @@ Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, Root root, const char char filename[ FL_PATH_MAX ]; filename[0] = 0; #ifdef WIN32 # define FLPREFS_RESOURCE "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" +# define FLPREFS_RESOURCEW L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" int appDataLen = strlen(vendor) + strlen(application) + 8; DWORD type, nn; LONG err; @@ -636,33 +640,49 @@ Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, Root root, const char switch (root) { case SYSTEM: - err = RegOpenKey( HKEY_LOCAL_MACHINE, FLPREFS_RESOURCE, &key ); + + err = RegOpenKeyW( HKEY_LOCAL_MACHINE, FLPREFS_RESOURCEW, &key ); + if (err == ERROR_SUCCESS) { nn = FL_PATH_MAX - appDataLen; - err = RegQueryValueEx( key, "Common AppData", 0L, &type, (BYTE*)filename, &nn ); - if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) + + err = RegQueryValueExW( key, L"Common AppData", 0L, &type, + (BYTE*)filename, &nn ); + + if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) { filename[0] = 0; - RegCloseKey(key); + filename[1] = 0; + } + RegCloseKey(key); } break; case USER: - err = RegOpenKey( HKEY_CURRENT_USER, FLPREFS_RESOURCE, &key ); + err = RegOpenKeyW( HKEY_CURRENT_USER, FLPREFS_RESOURCEW, &key ); + + if (err == ERROR_SUCCESS) { nn = FL_PATH_MAX - appDataLen; - err = RegQueryValueEx( key, "AppData", 0L, &type, (BYTE*)filename, &nn ); - if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) - { - err = RegQueryValueEx( key, "Personal", 0L, &type, (BYTE*)filename, &nn ); - if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) + err = RegQueryValueExW( key, L"AppData", 0L, &type, + (BYTE*)filename, &nn ); + + if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) { filename[0] = 0; + filename[1] = 0; } RegCloseKey(key); } break; } - if (!filename[0]) { + + if (!filename[1] && !filename[0]) { strcpy(filename, "C:\\FLTK"); + } else { + xchar *b = (xchar*)_wcsdup((xchar*)filename); +// filename[fl_unicode2utf(b, wcslen((xchar*)b), filename)] = 0; + unsigned len = fl_utf8fromwc(filename, (FL_PATH_MAX-1), b, wcslen((xchar*)b)); + filename[len] = 0; + free(b); } snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename), @@ -678,7 +698,7 @@ Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, Root root, const char 1, &spec.vRefNum, &spec.parID ); break; case USER: - err = FindFolder( kUserDomain, kPreferencesFolderType, + err = FindFolder( kUserDomain, kPreferencesFolderType, 1, &spec.vRefNum, &spec.parID ); break; } @@ -690,7 +710,7 @@ Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, Root root, const char const char *e; switch (root) { case USER: - if ((e = getenv("HOME")) != NULL) { + if ((e = fl_getenv("HOME")) != NULL) { strlcpy(filename, e, sizeof(filename)); if (filename[strlen(filename)-1] != '/') { @@ -764,7 +784,7 @@ Fl_Preferences::RootNode::~RootNode() int Fl_Preferences::RootNode::read() { char buf[1024]; - FILE *f = fopen( filename_, "rb" ); + FILE *f = fl_fopen( filename_, "rb" ); if ( !f ) return 0; fgets( buf, 1024, f ); fgets( buf, 1024, f ); @@ -805,8 +825,8 @@ int Fl_Preferences::RootNode::read() // write the group tree and all entry leafs int Fl_Preferences::RootNode::write() { - makePathForFile(filename_); - FILE *f = fopen( filename_, "wb" ); + fl_make_path_for_file(filename_); + FILE *f = fl_fopen( filename_, "wb" ); if ( !f ) return 1; fprintf( f, "; FLTK preferences file format 1.0\n" ); fprintf( f, "; vendor: %s\n", vendor_ ); @@ -826,7 +846,7 @@ char Fl_Preferences::RootNode::getPath( char *path, int pathlen ) s = strrchr( path, '.' ); if ( !s ) return 0; *s = 0; - char ret = makePath( path ); + char ret = fl_make_path( path ); strcpy( s, "/" ); return ret; } @@ -1112,7 +1132,7 @@ Fl_Preferences::Node *Fl_Preferences::Node::search( const char *path, int offset len -= offset; if ( ( len <= 0 ) || ( strncmp( path, path_+offset, len ) == 0 ) ) { - if ( len > 0 && path[ len ] == 0 ) + if ( len > 0 && path[ len ] == 0 ) return this; if ( len <= 0 || path[ len ] == '/' ) { |
