#include #include #include #include #include static GtkTextBuffer *buffer; static GtkTextView *view; static void * test_func (void *data) { int i = 0; GtkTextIter end; GtkTextMark *mark; while (TRUE) { char temp [BUFSIZ]; sprintf (temp, "TEST: %d\n", ++i); gtk_text_buffer_get_end_iter (buffer, &end); gtk_text_buffer_insert (buffer, &end, temp, strlen (temp)); gtk_text_view_scroll_to_iter (view, &end, 0.0, FALSE, 0.0, 1.0); sleep (1); } } int main (void) { GtkWindow *window; GtkVBox *vbox; GtkScrolledWindow *sw; pthread_t thread; gtk_init (0, NULL); window = (GtkWindow *) gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (window, "Log Viewer"); gtk_window_set_default_size (window, 720, 250); vbox = (GtkVBox *) gtk_vbox_new (FALSE, 0); buffer = gtk_text_buffer_new (gtk_text_tag_table_new ()); view = (GtkTextView *) gtk_text_view_new_with_buffer (buffer); gtk_text_view_set_editable (view, FALSE); gtk_text_view_set_cursor_visible (view, TRUE); sw = (GtkScrolledWindow *) gtk_scrolled_window_new (NULL, NULL); gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (view)); gtk_container_add (GTK_CONTAINER (vbox), GTK_WIDGET (sw)); gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (vbox)); gtk_widget_show_all (GTK_WIDGET (window)); pthread_create (&thread, 0, test_func, buffer); gtk_main (); return 0; }