0

I'm writing a little program in C on using VTE/GTK and trying to implement a scrollbar on my terminal, but the scrollbar is not showing. Here is the code:

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

static void on_terminal_scroll(GtkAdjustment *vadj, gpointer data) {
  VteTerminal *terminal = VTE_TERMINAL(data);
  double value = gtk_adjustment_get_value(vadj);
  vte_terminal_set_scrollback_lines(terminal, (gint)value);
}

int main(int argc, char *argv[]) {
  GtkWidget *window, *terminal, *scrolled_window;
  GtkAdjustment *vadj;
  gint scrollback_lines = 10000;

  gtk_init(&argc, &argv);

  // Create the main window
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_default_size(GTK_WINDOW(window), 640, 480);
  gtk_window_set_title(GTK_WINDOW(window), "My Terminal");

  // Create the terminal widget
  terminal = vte_terminal_new();
  vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), scrollback_lines);
  vte_terminal_set_size(VTE_TERMINAL(terminal), 80, 24);

  // Create the scrolled window and add the terminal to it
  scrolled_window = gtk_scrolled_window_new(NULL, NULL);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(terminal));

  // Add the scrollbar to the scrolled window
  vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrolled_window));
  gtk_widget_add_events(GTK_WIDGET(scrolled_window), GDK_SCROLL_MASK);
  g_signal_connect(vadj, "value-changed", G_CALLBACK(on_terminal_scroll), terminal);

  // Add the scrolled window to the main window and show everything
  gtk_container_add(GTK_CONTAINER(window), scrolled_window);
  gtk_widget_show_all(window);

  // Start the main loop
  gtk_main();

  return 0;
}

The code isn't working and I don't know why. Any help would be greatly appreciated.

0 Answers0