X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xoptions.c;h=1d5173835947ff27d4ca48c4c1c43956ebe159b8;hb=a98a889d21403be8361c2abdd41480d5d02674cd;hp=0689355ca75af897b41d4b6136a4800557a5b40e;hpb=d39b0224115daf24fa2608e27d0ca16c8cd4aa70;p=xboard.git diff --git a/xoptions.c b/xoptions.c index 0689355..1d51738 100644 --- a/xoptions.c +++ b/xoptions.c @@ -624,6 +624,7 @@ int values[MAX_OPTIONS]; ChessProgramState *currentCps; static Option *currentOption; extern Widget shells[]; +static Boolean browserUp; void CheckCallback(Widget ww, XtPointer data, XEvent *event, Boolean *b) { @@ -659,6 +660,7 @@ void SpinCallback(w, client_data, call_data) XtSetArg(args[0], XtNstring, &q); XtGetValues(currentOption[data].handle, args, 1); for(r = ""; *q; q++) if(*q == '.') r = q; else if(*q == '/') r = ""; // last dot after last slash + browserUp = True; if(XsraSelFile(shells[0], currentOption[data].name, NULL, NULL, "", "", r, currentOption[data].type == PathName ? "p" : "f", NULL, &p)) { int len = strlen(p); @@ -666,6 +668,7 @@ void SpinCallback(w, client_data, call_data) XtSetArg(args[0], XtNstring, p); XtSetValues(currentOption[data].handle, args, 1); } + browserUp = False; SetFocus(currentOption[data].handle, shells[0], (XEvent*) NULL, False); return; } else @@ -785,6 +788,7 @@ void GenericPopDown(w, event, prms, nprms) Cardinal *nprms; { int n; + if(browserUp) return; // prevent closing dialog when it has an open file-browse daughter PopDown(prms[0][0] - '0'); } @@ -1233,13 +1237,14 @@ void GenericReadout() sscanf(val, "%f", &x); if(x > currentOption[i].max) x = currentOption[i].max; if(x < currentOption[i].min) x = currentOption[i].min; - if(currentOption[i].value != x) { + if(currentOption[i].type == Fractional) + *(float*) currentOption[i].target = x; // engines never have float options! + else if(currentOption[i].value != x) { currentOption[i].value = x; - if(currentCps) { // engines never have float options, so no decimals! + if(currentCps) { snprintf(buf, MSG_SIZ, "option %s=%.0f\n", currentOption[i].name, x); SendToProgram(buf, currentCps); - } else if(currentOption[i].type == Spin) *(int*) currentOption[i].target = x; - else *(float*) currentOption[i].target = x; + } else *(int*) currentOption[i].target = x; } break; case CheckBox: