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: <https://gitlab.gnome.org/GNOME/calls/-/merge_requests/755>
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user