From 4df3ea005dac748d42ff7aa84d30a78afd89a281 Mon Sep 17 00:00:00 2001 From: Evangelos Ribeiro Tzaras Date: Wed, 8 Dec 2021 10:25:15 +0100 Subject: [PATCH] record-row: Only create popover when needed Creating a popover for each CallsCallRecordRow comes with a big performance hit when scrolling the history, so we should avoid doing this. Fixes #198 --- src/calls-call-record-row.c | 22 +++++++++++++++------- src/ui/call-record-row.ui | 3 --- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/calls-call-record-row.c b/src/calls-call-record-row.c index 7d51aa8..d11d9bd 100644 --- a/src/calls-call-record-row.c +++ b/src/calls-call-record-row.c @@ -335,10 +335,23 @@ setup_contact (CallsCallRecordRow *self) static void -context_menu (GtkWidget *self, +context_menu (GtkWidget *widget, GdkEvent *event) { - gtk_popover_popup (CALLS_CALL_RECORD_ROW (self)->popover); + CallsCallRecordRow *self; + + g_assert (CALLS_IS_CALL_RECORD_ROW (widget)); + + self = CALLS_CALL_RECORD_ROW (widget); + + if (!self->popover) { + self->popover = GTK_POPOVER (gtk_popover_new (widget)); + gtk_popover_bind_model (self->popover, + G_MENU_MODEL (self->context_menu), + "row-history"); + } + + gtk_popover_popup (self->popover); } @@ -498,7 +511,6 @@ calls_call_record_row_class_init (CallsCallRecordRowClass *klass) gtk_widget_class_bind_template_child (widget_class, CallsCallRecordRow, button); gtk_widget_class_bind_template_child (widget_class, CallsCallRecordRow, event_box); - gtk_widget_class_bind_template_child (widget_class, CallsCallRecordRow, popover); gtk_widget_class_bind_template_child (widget_class, CallsCallRecordRow, context_menu); } @@ -561,10 +573,6 @@ calls_call_record_row_init (CallsCallRecordRow *self) self->gesture = gtk_gesture_long_press_new (GTK_WIDGET (self->event_box)); gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (self->gesture), TRUE); g_signal_connect (self->gesture, "pressed", G_CALLBACK (long_pressed), self); - - gtk_popover_bind_model (self->popover, - G_MENU_MODEL (self->context_menu), - "row-history"); } diff --git a/src/ui/call-record-row.ui b/src/ui/call-record-row.ui index 15a28a1..99f4a1c 100644 --- a/src/ui/call-record-row.ui +++ b/src/ui/call-record-row.ui @@ -97,9 +97,6 @@ - - CallsCallRecordRow -