This is needed by vncserver which doesn't know which parameters are boolean, and it cannot use the -Param=Value form as that isn't tolerated by the Xorg code.tags/v1.11.90
@@ -107,7 +107,7 @@ $default_opts{rfbwait} = 30000; | |||
$default_opts{rfbauth} = "$vncUserDir/passwd"; | |||
$default_opts{rfbport} = $vncPort; | |||
$default_opts{fp} = $fontPath if ($fontPath); | |||
$default_opts{pn} = ""; | |||
$default_opts{pn} = undef; | |||
# Load user-overrideable system defaults | |||
LoadConfig($vncSystemConfigDefaultsFile); | |||
@@ -242,13 +242,13 @@ push(@cmd, "@CMAKE_INSTALL_FULL_BINDIR@/Xvnc", ":$displayNumber"); | |||
foreach my $k (sort keys %config) { | |||
push(@cmd, "-$k"); | |||
push(@cmd, $config{$k}) if $config{$k}; | |||
push(@cmd, $config{$k}) if defined($config{$k}); | |||
delete $default_opts{$k}; # file options take precedence | |||
} | |||
foreach my $k (sort keys %default_opts) { | |||
push(@cmd, "-$k"); | |||
push(@cmd, $default_opts{$k}) if $default_opts{$k}; | |||
push(@cmd, $default_opts{$k}) if defined($default_opts{$k}); | |||
} | |||
warn "\nNew '$desktopName' desktop is $host:$displayNumber\n\n"; | |||
@@ -291,7 +291,7 @@ sub LoadConfig { | |||
# current config file being loaded defined the logical opposite setting | |||
# (NeverShared vs. AlwaysShared, etc etc). | |||
$toggle = lc($1); # must normalize key case | |||
$config{$toggle} = $k; | |||
$config{$toggle} = undef; | |||
} | |||
} | |||
close(IN); |
@@ -143,6 +143,22 @@ const char* vncGetParamDesc(const char *name) | |||
return param->getDescription(); | |||
} | |||
int vncIsParamBool(const char *name) | |||
{ | |||
VoidParameter *param; | |||
BoolParameter *bparam; | |||
param = rfb::Configuration::getParam(name); | |||
if (param == NULL) | |||
return false; | |||
bparam = dynamic_cast<BoolParameter*>(param); | |||
if (bparam == NULL) | |||
return false; | |||
return true; | |||
} | |||
int vncGetParamCount(void) | |||
{ | |||
int count; |
@@ -41,6 +41,7 @@ int vncSetParam(const char *name, const char *value); | |||
int vncSetParamSimple(const char *nameAndValue); | |||
char* vncGetParam(const char *name); | |||
const char* vncGetParamDesc(const char *name); | |||
int vncIsParamBool(const char *name); | |||
int vncGetParamCount(void); | |||
char *vncGetParamList(void); |
@@ -618,6 +618,20 @@ ddxProcessArgument(int argc, char *argv[], int i) | |||
exit(0); | |||
} | |||
/* We need to resolve an ambiguity for booleans */ | |||
if (argv[i][0] == '-' && i+1 < argc && | |||
vncIsParamBool(&argv[i][1])) { | |||
if ((strcasecmp(argv[i+1], "0") == 0) || | |||
(strcasecmp(argv[i+1], "1") == 0) || | |||
(strcasecmp(argv[i+1], "true") == 0) || | |||
(strcasecmp(argv[i+1], "false") == 0) || | |||
(strcasecmp(argv[i+1], "yes") == 0) || | |||
(strcasecmp(argv[i+1], "no") == 0)) { | |||
vncSetParam(&argv[i][1], argv[i+1]); | |||
return 2; | |||
} | |||
} | |||
if (vncSetParamSimple(argv[i])) | |||
return 1; | |||
@@ -556,6 +556,26 @@ int main(int argc, char** argv) | |||
} | |||
for (int i = 1; i < argc;) { | |||
/* We need to resolve an ambiguity for booleans */ | |||
if (argv[i][0] == '-' && i+1 < argc) { | |||
VoidParameter *param; | |||
param = Configuration::getParam(&argv[i][1]); | |||
if ((param != NULL) && | |||
(dynamic_cast<BoolParameter*>(param) != NULL)) { | |||
if ((strcasecmp(argv[i+1], "0") == 0) || | |||
(strcasecmp(argv[i+1], "1") == 0) || | |||
(strcasecmp(argv[i+1], "true") == 0) || | |||
(strcasecmp(argv[i+1], "false") == 0) || | |||
(strcasecmp(argv[i+1], "yes") == 0) || | |||
(strcasecmp(argv[i+1], "no") == 0)) { | |||
param->setParam(argv[i+1]); | |||
i += 2; | |||
continue; | |||
} | |||
} | |||
} | |||
if (Configuration::setParam(argv[i])) { | |||
i++; | |||
continue; |