X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xaw%2Fxoptions.c;h=e855beb04c529ccae9c5f093076b70eae87dfa91;hb=e677df018f76f76bace476a381866294282e9f3f;hp=1eb4965aef6fb4dcb679574d94e6d2f37eb641ee;hpb=7e9e39a80410d3c28677b98c3144cc179b41d8c5;p=xboard.git diff --git a/xaw/xoptions.c b/xaw/xoptions.c index 1eb4965..e855beb 100644 --- a/xaw/xoptions.c +++ b/xaw/xoptions.c @@ -273,12 +273,29 @@ SetTextColor (char **cnames, int fg, int bg, int attr) void AppendColorized (Option *opt, char *message, int count) { + if(!opt->handle) return; AppendText(opt, message); } void Show (Option *opt, int hide) { + static Dimension h; + Arg args[16]; + Dimension v; + int j=0; +return; // FIXME: it would be nice if the Chat window did have an ICS pane we could hide behind +printf("Show(%d) %x\n", hide, opt->handle); + if(!opt->handle) return; + if(hide) { // make sure original size is saved + XtSetArg(args[j], XtNheight, &v); j++; + XtGetValues(opt->handle, args, j); + if(v != 1) h = v; + } +printf("h = %d\n",h); + j = 0; + XtSetArg(args[j], XtNheight, hide ? 1 : h); j++; + XtSetValues(opt->handle, args, j); } void @@ -308,13 +325,21 @@ SetIconName (DialogClass dlg, char *name) } static void +LabelCallback (Widget ww, XtPointer client_data, XEvent *event, Boolean *b) +{ // called on ButtonPress in label widgets with attached user handler (clocks!) + int s, data = (intptr_t) client_data; + Option *opt = dialogOptions[data >> 8] + (s = data & 255); + + if(((XButtonEvent*)event)->button != Button1) s = -s; + ((ButtonCallback*) opt->target) (s); +} + +static void CheckCallback (Widget ww, XtPointer client_data, XEvent *event, Boolean *b) { int s, data = (intptr_t) client_data; Option *opt = dialogOptions[data >> 8] + (data & 255); - if(opt->type == Label) { ((ButtonCallback*) opt->target)(data&255); return; } - GetWidgetState(opt, &s); SetWidgetState(opt, !s); } @@ -1093,7 +1118,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent XtSetArg(args[j], XtNlabel, _(msg)); j++; option[i].handle = (void*) (last = XtCreateManagedWidget("label", labelWidgetClass, form, args, j)); if(option[i].target) // allow user to specify event handler for button presses - XtAddEventHandler(last, ButtonPressMask, False, CheckCallback, (XtPointer)(intptr_t) i + 256*dlgNr); + XtAddEventHandler(last, ButtonPressMask, False, LabelCallback, (XtPointer)(intptr_t) i + 256*dlgNr); break; case SaveButton: case Button: @@ -1104,7 +1129,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent j = SetPositionAndSize(args, last, lastrow, 3 /* border */, option[i].max /* w */, shrink ? textHeight : 0 /* h */, option[i].min & 0xE | chain /* chain */); XtSetArg(args[j], XtNlabel, _(option[i].name)); j++; - if(option[i].textValue) { // special for buttons of New Variant dialog + if(option[i].textValue && *option[i].textValue == '#') { // special for buttons of New Variant dialog XtSetArg(args[j], XtNsensitive, option[i].value >= 0 && (appData.noChessProgram || strstr(first.variants, VariantName(option[i].value)))); j++; XtSetArg(args[j], XtNborderWidth, (gameInfo.variant == option[i].value)+1); j++;