Add scrolling of Move History
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 17 Oct 2012 11:53:03 +0000 (13:53 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Tue, 6 Nov 2012 13:13:54 +0000 (14:13 +0100)
To have access to the textview, its handle is now stored in the
Option.textValue field.

xhistory.c
xoptions.c

index fb5639c..cddf04e 100644 (file)
@@ -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);
 }
 
 
index f209698..04ad077 100644 (file)
@@ -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] );