From d9e6fb3717fff3bcea1ad9d77585d86444251da4 Mon Sep 17 00:00:00 2001 From: Evangelos Ribeiro Tzaras Date: Wed, 11 Sep 2024 16:52:57 +0200 Subject: [PATCH] record-row: Prefer g_signal_connect_object() over a plain connect() Apparently the slice list model in the history box rebuilds the whole list when a single new record gets added. Additionally, the "pressed" signal gets emitted on the GtkGestureLongPress controller even when the call button is tapped (i.e. should not have been pressed down for longer than the required timeout). This then causes the callback to be invoked with a disposed record row. This commit ensures the signals get properly disconnected even in the face of unforeseen cleanup of the record row. Helps with https://gitlab.gnome.org/GNOME/calls/-/issues/666 Part-of: --- src/calls-call-record-row.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/calls-call-record-row.c b/src/calls-call-record-row.c index dfbc305..83dffa2 100644 --- a/src/calls-call-record-row.c +++ b/src/calls-call-record-row.c @@ -653,12 +653,16 @@ calls_call_record_row_init (CallsCallRecordRow *self) gesture = gtk_gesture_click_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); - g_signal_connect (gesture, "pressed", G_CALLBACK (calls_call_record_row_button_press_event), self); + g_signal_connect_object (gesture, "pressed", + G_CALLBACK (calls_call_record_row_button_press_event), + self, G_CONNECT_AFTER); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (gesture)); gesture = gtk_gesture_long_press_new (); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), TRUE); - g_signal_connect (gesture, "pressed", G_CALLBACK (on_long_pressed), self); + g_signal_connect_object (gesture, "pressed", + G_CALLBACK (on_long_pressed), + self, G_CONNECT_AFTER); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (gesture)); }