Scrolled text view problem
- From: Rob van der Leek <rob ricardis tudelft nl>
- To: gtk-app-devel-list gnome org
- Subject: Scrolled text view problem
- Date: Tue, 3 Aug 2004 00:56:51 +0200
Hello list,
How can I keep the viewport of a scrolled text view at the end of the
text buffer that is displayed by the text view? I tried using
gtk_text_view_scroll_to_mark() with a marker at the end of the text
buffer. Unfortunately this didn't work.
I've included my unsuccessful attempt. How must I modify this code so
that the most recent added line of text is always displayed in the
scrolled text view?
Regards, Rob
/**
* Compile this like:
* $ gcc `pkg-config --cflags --libs gtk+-2.0` t.c -o t
*/
#include <gtk/gtk.h>
static GtkWidget
*main_window,
*scrolled_window,
*text_view;
static int count = 0;
gint
add_text(gpointer data)
{
GtkTextBuffer *text_buffer = gtk_text_view_get_buffer(
GTK_TEXT_VIEW(text_view));
GtkTextIter text_iter;
gtk_text_buffer_get_end_iter(text_buffer, &text_iter);
if (count == 0) {
gtk_text_buffer_insert(text_buffer, &text_iter, "First line\n", -1);
}
else if (count % 5 == 0) {
gtk_text_buffer_insert(text_buffer, &text_iter, "world\n", -1);
}
else {
gtk_text_buffer_insert(text_buffer, &text_iter, "hello\n", -1);
}
count++;
/* - - DOES NOT WORK LIKE I EXPECT */
GtkTextMark *mark = gtk_text_buffer_get_insert(text_buffer);
gtk_text_buffer_move_mark(text_buffer, mark, &text_iter);
gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text_view), mark, 0.0,
FALSE, 0, 0);
/* - - */
return TRUE;
}
int
main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(main_window), 200, 200);
gtk_window_set_position(GTK_WINDOW(main_window), GTK_WIN_POS_CENTER);
scrolled_window = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
text_view = gtk_text_view_new();
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD);
gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
text_view);
gtk_container_add(GTK_CONTAINER(main_window), scrolled_window);
g_signal_connect(G_OBJECT(main_window), "delete_event",
G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(main_window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(main_window);
g_timeout_add(500, add_text, NULL);
gtk_main();
return 0;
}
--
Rob van der Leek | rob(at)ricardis(dot)tudelft(dot)nl
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]