Fix WB New Variant dialog
authorH.G. Muller <h.g.muller@hccnet.nl>
Fri, 27 Dec 2013 19:29:26 +0000 (20:29 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 4 Jan 2014 11:49:09 +0000 (12:49 +0100)
After selecting an engine-defined variant, all radio buttons would refer to
the already selected variant, and thus all appear active, but do nothing.

winboard/woptions.c

index d3dba20..a4d3ff2 100644 (file)
@@ -871,12 +871,12 @@ VariantClass
 VariantWhichRadio(HWND hDlg)\r
 {\r
   int i=0, j;\r
+  *engineVariant = NULLCHAR;\r
   while((j = radioButton[i++]) != -2) {\r
        if(j == -1) continue; // no menu button\r
        if(IsDlgButtonChecked(hDlg, j) &&\r
           (appData.noChessProgram || strstr(first.variants, VariantName(i-1)))) return (VariantClass) i-1;\r
   }\r
-  *engineVariant = NULLCHAR;\r
   for(i=0; i<9; i++) { // check for engine-defined variants\r
     if(IsDlgButtonChecked(hDlg, OPT_EngineVariant+i) ) {\r
        GetDlgItemText(hDlg, OPT_EngineVariant+i, engineVariant, MSG_SIZ); // remember name, so we can resolve it later\r
@@ -889,12 +889,15 @@ VariantWhichRadio(HWND hDlg)
 void\r
 VariantShowRadio(HWND hDlg)\r
 {\r
+  char c = *engineVariant;\r
   int i=0, j;\r
   CheckDlgButton(hDlg, radioButton[gameInfo.variant], TRUE);\r
+  *engineVariant = NULLCHAR; // [HGM] kludge to prevent VariantName will always return engineVariant\r
   while((j = radioButton[i++]) != -2) {\r
        if(j == -1) continue; // no menu button\r
        EnableWindow(GetDlgItem(hDlg, j), appData.noChessProgram || strstr(first.variants, VariantName(i-1)));\r
   }\r
+  *engineVariant = c;\r
   for(i=0; i<9; i++) { // initialize engine-defined variants\r
     char *v = EngineDefinedVariant(&first, i); // get name of #i\r
     if(v) { // there is such a variant\r