[gnome-software] gs-category-page: Block signal emission while reloading
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] gs-category-page: Block signal emission while reloading
- Date: Wed, 8 Apr 2020 20:02:23 +0000 (UTC)
commit 4e42df8318b98b3fd27c1a9f392b4dd150a011fe
Author: Philip Withnall <withnall endlessm com>
Date: Wed Apr 1 13:59:44 2020 +0100
gs-category-page: Block signal emission while reloading
Rather than disconnecting and reconnecting, which is more work and could
lead to signal handler leaks if, for example,
`gs_category_page_get_apps_cb()` returns early due to error.
Signed-off-by: Philip Withnall <withnall endlessm com>
src/gs-category-page.c | 44 +++++++++++++++++++++++++-------------------
1 file changed, 25 insertions(+), 19 deletions(-)
---
diff --git a/src/gs-category-page.c b/src/gs-category-page.c
index 10467436..dec34328 100644
--- a/src/gs-category-page.c
+++ b/src/gs-category-page.c
@@ -157,14 +157,8 @@ gs_category_page_get_apps_cb (GObject *source_object,
gtk_widget_set_can_focus (gtk_widget_get_parent (tile), FALSE);
}
- self->sort_rating_handler_id = g_signal_connect (self->sort_rating_button,
- "clicked",
- G_CALLBACK (sort_button_clicked),
- self);
- self->sort_name_handler_id = g_signal_connect (self->sort_name_button,
- "clicked",
- G_CALLBACK (sort_button_clicked),
- self);
+ g_signal_handler_unblock (self->sort_rating_button, self->sort_rating_handler_id);
+ g_signal_handler_unblock (self->sort_name_button, self->sort_name_handler_id);
}
static gboolean
@@ -321,17 +315,8 @@ gs_category_page_reload (GsPage *page)
gtk_widget_set_visible (self->subcats_sort_button, TRUE);
}
- if (self->sort_rating_handler_id > 0) {
- g_signal_handler_disconnect (self->sort_rating_button,
- self->sort_rating_handler_id);
- self->sort_rating_handler_id = 0;
- }
-
- if (self->sort_name_handler_id > 0) {
- g_signal_handler_disconnect (self->sort_name_button,
- self->sort_name_handler_id);
- self->sort_name_handler_id = 0;
- }
+ g_signal_handler_block (self->sort_rating_button, self->sort_rating_handler_id);
+ g_signal_handler_block (self->sort_name_button, self->sort_name_handler_id);
gs_container_remove_all (GTK_CONTAINER (self->category_detail_box));
@@ -516,6 +501,18 @@ gs_category_page_dispose (GObject *object)
g_cancellable_cancel (self->cancellable);
g_clear_object (&self->cancellable);
+ if (self->sort_rating_handler_id > 0) {
+ g_signal_handler_disconnect (self->sort_rating_button,
+ self->sort_rating_handler_id);
+ self->sort_rating_handler_id = 0;
+ }
+
+ if (self->sort_name_handler_id > 0) {
+ g_signal_handler_disconnect (self->sort_name_button,
+ self->sort_name_handler_id);
+ self->sort_name_handler_id = 0;
+ }
+
g_clear_object (&self->builder);
g_clear_object (&self->category);
g_clear_object (&self->subcategory);
@@ -543,6 +540,15 @@ gs_category_page_setup (GsPage *page,
gs_category_page_sort_flow_box_sort_func,
self, NULL);
+ self->sort_rating_handler_id = g_signal_connect (self->sort_rating_button,
+ "clicked",
+ G_CALLBACK (sort_button_clicked),
+ self);
+ self->sort_name_handler_id = g_signal_connect (self->sort_name_button,
+ "clicked",
+ G_CALLBACK (sort_button_clicked),
+ self);
+
adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_category));
gtk_container_set_focus_vadjustment (GTK_CONTAINER (self->category_detail_box), adj);
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]