[gnome-software/1529-in-search-the-first-app-opened-is-subsequently-opened-in-place-of-other-apps] gs-details-page: Cancel ongoing app details load when switching app



commit 641e3ce6be03f49de5f18d7c48fc72486f676ce2
Author: Milan Crha <mcrha redhat com>
Date:   Tue Mar 15 08:10:45 2022 +0100

    gs-details-page: Cancel ongoing app details load when switching app
    
    Cancel any ongoing app details load when switching to a different app,
    thus any slow responses won't overwrite page content. That could happen
    when the lookup for app alternatives took too long. Once finished, it
    could change the selected app from the returned list, which was not
    relevant to the currently selected app.
    
    Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1529

 src/gs-details-page.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
---
diff --git a/src/gs-details-page.c b/src/gs-details-page.c
index 2fef6e4f7..591b483e5 100644
--- a/src/gs-details-page.c
+++ b/src/gs-details-page.c
@@ -1691,12 +1691,16 @@ static void
 gs_details_page_load_stage1 (GsDetailsPage *self)
 {
        g_autoptr(GsPluginJob) plugin_job = NULL;
+       g_autoptr(GCancellable) cancellable = g_cancellable_new ();
 
        /* update UI */
        gs_page_switch_to (GS_PAGE (self));
        gs_page_scroll_up (GS_PAGE (self));
        gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_LOADING);
 
+       g_cancellable_cancel (self->cancellable);
+       g_set_object (&self->cancellable, cancellable);
+
        /* get extra details about the app */
        plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
                                         "app", self->app,
@@ -2096,7 +2100,7 @@ gs_details_page_setup (GsPage *page,
        self->shell = shell;
 
        self->plugin_loader = g_object_ref (plugin_loader);
-       self->cancellable = g_object_ref (cancellable);
+       self->cancellable = g_cancellable_new ();
 
        /* hide some UI when offline */
        g_signal_connect_object (self->plugin_loader, "notify::network-available",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]