From: H.G. Muller Date: Wed, 17 Oct 2012 11:53:03 +0000 (+0200) Subject: Add scrolling of Move History X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=da51e2493eb3cfdf87a21946857be26d90aa7480;p=xboard.git Add scrolling of Move History To have access to the textview, its handle is now stored in the Option.textValue field. --- diff --git a/xhistory.c b/xhistory.c index fb5639c..cddf04e 100644 --- a/xhistory.c +++ b/xhistory.c @@ -52,7 +52,7 @@ void HighlightMove (int from, int to, Boolean highlight) { static int init = 0; - GtkTextIter start, end; + static GtkTextIter start, end; if(!init) { init = 1; @@ -67,23 +67,9 @@ HighlightMove (int from, int to, Boolean highlight) void ScrollToCurrent (int caretPos) { -#ifdef TODO_GTK - Arg args[10]; - char *s; - int len; - GetWidgetText(&historyOptions[0], &s); - 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); -#endif + static GtkTextIter iter; + gtk_text_buffer_get_iter_at_offset((GtkTextBuffer *) historyOptions[0].handle, &iter, caretPos); + gtk_text_view_scroll_to_iter((GtkTextView *) historyOptions[0].textValue, &iter, 0.0, 0, 0.5, 0.5); } diff --git a/xoptions.c b/xoptions.c index f209698..04ad077 100644 --- a/xoptions.c +++ b/xoptions.c @@ -1231,6 +1231,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent else gtk_text_buffer_set_text (textbuffer, "", -1); option[i].handle = (void*)textbuffer; + option[i].textValue = (char*)textview; if(option[i].choice) { // textviews can request a handler for mouse events in the choice field g_signal_connect(textview, "button-press-event", G_CALLBACK (MemoEvent), (gpointer) &option[i] ); g_signal_connect(textview, "button-release-event", G_CALLBACK (MemoEvent), (gpointer) &option[i] );