Fix: crash on connect - invalid VTE signal 'size-changed'

The signal 'size-changed' does not exist in VTE 2.91. This caused a
GLib-GObject-CRITICAL warning followed by a segfault when connecting.

Fixed by replacing the VTE signal with GTK's 'size-allocate' signal
on the terminal widget, which correctly detects terminal size changes
and resizes the remote PTY accordingly.
This commit is contained in:
x3
2026-09-07 16:02:35 +00:00
parent a71a45b678
commit d85726043e
2 changed files with 7 additions and 4 deletions
+6 -3
View File
@@ -17,7 +17,7 @@ SshTerminal::SshTerminal()
gtk_box_pack_start(GTK_BOX(vte_box_), GTK_WIDGET(terminal_), TRUE, TRUE, 0);
gtk_widget_show_all(vte_box_);
g_signal_connect(terminal_, "size-changed", G_CALLBACK(on_size_changed), this);
g_signal_connect(terminal_, "size-allocate", G_CALLBACK(on_size_changed), this);
}
SshTerminal::~SshTerminal() {
@@ -28,10 +28,13 @@ SshTerminal::~SshTerminal() {
}
}
void SshTerminal::on_size_changed(VteTerminal* term, guint cols, guint rows, gpointer data) {
(void)term;
void SshTerminal::on_size_changed(GtkWidget* widget, GtkAllocation* alloc, gpointer data) {
(void)alloc;
auto* self = static_cast<SshTerminal*>(data);
if (self->channel_ && self->connected_) {
VteTerminal* term = VTE_TERMINAL(widget);
guint cols = vte_terminal_get_column_count(term);
guint rows = vte_terminal_get_row_count(term);
ssh_channel_change_pty_size(self->channel_, cols, rows);
}
}
+1 -1
View File
@@ -25,7 +25,7 @@ public:
private:
void cleanup();
static gpointer io_thread_func(gpointer data);
static void on_size_changed(VteTerminal* term, guint cols, guint rows, gpointer data);
static void on_size_changed(GtkWidget* widget, GtkAllocation* alloc, gpointer data);
GtkWidget* vte_box_;
VteTerminal* terminal_;