Re: gtk_text_buffer_set_text and remember cursor/adjustments
- From: Steffen Gutmann <muibase yahoo com>
- To: gtk-app-devel-list gnome org
- Subject: Re: gtk_text_buffer_set_text and remember cursor/adjustments
- Date: Wed, 24 Dec 2008 05:59:22 -0800 (PST)
It seems the attachment got lost so I put it here in plain text:
-- Steffen
/*
** gcc -o textview textview.c -Wall `pkg-config gtk+-2.0 --cflags --libs`
*/
#include <string.h>
#include <gtk/gtk.h>
static void reload(GtkWidget *tv)
{
static char text[200000];
char *s = text;
int i;
for(i=0; i < 5000; i++) {
sprintf(s, "%*sLine %d\n", i%20, "", i);
s += strlen(s);
}
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv));
GtkTextMark *cursor = gtk_text_buffer_get_insert(buffer);
GtkTextIter iter;
gint offset;
gtk_text_buffer_get_iter_at_mark(buffer, &iter, cursor);
offset = gtk_text_iter_get_offset(&iter);
gtk_text_buffer_set_text(buffer, text, -1);
gtk_text_buffer_get_iter_at_offset(buffer, &iter, offset);
gtk_text_buffer_place_cursor(buffer, &iter);
gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(tv),
gtk_text_buffer_get_insert(buffer));
}
int main(int argc, char **argv)
{
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 500, 500);
g_signal_connect(window, "destroy", gtk_main_quit, NULL);
GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
GtkWidget *sw = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5);
GtkWidget *tv = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(sw), tv);
GtkWidget *button = gtk_button_new_with_label("Reload");
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, TRUE, 5);
GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
g_signal_connect_swapped(button, "clicked", G_CALLBACK(reload), tv);
reload(tv);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]