X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xboard.c;h=0424641772bf7dde58c7a90e932101e4ab99d550;hb=316e8b8c1071dc6b5b11a1e22082c8cd9aad8396;hp=033c53bc7601dc1497effd155e39302298d9fb1a;hpb=c69beebf3decbe67eb92beab56bbc34c41c39831;p=xboard.git diff --git a/xboard.c b/xboard.c index 033c53b..0424641 100644 --- a/xboard.c +++ b/xboard.c @@ -387,6 +387,9 @@ void StopExaminingProc P((Widget w, XEvent *event, String *prms, void UploadProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void BackwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void ForwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +void TempBackwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +void TempForwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +Boolean TempBackwardActive = False; void ToStartProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void ToEndProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void RevertProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); @@ -444,7 +447,6 @@ void AboutGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void AboutProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void DebugProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void NothingProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void Iconify P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void DisplayMove P((int moveNumber)); void DisplayTitle P((char *title)); void ICSInitScript P((void)); @@ -683,7 +685,7 @@ MenuItem modeMenu[] = { {N_("Machine Black Ctrl+B"), "Machine Black", MachineBlackProc}, {N_("Two Machines Ctrl+T"), "Two Machines", TwoMachinesProc}, {N_("Analysis Mode Ctrl+A"), "Analysis Mode", AnalyzeModeProc}, - {N_("Analyze File Ctrl+F"), "Analyze File", AnalyzeFileProc }, + {N_("Analyze Game Ctrl+G"), "Analyze File", AnalyzeFileProc }, {N_("Edit Game Ctrl+E"), "Edit Game", EditGameProc}, {N_("Edit Position Ctrl+Shift+E"), "Edit Position", EditPositionProc}, {N_("Training"), "Training", TrainingProc}, @@ -800,7 +802,7 @@ Menu menuBar[] = { MenuItem buttonBar[] = { {"<<", "<<", ToStartProc}, {"<", "<", BackwardProc}, - {PAUSE_BUTTON, PAUSE_BUTTON, PauseProc}, + {N_(PAUSE_BUTTON), PAUSE_BUTTON, PauseProc}, {">", ">", ForwardProc}, {">>", ">>", ToEndProc}, {NULL, NULL, NULL} @@ -921,7 +923,6 @@ XtActionsRec boardActions[] = { { "PieceMenuPopup", PieceMenuPopup }, { "WhiteClock", WhiteClock }, { "BlackClock", BlackClock }, - { "Iconify", Iconify }, { "ResetProc", ResetProc }, { "NewVariantProc", NewVariantProc }, { "LoadGameProc", LoadGameProc }, @@ -982,6 +983,8 @@ XtActionsRec boardActions[] = { { "UploadProc", UploadProc }, { "BackwardProc", BackwardProc }, { "ForwardProc", ForwardProc }, + { "TempBackwardProc", TempBackwardProc }, + { "TempForwardProc", TempForwardProc }, { "ToStartProc", ToStartProc }, { "ToEndProc", ToEndProc }, { "RevertProc", RevertProc }, @@ -1067,7 +1070,7 @@ char globalTranslations[] = :Ctrlb: MachineBlackProc() \n \ :Ctrlt: TwoMachinesProc() \n \ :Ctrla: AnalysisModeProc() \n \ - :Ctrlf: AnalyzeFileProc() \n \ + :Ctrlg: AnalyzeFileProc() \n \ :Ctrle: EditGameProc() \n \ :CtrlE: EditPositionProc() \n \ :MetaO: EngineOutputProc() \n \ @@ -1108,14 +1111,13 @@ char globalTranslations[] = :CtrlH: HideThinkingProc() \n " #endif "\ - :-: Iconify() \n \ :F1: ManProc() \n \ :F2: FlipViewProc() \n \ - .: BackwardProc() \n \ - .: ForwardProc() \n \ - Shift1: AskQuestionProc(\"Direct command\",\ + :Ctrl.: TempBackwardProc() \n \ + :Ctrl.: TempForwardProc() \n \ + :Ctrl1: AskQuestionProc(\"Direct command\",\ \"Send to chess program:\",,1) \n \ - Shift2: AskQuestionProc(\"Direct command\",\ + :Ctrl2: AskQuestionProc(\"Direct command\",\ \"Send to second chess program:\",,2) \n"; char boardTranslations[] = @@ -1682,9 +1684,17 @@ void InitDrawingSizes(BoardSize boardSize, int flags) Arg args[16]; XtGeometryResult gres; int i; + static Dimension oldWidth, oldHeight; + static VariantClass oldVariant; + static int oldDual = -1; if(!formWidget) return; + if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; + boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap); + boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap); + + if(boardWidth != oldWidth || boardHeight != oldHeight || oldDual != twoBoards) { // do resizing stuff only if size actually changed /* * Enable shell resizing. */ @@ -1699,9 +1709,7 @@ void InitDrawingSizes(BoardSize boardSize, int flags) XtSetArg(args[0], XtNdefaultDistance, &sep); XtGetValues(formWidget, args, 1); - if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; - boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap); - boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap); + oldWidth = boardWidth; oldHeight = boardHeight; oldDual = twoBoards; CreateGrid(); hOffset = boardWidth + 10; for(i=0; i 32) { *length_return *= *format_return / 32; *format_return = 32; } +#else + *format_return = 32; +#endif return True; } else { return False; @@ -5740,11 +5733,19 @@ SendGameSelection(Widget w, Atom *selection, Atom *target, *value_return = targets_tmp; *type_return = XA_ATOM; *length_return = 2; +#if 0 + // This code leads to a read of value_return out of bounds on 64-bit systems. + // Other code which I have seen always sets *format_return to 32 independent of + // sizeof(Atom) without adjusting *length_return. For instance see TextConvertSelection() + // at http://cgit.freedesktop.org/xorg/lib/libXaw/tree/src/Text.c -- BJ *format_return = 8 * sizeof(Atom); if (*format_return > 32) { *length_return *= *format_return / 32; *format_return = 32; } +#else + *format_return = 32; +#endif return True; } else { return False; @@ -5939,13 +5940,13 @@ void AnalyzeFileProc(w, event, prms, nprms) DisplayError(buf, 0); return; } - Reset(FALSE, TRUE); +// Reset(FALSE, TRUE); #ifndef OPTIONSDIALOG if (!appData.showThinking) ShowThinkingProc(w,event,prms,nprms); #endif AnalyzeFileEvent(); - FileNamePopUp(_("File to analyze"), "", ".pgn .game", LoadGamePopUp, "rb"); +// FileNamePopUp(_("File to analyze"), "", ".pgn .game", LoadGamePopUp, "rb"); AnalysisPeriodicEvent(1); } @@ -6234,6 +6235,37 @@ void BackwardProc(w, event, prms, nprms) BackwardEvent(); } +void TempBackwardProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + if (!TempBackwardActive) { + TempBackwardActive = True; + BackwardEvent(); + } +} + +void TempForwardProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + /* Check to see if triggered by a key release event for a repeating key. + * If so the next queued event will be a key press of the same key at the same time */ + if (XEventsQueued(xDisplay, QueuedAfterReading)) { + XEvent next; + XPeekEvent(xDisplay, &next); + if (next.type == KeyPress && next.xkey.time == event->xkey.time && + next.xkey.keycode == event->xkey.keycode) + return; + } + ForwardEvent(); + TempBackwardActive = False; +} + void ToStartProc(w, event, prms, nprms) Widget w; XEvent *event; @@ -6818,17 +6850,18 @@ void AboutProc(w, event, prms, nprms) { char buf[MSG_SIZ]; #if ZIPPY - char *zippy = " (with Zippy code)"; + char *zippy = _(" (with Zippy code)"); #else char *zippy = ""; #endif - snprintf(buf, sizeof(buf), "%s%s\n\n%s\n%s\n%s\n\n%s%s\n%s", - programVersion, zippy, - "Copyright 1991 Digital Equipment Corporation", - "Enhancements Copyright 1992-2009 Free Software Foundation", - "Enhancements Copyright 2005 Alessandro Scotti", - PACKAGE, " is free software and carries NO WARRANTY;", - "see the file COPYING for more information."); + snprintf(buf, sizeof(buf), +_("%s%s\n\n" +"Copyright 1991 Digital Equipment Corporation\n" +"Enhancements Copyright 1992-2009 Free Software Foundation\n" +"Enhancements Copyright 2005 Alessandro Scotti\n\n" +"%s is free software and carries NO WARRANTY;" +"see the file COPYING for more information."), + programVersion, zippy, PACKAGE); ErrorPopUp(_("About XBoard"), buf, FALSE); } @@ -6859,19 +6892,6 @@ void NothingProc(w, event, prms, nprms) return; } -void Iconify(w, event, prms, nprms) - Widget w; - XEvent *event; - String *prms; - Cardinal *nprms; -{ - Arg args[16]; - - fromX = fromY = -1; - XtSetArg(args[0], XtNiconic, True); - XtSetValues(shellWidget, args, 1); -} - void DisplayMessage(message, extMessage) char *message, *extMessage; { @@ -7200,6 +7220,7 @@ PlaySound(name) } else { char buf[2048]; char *prefix = "", *sep = ""; + if(appData.soundProgram[0] == NULLCHAR) return; if(!strchr(name, '/')) { prefix = appData.soundDirectory; sep = "/"; } snprintf(buf, sizeof(buf), "%s '%s%s%s' &", appData.soundProgram, prefix, sep, name); system(buf); @@ -7263,6 +7284,12 @@ EchoOff() } void +RunCommand(char *buf) +{ + system(buf); +} + +void Colorize(cc, continuation) ColorClass cc; int continuation; @@ -8219,6 +8246,12 @@ FrameDelay (time) #endif +void +DoSleep(int n) +{ + FrameDelay(n); +} + /* Convert board position to corner of screen rect and color */ static void