summaryrefslogtreecommitdiff
path: root/src/Fl_Preferences.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fl_Preferences.cxx')
-rw-r--r--src/Fl_Preferences.cxx56
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 ] == '/' )
{