int caretPos;
if(lastCurrent <= currLast) DoHighlight( lastCurrent, FALSE );
- DoHighlight( currCurrent, TRUE );
lastFirst = currFirst;
lastLast = currLast;
}
ScrollToCurrent(caretPos);
+ DoHighlight( currCurrent, TRUE ); // [HGM] moved last, because in X some scrolling methods spoil highlighting
}
// back-end. Must be called as double-click call-back on move-history text edit
void DoClearMemo(int which)
{
- Widget edit;
-
- edit = XtNameToWidget(engineOutputShell, which ? "*form2.text" : "*form.text");
- XtCallActionProc(edit, "select-all", NULL, NULL, 0);
- XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);
+ Widget edit = XtNameToWidget(engineOutputShell, which ? "*form2.text" : "*form.text");
+ Arg arg;
+// XtCallActionProc(edit, "select-all", NULL, NULL, 0);
+// XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);
+ XtSetArg(arg, XtNstring, ""); // clear without disturbing selection!
+ XtSetValues(edit, &arg, 1);
}
// cloned from CopyPositionProc. Abuse selected_fen_position to hold selection
void MemoContentUpdated P((void));
void FindMoveByCharIndex P(( int char_index ));
-void AppendText P((Option *opt, char *s));
+int 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));
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()
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);
}
char *engineNr[] = { N_("First Engine"), N_("Second Engine"), NULL };
char *engineList[100] = {" "}, *engineMnemonic[100] = {""};
-void AppendText(Option *opt, char *s)
+int AppendText(Option *opt, char *s)
{
XawTextBlock t;
+ char *v;
+ int len;
+ GetWidgetText(opt, &v);
+ len = strlen(v);
t.ptr = s; t.firstPos = 0; t.length = strlen(s); t.format = XawFmt8Bit;
- XawTextReplace(opt->handle, 9999, 9999, &t);
+ XawTextReplace(opt->handle, len, len, &t);
+ return len;
}
void AddLine(Option *opt, char *s)
void ClearTextWidget(Option *opt)
{
- XtCallActionProc(opt->handle, "select-all", NULL, NULL, 0);
- XtCallActionProc(opt->handle, "kill-selection", NULL, NULL, 0);
+// XtCallActionProc(opt->handle, "select-all", NULL, NULL, 0);
+// XtCallActionProc(opt->handle, "kill-selection", NULL, NULL, 0);
+ Arg arg;
+ XtSetArg(arg, XtNstring, ""); // clear without disturbing selection!
+ XtSetValues(opt->handle, &arg, 1);
}
void ClearComment(int n)