X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xboard.c;h=0f306404e732a482ce4e5bda5478752981ffee5c;hb=43aacbdf1c19177fe05487e0c76e207189e5bdb0;hp=9d0a314532ed46a0a19753308a98e60baa883d7d;hpb=e579088465d14ac31db59ed08265505316630e96;p=xboard.git diff --git a/xboard.c b/xboard.c index 9d0a314..0f30640 100644 --- a/xboard.c +++ b/xboard.c @@ -144,6 +144,7 @@ extern char *getenv(); #include #include #include +#include #if USE_XAW3D #include #include @@ -466,8 +467,8 @@ Widget shellWidget, layoutWidget, formWidget, boardWidget, messageWidget, commentShell, promotionShell, whitePieceMenu, blackPieceMenu, dropMenu, menuBarWidget, buttonBarWidget, editShell, errorShell, analysisShell, ICSInputShell, fileNameShell, askQuestionShell; -XSegment gridSegments[(BOARD_SIZE + 1) * 2]; -XSegment jailGridSegments[(BOARD_SIZE + 3) * 2]; +XSegment gridSegments[BOARD_RANKS + BOARD_FILES + 2]; +XSegment jailGridSegments[BOARD_RANKS + BOARD_FILES + 6]; Font clockFontID, coordFontID, countFontID; XFontStruct *clockFontStruct, *coordFontStruct, *countFontStruct; XtAppContext appContext; @@ -1416,6 +1417,15 @@ XtResource clientResources[] = { { "useInternalWrap", "useInternalWrap", XtRBoolean, sizeof(Boolean), XtOffset(AppDataPtr, useInternalWrap), XtRImmediate, (XtPointer) True}, + { "autoDisplayTags", "autoDisplayTags", XtRBoolean, + sizeof(Boolean), XtOffset(AppDataPtr, autoDisplayTags), + XtRImmediate, (XtPointer) True}, + { "autoDisplayComment", "autoDisplayComment", XtRBoolean, + sizeof(Boolean), XtOffset(AppDataPtr, autoDisplayComment), + XtRImmediate, (XtPointer) True}, + { "pasteSelection", "pasteSelection", XtRBoolean, + sizeof(Boolean), XtOffset(AppDataPtr, pasteSelection), + XtRImmediate, (XtPointer) False}, }; XrmOptionDescRec shellOptions[] = { @@ -1788,6 +1798,9 @@ XrmOptionDescRec shellOptions[] = { { "-keepLineBreaksICS", "keepLineBreaksICS", XrmoptionSepArg, NULL }, { "-wrapContinuationSequence", "wrapContinuationSequence", XrmoptionSepArg, NULL }, { "-useInternalWrap", "useInternalWrap", XrmoptionSepArg, NULL }, + { "-autoDisplayTags", "autoDisplayTags", XrmoptionSepArg, NULL }, + { "-autoDisplayComment", "autoDisplayComment", XrmoptionSepArg, NULL }, + { "-pasteSelection", "pasteSelection", XrmoptionSepArg, NULL }, }; XtActionsRec boardActions[] = { @@ -2498,9 +2511,9 @@ main(argc, argv) } /* [HGM,HR] make sure board size is acceptable */ - if(appData.NrFiles > BOARD_SIZE || - appData.NrRanks > BOARD_SIZE ) - DisplayFatalError(_("Recompile with BOARD_SIZE > 12, to support this size"), 0, 2); + if(appData.NrFiles > BOARD_FILES || + appData.NrRanks > BOARD_RANKS ) + DisplayFatalError(_("Recompile with larger BOARD_RANKS or BOARD_FILES to support this size"), 0, 2); #if !HIGHDRAG /* This feature does not work; animation needs a rewrite */ @@ -2777,7 +2790,8 @@ XBoard square size (hint): %d\n\ widgetList[j++] = menuBarWidget = CreateMenuBar(menuBar); XtSetArg(args[0], XtNtop, XtChainTop); XtSetArg(args[1], XtNbottom, XtChainTop); - XtSetValues(menuBarWidget, args, 2); + XtSetArg(args[2], XtNright, XtChainLeft); + XtSetValues(menuBarWidget, args, 3); widgetList[j++] = whiteTimerWidget = XtCreateWidget("whiteTime", labelWidgetClass, @@ -3297,6 +3311,20 @@ typedef struct { } Enables; void +GreyRevert(grey) + Boolean grey; +{ + Widget w; + if (!menuBarWidget) return; + w = XtNameToWidget(menuBarWidget, "menuStep.Revert"); + if (w == NULL) { + DisplayError("menuStep.Revert", 0); + } else { + XtSetSensitive(w, !grey); + } +} + +void SetMenuEnables(enab) Enables *enab; { @@ -4997,7 +5025,7 @@ static int check_castle_draw(newb, oldb, rrow, rcol) return 0; } -static int damage[BOARD_SIZE][BOARD_SIZE]; +static int damage[BOARD_RANKS][BOARD_FILES]; /* * event handler for redrawing the board @@ -6247,7 +6275,7 @@ SendPositionSelection(Widget w, Atom *selection, Atom *target, char *selection_tmp; if (!selected_fen_position) return False; /* should never happen */ - if (*target == XA_STRING){ + if (*target == XA_STRING || *target == XA_UTF8_STRING(xDisplay)){ /* note: since no XtSelectionDoneProc was registered, Xt will * automatically call XtFree on the value returned. So have to * make a copy of it allocated with XtMalloc */ @@ -6256,9 +6284,22 @@ SendPositionSelection(Widget w, Atom *selection, Atom *target, *value_return=selection_tmp; *length_return=strlen(selection_tmp); - *type_return=XA_STRING; + *type_return=*target; *format_return = 8; /* bits per byte */ return True; + } else if (*target == XA_TARGETS(xDisplay)) { + Atom *targets_tmp = (Atom *) XtMalloc(2 * sizeof(Atom)); + targets_tmp[0] = XA_UTF8_STRING(xDisplay); + targets_tmp[1] = XA_STRING; + *value_return = targets_tmp; + *type_return = XA_ATOM; + *length_return = 2; + *format_return = 8 * sizeof(Atom); + if (*format_return > 32) { + *length_return *= *format_return / 32; + *format_return = 32; + } + return True; } else { return False; } @@ -6273,20 +6314,24 @@ void CopyPositionProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - int ret; - + /* + * Set both PRIMARY (the selection) and CLIPBOARD, since we don't + * have a notion of a position that is selected but not copied. + * See http://www.freedesktop.org/wiki/Specifications/ClipboardsWiki + */ if (selected_fen_position) free(selected_fen_position); selected_fen_position = (char *)PositionToFEN(currentMove, NULL); if (!selected_fen_position) return; - ret = XtOwnSelection(menuBarWidget, XA_PRIMARY, - CurrentTime, - SendPositionSelection, - NULL/* lose_ownership_proc */ , - NULL/* transfer_done_proc */); - if (!ret) { - free(selected_fen_position); - selected_fen_position=NULL; - } + XtOwnSelection(menuBarWidget, XA_PRIMARY, + CurrentTime, + SendPositionSelection, + NULL/* lose_ownership_proc */ , + NULL/* transfer_done_proc */); + XtOwnSelection(menuBarWidget, XA_CLIPBOARD(xDisplay), + CurrentTime, + SendPositionSelection, + NULL/* lose_ownership_proc */ , + NULL/* transfer_done_proc */); } /* function called when the data to Paste is ready */ @@ -6309,7 +6354,8 @@ void PastePositionProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - XtGetSelectionValue(menuBarWidget, XA_PRIMARY, XA_STRING, + XtGetSelectionValue(menuBarWidget, + appData.pasteSelection ? XA_PRIMARY: XA_CLIPBOARD(xDisplay), XA_STRING, /* (XtSelectionCallbackProc) */ PastePositionCB, NULL, /* client_data passed to PastePositionCB */ @@ -6328,7 +6374,7 @@ SendGameSelection(Widget w, Atom *selection, Atom *target, { char *selection_tmp; - if (*target == XA_STRING){ + if (*target == XA_STRING || *target == XA_UTF8_STRING(xDisplay)){ FILE* f = fopen(gameCopyFilename, "r"); long len; size_t count; @@ -6345,9 +6391,22 @@ SendGameSelection(Widget w, Atom *selection, Atom *target, selection_tmp[len] = NULLCHAR; *value_return = selection_tmp; *length_return = len; - *type_return = XA_STRING; + *type_return = *target; *format_return = 8; /* bits per byte */ return True; + } else if (*target == XA_TARGETS(xDisplay)) { + Atom *targets_tmp = (Atom *) XtMalloc(2 * sizeof(Atom)); + targets_tmp[0] = XA_UTF8_STRING(xDisplay); + targets_tmp[1] = XA_STRING; + *value_return = targets_tmp; + *type_return = XA_ATOM; + *length_return = 2; + *format_return = 8 * sizeof(Atom); + if (*format_return > 32) { + *length_return *= *format_return / 32; + *format_return = 32; + } + return True; } else { return False; } @@ -6367,11 +6426,21 @@ void CopyGameProc(w, event, prms, nprms) ret = SaveGameToFile(gameCopyFilename, FALSE); if (!ret) return; - ret = XtOwnSelection(menuBarWidget, XA_PRIMARY, - CurrentTime, - SendGameSelection, - NULL/* lose_ownership_proc */ , - NULL/* transfer_done_proc */); + /* + * Set both PRIMARY (the selection) and CLIPBOARD, since we don't + * have a notion of a game that is selected but not copied. + * See http://www.freedesktop.org/wiki/Specifications/ClipboardsWiki + */ + XtOwnSelection(menuBarWidget, XA_PRIMARY, + CurrentTime, + SendGameSelection, + NULL/* lose_ownership_proc */ , + NULL/* transfer_done_proc */); + XtOwnSelection(menuBarWidget, XA_CLIPBOARD(xDisplay), + CurrentTime, + SendGameSelection, + NULL/* lose_ownership_proc */ , + NULL/* transfer_done_proc */); } /* function called when the data to Paste is ready */ @@ -6402,7 +6471,8 @@ void PasteGameProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - XtGetSelectionValue(menuBarWidget, XA_PRIMARY, XA_STRING, + XtGetSelectionValue(menuBarWidget, + appData.pasteSelection ? XA_PRIMARY: XA_CLIPBOARD(xDisplay), XA_STRING, /* (XtSelectionCallbackProc) */ PasteGameCB, NULL, /* client_data passed to PasteGameCB */ @@ -7302,8 +7372,6 @@ void ShowThinkingProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - Arg args[16]; - appData.showThinking = !appData.showThinking; // [HGM] thinking: tken out of ShowThinkingEvent ShowThinkingEvent(); }