X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xaw%2Fxoptions.c;h=8f02a14078762ec1771d3c4c3e4177f59192975d;hb=4011e8678d85310eedf19fd00aa5d96a9a60770a;hp=8d9141e7788678d6f77963535b3c2c1af2dac9f1;hpb=df677030bcbab764120077e20f356ed244838710;p=xboard.git diff --git a/xaw/xoptions.c b/xaw/xoptions.c index 8d9141e..8f02a14 100644 --- a/xaw/xoptions.c +++ b/xaw/xoptions.c @@ -1,7 +1,7 @@ /* * xoptions.c -- Move list window, part of X front end for XBoard * - * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. + * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc. * ------------------------------------------------------------------------ * * GNU XBoard is free software: you can redistribute it and/or modify @@ -266,6 +266,39 @@ SelectedListBoxItem (Option *opt) } void +SetTextColor (char **cnames, int fg, int bg, int attr) +{ // this is not possible in Xaw +} + +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 HighlightText (Option *opt, int start, int end, Boolean on) { if(on) @@ -292,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); } @@ -966,7 +1007,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent for(h=0; h= 0 && (appData.noChessProgram || strstr(first.variants, VariantName(option[i].value)))); j++; XtSetArg(args[j], XtNborderWidth, (gameInfo.variant == option[i].value)+1); j++; @@ -1100,7 +1141,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent XtAddEventHandler(option[i-1].handle, KeyReleaseMask, False, ColorChanged, (XtPointer)(intptr_t) i-1); } XtAddCallback(last, XtNcallback, GenericCallback, (XtPointer)(intptr_t) i + (dlgNr<<16)); // invokes user callback - if(option[i].textValue) SetColor( option[i].textValue, &option[i]); // for new-variant buttons + if(option[i].textValue && *option[i].textValue == '#') SetColor( option[i].textValue, &option[i]); // for new-variant buttons break; case ComboBox: j = SetPositionAndSize(args, last, lastrow, 0 /* border */, @@ -1190,6 +1231,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent last = form; lastrow = oldLastRow; form = oldForm; forelast = oldForeLast; break; case Break: + if(c) break; width++; height = i+1; stack = !(option[i].min & SAME_ROW); @@ -1344,6 +1386,11 @@ void SetInsertPos (Option *opt, int pos) { Arg args[16]; + if(pos == 999999) { // this kludge to indicate end in GTK is fatal in Xaw + char *s; + GetWidgetText(opt, &s); + pos = strlen(s) - 1; + } XtSetArg(args[0], XtNinsertPosition, pos); XtSetValues(opt->handle, args, 1); // SetFocus(opt->handle, shells[InputBoxDlg], NULL, False); // No idea why this does not work, and the following is needed: @@ -1355,6 +1402,8 @@ TypeInProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) { // can be used as handler for any text edit in any dialog (from GenericPopUp, that is) int n = prms[0][0] - '0'; Widget sh = XtParent(XtParent(XtParent(w))); // popup shell + extern int hidden; + hidden = 0; if(n<2) { // Enter or Esc typed from primed text widget: treat as if dialog OK or cancel button hit. int dlgNr; // figure out what the dialog number is by comparing shells (because we must pass it :( ) @@ -1364,7 +1413,7 @@ TypeInProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -HardSetFocus (Option *opt) +HardSetFocus (Option *opt, DialogClass dlg) { XSetInputFocus(xDisplay, XtWindow(opt->handle), RevertToPointerRoot, CurrentTime); }