X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xboard.c;h=54d981d6e4794491445622b2d954b4a01d229965;hb=2aaf542114d8131c9fccc4e1ebffd45cb950d1d1;hp=77a73c4596c9604df5f08737dd86894f5babaf50;hpb=c6dc8d81c81b393e2de7eaebd356966db34c2008;p=xboard.git diff --git a/xboard.c b/xboard.c index 77a73c4..54d981d 100644 --- a/xboard.c +++ b/xboard.c @@ -203,15 +203,9 @@ extern char *getenv(); #include "xgamelist.h" #include "xhistory.h" #include "xedittags.h" +#include "menus.h" #include "gettext.h" -// must be moved to xengineoutput.h - -void EngineOutputProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void EvalGraphProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); - #ifdef __EMX__ #ifndef HAVE_USLEEP @@ -228,20 +222,6 @@ void EvalGraphProc P((Widget w, XEvent *event, # define N_(s) s #endif -typedef struct { - String string; - String ref; - XtActionProc proc; -} MenuItem; - -typedef struct { - String name; - String ref; - MenuItem *mi; - int textWidth; - Widget subMenu; -} Menu; - int main P((int argc, char **argv)); FILE * XsraSelFile P((Widget w, char *prompt, char *ok, char *cancel, char *failed, char *init_path, char *filter, char *mode, int (*show_entry)(), char **name_return)); @@ -273,6 +253,7 @@ void CreateGrid P((void)); int EventToSquare P((int x, int limit)); void DrawSquare P((int row, int column, ChessSquare piece, int do_flash)); void EventProc P((Widget widget, caddr_t unused, XEvent *event)); +void DelayedDrag P((void)); void MoveTypeInProc P((Widget widget, caddr_t unused, XEvent *event)); void HandleUserMove P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); @@ -314,141 +295,16 @@ void PromotionPopDown P((void)); void PromotionCallback P((Widget w, XtPointer client_data, XtPointer call_data)); void SelectCommand P((Widget w, XtPointer client_data, XtPointer call_data)); -void ResetProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void LoadGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void LoadNextGameProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void LoadPrevGameProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void ReloadGameProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void LoadPositionProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void LoadNextPositionProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void LoadPrevPositionProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void ReloadPositionProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void CopyPositionProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void PastePositionProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void CopyGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void CopyGameListProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void PasteGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void SaveGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void SavePositionProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void MailMoveProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void ReloadCmailMsgProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void QuitProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void PauseProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void MachineBlackProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void MachineWhiteProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void AnalyzeModeProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void AnalyzeFileProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void TwoMachinesProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void MatchProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void MatchOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void IcsClientProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void EditGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void EditPositionProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void TrainingProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void EditCommentProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void IcsInputBoxProc P((Widget w, XEvent *event, - String *prms, Cardinal *nprms)); -void AcceptProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void DeclineProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void RematchProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void CallFlagProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void DrawProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void AbortProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void AdjournProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void ResignProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void AdjuWhiteProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void AdjuBlackProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void AdjuDrawProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +void KeyBindingProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +void QuitWrapper P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void TypeInProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void EnterKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void UpKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void DownKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void StopObservingProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void StopExaminingProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -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)); -void AnnotateProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void TruncateGameProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void RetractMoveProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void MoveNowProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void AlwaysQueenProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void AnimateDraggingProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void AnimateMovingProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void AutoflagProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void AutoflipProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void BlindfoldProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void FlashMovesProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void FlipViewProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void HighlightDraggingProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void HighlightLastMoveProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void HighlightArrowProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void MoveSoundProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -//void IcsAlarmProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void OneClickProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void PeriodicUpdatesProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void PonderNextMoveProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void PopupMoveErrorsProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void PopupExitMessageProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -//void PremoveProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void ShowCoordsProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void ShowThinkingProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void HideThinkingProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void TestLegalityProc P((Widget w, XEvent *event, String *prms, - Cardinal *nprms)); -void SaveSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void SaveOnExitProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void InfoProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void ManProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void HintProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void BookProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -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 ManInner P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void DisplayMove P((int moveNumber)); void DisplayTitle P((char *title)); void ICSInitScript P((void)); @@ -460,23 +316,6 @@ static void CreateAnimVars P((void)); static void DragPieceMove P((int x, int y)); static void DrawDragPiece P((void)); char *ModeToWidgetName P((GameMode mode)); -void ShuffleMenuProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void EngineMenuProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void UciMenuProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void TimeControlProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void OptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void NewVariantProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void IcsTextProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void LoadEngineProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void FirstSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void SecondSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void GameListOptionsPopUp P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void IcsOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void SoundOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void BoardOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void LoadOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void SaveOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void EditBookProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void SelectMove P((Widget w, XEvent * event, String * params, Cardinal * nParams)); void GameListOptionsPopDown P(()); void GenericPopDown P(()); @@ -616,198 +455,13 @@ static Pixmap xpmMask[BlackKing + 1]; SizeDefaults sizeDefaults[] = SIZE_DEFAULTS; -MenuItem fileMenu[] = { - {N_("New Game Ctrl+N"), "New Game", ResetProc}, - {N_("New Shuffle Game ..."), "New Shuffle Game", ShuffleMenuProc}, - {N_("New Variant ... Alt+Shift+V"), "New Variant", NewVariantProc}, // [HGM] variant: not functional yet - {"----", NULL, NothingProc}, - {N_("Load Game Ctrl+O"), "Load Game", LoadGameProc}, - {N_("Load Position Ctrl+Shift+O"), "Load Position", LoadPositionProc}, -// {N_("Load Next Game"), "Load Next Game", LoadNextGameProc}, -// {N_("Load Previous Game"), "Load Previous Game", LoadPrevGameProc}, -// {N_("Reload Same Game"), "Reload Same Game", ReloadGameProc}, - {N_("Next Position Shift+PgDn"), "Load Next Position", LoadNextPositionProc}, - {N_("Prev Position Shift+PgUp"), "Load Previous Position", LoadPrevPositionProc}, - {"----", NULL, NothingProc}, -// {N_("Reload Same Position"), "Reload Same Position", ReloadPositionProc}, - {N_("Save Game Ctrl+S"), "Save Game", SaveGameProc}, - {N_("Save Position Ctrl+Shift+S"), "Save Position", SavePositionProc}, - {"----", NULL, NothingProc}, - {N_("Mail Move"), "Mail Move", MailMoveProc}, - {N_("Reload CMail Message"), "Reload CMail Message", ReloadCmailMsgProc}, - {"----", NULL, NothingProc}, - {N_("Quit Ctr+Q"), "Exit", QuitProc}, - {NULL, NULL, NULL} -}; - -MenuItem editMenu[] = { - {N_("Copy Game Ctrl+C"), "Copy Game", CopyGameProc}, - {N_("Copy Position Ctrl+Shift+C"), "Copy Position", CopyPositionProc}, - {N_("Copy Game List"), "Copy Game List", CopyGameListProc}, - {"----", NULL, NothingProc}, - {N_("Paste Game Ctrl+V"), "Paste Game", PasteGameProc}, - {N_("Paste Position Ctrl+Shift+V"), "Paste Position", PastePositionProc}, - {"----", NULL, NothingProc}, - {N_("Edit Game Ctrl+E"), "Edit Game", EditGameProc}, - {N_("Edit Position Ctrl+Shift+E"), "Edit Position", EditPositionProc}, - {N_("Edit Tags"), "Edit Tags", EditTagsProc}, - {N_("Edit Comment"), "Edit Comment", EditCommentProc}, - {N_("Edit Book"), "Edit Book", EditBookProc}, - {"----", NULL, NothingProc}, - {N_("Revert Home"), "Revert", RevertProc}, - {N_("Annotate"), "Annotate", AnnotateProc}, - {N_("Truncate Game End"), "Truncate Game", TruncateGameProc}, - {"----", NULL, NothingProc}, - {N_("Backward Alt+Left"), "Backward", BackwardProc}, - {N_("Forward Alt+Right"), "Forward", ForwardProc}, - {N_("Back to Start Alt+Home"), "Back to Start", ToStartProc}, - {N_("Forward to End Alt+End"), "Forward to End", ToEndProc}, - {NULL, NULL, NULL} -}; - -MenuItem viewMenu[] = { - {N_("Flip View F2"), "Flip View", FlipViewProc}, - {"----", NULL, NothingProc}, - {N_("Engine Output Alt+Shift+O"), "Show Engine Output", EngineOutputProc}, - {N_("Move History Alt+Shift+H"), "Show Move History", HistoryShowProc}, // [HGM] hist: activate 4.2.7 code - {N_("Evaluation Graph Alt+Shift+E"), "Show Evaluation Graph", EvalGraphProc}, - {N_("Game List Alt+Shift+G"), "Show Game List", ShowGameListProc}, - {N_("ICS text menu"), "ICStex", IcsTextProc}, - {"----", NULL, NothingProc}, - {N_("Tags"), "Show Tags", EditTagsProc}, - {N_("Comments"), "Show Comments", EditCommentProc}, - {N_("ICS Input Box"), "ICS Input Box", IcsInputBoxProc}, - {"----", NULL, NothingProc}, - {N_("Board..."), "Board Options", BoardOptionsProc}, - {N_("Game List Tags..."), "Game List", GameListOptionsPopUp}, - {NULL, NULL, NULL} -}; - -MenuItem modeMenu[] = { - {N_("Machine White Ctrl+W"), "Machine White", MachineWhiteProc}, - {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 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}, - {N_("ICS Client"), "ICS Client", IcsClientProc}, - {"----", NULL, NothingProc}, - {N_("Machine Match"), "Machine Match", MatchProc}, - {N_("Pause Pause"), "Pause", PauseProc}, - {NULL, NULL, NULL} -}; - -MenuItem actionMenu[] = { - {N_("Accept F3"), "Accept", AcceptProc}, - {N_("Decline F4"), "Decline", DeclineProc}, - {N_("Rematch F12"), "Rematch", RematchProc}, - {"----", NULL, NothingProc}, - {N_("Call Flag F5"), "Call Flag", CallFlagProc}, - {N_("Draw F6"), "Draw", DrawProc}, - {N_("Adjourn F7"), "Adjourn", AdjournProc}, - {N_("Abort F8"),"Abort", AbortProc}, - {N_("Resign F9"), "Resign", ResignProc}, - {"----", NULL, NothingProc}, - {N_("Stop Observing F10"), "Stop Observing", StopObservingProc}, - {N_("Stop Examining F11"), "Stop Examining", StopExaminingProc}, - {N_("Upload to Examine"), "Upload to Examine", UploadProc}, - {"----", NULL, NothingProc}, - {N_("Adjudicate to White"), "Adjudicate to White", AdjuWhiteProc}, - {N_("Adjudicate to Black"), "Adjudicate to Black", AdjuBlackProc}, - {N_("Adjudicate Draw"), "Adjudicate Draw", AdjuDrawProc}, - {NULL, NULL, NULL} -}; - -MenuItem engineMenu[] = { - {N_("Load New Engine ..."), "Load Engine", LoadEngineProc}, - {"----", NULL, NothingProc}, - {N_("Engine #1 Settings ..."), "Engine #1 Settings", FirstSettingsProc}, - {N_("Engine #2 Settings ..."), "Engine #2 Settings", SecondSettingsProc}, - {"----", NULL, NothingProc}, - {N_("Hint"), "Hint", HintProc}, - {N_("Book"), "Book", BookProc}, - {"----", NULL, NothingProc}, - {N_("Move Now Ctrl+M"), "Move Now", MoveNowProc}, - {N_("Retract Move Ctrl+X"), "Retract Move", RetractMoveProc}, - {NULL, NULL, NULL} -}; - -MenuItem optionsMenu[] = { -#define OPTIONSDIALOG -#ifdef OPTIONSDIALOG - {N_("General ..."), "General", OptionsProc}, -#endif - {N_("Time Control ... Alt+Shift+T"), "Time Control", TimeControlProc}, - {N_("Common Engine ... Alt+Shift+U"), "Common Engine", UciMenuProc}, - {N_("Adjudications ... Alt+Shift+J"), "Adjudications", EngineMenuProc}, - {N_("ICS ..."), "ICS", IcsOptionsProc}, - {N_("Match ..."), "Match", MatchOptionsProc}, - {N_("Load Game ..."), "Load Game", LoadOptionsProc}, - {N_("Save Game ..."), "Save Game", SaveOptionsProc}, -// {N_(" ..."), "", OptionsProc}, - {N_("Game List ..."), "Game List", GameListOptionsPopUp}, - {N_("Sounds ..."), "Sounds", SoundOptionsProc}, - {"----", NULL, NothingProc}, -#ifndef OPTIONSDIALOG - {N_("Always Queen Ctrl+Shift+Q"), "Always Queen", AlwaysQueenProc}, - {N_("Animate Dragging"), "Animate Dragging", AnimateDraggingProc}, - {N_("Animate Moving Ctrl+Shift+A"), "Animate Moving", AnimateMovingProc}, - {N_("Auto Flag Ctrl+Shift+F"), "Auto Flag", AutoflagProc}, - {N_("Auto Flip View"), "Auto Flip View", AutoflipProc}, - {N_("Blindfold"), "Blindfold", BlindfoldProc}, - {N_("Flash Moves"), "Flash Moves", FlashMovesProc}, -#if HIGHDRAG - {N_("Highlight Dragging"), "Highlight Dragging", HighlightDraggingProc}, -#endif - {N_("Highlight Last Move"), "Highlight Last Move", HighlightLastMoveProc}, - {N_("Highlight With Arrow"), "Arrow", HighlightArrowProc}, - {N_("Move Sound"), "Move Sound", MoveSoundProc}, -// {N_("ICS Alarm"), "ICS Alarm", IcsAlarmProc}, - {N_("One-Click Moving"), "OneClick", OneClickProc}, - {N_("Periodic Updates"), "Periodic Updates", PeriodicUpdatesProc}, - {N_("Ponder Next Move Ctrl+Shift+P"), "Ponder Next Move", PonderNextMoveProc}, - {N_("Popup Exit Message"), "Popup Exit Message", PopupExitMessageProc}, - {N_("Popup Move Errors"), "Popup Move Errors", PopupMoveErrorsProc}, -// {N_("Premove"), "Premove", PremoveProc}, - {N_("Show Coords"), "Show Coords", ShowCoordsProc}, - {N_("Hide Thinking Ctrl+Shift+H"), "Hide Thinking", HideThinkingProc}, - {N_("Test Legality Ctrl+Shift+L"), "Test Legality", TestLegalityProc}, - {"----", NULL, NothingProc}, -#endif - {N_("Save Settings Now"), "Save Settings Now", SaveSettingsProc}, - {N_("Save Settings on Exit"), "Save Settings on Exit", SaveOnExitProc}, - {NULL, NULL, NULL} -}; - -MenuItem helpMenu[] = { - {N_("Info XBoard"), "Info XBoard", InfoProc}, - {N_("Man XBoard F1"), "Man XBoard", ManProc}, - {"----", NULL, NothingProc}, - {N_("About XBoard"), "About XBoard", AboutProc}, - {NULL, NULL, NULL} -}; - -Menu menuBar[] = { - {N_("File"), "File", fileMenu}, - {N_("Edit"), "Edit", editMenu}, - {N_("View"), "View", viewMenu}, - {N_("Mode"), "Mode", modeMenu}, - {N_("Action"), "Action", actionMenu}, - {N_("Engine"), "Engine", engineMenu}, - {N_("Options"), "Options", optionsMenu}, - {N_("Help"), "Help", helpMenu}, - {NULL, NULL, NULL} -}; - #define PAUSE_BUTTON "P" MenuItem buttonBar[] = { - {"<<", "<<", ToStartProc}, - {"<", "<", BackwardProc}, - {N_(PAUSE_BUTTON), PAUSE_BUTTON, PauseProc}, - {">", ">", ForwardProc}, - {">>", ">>", ToEndProc}, + {"<<", "<<", ToStartEvent}, + {"<", "<", BackwardEvent}, + {N_(PAUSE_BUTTON), PAUSE_BUTTON, PauseEvent}, + {">", ">", ForwardEvent}, + {">>", ">>", ToEndEvent}, {NULL, NULL, NULL} }; @@ -926,113 +580,11 @@ XtActionsRec boardActions[] = { { "PieceMenuPopup", PieceMenuPopup }, { "WhiteClock", WhiteClock }, { "BlackClock", BlackClock }, - { "ResetProc", ResetProc }, - { "NewVariantProc", NewVariantProc }, - { "LoadGameProc", LoadGameProc }, - { "LoadNextGameProc", LoadNextGameProc }, - { "LoadPrevGameProc", LoadPrevGameProc }, - { "LoadSelectedProc", LoadSelectedProc }, - { "SetFilterProc", SetFilterProc }, - { "ReloadGameProc", ReloadGameProc }, - { "LoadPositionProc", LoadPositionProc }, - { "LoadNextPositionProc", LoadNextPositionProc }, - { "LoadPrevPositionProc", LoadPrevPositionProc }, - { "ReloadPositionProc", ReloadPositionProc }, - { "CopyPositionProc", CopyPositionProc }, - { "PastePositionProc", PastePositionProc }, - { "CopyGameProc", CopyGameProc }, - { "CopyGameListProc", CopyGameListProc }, - { "PasteGameProc", PasteGameProc }, - { "SaveGameProc", SaveGameProc }, - { "SavePositionProc", SavePositionProc }, - { "MailMoveProc", MailMoveProc }, - { "ReloadCmailMsgProc", ReloadCmailMsgProc }, - { "QuitProc", QuitProc }, - { "MachineWhiteProc", MachineWhiteProc }, - { "MachineBlackProc", MachineBlackProc }, - { "AnalysisModeProc", AnalyzeModeProc }, - { "AnalyzeFileProc", AnalyzeFileProc }, - { "TwoMachinesProc", TwoMachinesProc }, - { "IcsClientProc", IcsClientProc }, - { "EditGameProc", EditGameProc }, - { "EditPositionProc", EditPositionProc }, - { "TrainingProc", EditPositionProc }, - { "EngineOutputProc", EngineOutputProc}, // [HGM] Winboard_x engine-output window - { "EvalGraphProc", EvalGraphProc}, // [HGM] Winboard_x avaluation graph window - { "ShowGameListProc", ShowGameListProc }, - { "ShowMoveListProc", HistoryShowProc}, - { "EditTagsProc", EditTagsProc }, - { "EditBookProc", EditBookProc }, - { "EditCommentProc", EditCommentProc }, - { "IcsInputBoxProc", IcsInputBoxProc }, - { "PauseProc", PauseProc }, - { "AcceptProc", AcceptProc }, - { "DeclineProc", DeclineProc }, - { "RematchProc", RematchProc }, - { "CallFlagProc", CallFlagProc }, - { "DrawProc", DrawProc }, - { "AdjournProc", AdjournProc }, - { "AbortProc", AbortProc }, - { "ResignProc", ResignProc }, - { "AdjuWhiteProc", AdjuWhiteProc }, - { "AdjuBlackProc", AdjuBlackProc }, - { "AdjuDrawProc", AdjuDrawProc }, - { "TypeInProc", TypeInProc }, - { "EnterKeyProc", EnterKeyProc }, - { "UpKeyProc", UpKeyProc }, - { "DownKeyProc", DownKeyProc }, - { "StopObservingProc", StopObservingProc }, - { "StopExaminingProc", StopExaminingProc }, - { "UploadProc", UploadProc }, - { "BackwardProc", BackwardProc }, - { "ForwardProc", ForwardProc }, + { "MenuItem", KeyBindingProc }, // [HGM] generic handler for key bindings + { "QuitProc", QuitWrapper }, + { "ManProc", ManInner }, { "TempBackwardProc", TempBackwardProc }, { "TempForwardProc", TempForwardProc }, - { "ToStartProc", ToStartProc }, - { "ToEndProc", ToEndProc }, - { "RevertProc", RevertProc }, - { "AnnotateProc", AnnotateProc }, - { "TruncateGameProc", TruncateGameProc }, - { "MoveNowProc", MoveNowProc }, - { "RetractMoveProc", RetractMoveProc }, - { "EngineMenuProc", (XtActionProc) EngineMenuProc }, - { "UciMenuProc", (XtActionProc) UciMenuProc }, - { "TimeControlProc", (XtActionProc) TimeControlProc }, - { "FlipViewProc", FlipViewProc }, - { "PonderNextMoveProc", PonderNextMoveProc }, -#ifndef OPTIONSDIALOG - { "AlwaysQueenProc", AlwaysQueenProc }, - { "AnimateDraggingProc", AnimateDraggingProc }, - { "AnimateMovingProc", AnimateMovingProc }, - { "AutoflagProc", AutoflagProc }, - { "AutoflipProc", AutoflipProc }, - { "BlindfoldProc", BlindfoldProc }, - { "FlashMovesProc", FlashMovesProc }, -#if HIGHDRAG - { "HighlightDraggingProc", HighlightDraggingProc }, -#endif - { "HighlightLastMoveProc", HighlightLastMoveProc }, -// { "IcsAlarmProc", IcsAlarmProc }, - { "MoveSoundProc", MoveSoundProc }, - { "PeriodicUpdatesProc", PeriodicUpdatesProc }, - { "PopupExitMessageProc", PopupExitMessageProc }, - { "PopupMoveErrorsProc", PopupMoveErrorsProc }, -// { "PremoveProc", PremoveProc }, - { "ShowCoordsProc", ShowCoordsProc }, - { "ShowThinkingProc", ShowThinkingProc }, - { "HideThinkingProc", HideThinkingProc }, - { "TestLegalityProc", TestLegalityProc }, -#endif - { "SaveSettingsProc", SaveSettingsProc }, - { "SaveOnExitProc", SaveOnExitProc }, - { "InfoProc", InfoProc }, - { "ManProc", ManProc }, - { "HintProc", HintProc }, - { "BookProc", BookProc }, - { "AboutGameProc", AboutGameProc }, - { "AboutProc", AboutProc }, - { "DebugProc", DebugProc }, - { "NothingProc", NothingProc }, { "CommentClick", (XtActionProc) CommentClick }, { "CommentPopDown", (XtActionProc) CommentPopDown }, { "TagsPopDown", (XtActionProc) TagsPopDown }, @@ -1048,74 +600,81 @@ XtActionsRec boardActions[] = { { "GenericPopDown", (XtActionProc) GenericPopDown }, { "CopyMemoProc", (XtActionProc) CopyMemoProc }, { "SelectMove", (XtActionProc) SelectMove }, + { "LoadSelectedProc", LoadSelectedProc }, + { "SetFilterProc", SetFilterProc }, + { "TypeInProc", TypeInProc }, + { "EnterKeyProc", EnterKeyProc }, + { "UpKeyProc", UpKeyProc }, + { "DownKeyProc", DownKeyProc }, }; char globalTranslations[] = - ":F9: ResignProc() \n \ - :Ctrln: ResetProc() \n \ - :MetaV: NewVariantProc() \n \ - :Ctrlo: LoadGameProc() \n \ - :MetaNext: LoadNextGameProc() \n \ - :MetaPrior: LoadPrevGameProc() \n \ + ":F9: MenuItem(ResignProc) \n \ + :Ctrln: MenuItem(NewGame) \n \ + :MetaV: MenuItem(NewVariant) \n \ + :Ctrlo: MenuItem(LoadGame) \n \ + :MetaNext: MenuItem(LoadNextGameProc) \n \ + :MetaPrior: MenuItem(LoadPrevGameProc) \n \ :CtrlDown: LoadSelectedProc(3) \n \ :CtrlUp: LoadSelectedProc(-3) \n \ - :Ctrls: SaveGameProc() \n \ - :Ctrlc: CopyGameProc() \n \ - :Ctrlv: PasteGameProc() \n \ - :CtrlO: LoadPositionProc() \n \ - :ShiftNext: LoadNextPositionProc() \n \ - :ShiftPrior: LoadPrevPositionProc() \n \ - :CtrlS: SavePositionProc() \n \ - :CtrlC: CopyPositionProc() \n \ - :CtrlV: PastePositionProc() \n \ - :Ctrlq: QuitProc() \n \ - :Ctrlw: MachineWhiteProc() \n \ - :Ctrlb: MachineBlackProc() \n \ - :Ctrlt: TwoMachinesProc() \n \ - :Ctrla: AnalysisModeProc() \n \ - :Ctrlg: AnalyzeFileProc() \n \ - :Ctrle: EditGameProc() \n \ - :CtrlE: EditPositionProc() \n \ - :MetaO: EngineOutputProc() \n \ - :MetaE: EvalGraphProc() \n \ - :MetaG: ShowGameListProc() \n \ - :MetaH: ShowMoveListProc() \n \ - :Pause: PauseProc() \n \ - :F3: AcceptProc() \n \ - :F4: DeclineProc() \n \ - :F12: RematchProc() \n \ - :F5: CallFlagProc() \n \ - :F6: DrawProc() \n \ - :F7: AdjournProc() \n \ - :F8: AbortProc() \n \ - :F10: StopObservingProc() \n \ - :F11: StopExaminingProc() \n \ - :Meta CtrlF12: DebugProc() \n \ - :MetaEnd: ToEndProc() \n \ - :MetaRight: ForwardProc() \n \ - :MetaHome: ToStartProc() \n \ - :MetaLeft: BackwardProc() \n \ - :Left: BackwardProc() \n \ - :Right: ForwardProc() \n \ - :Home: RevertProc() \n \ - :End: TruncateGameProc() \n \ - :Ctrlm: MoveNowProc() \n \ - :Ctrlx: RetractMoveProc() \n \ - :MetaJ: EngineMenuProc() \n \ - :MetaU: UciMenuProc() \n \ - :MetaT: TimeControlProc() \n \ - :CtrlP: PonderNextMoveProc() \n " + :Ctrls: MenuItem(SaveGame) \n \ + :Ctrlc: MenuItem(CopyGame) \n \ + :Ctrlv: MenuItem(PasteGame) \n \ + :CtrlO: MenuItem(LoadPosition) \n \ + :ShiftNext: MenuItem(LoadNextPositionProc) \n \ + :ShiftPrior: MenuItem(LoadPrevPositionProc) \n \ + :CtrlS: MenuItem(SavePosition) \n \ + :CtrlC: MenuItem(CopyPosition) \n \ + :CtrlV: MenuItem(PastePosition) \n \ + :Ctrlq: MenuItem(Exit) \n \ + :Ctrlw: MenuItem(MachineWhite) \n \ + :Ctrlb: MenuItem(MachineBlack) \n \ + :Ctrlt: MenuItem(TwoMachines) \n \ + :Ctrla: MenuItem(AnalysisMode) \n \ + :Ctrlg: MenuItem(AnalyzeFile) \n \ + :Ctrle: MenuItem(EditGame) \n \ + :CtrlE: MenuItem(EditPosition) \n \ + :MetaO: MenuItem(ShowEngineOutput) \n \ + :MetaE: MenuItem(ShowEvaluationGraph) \n \ + :MetaG: MenuItem(ShowGameList) \n \ + :MetaH: MenuItem(ShowMoveHistory) \n \ + :Pause: MenuItem(Pause) \n \ + :F3: MenuItem(Accept) \n \ + :F4: MenuItem(Decline) \n \ + :F12: MenuItem(Rematch) \n \ + :F5: MenuItem(CallFlag) \n \ + :F6: MenuItem(Draw) \n \ + :F7: MenuItem(Adjourn) \n \ + :F8: MenuItem(Abort) \n \ + :F10: MenuItem(StopObserving) \n \ + :F11: MenuItem(StopExamining) \n \ + :Ctrld: MenuItem(DebugProc) \n \ + :Meta CtrlF12: MenuItem(DebugProc) \n \ + :MetaEnd: MenuItem(ToEnd) \n \ + :MetaRight: MenuItem(Forward) \n \ + :MetaHome: MenuItem(ToStart) \n \ + :MetaLeft: MenuItem(Backward) \n \ + :Left: MenuItem(Backward) \n \ + :Right: MenuItem(Forward) \n \ + :Home: MenuItem(Revert) \n \ + :End: MenuItem(TruncateGame) \n \ + :Ctrlm: MenuItem(MoveNow) \n \ + :Ctrlx: MenuItem(RetractMove) \n \ + :MetaJ: MenuItem(Adjudications) \n \ + :MetaU: MenuItem(CommonEngine) \n \ + :MetaT: MenuItem(TimeControl) \n \ + :CtrlP: MenuItem(PonderNextMove) \n " #ifndef OPTIONSDIALOG "\ - :CtrlQ: AlwaysQueenProc() \n \ - :CtrlF: AutoflagProc() \n \ - :CtrlA: AnimateMovingProc() \n \ - :CtrlL: TestLegalityProc() \n \ - :CtrlH: HideThinkingProc() \n " + :CtrlQ: MenuItem(AlwaysQueenProc) \n \ + :CtrlF: MenuItem(AutoflagProc) \n \ + :CtrlA: MenuItem(AnimateMovingProc) \n \ + :CtrlL: MenuItem(TestLegalityProc) \n \ + :CtrlH: MenuItem(HideThinkingProc) \n " #endif "\ - :F1: ManProc() \n \ - :F2: FlipViewProc() \n \ + :F1: MenuItem(Manual) \n \ + :F2: MenuItem(FlipView) \n \ :Return: TempBackwardProc() \n \ :Return: TempForwardProc() \n"; @@ -1555,6 +1114,7 @@ ParseCommPortSettings (char *s) } extern Widget engineOutputShell; +int frameX, frameY; void GetActualPlacement (Widget wg, WindowPlacement *wp) @@ -1575,6 +1135,7 @@ GetActualPlacement (Widget wg, WindowPlacement *wp) wp->y = ry - winAt.y; wp->height = winAt.height; wp->width = winAt.width; + frameX = winAt.x; frameY = winAt.y; // remember to decide if windows touch } void @@ -1744,6 +1305,9 @@ InitDrawingSizes (BoardSize boardSize, int flags) shellArgs[4].value = shellArgs[2].value = w; shellArgs[5].value = shellArgs[3].value = h; XtSetValues(shellWidget, &shellArgs[0], 6); + + XSync(xDisplay, False); + DelayedDrag(); } // [HGM] pieces: tailor piece bitmaps to needs of specific variant @@ -1818,6 +1382,7 @@ InitDrawingSizes (BoardSize boardSize, int flags) } } oldMono = -10; // kludge to force recreation of animation masks + oldVariant = gameInfo.variant; } #if HAVE_LIBXPM if(appData.monoMode != oldMono) @@ -2507,100 +2072,99 @@ XBoard square size (hint): %d\n\ XtSetArg(args[0], XtNleftBitmap, xMarkPixmap); #ifndef OPTIONSDIALOG if (appData.alwaysPromoteToQueen) { - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Always Queen"), + XtSetValues(XtNameToWidget(menuBarWidget, "Always Queen"), args, 1); } if (appData.animateDragging) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Animate Dragging"), + "Animate Dragging"), args, 1); } if (appData.animate) { - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Animate Moving"), + XtSetValues(XtNameToWidget(menuBarWidget, "Animate Moving"), args, 1); } if (appData.autoCallFlag) { - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Flag"), + XtSetValues(XtNameToWidget(menuBarWidget, "Auto Flag"), args, 1); } if (appData.autoFlipView) { - XtSetValues(XtNameToWidget(menuBarWidget,"menuOptions.Auto Flip View"), + XtSetValues(XtNameToWidget(menuBarWidget,"Auto Flip View"), args, 1); } if (appData.blindfold) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Blindfold"), args, 1); + "Blindfold"), args, 1); } if (appData.flashCount > 0) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Flash Moves"), + "Flash Moves"), args, 1); } #if HIGHDRAG if (appData.highlightDragging) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Highlight Dragging"), + "Highlight Dragging"), args, 1); } #endif if (appData.highlightLastMove) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Highlight Last Move"), + "Highlight Last Move"), args, 1); } if (appData.highlightMoveWithArrow) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Arrow"), + "Arrow"), args, 1); } // if (appData.icsAlarm) { -// XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.ICS Alarm"), +// XtSetValues(XtNameToWidget(menuBarWidget, "ICS Alarm"), // args, 1); // } if (appData.ringBellAfterMoves) { - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Move Sound"), + XtSetValues(XtNameToWidget(menuBarWidget, "Move Sound"), args, 1); } if (appData.oneClick) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.OneClick"), args, 1); + "OneClick"), args, 1); } if (appData.periodicUpdates) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Periodic Updates"), args, 1); + "Periodic Updates"), args, 1); } if (appData.ponderNextMove) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Ponder Next Move"), args, 1); + "Ponder Next Move"), args, 1); } if (appData.popupExitMessage) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Popup Exit Message"), args, 1); + "Popup Exit Message"), args, 1); } if (appData.popupMoveErrors) { XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Popup Move Errors"), args, 1); + "Popup Move Errors"), args, 1); } // if (appData.premove) { // XtSetValues(XtNameToWidget(menuBarWidget, -// "menuOptions.Premove"), args, 1); +// "Premove"), args, 1); // } if (appData.showCoords) { - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Coords"), + XtSetValues(XtNameToWidget(menuBarWidget, "Show Coords"), args, 1); } if (appData.hideThinkingFromHuman) { - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Hide Thinking"), + XtSetValues(XtNameToWidget(menuBarWidget, "Hide Thinking"), args, 1); } if (appData.testLegality) { - XtSetValues(XtNameToWidget(menuBarWidget,"menuOptions.Test Legality"), + XtSetValues(XtNameToWidget(menuBarWidget,"Test Legality"), args, 1); } #endif if (saveSettingsOnExit) { - XtSetValues(XtNameToWidget(menuBarWidget,"menuOptions.Save Settings on Exit"), - args, 1); + MarkMenuItem("Save Settings on Exit", True); } /* @@ -2661,6 +2225,8 @@ XBoard square size (hint): %d\n\ /* end why */ XtAddEventHandler(formWidget, KeyPressMask, False, (XtEventHandler) MoveTypeInProc, NULL); + XtAddEventHandler(shellWidget, StructureNotifyMask, False, + (XtEventHandler) EventProc, NULL); /* [AS] Restore layout */ if( wpMoveHistory.visible ) { @@ -2695,6 +2261,7 @@ XBoard square size (hint): %d\n\ signal(SIGUSR1, CmailSigHandler); } } + gameInfo.boardWidth = 0; // [HGM] pieces: kludge to ensure InitPosition() calls InitDrawingSizes() InitPosition(TRUE); // XtSetKeyboardFocus(shellWidget, formWidget); @@ -2794,217 +2361,184 @@ ResetFrontEnd () return; } -typedef struct { - char *name; - Boolean value; -} Enables; - void GreyRevert (Boolean grey) { - Widget w; - if (!menuBarWidget) return; - w = XtNameToWidget(menuBarWidget, "menuEdit.Revert"); - if (w == NULL) { - DisplayError("menuEdit.Revert", 0); - } else { - XtSetSensitive(w, !grey); - } - w = XtNameToWidget(menuBarWidget, "menuEdit.Annotate"); - if (w == NULL) { - DisplayError("menuEdit.Annotate", 0); - } else { - XtSetSensitive(w, !grey); - } -} - -void -SetMenuEnables (Enables *enab) -{ - Widget w; - if (!menuBarWidget) return; - while (enab->name != NULL) { - w = XtNameToWidget(menuBarWidget, enab->name); - if (w == NULL) { - DisplayError(enab->name, 0); - } else { - XtSetSensitive(w, enab->value); - } - enab++; - } + MarkMenuItem("Revert", !grey); + MarkMenuItem("Annotate", !grey); } Enables icsEnables[] = { - { "menuFile.Mail Move", False }, - { "menuFile.Reload CMail Message", False }, - { "menuMode.Machine Black", False }, - { "menuMode.Machine White", False }, - { "menuMode.Analysis Mode", False }, - { "menuMode.Analyze File", False }, - { "menuMode.Two Machines", False }, - { "menuMode.Machine Match", False }, + { "Mail Move", False }, + { "Reload CMail Message", False }, + { "Machine Black", False }, + { "Machine White", False }, + { "Analysis Mode", False }, + { "Analyze File", False }, + { "Two Machines", False }, + { "Machine Match", False }, #ifndef ZIPPY - { "menuEngine.Hint", False }, - { "menuEngine.Book", False }, - { "menuEngine.Move Now", False }, + { "Hint", False }, + { "Book", False }, + { "Move Now", False }, #ifndef OPTIONSDIALOG - { "menuOptions.Periodic Updates", False }, - { "menuOptions.Hide Thinking", False }, - { "menuOptions.Ponder Next Move", False }, + { "Periodic Updates", False }, + { "Hide Thinking", False }, + { "Ponder Next Move", False }, #endif #endif - { "menuEngine.Engine #1 Settings", False }, - { "menuEngine.Engine #2 Settings", False }, - { "menuEngine.Load Engine", False }, - { "menuEdit.Annotate", False }, - { "menuOptions.Match", False }, + { "Engine #1 Settings", False }, + { "Engine #2 Settings", False }, + { "Load Engine", False }, + { "Annotate", False }, + { "Match", False }, { NULL, False } }; Enables ncpEnables[] = { - { "menuFile.Mail Move", False }, - { "menuFile.Reload CMail Message", False }, - { "menuMode.Machine White", False }, - { "menuMode.Machine Black", False }, - { "menuMode.Analysis Mode", False }, - { "menuMode.Analyze File", False }, - { "menuMode.Two Machines", False }, - { "menuMode.Machine Match", False }, - { "menuMode.ICS Client", False }, - { "menuView.ICStex", False }, - { "menuView.ICS Input Box", False }, + { "Mail Move", False }, + { "Reload CMail Message", False }, + { "Machine White", False }, + { "Machine Black", False }, + { "Analysis Mode", False }, + { "Analyze File", False }, + { "Two Machines", False }, + { "Machine Match", False }, + { "ICS Client", False }, + { "ICStex", False }, + { "ICS Input Box", False }, { "Action", False }, - { "menuEdit.Revert", False }, - { "menuEdit.Annotate", False }, - { "menuEngine.Engine #1 Settings", False }, - { "menuEngine.Engine #2 Settings", False }, - { "menuEngine.Move Now", False }, - { "menuEngine.Retract Move", False }, - { "menuOptions.ICS", False }, + { "Revert", False }, + { "Annotate", False }, + { "Engine #1 Settings", False }, + { "Engine #2 Settings", False }, + { "Move Now", False }, + { "Retract Move", False }, + { "ICS", False }, #ifndef OPTIONSDIALOG - { "menuOptions.Auto Flag", False }, - { "menuOptions.Auto Flip View", False }, -// { "menuOptions.ICS Alarm", False }, - { "menuOptions.Move Sound", False }, - { "menuOptions.Hide Thinking", False }, - { "menuOptions.Periodic Updates", False }, - { "menuOptions.Ponder Next Move", False }, + { "Auto Flag", False }, + { "Auto Flip View", False }, +// { "ICS Alarm", False }, + { "Move Sound", False }, + { "Hide Thinking", False }, + { "Periodic Updates", False }, + { "Ponder Next Move", False }, #endif - { "menuEngine.Hint", False }, - { "menuEngine.Book", False }, + { "Hint", False }, + { "Book", False }, { NULL, False } }; Enables gnuEnables[] = { - { "menuMode.ICS Client", False }, - { "menuView.ICStex", False }, - { "menuView.ICS Input Box", False }, - { "menuAction.Accept", False }, - { "menuAction.Decline", False }, - { "menuAction.Rematch", False }, - { "menuAction.Adjourn", False }, - { "menuAction.Stop Examining", False }, - { "menuAction.Stop Observing", False }, - { "menuAction.Upload to Examine", False }, - { "menuEdit.Revert", False }, - { "menuEdit.Annotate", False }, - { "menuOptions.ICS", False }, + { "ICS Client", False }, + { "ICStex", False }, + { "ICS Input Box", False }, + { "Accept", False }, + { "Decline", False }, + { "Rematch", False }, + { "Adjourn", False }, + { "Stop Examining", False }, + { "Stop Observing", False }, + { "Upload to Examine", False }, + { "Revert", False }, + { "Annotate", False }, + { "ICS", False }, /* The next two options rely on SetCmailMode being called *after* */ /* SetGNUMode so that when GNU is being used to give hints these */ /* menu options are still available */ - { "menuFile.Mail Move", False }, - { "menuFile.Reload CMail Message", False }, + { "Mail Move", False }, + { "Reload CMail Message", False }, // [HGM] The following have been added to make a switch from ncp to GNU mode possible - { "menuMode.Machine White", True }, - { "menuMode.Machine Black", True }, - { "menuMode.Analysis Mode", True }, - { "menuMode.Analyze File", True }, - { "menuMode.Two Machines", True }, - { "menuMode.Machine Match", True }, - { "menuEngine.Engine #1 Settings", True }, - { "menuEngine.Engine #2 Settings", True }, - { "menuEngine.Hint", True }, - { "menuEngine.Book", True }, - { "menuEngine.Move Now", True }, - { "menuEngine.Retract Move", True }, + { "Machine White", True }, + { "Machine Black", True }, + { "Analysis Mode", True }, + { "Analyze File", True }, + { "Two Machines", True }, + { "Machine Match", True }, + { "Engine #1 Settings", True }, + { "Engine #2 Settings", True }, + { "Hint", True }, + { "Book", True }, + { "Move Now", True }, + { "Retract Move", True }, { "Action", True }, { NULL, False } }; Enables cmailEnables[] = { { "Action", True }, - { "menuAction.Call Flag", False }, - { "menuAction.Draw", True }, - { "menuAction.Adjourn", False }, - { "menuAction.Abort", False }, - { "menuAction.Stop Observing", False }, - { "menuAction.Stop Examining", False }, - { "menuFile.Mail Move", True }, - { "menuFile.Reload CMail Message", True }, + { "Call Flag", False }, + { "Draw", True }, + { "Adjourn", False }, + { "Abort", False }, + { "Stop Observing", False }, + { "Stop Examining", False }, + { "Mail Move", True }, + { "Reload CMail Message", True }, { NULL, False } }; Enables trainingOnEnables[] = { - { "menuMode.Edit Comment", False }, - { "menuMode.Pause", False }, - { "menuEdit.Forward", False }, - { "menuEdit.Backward", False }, - { "menuEdit.Forward to End", False }, - { "menuEdit.Back to Start", False }, - { "menuEngine.Move Now", False }, - { "menuEdit.Truncate Game", False }, + { "Edit Comment", False }, + { "Pause", False }, + { "Forward", False }, + { "Backward", False }, + { "Forward to End", False }, + { "Back to Start", False }, + { "Move Now", False }, + { "Truncate Game", False }, { NULL, False } }; Enables trainingOffEnables[] = { - { "menuMode.Edit Comment", True }, - { "menuMode.Pause", True }, - { "menuEdit.Forward", True }, - { "menuEdit.Backward", True }, - { "menuEdit.Forward to End", True }, - { "menuEdit.Back to Start", True }, - { "menuEngine.Move Now", True }, - { "menuEdit.Truncate Game", True }, + { "Edit Comment", True }, + { "Pause", True }, + { "Forward", True }, + { "Backward", True }, + { "Forward to End", True }, + { "Back to Start", True }, + { "Move Now", True }, + { "Truncate Game", True }, { NULL, False } }; Enables machineThinkingEnables[] = { - { "menuFile.Load Game", False }, -// { "menuFile.Load Next Game", False }, -// { "menuFile.Load Previous Game", False }, -// { "menuFile.Reload Same Game", False }, - { "menuEdit.Paste Game", False }, - { "menuFile.Load Position", False }, -// { "menuFile.Load Next Position", False }, -// { "menuFile.Load Previous Position", False }, -// { "menuFile.Reload Same Position", False }, - { "menuEdit.Paste Position", False }, - { "menuMode.Machine White", False }, - { "menuMode.Machine Black", False }, - { "menuMode.Two Machines", False }, -// { "menuMode.Machine Match", False }, - { "menuEngine.Retract Move", False }, + { "Load Game", False }, +// { "Load Next Game", False }, +// { "Load Previous Game", False }, +// { "Reload Same Game", False }, + { "Paste Game", False }, + { "Load Position", False }, +// { "Load Next Position", False }, +// { "Load Previous Position", False }, +// { "Reload Same Position", False }, + { "Paste Position", False }, + { "Machine White", False }, + { "Machine Black", False }, + { "Two Machines", False }, +// { "Machine Match", False }, + { "Retract Move", False }, { NULL, False } }; Enables userThinkingEnables[] = { - { "menuFile.Load Game", True }, -// { "menuFile.Load Next Game", True }, -// { "menuFile.Load Previous Game", True }, -// { "menuFile.Reload Same Game", True }, - { "menuEdit.Paste Game", True }, - { "menuFile.Load Position", True }, -// { "menuFile.Load Next Position", True }, -// { "menuFile.Load Previous Position", True }, -// { "menuFile.Reload Same Position", True }, - { "menuEdit.Paste Position", True }, - { "menuMode.Machine White", True }, - { "menuMode.Machine Black", True }, - { "menuMode.Two Machines", True }, -// { "menuMode.Machine Match", True }, - { "menuEngine.Retract Move", True }, + { "Load Game", True }, +// { "Load Next Game", True }, +// { "Load Previous Game", True }, +// { "Reload Same Game", True }, + { "Paste Game", True }, + { "Load Position", True }, +// { "Load Next Position", True }, +// { "Load Previous Position", True }, +// { "Reload Same Position", True }, + { "Paste Position", True }, + { "Machine White", True }, + { "Machine Black", True }, + { "Two Machines", True }, +// { "Machine Match", True }, + { "Retract Move", True }, { NULL, False } }; @@ -3015,8 +2549,8 @@ SetICSMode () #if ZIPPY if (appData.zippyPlay && !appData.noChessProgram) { /* [DM] icsEngineAnalyze */ - XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Analysis Mode"), True); - XtSetSensitive(XtNameToWidget(menuBarWidget, "menuEngine.Engine #1 Settings"), True); + EnableMenuItem("Analysis Mode", True); + EnableMenuItem("Engine #1 Settings", True); } #endif } @@ -3074,8 +2608,7 @@ SetMachineThinkingEnables () case MachinePlaysBlack: case MachinePlaysWhite: case TwoMachinesPlay: - XtSetSensitive(XtNameToWidget(menuBarWidget, - ModeToWidgetName(gameMode)), True); + EnableMenuItem(ModeToWidgetName(gameMode), True); break; default: break; @@ -3885,111 +3418,176 @@ CreateGrid () } } +int nrOfMenuItems = 7; +Widget menuWidget[150]; +MenuListItem menuItemList[150] = { + { "LoadNextGameProc", LoadNextGameProc }, + { "LoadPrevGameProc", LoadPrevGameProc }, + { "ReloadGameProc", ReloadGameProc }, + { "ReloadPositionProc", ReloadPositionProc }, +#ifndef OPTIONSDIALOG + { "AlwaysQueenProc", AlwaysQueenProc }, + { "AnimateDraggingProc", AnimateDraggingProc }, + { "AnimateMovingProc", AnimateMovingProc }, + { "AutoflagProc", AutoflagProc }, + { "AutoflipProc", AutoflipProc }, + { "BlindfoldProc", BlindfoldProc }, + { "FlashMovesProc", FlashMovesProc }, +#if HIGHDRAG + { "HighlightDraggingProc", HighlightDraggingProc }, +#endif + { "HighlightLastMoveProc", HighlightLastMoveProc }, +// { "IcsAlarmProc", IcsAlarmProc }, + { "MoveSoundProc", MoveSoundProc }, + { "PeriodicUpdatesProc", PeriodicUpdatesProc }, + { "PopupExitMessageProc", PopupExitMessageProc }, + { "PopupMoveErrorsProc", PopupMoveErrorsProc }, +// { "PremoveProc", PremoveProc }, + { "ShowCoordsProc", ShowCoordsProc }, + { "ShowThinkingProc", ShowThinkingProc }, + { "HideThinkingProc", HideThinkingProc }, + { "TestLegalityProc", TestLegalityProc }, +#endif + { "AboutGameProc", AboutGameEvent }, + { "DebugProc", DebugProc }, + { "NothingProc", NothingProc }, + {NULL, NothingProc} +}; + +void +MarkMenuItem (char *menuRef, int state) +{ + int nr = MenuToNumber(menuRef); + if(nr >= 0) { + Arg args[2]; + XtSetArg(args[0], XtNleftBitmap, state ? xMarkPixmap : None); + XtSetValues(menuWidget[nr], args, 1); + } +} + +void +EnableMenuItem (char *menuRef, int state) +{ + int nr = MenuToNumber(menuRef); + if(nr >= 0) XtSetSensitive(menuWidget[nr], state); +} + +void +SetMenuEnables (Enables *enab) +{ + while (enab->name != NULL) { + EnableMenuItem(enab->name, enab->value); + enab++; + } +} + +int +Equal(char *p, char *s) +{ // compare strings skipping spaces in second + while(*s) { + if(*s == ' ') { s++; continue; } + if(*s++ != *p++) return 0; + } + return !*p; +} + +void +KeyBindingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +{ // [HGM] new method of key binding: specify MenuItem(FlipView) in stead of FlipViewProc in translation string + int i; + if(*nprms == 0) return; + for(i=0; menuItemList[i].name; i++) { + if(Equal(prms[0], menuItemList[i].name)) { + (menuItemList[i].proc) (); + return; + } + } +} + static void MenuBarSelect (Widget w, caddr_t addr, caddr_t index) { - XtActionProc proc = (XtActionProc) addr; + MenuProc *proc = (MenuProc *) addr; - (proc)(NULL, NULL, NULL, NULL); + (proc)(); } static void MenuEngineSelect (Widget w, caddr_t addr, caddr_t index) { - RecentEngineEvent((int) addr); + RecentEngineEvent((int) (intptr_t) addr); } +// some stuff that must remain in front-end +static Widget mainBar, currentMenu; +static int wtot, nr = 0, widths[10]; + void -AppendEnginesToMenu (Widget menu, char *list) +AppendMenuItem (char *text, char *name, MenuProc *action) { - int i=0, j; + int j; Widget entry; - MenuItem *mi; Arg args[16]; - char *p; - if(appData.recentEngines <= 0) return; - recentEngines = strdup(list); j = 0; XtSetArg(args[j], XtNleftMargin, 20); j++; XtSetArg(args[j], XtNrightMargin, 20); j++; - while (*list) { - p = strchr(list, '\n'); if(p == NULL) break; - if(i == 0) XtCreateManagedWidget(_("----"), smeLineObjectClass, menu, args, j); // at least one valid item to add - *p = 0; - XtSetArg(args[j], XtNlabel, XtNewString(list)); - entry = XtCreateManagedWidget("engine", smeBSBObjectClass, menu, args, j+1); - XtAddCallback(entry, XtNcallback, - (XtCallbackProc) MenuEngineSelect, - (caddr_t) i); - i++; *p = '\n'; list = p + 1; - } + + if (strcmp(text, "----") == 0) { + entry = XtCreateManagedWidget(text, smeLineObjectClass, + currentMenu, args, j); + } else { + XtSetArg(args[j], XtNlabel, XtNewString(_(text))); + entry = XtCreateManagedWidget(name, smeBSBObjectClass, + currentMenu, args, j+1); + XtAddCallback(entry, XtNcallback, + (XtCallbackProc) (strcmp(name, "recent") ? MenuBarSelect : MenuEngineSelect), + (caddr_t) action); + menuWidget[nrOfMenuItems] = entry; + } } void -CreateMenuBarPopup (Widget parent, String name, Menu *mb) -{ - int j; - Widget menu, entry; - MenuItem *mi; +CreateMenuButton (char *name, Menu *mb) +{ // create menu button on main bar, and shell for pull-down list + int i, j; Arg args[16]; + Dimension w; - menu = XtCreatePopupShell(name, simpleMenuWidgetClass, - parent, NULL, 0); - j = 0; - XtSetArg(args[j], XtNleftMargin, 20); j++; - XtSetArg(args[j], XtNrightMargin, 20); j++; - mi = mb->mi; - while (mi->string != NULL) { - if (strcmp(mi->string, "----") == 0) { - entry = XtCreateManagedWidget(_(mi->string), smeLineObjectClass, - menu, args, j); - } else { - XtSetArg(args[j], XtNlabel, XtNewString(_(mi->string))); - entry = XtCreateManagedWidget(mi->ref, smeBSBObjectClass, - menu, args, j+1); - XtAddCallback(entry, XtNcallback, - (XtCallbackProc) MenuBarSelect, - (caddr_t) mi->proc); - } - mi++; - } - if(!strcmp(mb->name, "Engine")) AppendEnginesToMenu(menu, appData.recentEngineList); + j = 0; + XtSetArg(args[j], XtNmenuName, XtNewString(name)); j++; + XtSetArg(args[j], XtNlabel, XtNewString(_(mb->name))); j++; + XtSetArg(args[j], XtNborderWidth, 0); j++; + mb->subMenu = XtCreateManagedWidget(mb->name, menuButtonWidgetClass, + mainBar, args, j); + currentMenu = XtCreatePopupShell(name, simpleMenuWidgetClass, + mainBar, NULL, 0); + j = 0; + XtSetArg(args[j], XtNwidth, &w); j++; + XtGetValues(mb->subMenu, args, j); + wtot += mb->textWidth = widths[nr++] = w; } Widget CreateMenuBar (Menu *mb, int boardWidth) { - int i, j, nr = 0, wtot = 0, widths[10]; - Widget menuBar; + int i, j; Arg args[16]; char menuName[MSG_SIZ]; Dimension w; Menu *ma = mb; + // create bar itself j = 0; XtSetArg(args[j], XtNorientation, XtorientHorizontal); j++; XtSetArg(args[j], XtNvSpace, 0); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; - menuBar = XtCreateWidget("menuBar", boxWidgetClass, + mainBar = XtCreateWidget("menuBar", boxWidgetClass, formWidget, args, j); - while (mb->name != NULL) { - safeStrCpy(menuName, "menu", sizeof(menuName)/sizeof(menuName[0]) ); - strncat(menuName, mb->ref, MSG_SIZ - strlen(menuName) - 1); - j = 0; - XtSetArg(args[j], XtNmenuName, XtNewString(menuName)); j++; - XtSetArg(args[j], XtNlabel, XtNewString(_(mb->name))); j++; - XtSetArg(args[j], XtNborderWidth, 0); j++; - mb->subMenu = XtCreateManagedWidget(mb->name, menuButtonWidgetClass, - menuBar, args, j); - CreateMenuBarPopup(menuBar, menuName, mb); - j = 0; - XtSetArg(args[j], XtNwidth, &w); j++; - XtGetValues(mb->subMenu, args, j); - wtot += mb->textWidth = widths[nr++] = w; - mb++; - } + CreateMainMenus(mb); // put menus in bar according to description in back-end + + // size buttons to make menu bar fit, clipping menu names where necessary while(wtot > boardWidth - 40) { int wmax=0, imax=0; for(i=0; i wmax) wmax = widths[imax=i]; @@ -4001,7 +3599,8 @@ CreateMenuBar (Menu *mb, int boardWidth) XtSetArg(args[j], XtNwidth, widths[i]); j++; XtSetValues(ma[i].subMenu, args, j); } - return menuBar; + + return mainBar; } Widget @@ -4240,6 +3839,7 @@ SetHighlights (int fromX, int fromY, int toX, int toY) drawHighlight(hi1X, hi1Y, lineGC); } } // [HGM] first erase both, then draw new! + if (hi2X != toX || hi2Y != toY) { if (hi2X >= 0 && hi2Y >= 0) { drawHighlight(hi2X, hi2Y, lineGC); @@ -4255,8 +3855,10 @@ SetHighlights (int fromX, int fromY, int toX, int toY) drawHighlight(toX, toY, highlineGC); } } + if(toX<0) // clearing the highlights must have damaged arrow DrawArrowHighlight(hi1X, hi1Y, hi2X, hi2Y); // for now, redraw it (should really be cleared!) + hi1X = fromX; hi1Y = fromY; hi2X = toX; @@ -4645,6 +4247,77 @@ DrawSquare (int row, int column, ChessSquare piece, int do_flash) } } +double +Fraction (int x, int start, int stop) +{ + double f = ((double) x - start)/(stop - start); + if(f > 1.) f = 1.; else if(f < 0.) f = 0.; + return f; +} + +static WindowPlacement wpNew; + +void +CoDrag (Widget sh, WindowPlacement *wp) +{ + Arg args[16]; + int j=0, touch=0, fudge = 2; + GetActualPlacement(sh, wp); + if(abs(wpMain.x + wpMain.width + 2*frameX - wp->x) < fudge) touch = 1; else // right touch + if(abs(wp->x + wp->width + 2*frameX - wpMain.x) < fudge) touch = 2; else // left touch + if(abs(wpMain.y + wpMain.height + frameX + frameY - wp->y) < fudge) touch = 3; else // bottom touch + if(abs(wp->y + wp->height + frameX + frameY - wpMain.y) < fudge) touch = 4; // top touch + if(!touch ) return; // only windows that touch co-move + if(touch < 3 && wpNew.height != wpMain.height) { // left or right and height changed + int heightInc = wpNew.height - wpMain.height; + double fracTop = Fraction(wp->y, wpMain.y, wpMain.y + wpMain.height + frameX + frameY); + double fracBot = Fraction(wp->y + wp->height + frameX + frameY + 1, wpMain.y, wpMain.y + wpMain.height + frameX + frameY); + wp->y += fracTop * heightInc; + heightInc = (int) (fracBot * heightInc) - (int) (fracTop * heightInc); + if(heightInc) XtSetArg(args[j], XtNheight, wp->height + heightInc), j++; + } else if(touch > 2 && wpNew.width != wpMain.width) { // top or bottom and width changed + int widthInc = wpNew.width - wpMain.width; + double fracLeft = Fraction(wp->x, wpMain.x, wpMain.x + wpMain.width + 2*frameX); + double fracRght = Fraction(wp->x + wp->width + 2*frameX + 1, wpMain.x, wpMain.x + wpMain.width + 2*frameX); + wp->y += fracLeft * widthInc; + widthInc = (int) (fracRght * widthInc) - (int) (fracLeft * widthInc); + if(widthInc) XtSetArg(args[j], XtNwidth, wp->width + widthInc), j++; + } + wp->x += wpNew.x - wpMain.x; + wp->y += wpNew.y - wpMain.y; + if(touch == 1) wp->x += wpNew.width - wpMain.width; else + if(touch == 3) wp->y += wpNew.height - wpMain.height; + XtSetArg(args[j], XtNx, wp->x); j++; + XtSetArg(args[j], XtNy, wp->y); j++; + XtSetValues(sh, args, j); +} + +static XtIntervalId delayedDragID = 0; + +void +DragProc () +{ + GetActualPlacement(shellWidget, &wpNew); + if(wpNew.x == wpMain.x && wpNew.y == wpMain.y && // not moved + wpNew.width == wpMain.width && wpNew.height == wpMain.height) // not sized + return; // false alarm + if(EngineOutputIsUp()) CoDrag(engineOutputShell, &wpEngineOutput); + if(MoveHistoryIsUp()) CoDrag(shells[7], &wpMoveHistory); + if(EvalGraphIsUp()) CoDrag(evalGraphShell, &wpEvalGraph); + if(GameListIsUp()) CoDrag(gameListShell, &wpGameList); + wpMain = wpNew; + XDrawPosition(boardWidget, True, NULL); + delayedDragID = 0; // now drag executed, make sure next DelayedDrag will not cancel timer event (which could now be used by other) +} + + +void +DelayedDrag () +{ + if(delayedDragID) XtRemoveTimeOut(delayedDragID); // cancel pending + delayedDragID = + XtAppAddTimeOut(appContext, 50, (XtTimerCallbackProc) DragProc, (XtPointer) 0); // and schedule new one 50 msec later +} /* Why is this needed on some versions of X? */ void @@ -4652,8 +4325,11 @@ EventProc (Widget widget, caddr_t unused, XEvent *event) { if (!XtIsRealized(widget)) return; - switch (event->type) { + case ConfigureNotify: // main window is being dragged: drag attached windows with it + if(appData.useStickyWindows) + DelayedDrag(); // as long as events keep coming in faster than 50 msec, they destroy each other + break; case Expose: if (event->xexpose.count > 0) return; /* no clipping is done */ XDrawPosition(widget, True, NULL); @@ -4799,9 +4475,7 @@ XDrawPosition (Widget w, int repaint, Board board) board = lastBoard[nr]; } if (!lastBoardValid[nr] || (nr == 0 && lastFlipView != flipView)) { - XtSetArg(args[0], XtNleftBitmap, (flipView ? xMarkPixmap : None)); - XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Flip View"), - args, 1); + MarkMenuItem("Flip View", flipView); } /* @@ -5335,36 +5009,36 @@ ModeToWidgetName (GameMode mode) switch (mode) { case BeginningOfGame: if (appData.icsActive) - return "menuMode.ICS Client"; + return "ICS Client"; else if (appData.noChessProgram || *appData.cmailGameName != NULLCHAR) - return "menuMode.Edit Game"; + return "Edit Game"; else - return "menuMode.Machine Black"; + return "Machine Black"; case MachinePlaysBlack: - return "menuMode.Machine Black"; + return "Machine Black"; case MachinePlaysWhite: - return "menuMode.Machine White"; + return "Machine White"; case AnalyzeMode: - return "menuMode.Analysis Mode"; + return "Analysis Mode"; case AnalyzeFile: - return "menuMode.Analyze File"; + return "Analyze File"; case TwoMachinesPlay: - return "menuMode.Two Machines"; + return "Two Machines"; case EditGame: - return "menuMode.Edit Game"; + return "Edit Game"; case PlayFromGameFile: - return "menuFile.Load Game"; + return "Load Game"; case EditPosition: - return "menuMode.Edit Position"; + return "Edit Position"; case Training: - return "menuMode.Training"; + return "Training"; case IcsPlayingWhite: case IcsPlayingBlack: case IcsObserving: case IcsIdle: case IcsExamining: - return "menuMode.ICS Client"; + return "ICS Client"; default: case EndOfGame: return NULL; @@ -5383,13 +5057,7 @@ ModeHighlight () if (pausing != oldPausing) { oldPausing = pausing; - if (pausing) { - XtSetArg(args[0], XtNleftBitmap, xMarkPixmap); - } else { - XtSetArg(args[0], XtNleftBitmap, None); - } - XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Pause"), - args, 1); + MarkMenuItem("Pause", pausing); if (appData.showButtonBar) { /* Always toggle, don't set. Previous code messes up when @@ -5410,33 +5078,23 @@ ModeHighlight () wname = ModeToWidgetName(oldmode); if (wname != NULL) { - XtSetArg(args[0], XtNleftBitmap, None); - XtSetValues(XtNameToWidget(menuBarWidget, wname), args, 1); + MarkMenuItem(wname, False); } wname = ModeToWidgetName(gameMode); if (wname != NULL) { - XtSetArg(args[0], XtNleftBitmap, xMarkPixmap); - XtSetValues(XtNameToWidget(menuBarWidget, wname), args, 1); + MarkMenuItem(wname, True); } oldmode = gameMode; - XtSetArg(args[0], XtNleftBitmap, matchMode && matchGame < appData.matchGames ? xMarkPixmap : None); - XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Machine Match"), args, 1); + MarkMenuItem("Machine Match", matchMode && matchGame < appData.matchGames); /* Maybe all the enables should be handled here, not just this one */ - XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Training"), - gameMode == Training || gameMode == PlayFromGameFile); + EnableMenuItem("Training", gameMode == Training || gameMode == PlayFromGameFile); } /* * Button/menu procedures */ -void -ResetProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - ResetGameEvent(); -} - int LoadGamePopUp (FILE *f, int gameNumber, char *title) { @@ -5457,7 +5115,7 @@ LoadGamePopUp (FILE *f, int gameNumber, char *title) } void -LoadGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +LoadGameProc () { if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) { Reset(FALSE, TRUE); @@ -5466,43 +5124,43 @@ LoadGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -LoadNextGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +LoadNextGameProc () { ReloadGame(1); } void -LoadPrevGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +LoadPrevGameProc () { ReloadGame(-1); } void -ReloadGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +ReloadGameProc () { ReloadGame(0); } void -LoadNextPositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +LoadNextPositionProc () { ReloadPosition(1); } void -LoadPrevPositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +LoadPrevPositionProc () { ReloadPosition(-1); } void -ReloadPositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +ReloadPositionProc () { ReloadPosition(0); } void -LoadPositionProc(Widget w, XEvent *event, String *prms, Cardinal *nprms) +LoadPositionProc() { if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) { Reset(FALSE, TRUE); @@ -5511,7 +5169,7 @@ LoadPositionProc(Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -SaveGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +SaveGameProc () { FileNamePopUp(_("Save game file name?"), DefaultFileName(appData.oldSaveStyle ? "game" : "pgn"), @@ -5520,7 +5178,7 @@ SaveGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -SavePositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +SavePositionProc () { FileNamePopUp(_("Save position file name?"), DefaultFileName(appData.oldSaveStyle ? "pos" : "fen"), @@ -5529,17 +5187,11 @@ SavePositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -ReloadCmailMsgProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +ReloadCmailMsgProc () { ReloadCmailMsgEvent(FALSE); } -void -MailMoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - MailMoveEvent(); -} - /* this variable is shared between CopyPositionProc and SendPositionSelection */ char *selected_fen_position=NULL; @@ -5593,7 +5245,7 @@ SendPositionSelection (Widget w, Atom *selection, Atom *target, * Widget which was clicked on was, or what the click event was */ void -CopyPositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +CopyPositionProc () { /* * Set both PRIMARY (the selection) and CLIPBOARD, since we don't @@ -5619,7 +5271,7 @@ CopyPositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) void CopyFENToClipboard () { // wrapper to make call from back-end possible - CopyPositionProc(NULL, NULL, NULL, NULL); + CopyPositionProc(); } /* function called when the data to Paste is ready */ @@ -5636,11 +5288,8 @@ PastePositionCB (Widget w, XtPointer client_data, Atom *selection, /* called when Paste Position button is pressed, * all parameters will be NULL */ -void PastePositionProc(w, event, prms, nprms) - Widget w; - XEvent *event; - String *prms; - Cardinal *nprms; +void +PastePositionProc () { XtGetSelectionValue(menuBarWidget, appData.pasteSelection ? XA_PRIMARY: XA_CLIPBOARD(xDisplay), XA_STRING, @@ -5733,7 +5382,7 @@ CopySomething () * Widget which was clicked on was, or what the click event was */ void -CopyGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +CopyGameProc () { int ret; @@ -5744,7 +5393,7 @@ CopyGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -CopyGameListProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +CopyGameListProc () { if(!SaveGameListAsText(fopen(gameCopyFilename, "w"))) return; CopySomething(); @@ -5773,7 +5422,7 @@ PasteGameCB (Widget w, XtPointer client_data, Atom *selection, /* called when Paste Game button is pressed, * all parameters will be NULL */ void -PasteGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +PasteGameProc () { XtGetSelectionValue(menuBarWidget, appData.pasteSelection ? XA_PRIMARY: XA_CLIPBOARD(xDisplay), XA_STRING, @@ -5792,36 +5441,24 @@ PasteGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) void AutoSaveGame () { - SaveGameProc(NULL, NULL, NULL, NULL); + SaveGameProc(); } void -QuitProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +QuitProc () { ExitEvent(0); } void -PauseProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - PauseEvent(); -} - -void -MachineBlackProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - MachineBlackEvent(); -} - -void -MachineWhiteProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +QuitWrapper (Widget w, XEvent *event, String *prms, Cardinal *nprms) { - MachineWhiteEvent(); + QuitProc(); } void -AnalyzeModeProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AnalyzeModeProc () { char buf[MSG_SIZ]; @@ -5856,14 +5493,14 @@ AnalyzeModeProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } #ifndef OPTIONSDIALOG if (!appData.showThinking) - ShowThinkingProc(w,event,prms,nprms); + ShowThinkingProc(); #endif AnalyzeModeEvent(); } void -AnalyzeFileProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AnalyzeFileProc () { if (!first.analysisSupport) { char buf[MSG_SIZ]; @@ -5874,7 +5511,7 @@ AnalyzeFileProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) // Reset(FALSE, TRUE); #ifndef OPTIONSDIALOG if (!appData.showThinking) - ShowThinkingProc(w,event,prms,nprms); + ShowThinkingProc(); #endif AnalyzeFileEvent(); // FileNamePopUp(_("File to analyze"), "", ".pgn .game", LoadGamePopUp, "rb"); @@ -5882,123 +5519,43 @@ AnalyzeFileProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -TwoMachinesProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - TwoMachinesEvent(); -} - -void -MatchProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +MatchProc () { MatchEvent(2); } void -IcsClientProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - IcsClientEvent(); -} - -void -EditGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - EditGameEvent(); -} - -void -EditPositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - EditPositionEvent(); -} - -void -TrainingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - TrainingEvent(); -} - -void -EditCommentProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +EditCommentProc () { Arg args[5]; int j; if (PopDown(1)) { // popdown succesful - j = 0; - XtSetArg(args[j], XtNleftBitmap, None); j++; - XtSetValues(XtNameToWidget(menuBarWidget, "menuEdit.Edit Comment"), args, j); - XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Show Comments"), args, j); + MarkMenuItem("Edit Comment", False); + MarkMenuItem("Show Comments", False); } else // was not up EditCommentEvent(); } void -IcsInputBoxProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +IcsInputBoxProc () { if (!PopDown(4)) ICSInputBoxPopUp(); } void -AcceptProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - AcceptEvent(); -} - -void -DeclineProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - DeclineEvent(); -} - -void -RematchProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - RematchEvent(); -} - -void -CallFlagProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - CallFlagEvent(); -} - -void -DrawProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - DrawEvent(); -} - -void -AbortProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - AbortEvent(); -} - -void -AdjournProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - AdjournEvent(); -} - -void -ResignProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - ResignEvent(); -} - -void -AdjuWhiteProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AdjuWhiteProc () { UserAdjudicationEvent(+1); } void -AdjuBlackProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AdjuBlackProc () { UserAdjudicationEvent(-1); } void -AdjuDrawProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AdjuDrawProc () { UserAdjudicationEvent(0); } @@ -6054,38 +5611,6 @@ DownKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -StopObservingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - StopObservingEvent(); -} - -void -StopExaminingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - StopExaminingEvent(); -} - -void -UploadProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - UploadGameEvent(); -} - - -void -ForwardProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - ForwardEvent(); -} - - -void -BackwardProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - BackwardEvent(); -} - -void TempBackwardProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) { if (!TempBackwardActive) { @@ -6111,56 +5636,26 @@ TempForwardProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -ToStartProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - ToStartEvent(); -} - -void -ToEndProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - ToEndEvent(); -} - -void -RevertProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +RevertProc () { RevertEvent(False); } void -AnnotateProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AnnotateProc () { RevertEvent(True); } void -TruncateGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - TruncateGameEvent(); -} - -void -RetractMoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - RetractMoveEvent(); -} - -void -MoveNowProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - MoveNowEvent(); -} - -void -FlipViewProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +FlipViewProc () { flipView = !flipView; DrawPosition(True, NULL); } void -PonderNextMoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +PonderNextMoveProc () { Arg args[16]; @@ -6171,14 +5666,14 @@ PonderNextMoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Ponder Next Move"), + XtSetValues(XtNameToWidget(menuBarWidget, "Ponder Next Move"), args, 1); #endif } #ifndef OPTIONSDIALOG void -AlwaysQueenProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AlwaysQueenProc () { Arg args[16]; @@ -6189,12 +5684,12 @@ AlwaysQueenProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Always Queen"), + XtSetValues(XtNameToWidget(menuBarWidget, "Always Queen"), args, 1); } void -AnimateDraggingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AnimateDraggingProc () { Arg args[16]; @@ -6206,12 +5701,12 @@ AnimateDraggingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Animate Dragging"), + XtSetValues(XtNameToWidget(menuBarWidget, "Animate Dragging"), args, 1); } void -AnimateMovingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AnimateMovingProc () { Arg args[16]; @@ -6223,12 +5718,12 @@ AnimateMovingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Animate Moving"), + XtSetValues(XtNameToWidget(menuBarWidget, "Animate Moving"), args, 1); } void -AutoflagProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AutoflagProc () { Arg args[16]; @@ -6239,12 +5734,12 @@ AutoflagProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Flag"), + XtSetValues(XtNameToWidget(menuBarWidget, "Auto Flag"), args, 1); } void -AutoflipProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +AutoflipProc () { Arg args[16]; @@ -6255,12 +5750,12 @@ AutoflipProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Flip View"), + XtSetValues(XtNameToWidget(menuBarWidget, "Auto Flip View"), args, 1); } void -BlindfoldProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +BlindfoldProc () { Arg args[16]; @@ -6271,14 +5766,14 @@ BlindfoldProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Blindfold"), + XtSetValues(XtNameToWidget(menuBarWidget, "Blindfold"), args, 1); DrawPosition(True, NULL); } void -TestLegalityProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +TestLegalityProc () { Arg args[16]; @@ -6289,13 +5784,13 @@ TestLegalityProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Test Legality"), + XtSetValues(XtNameToWidget(menuBarWidget, "Test Legality"), args, 1); } void -FlashMovesProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +FlashMovesProc () { Arg args[16]; @@ -6310,13 +5805,13 @@ FlashMovesProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Flash Moves"), + XtSetValues(XtNameToWidget(menuBarWidget, "Flash Moves"), args, 1); } #if HIGHDRAG void -HighlightDraggingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +HighlightDraggingProc () { Arg args[16]; @@ -6328,12 +5823,12 @@ HighlightDraggingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) XtSetArg(args[0], XtNleftBitmap, None); } XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Highlight Dragging"), args, 1); + "Highlight Dragging"), args, 1); } #endif void -HighlightLastMoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +HighlightLastMoveProc () { Arg args[16]; @@ -6345,11 +5840,11 @@ HighlightLastMoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) XtSetArg(args[0], XtNleftBitmap, None); } XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Highlight Last Move"), args, 1); + "Highlight Last Move"), args, 1); } void -HighlightArrowProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +HighlightArrowProc () { Arg args[16]; @@ -6361,12 +5856,12 @@ HighlightArrowProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) XtSetArg(args[0], XtNleftBitmap, None); } XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Arrow"), args, 1); + "Arrow"), args, 1); } #if 0 void -IcsAlarmProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +IcsAlarmProc () { Arg args[16]; @@ -6378,12 +5873,12 @@ IcsAlarmProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) XtSetArg(args[0], XtNleftBitmap, None); } XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.ICS Alarm"), args, 1); + "ICS Alarm"), args, 1); } #endif void -MoveSoundProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +MoveSoundProc () { Arg args[16]; @@ -6394,12 +5889,12 @@ MoveSoundProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Move Sound"), + XtSetValues(XtNameToWidget(menuBarWidget, "Move Sound"), args, 1); } void -OneClickProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +OneClickProc () { Arg args[16]; @@ -6410,12 +5905,12 @@ OneClickProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.OneClick"), + XtSetValues(XtNameToWidget(menuBarWidget, "OneClick"), args, 1); } void -PeriodicUpdatesProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +PeriodicUpdatesProc () { Arg args[16]; @@ -6426,12 +5921,12 @@ PeriodicUpdatesProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Periodic Updates"), + XtSetValues(XtNameToWidget(menuBarWidget, "Periodic Updates"), args, 1); } void -PopupExitMessageProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +PopupExitMessageProc () { Arg args[16]; @@ -6443,11 +5938,11 @@ PopupExitMessageProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) XtSetArg(args[0], XtNleftBitmap, None); } XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Popup Exit Message"), args, 1); + "Popup Exit Message"), args, 1); } void -PopupMoveErrorsProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +PopupMoveErrorsProc () { Arg args[16]; @@ -6458,13 +5953,13 @@ PopupMoveErrorsProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Popup Move Errors"), + XtSetValues(XtNameToWidget(menuBarWidget, "Popup Move Errors"), args, 1); } #if 0 void -PremoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +PremoveProc () { Arg args[16]; @@ -6476,12 +5971,12 @@ PremoveProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) XtSetArg(args[0], XtNleftBitmap, None); } XtSetValues(XtNameToWidget(menuBarWidget, - "menuOptions.Premove"), args, 1); + "Premove"), args, 1); } #endif void -ShowCoordsProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +ShowCoordsProc () { Arg args[16]; @@ -6492,61 +5987,49 @@ ShowCoordsProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } else { XtSetArg(args[0], XtNleftBitmap, None); } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Coords"), + XtSetValues(XtNameToWidget(menuBarWidget, "Show Coords"), args, 1); DrawPosition(True, NULL); } void -ShowThinkingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +ShowThinkingProc () { appData.showThinking = !appData.showThinking; // [HGM] thinking: tken out of ShowThinkingEvent ShowThinkingEvent(); } void -HideThinkingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +HideThinkingProc () { Arg args[16]; appData.hideThinkingFromHuman = !appData.hideThinkingFromHuman; // [HGM] thinking: tken out of ShowThinkingEvent ShowThinkingEvent(); - if (appData.hideThinkingFromHuman) { - XtSetArg(args[0], XtNleftBitmap, xMarkPixmap); - } else { - XtSetArg(args[0], XtNleftBitmap, None); - } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Hide Thinking"), - args, 1); + MarkMenuItem("Hide Thinking", appData.hideThinkingFromHuman); } #endif void -SaveOnExitProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +SaveOnExitProc () { Arg args[16]; saveSettingsOnExit = !saveSettingsOnExit; - if (saveSettingsOnExit) { - XtSetArg(args[0], XtNleftBitmap, xMarkPixmap); - } else { - XtSetArg(args[0], XtNleftBitmap, None); - } - XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Save Settings on Exit"), - args, 1); + MarkMenuItem("Save Settings on Exit", saveSettingsOnExit); } void -SaveSettingsProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +SaveSettingsProc () { SaveSettings(settingsFileName); } void -InfoProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +InfoProc () { char buf[MSG_SIZ]; snprintf(buf, sizeof(buf), "xterm -e info --directory %s --directory . -f %s &", @@ -6555,8 +6038,8 @@ InfoProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -ManProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ +ManInner (Widget w, XEvent *event, String *prms, Cardinal *nprms) +{ // called as key binding char buf[MSG_SIZ]; String name; if (nprms && *nprms > 0) @@ -6568,21 +6051,47 @@ ManProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) } void -HintProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +ManProc () +{ // called from menu + ManInner(NULL, NULL, NULL, NULL); +} + +void +BugReportProc () { - HintEvent(); + char buf[MSG_SIZ]; + snprintf(buf, MSG_SIZ, "%s mailto:bug-xboard@gnu.org", appData.sysOpen); + system(buf); } void -BookProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +GuideProc () { - BookEvent(); + char buf[MSG_SIZ]; + snprintf(buf, MSG_SIZ, "%s http://www.gnu.org/software/xboard/user_guide/UserGuide.html", appData.sysOpen); + system(buf); } void -AboutProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +HomePageProc () { char buf[MSG_SIZ]; + snprintf(buf, MSG_SIZ, "%s http://www.gnu.org/software/xboard/", appData.sysOpen); + system(buf); +} + +void +NewsPageProc () +{ + char buf[MSG_SIZ]; + snprintf(buf, MSG_SIZ, "%s http://www.gnu.org/software/xboard/whats_new/portal.html", appData.sysOpen); + system(buf); +} + +void +AboutProc () +{ + char buf[2 * MSG_SIZ]; #if ZIPPY char *zippy = _(" (with Zippy code)"); #else @@ -6594,25 +6103,23 @@ _("%s%s\n\n" "Enhancements Copyright 1992-2012 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."), +"see the file COPYING for more information.\n\n" +"Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" +"Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html\n\n" +"Report bugs via email at: \n\n" + ), programVersion, zippy, PACKAGE); ErrorPopUp(_("About XBoard"), buf, FALSE); } void -DebugProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +DebugProc () { appData.debugMode = !appData.debugMode; } void -AboutGameProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) -{ - AboutGameEvent(); -} - -void -NothingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +NothingProc () { return; }