Re: GtkAdjustment question



Brian Masney wrote:

> I am working on porting an app from gtk 1.2 over to 2.0. I am using the
> TextView widget to display log messages to the user, and as new messages
> appear, I would automatically like the window to scroll. But, if the user goes
> to scroll up in the text view, I don't want it to scroll down automatically.
>
> The problem that I ran into if I display more than a page full of text in the
> text view before I enter the main loop, it won't automatically scroll. I've
> included a test program that inserts text on startup, and then every 1.5
> seconds, it will insert more text.
>
> static void
> log (char * message)
> {
>   GtkTextBuffer * textbuf;
>   GtkTextIter iter;
>   guint len;
>   int upd;
>
>   upd = logwdw_vadj->upper - logwdw_vadj->page_size == logwdw_vadj->value;

"=="? is there error here?                         ^^^^^^

>
>   printf ("upd %d, lower %.2f, upper %.2f, value %.2f, step_increment %.2f, page_increment %.2f, page_size %.2f\n", upd, logwdw_vadj->lower, logwdw_vadj->upper, logwdw_vadj->value, logwdw_vadj->step_increment, logwdw_vadj->page_increment, logwdw_vadj->page_size);
>
>   textbuf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logwdw));
>   len = gtk_text_buffer_get_char_count (textbuf);
>   gtk_text_buffer_get_iter_at_offset (textbuf, &iter, len);
>   gtk_text_buffer_insert (textbuf, &iter, message, -1);

you could just use

gtk_text_buffer_get_end_iter (textbuf, &iter);

also, there is note in API ref about gtk_text_view_scroll_to_iter() function
there you may find that char (line) counting for textbuffer is realized as idle
callback, so, if you are going to use scroll adjustment just after inserting text
you gonna fail. In my applycation I am using gtk_text_view_scroll_to_mark()

text_buffer_insert(), get_end_iter(), move_mark_to_iter(), scroll_to_mark()

>   if (upd)
>     gtk_adjustment_set_value (logwdw_vadj, logwdw_vadj->upper);
> }
>

-Andrew





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]