ChessProgramState *currentCps;
static Option *currentOption;
extern Widget shells[];
+static Boolean browserUp;
void CheckCallback(Widget ww, XtPointer data, XEvent *event, Boolean *b)
{
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);
XtSetArg(args[0], XtNstring, p);
XtSetValues(currentOption[data].handle, args, 1);
}
+ browserUp = False;
SetFocus(currentOption[data].handle, shells[0], (XEvent*) NULL, False);
return;
} else
Cardinal *nprms;
{
int n;
+ if(browserUp) return; // prevent closing dialog when it has an open file-browse daughter
PopDown(prms[0][0] - '0');
}
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: