X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xhistory.c;h=7bd3cb7c903e07d02a422ad345693aaf347704d5;hb=a3e7cc9b3eb04ffb69fd73b47c06758f73316373;hp=7dc3c9f6eb0891040b450830dff6e940b1008e7c;hpb=2c2c75c017b5d8c3ce7f6b06e4b5fc3a5dc92fde;p=xboard.git diff --git a/xhistory.c b/xhistory.c index 7dc3c9f..7bd3cb7 100644 --- a/xhistory.c +++ b/xhistory.c @@ -23,7 +23,6 @@ #include #include -#include #include #include @@ -48,6 +47,8 @@ #include "common.h" #include "frontend.h" #include "backend.h" +#include "xhistory.h" +#include "xboard.h" #include "gettext.h" #ifdef ENABLE_NLS @@ -58,26 +59,20 @@ # define N_(s) s #endif -// templates for calls into back-end +// templates for calls into back-end (= history.c; should be moved to history.h header shared with it!) void RefreshMemoContent P((void)); void MemoContentUpdated P((void)); void FindMoveByCharIndex P(( int char_index )); -void AppendText P((Option *opt, char *s)); -int GenericPopUp P((Option *option, char *title, int dlgNr)); -void MarkMenu P((char *item, int dlgNr)); -void GetWidgetText P((Option *opt, char **buf)); - +// variables in xoptions.c extern Option historyOptions[]; -extern Widget shells[10]; -extern Boolean shellUp[10]; // ------------- low-level front-end actions called by MoveHistory back-end ----------------- void HighlightMove( int from, int to, Boolean highlight ) { - if(!highlight) from = to = 0; - XawTextSetSelection( historyOptions[0].handle, from, to ); // for lack of a better method, use selection for highighting + if(highlight) + XawTextSetSelection( historyOptions[0].handle, from, to ); // for lack of a better method, use selection for highighting } void ClearHistoryMemo() @@ -89,21 +84,25 @@ void ClearHistoryMemo() // the colorNr argument says 0 = font-default, 1 = gray int AppendToHistoryMemo( char * text, int bold, int colorNr ) { - Arg args[10]; - char *s; - GetWidgetText(&historyOptions[0], &s); - AppendText(&historyOptions[0], text); // for now ignore bold & color stuff, as Xaw cannot handle that - return strlen(s); + return AppendText(&historyOptions[0], text); // for now ignore bold & color stuff, as Xaw cannot handle that } void ScrollToCurrent(int caretPos) { Arg args[10]; char *s; + int len; GetWidgetText(&historyOptions[0], &s); - if(caretPos < 0 || caretPos > strlen(s)) caretPos = strlen(s); - XtSetArg(args[0], XtNdisplayCaret, False); - XtSetArg(args[1], XtNinsertPosition, caretPos); // this triggers scrolling in Xaw + len = strlen(s); + if(caretPos < 0 || caretPos > len) caretPos = len; + if(caretPos > len-30) { // scroll to end, which causes no flicker + static XEvent event; + XtCallActionProc(historyOptions[0].handle, "end-of-file", &event, NULL, 0); + return; + } + // the following leads to a very annoying flicker, even when no scrolling is done at all. + XtSetArg(args[0], XtNinsertPosition, caretPos); // this triggers scrolling in Xaw + XtSetArg(args[1], XtNdisplayCaret, False); XtSetValues(historyOptions[0].handle, args, 2); } @@ -163,13 +162,3 @@ HistoryShowProc(w, event, prms, nprms) } else PopDown(7); ToNrEvent(currentMove); } - -// duplicate of code in winboard.c, so an move to back-end! -void -HistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current ) -{ - MoveHistorySet( movelist, first, last, current, pvInfoList ); - - EvalGraphSet( first, last, current, pvInfoList ); -} -