diff --git a/unix/xserver/hw/vnc/RFBGlue.cc b/unix/xserver/hw/vnc/RFBGlue.cc index 160177b..6086025 100644 --- a/unix/xserver/hw/vnc/RFBGlue.cc +++ b/unix/xserver/hw/vnc/RFBGlue.cc @@ -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(param); + if (bparam == NULL) + return false; + + return true; +} + int vncGetParamCount(void) { int count; diff --git a/unix/xserver/hw/vnc/RFBGlue.h b/unix/xserver/hw/vnc/RFBGlue.h index a63afd0..d62236a 100644 --- a/unix/xserver/hw/vnc/RFBGlue.h +++ b/unix/xserver/hw/vnc/RFBGlue.h @@ -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); diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c index 9bea769..2971290 100644 --- a/unix/xserver/hw/vnc/xvnc.c +++ b/unix/xserver/hw/vnc/xvnc.c @@ -639,6 +639,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;