GTK текстовый просмотр с автопрокруткой вниз

Я пытаюсь построить приложение окна, используя GTK с текстом журнала с полосой прокрутки в нем. Мне бы хотелось, чтобы при нажатии кнопки «Отправить» программа добавляла в журнал сообщение, а когда текст больше, чем текстовое поле, полоса прокрутки размещается так, чтобы показывать нижнюю часть текста. При текущем коде, если я нажимаю кнопку с частотой более 2 Гц, полоса прокрутки идет ПОЧТИ почти, а если я нажимаю медленнее, полоса прокрутки не перемещается вообще, и я не вижу новые сообщения.

Вот мой код:

#include <gtk/gtk.h>
#include <iostream>

using namespace std;

GtkWidget *text_box;
GtkTextBuffer *buffer;
GtkTextIter iter;

static void print_hello (GtkWidget *widget, gpointer data){
gtk_text_buffer_insert(buffer, &iter, "hello\n", -1);
gtk_text_buffer_get_end_iter( buffer, &iter );
gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(text_box), &iter, 0.0, true, 0.0, 1.0);
}

static void activate (GtkApplication *app, gpointer user_data){

GtkWidget *window;
GtkWidget *fixed;
GtkWidget *button1;
GtkWidget *button2;
GtkWidget *scrolled_window;

/* Create a new window */
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "UART Transmitter");
gtk_window_set_default_size (GTK_WINDOW (window), 300, 400);

/* Create a Fixed Container */
fixed = gtk_fixed_new ();
gtk_container_add (GTK_CONTAINER (window), fixed);
gtk_widget_show (fixed);

/* Creates new button1*/
button1 = gtk_button_new_with_label ("Send");
gtk_widget_set_size_request(button1, 100 ,50);
g_signal_connect (button1, "clicked",G_CALLBACK (print_hello), (gpointer) fixed);
gtk_fixed_put (GTK_FIXED (fixed), button1, 20, 30);
gtk_widget_show (button1);
gtk_widget_show_all (window);

/* Creates new button2*/
button2 = gtk_button_new_with_label ("Close");
gtk_widget_set_size_request(button2, 100 ,50);
g_signal_connect_swapped (button2, "clicked", G_CALLBACK (gtk_widget_destroy), window);
gtk_fixed_put (GTK_FIXED (fixed), button2, 170, 30);
gtk_widget_show (button2);

/* Creates scroll text field*/
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_set_size_request(scrolled_window, 260 ,180);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
text_box = gtk_text_view_new();
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_box));
gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0);
gtk_text_buffer_insert(buffer, &iter, "BIOBUS terminal\n", -1);
gtk_container_add (GTK_CONTAINER (scrolled_window), text_box);
gtk_fixed_put (GTK_FIXED (fixed), scrolled_window, 20, 200);

gtk_widget_show_all (window);
}

int main (int    argc, char **argv){

GtkApplication *app;
int status;

app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);

return status;
}

Почему она не помещает полосу прокрутки внизу? Как мне это исправить?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …