[gnome-software/wip/kalev/display-order] updates section: Update apps in display order
- From: Kalev Lember <klember src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/wip/kalev/display-order] updates section: Update apps in display order
- Date: Fri, 5 Oct 2018 11:14:08 +0000 (UTC)
commit 5263aee840c0cd14aff0b0bb214bca20cc5226ff
Author: Kalev Lember <klember redhat com>
Date: Fri Oct 5 13:07:27 2018 +0200
updates section: Update apps in display order
When passing the list of apps to update to the plugin loader, pass them
in the same order as they are displayed. This makes it look much nicer
when clicking on "Update All": instead of updating a random app down
below, they now get updated in order (or at least mostly, dependant
runtimes are still out of order).
src/gs-updates-section.c | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
---
diff --git a/src/gs-updates-section.c b/src/gs-updates-section.c
index 59b5c47a..a158ded9 100644
--- a/src/gs-updates-section.c
+++ b/src/gs-updates-section.c
@@ -324,6 +324,21 @@ _button_cancel_clicked_cb (GtkButton *button, GsUpdatesSection *self)
_update_buttons (self);
}
+static GsAppList *
+_get_listbox_apps (GsUpdatesSection *self)
+{
+ g_autoptr(GsAppList) apps = gs_app_list_new ();
+ g_autoptr(GList) listbox_children = NULL;
+
+ listbox_children = gtk_container_get_children (GTK_CONTAINER (self));
+ for (GList *l = listbox_children; l; l = l->next) {
+ GsAppRow *app_row = GS_APP_ROW (l->data);
+ gs_app_list_add (apps, gs_app_row_get_app (app_row));
+ }
+
+ return g_steal_pointer (&apps);
+}
+
static void
_button_update_all_clicked_cb (GtkButton *button, GsUpdatesSection *self)
{
@@ -331,12 +346,17 @@ _button_update_all_clicked_cb (GtkButton *button, GsUpdatesSection *self)
g_autoptr(GCancellable) cancellable = g_cancellable_new ();
g_autoptr(GsPluginJob) plugin_job = NULL;
GsUpdatesSectionUpdateHelper *helper = g_new0 (GsUpdatesSectionUpdateHelper, 1);
+ g_autoptr(GsAppList) sorted_list = NULL;
+
+ /* instead of using self->list, get the already-sorted apps back from
+ * the listbox to be able to update them in display order */
+ sorted_list = _get_listbox_apps (self);
helper->self = g_object_ref (self);
/* look at each app in turn */
- for (guint i = 0; i < gs_app_list_length (self->list); i++) {
- GsApp *app = gs_app_list_index (self->list, i);
+ for (guint i = 0; i < gs_app_list_length (sorted_list); i++) {
+ GsApp *app = gs_app_list_index (sorted_list, i);
if (gs_app_get_state (app) == AS_APP_STATE_UPDATABLE)
helper->do_reboot = TRUE;
if (gs_app_has_quirk (app, AS_APP_QUIRK_NEEDS_REBOOT))
@@ -345,7 +365,7 @@ _button_update_all_clicked_cb (GtkButton *button, GsUpdatesSection *self)
g_set_object (&self->cancellable, cancellable);
plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_UPDATE,
- "list", self->list,
+ "list", sorted_list,
"interactive", TRUE,
NULL);
gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]