X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xoptions.c;h=5cadaf9730ae7377f76e8bfea574918e084b6462;hb=5f68e032eeca21f92f8a45648976770ea25ac559;hp=78bd9d73bb9d6876e9d8a3d631d6f7894e6b93c1;hpb=c90dc392ef0e30c7fd481ee47bd9a39aafebcdf4;p=xboard.git diff --git a/xoptions.c b/xoptions.c index 78bd9d7..5cadaf9 100644 --- a/xoptions.c +++ b/xoptions.c @@ -88,6 +88,7 @@ void SetFocus(Widget w, XtPointer data, XEvent *event, Boolean *b) { Arg args[2]; char *s; + int j; if(previous) { XtSetArg(args[0], XtNdisplayCaret, False); @@ -95,9 +96,10 @@ void SetFocus(Widget w, XtPointer data, XEvent *event, Boolean *b) } XtSetArg(args[0], XtNstring, &s); XtGetValues(w, args, 1); + j = 1; XtSetArg(args[0], XtNdisplayCaret, True); - XtSetArg(args[1], XtNinsertPosition, strlen(s)); - XtSetValues(w, args, 2); + if(!strchr(s, '\n')) XtSetArg(args[1], XtNinsertPosition, strlen(s)), j++; + XtSetValues(w, args, j); XtSetKeyboardFocus((Widget) data, w); previous = w; } @@ -603,6 +605,7 @@ void TimeControlProc(w, event, prms, nprms) //--------------------------- Engine-specific options menu ---------------------------------- typedef void ButtonCallback(int n); +typedef int OKCallback(int n); int values[MAX_OPTIONS]; ChessProgramState *currentCps; @@ -723,7 +726,7 @@ static int oldCores, oldPonder; int MakeColors P((void)); void CreateGCs P((int redo)); void CreateAnyPieces P((void)); -void GenericReadout P((int selected)); +int GenericReadout P((int selected)); Widget shells[10]; Widget marked[10]; Boolean shellUp[10]; @@ -796,12 +799,14 @@ void AddToTourney(int n) XawTextReplace(matchOptions[3].handle, 9999, 9999, &t); } -void MatchOK(int n) +int MatchOK(int n) { if(appData.participants && appData.participants[0]) free(appData.participants); appData.participants = strdup(engineName); + if(!CreateTourney(appData.tourneyFile)) return 0; PopDown(0); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning - if(CreateTourney(appData.tourneyFile)) MatchEvent(2); // start tourney + MatchEvent(2); // start tourney + return 1; } Option matchOptions[] = { @@ -811,7 +816,7 @@ Option matchOptions[] = { { 0xD, 150, 0, NULL, (void*) &engineName, "", NULL, TextBox, "Tourney participants:" }, { 0, 1, 0, NULL, (void*) &engineChoice, (char*) (engineMnemonic+1), (engineMnemonic+1), ComboBox, N_("Select Engine:") }, { 0, 0, 10, NULL, (void*) &appData.tourneyType, "", NULL, Spin, N_("Tourney type (0 = round-robin, 1 = gauntlet):") }, -{ 0, 1, 1000000000, NULL, (void*) &appData.tourneyCycles, "", NULL, Spin, N_("Number of tourney cycles:") }, +{ 0, 1, 1000000000, NULL, (void*) &appData.tourneyCycles, "", NULL, Spin, N_("Number of tourney cycles (or Swiss rounds):") }, { 0, 1, 1000000000, NULL, (void*) &appData.defaultMatchGames, "", NULL, Spin, N_("Default Number of Games in Match (or Pairing):") }, { 0, 0, 1000000000, NULL, (void*) &appData.matchPause, "", NULL, Spin, N_("Pause between Match Games (msec):") }, { 0, 0, 0, NULL, (void*) &appData.saveGameFile, ".pgn", NULL, FileName, N_("Save Tourney Games on:") }, @@ -823,11 +828,12 @@ Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &MatchOK, "", NULL, EndMark , "" } }; -void GeneralOptionsOK(int n) +int GeneralOptionsOK(int n) { int newPonder = appData.ponderNextMove; appData.ponderNextMove = oldPonder; PonderNextMoveEvent(newPonder); + return 1; } Option generalOptions[] = { @@ -932,7 +938,7 @@ Option variantDescriptors[] = { { 0, 2, 0, NULL, NULL, "", NULL, EndMark , "" } }; -void CommonOptionsOK(int n) +int CommonOptionsOK(int n) { int newPonder = appData.ponderNextMove; // make sure changes are sent to first engine by re-initializing it @@ -944,6 +950,7 @@ void CommonOptionsOK(int n) appData.ponderNextMove = oldPonder; PonderNextMoveEvent(newPonder); } + return 1; } Option commonEngineOptions[] = { @@ -976,9 +983,10 @@ Option adjudicationOptions[] = { { 0, 1, 0, NULL, NULL, "", NULL, EndMark , "" } }; -void IcsOptionsOK(int n) +int IcsOptionsOK(int n) { ParseIcsTextColors(); + return 1; } Option icsOptions[] = { @@ -1168,7 +1176,7 @@ void AdjustColor(int i) RefreshColor(i-n-1, n); } -void BoardOptionsOK(int n) +int BoardOptionsOK(int n) { if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; else lineGap = defaultLineGap; useImages = useImageSqs = 0; @@ -1176,6 +1184,7 @@ void BoardOptionsOK(int n) CreateAnyPieces(); InitDrawingSizes(-1, 0); DrawPosition(True, NULL); + return 1; } Option boardOptions[] = { @@ -1226,9 +1235,9 @@ Option boardOptions[] = { { 0, 0, 0, NULL, (void*) &BoardOptionsOK, "", NULL, EndMark , "" } }; -void GenericReadout(int selected) +int GenericReadout(int selected) { - int i, j; + int i, j, res=1; String val; Arg args[16]; char buf[MSG_SIZ], **dest; @@ -1297,7 +1306,7 @@ void GenericReadout(int selected) break; case EndMark: if(currentOption[i].target) // callback for implementing necessary actions on OK (like redraw) - ((ButtonCallback*) currentOption[i].target)(i); + res = ((OKCallback*) currentOption[i].target)(i); break; default: printf("GenericReadout: unexpected case in switch.\n"); @@ -1309,6 +1318,7 @@ void GenericReadout(int selected) } if(currentOption[i].type == EndMark) break; } + return res; } void GenericCallback(w, client_data, call_data) @@ -1330,8 +1340,7 @@ void GenericCallback(w, client_data, call_data) return; } if (strcmp(name, _("OK")) == 0) { // save buttons imply OK - GenericReadout(-1); - PopDown(data); + if(GenericReadout(-1)) PopDown(data); return; } if(currentCps) { @@ -1517,7 +1526,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNlabel, _(option[i].name)); j++; if(option[i].min & 1) { XtSetArg(args[j], XtNfromHoriz, last); j++; } else { XtSetArg(args[j], XtNfromHoriz, NULL); j++; lastrow = forelast; } - if(option[i].max) XtSetArg(args[j], XtNwidth, option[i].max); j++; + if(option[i].max) { XtSetArg(args[j], XtNwidth, option[i].max); j++; } if(option[i].textValue) { // special for buttons of New Variant dialog XtSetArg(args[j], XtNsensitive, appData.noChessProgram || option[i].value < 0 || strstr(first.variants, VariantName(option[i].value))); j++; @@ -1761,6 +1770,7 @@ void MatchOptionsProc(w, event, prms, nprms) { NamesToList(firstChessProgramNames, engineList, engineMnemonic); comboCallback = &AddToTourney; + matchOptions[5].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss GenericPopUp(matchOptions, _("Match Options"), 0); } @@ -1849,9 +1859,10 @@ static int commentIndex; void ClearComment P((int n)); extern char commentTranslations[]; -void NewComCallback(int n) +int NewComCallback(int n) { ReplaceComment(commentIndex, commentText); + return 1; } void SaveChanges(int n) @@ -1895,9 +1906,10 @@ void NewCommentPopup(char *title, char *text, int index) static char *tagsText, *msgText; -void NewTagsCallback(int n) +int NewTagsCallback(int n) { ReplaceTags(tagsText, &gameInfo); + return 1; } void changeTags(int n) @@ -1905,6 +1917,7 @@ void changeTags(int n) Arg args[16]; XtSetArg(args[0], XtNstring, &tagsText); XtGetValues(currentOption[1].handle, args, 1); + if(bookUp) SaveToBook(tagsText); else ReplaceTags(tagsText, &gameInfo); } @@ -1919,15 +1932,18 @@ void NewTagsPopup(char *text, char *msg) { Widget edit; Arg args[16]; + char *title = bookUp ? _("Edit book") : _("Tags"); if(shells[2]) { // if already exists, alter title and content XtSetArg(args[0], XtNstring, text); XtSetValues(tagsOptions[1].handle, args, 1); + XtSetArg(args[0], XtNtitle, title); + XtSetValues(shells[2], args, 1); } if(tagsText) free(tagsText); tagsText = strdup(text); tagsOptions[0].textValue = msg; MarkMenu("menuView.Show Tags", 2); - GenericPopUp(tagsOptions, _("Tags"), 2); + GenericPopUp(tagsOptions, title, 2); } char *icsText; @@ -2032,10 +2048,11 @@ void SecondSettingsProc(w, event, prms, nprms) SettingsPopUp(&second); } -void InstallOK(int n) +int InstallOK(int n) { PopDown(0); // early popdown, to allow FreezeUI to instate grab if(engineChoice[0] == engineNr[0][0]) Load(&first, 0); else Load(&second, 1); + return 1; } Option installOptions[] = { @@ -2061,7 +2078,7 @@ void LoadEngineProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - isUCI = addToList = storeVariant = v1 = useNick = False; hasBook = True; // defaults + isUCI = storeVariant = v1 = useNick = False; addToList = hasBook = True; // defaults if(engineChoice) free(engineChoice); engineChoice = strdup(engineNr[0]); if(engineLine) free(engineLine); engineLine = strdup(""); if(engineDir) free(engineDir); engineDir = strdup(""); @@ -2071,6 +2088,15 @@ void LoadEngineProc(w, event, prms, nprms) GenericPopUp(installOptions, _("Load engine"), 0); } +void EditBookProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + EditBookEvent(); +} + //---------------------------- Chat Windows ---------------------------------------------- void OutputChatMessage(int partner, char *mess)