From 2b625f33fc3f935e594cd542af85ddab6b1f0bb8 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sat, 21 Dec 2024 18:42:07 -0500 Subject: [PATCH 01/10] Set vexpand property to false to avoid extra unnecesary space in listbox. --- src/Views/AppListUpdateView.vala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index fea6c2bae..026eabf8f 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -219,7 +219,8 @@ namespace AppCenter.Views { flatpak_backend.notify ["working"].connect (() => { if (flatpak_backend.working) { updated_revealer.reveal_child = false; - + list_box.vexpand = false; + switch (flatpak_backend.job_type) { case GET_PREPARED_PACKAGES: case GET_UPDATES: From a88bcd43b05ec4e59571610a5899025a6687c012 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sat, 21 Dec 2024 18:47:54 -0500 Subject: [PATCH 02/10] Disable refresh_menuitem when clicking it an renabling it when job is complete This is done to avoid multiple update check commands that could create duplicated update element in the list. --- src/Views/AppListUpdateView.vala | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index 026eabf8f..9463f23a5 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -135,6 +135,9 @@ namespace AppCenter.Views { child = refresh_accellabel }; refresh_menuitem.add_css_class (Granite.STYLE_CLASS_MENUITEM); + refresh_menuitem.clicked.connect (() => { + refresh_menuitem.set_sensitive (false); + }); var menu_popover_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); menu_popover_box.append (automatic_updates_button); @@ -218,6 +221,7 @@ namespace AppCenter.Views { flatpak_backend.notify ["working"].connect (() => { if (flatpak_backend.working) { + refresh_menuitem.set_sensitive (false); updated_revealer.reveal_child = false; list_box.vexpand = false; @@ -233,6 +237,7 @@ namespace AppCenter.Views { break; } } else { + refresh_menuitem.set_sensitive (true); list_box.set_placeholder (null); } }); From be152c5901d680ccfd5bb6633cf900a613e26b94 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sat, 21 Dec 2024 20:46:53 -0500 Subject: [PATCH 03/10] Remove updated and installed list along with labels when checking for updates. This commit also toggles the updates message properly when trying to check new updates. Even when the app closes. This removes all installed and updated apps so iit clears the view whn tyring to update again. --- src/Views/AppListUpdateView.vala | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index 9463f23a5..ecb690d25 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -33,6 +33,7 @@ namespace AppCenter.Views { private Gtk.Label updated_label; private Gtk.SizeGroup action_button_group; private ListStore installed_liststore; + private Granite.HeaderLabel installed_header; private Widgets.SizeLabel size_label; private bool updating_all_apps = false; private Cancellable? refresh_cancellable = null; @@ -93,7 +94,7 @@ namespace AppCenter.Views { list_box.bind_model (update_manager.updates_liststore, create_row_from_package); list_box.set_placeholder (loading_view); - var installed_header = new Granite.HeaderLabel (_("Up to Date")) { + installed_header = new Granite.HeaderLabel (_("Up to Date")) { margin_top = 12, margin_end = 12, margin_bottom = 12, @@ -137,6 +138,13 @@ namespace AppCenter.Views { refresh_menuitem.add_css_class (Granite.STYLE_CLASS_MENUITEM); refresh_menuitem.clicked.connect (() => { refresh_menuitem.set_sensitive (false); + update_manager.updates_liststore.remove_all (); + installed_liststore.remove_all (); + + header_revealer.reveal_child = false; + updated_revealer.reveal_child = false; + installed_header.visible = false; + list_box.vexpand = true; }); var menu_popover_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); @@ -181,14 +189,11 @@ namespace AppCenter.Views { /// TRANSLATORS: the name of the Installed Apps view title = C_("view", "Installed"); - on_installed_changed.begin ((obj, res) => { - on_installed_changed.end (res); - installed_header.visible = true; - }); - - update_manager.updates_liststore.items_changed.connect (() => { + update_manager.updates_liststore.items_changed.connect ((position, removed, added) => { Idle.add (() => { - on_updates_changed (); + if (added > 0) { + on_updates_changed (); + } return GLib.Source.REMOVE; }); }); @@ -222,9 +227,9 @@ namespace AppCenter.Views { flatpak_backend.notify ["working"].connect (() => { if (flatpak_backend.working) { refresh_menuitem.set_sensitive (false); + header_revealer.reveal_child = false; updated_revealer.reveal_child = false; - list_box.vexpand = false; - + switch (flatpak_backend.job_type) { case GET_PREPARED_PACKAGES: case GET_UPDATES: @@ -239,6 +244,7 @@ namespace AppCenter.Views { } else { refresh_menuitem.set_sensitive (true); list_box.set_placeholder (null); + on_updates_changed (); } }); @@ -301,6 +307,8 @@ namespace AppCenter.Views { unowned var flatpak_backend = AppCenterCore.FlatpakBackend.get_default (); var installed_apps = yield flatpak_backend.get_installed_applications (refresh_cancellable); + installed_header.visible = !installed_apps.is_empty; + list_box.vexpand = installed_apps.is_empty; foreach (var package in installed_apps) { if (package.state != UPDATE_AVAILABLE && package.kind != ADDON && package.kind != FONT) { @@ -378,9 +386,11 @@ namespace AppCenter.Views { } public void clear () { + var update_manager = AppCenterCore.UpdateManager.get_default (); // Free widgets with all their connected signals https://github.com/elementary/appcenter/pull/846 list_box.remove_all (); installed_flowbox.remove_all (); + update_manager.updates_liststore.remove_all (); } } } From 6f6b9cc150c2eedaa50bc8bd72f97714293830f5 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sat, 21 Dec 2024 20:49:29 -0500 Subject: [PATCH 04/10] Removing the placeholder methods. Sionce this only appear when lists are empty, there not need to explicitly remove since we arealready removing list data. --- src/Views/AppListUpdateView.vala | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index ecb690d25..ffc1b529e 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -229,21 +229,8 @@ namespace AppCenter.Views { refresh_menuitem.set_sensitive (false); header_revealer.reveal_child = false; updated_revealer.reveal_child = false; - - switch (flatpak_backend.job_type) { - case GET_PREPARED_PACKAGES: - case GET_UPDATES: - case REFRESH_CACHE: - case UPDATE_PACKAGE: - list_box.set_placeholder (loading_view); - break; - default: - list_box.set_placeholder (null); - break; - } } else { refresh_menuitem.set_sensitive (true); - list_box.set_placeholder (null); on_updates_changed (); } }); From 0a7e5413317cb3a3015637b18226c08297c8b9b6 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sat, 21 Dec 2024 20:52:14 -0500 Subject: [PATCH 05/10] Fixed a release notes icon bug when installing/cancelling and update The release notes icon would appear when canelling an update of an application that doew nost have a description (and thus the icon should not appear) --- src/Widgets/AppContainers/InstalledPackageRowGrid.vala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Widgets/AppContainers/InstalledPackageRowGrid.vala b/src/Widgets/AppContainers/InstalledPackageRowGrid.vala index 7b46442cc..223a8f5ea 100644 --- a/src/Widgets/AppContainers/InstalledPackageRowGrid.vala +++ b/src/Widgets/AppContainers/InstalledPackageRowGrid.vala @@ -122,7 +122,9 @@ public class AppCenter.Widgets.InstalledPackageRowGrid : AbstractPackageRowGrid release_button_revealer.reveal_child = true; } } else { - release_button_revealer.reveal_child = true; + if (newest.get_description () != null) { + release_button_revealer.reveal_child = true; + } } } From 9be7fd20fc48b4f0d9658bfdf9f50117229e7f91 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sat, 21 Dec 2024 21:38:07 -0500 Subject: [PATCH 06/10] Fix for #529 Appcenter sometimes opens the updates view. This also fix an issue where installed apps would not show up if your did not open the AppListUpdateView until the update worker ended. --- src/Application.vala | 1 + src/MainWindow.vala | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Application.vala b/src/Application.vala index abd65971f..912f4d1cd 100644 --- a/src/Application.vala +++ b/src/Application.vala @@ -225,6 +225,7 @@ public class AppCenter.App : Gtk.Application { if (show_updates) { ((MainWindow) active_window).go_to_installed (); + show_updates = false; } active_window.present (); diff --git a/src/MainWindow.vala b/src/MainWindow.vala index b7b31f46d..2f05e7534 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -145,6 +145,14 @@ public class AppCenter.MainWindow : Gtk.ApplicationWindow { backend.notify["job-type"].connect (update_overlaybar_label); overlaybar.label = backend.job_type.to_string (); + + if (installed_view == null) { + installed_view = new Views.AppListUpdateView (); + + installed_view.show_app.connect ((package) => { + show_package (package); + }); + } } public override bool close_request () { @@ -192,14 +200,6 @@ public class AppCenter.MainWindow : Gtk.ApplicationWindow { } public void go_to_installed () { - if (installed_view == null) { - installed_view = new Views.AppListUpdateView (); - - installed_view.show_app.connect ((package) => { - show_package (package); - }); - } - if (installed_view.parent != null) { navigation_view.pop_to_page (installed_view); } else { From b09c33b3dfb60f3d87e5bc8fe9d82dfa66a4017a Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sun, 22 Dec 2024 00:08:52 -0500 Subject: [PATCH 07/10] Use the refrsh action directlt action to update the refresh_menuitem button instead of action_name. This helps to use the shortuct to update elements and makes the sentiive property of the button more consistent when it starts and ends. --- src/Views/AppListUpdateView.vala | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index ffc1b529e..7c16c07e0 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -132,15 +132,19 @@ namespace AppCenter.Views { ); var refresh_menuitem = new Gtk.Button () { - action_name = "app.refresh", - child = refresh_accellabel + child = refresh_accellabel, + sensitive = false }; refresh_menuitem.add_css_class (Granite.STYLE_CLASS_MENUITEM); refresh_menuitem.clicked.connect (() => { - refresh_menuitem.set_sensitive (false); + activate_action ("app.refresh", null); + }); + + AppCenter.App.refresh_action.activate.connect (() => { update_manager.updates_liststore.remove_all (); installed_liststore.remove_all (); - + + refresh_menuitem.sensitive = false; header_revealer.reveal_child = false; updated_revealer.reveal_child = false; installed_header.visible = false; @@ -226,15 +230,16 @@ namespace AppCenter.Views { flatpak_backend.notify ["working"].connect (() => { if (flatpak_backend.working) { - refresh_menuitem.set_sensitive (false); + refresh_menuitem.sensitive = false; header_revealer.reveal_child = false; updated_revealer.reveal_child = false; } else { - refresh_menuitem.set_sensitive (true); + refresh_menuitem.sensitive = true; on_updates_changed (); } }); + automatic_updates_button.notify["active"].connect (() => { if (automatic_updates_button.active) { update_manager.update_cache.begin (true); From b325dc355802f0f73faccc2c63a2afd6981dc66b Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sun, 22 Dec 2024 00:19:49 -0500 Subject: [PATCH 08/10] Move the clearing of the update_liststore to a better place. Apartfor being a better palce organizational asking. Thsi also avoids a bug when if you the application while listing updates, it will show a bad update list badge and also would keep the incomplete update list when re-opening the app. --- src/Core/UpdateManager.vala | 1 + src/Views/AppListUpdateView.vala | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Core/UpdateManager.vala b/src/Core/UpdateManager.vala index 713f5719e..2dd7db5d1 100644 --- a/src/Core/UpdateManager.vala +++ b/src/Core/UpdateManager.vala @@ -227,6 +227,7 @@ public class AppCenterCore.UpdateManager : Object { } public async void update_cache (bool force = false) { + updates_liststore.remove_all (); cancellable.reset (); if (Utils.is_running_in_demo_mode () || Utils.is_running_in_guest_session ()) { diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index 7c16c07e0..bef18f6ad 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -141,7 +141,6 @@ namespace AppCenter.Views { }); AppCenter.App.refresh_action.activate.connect (() => { - update_manager.updates_liststore.remove_all (); installed_liststore.remove_all (); refresh_menuitem.sensitive = false; @@ -378,11 +377,9 @@ namespace AppCenter.Views { } public void clear () { - var update_manager = AppCenterCore.UpdateManager.get_default (); // Free widgets with all their connected signals https://github.com/elementary/appcenter/pull/846 list_box.remove_all (); installed_flowbox.remove_all (); - update_manager.updates_liststore.remove_all (); } } } From ffbdb113459be1399db4a664bafe162ff68bbbd1 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sun, 22 Dec 2024 00:32:07 -0500 Subject: [PATCH 09/10] Restore the placeholder setup. This is needed for when there are no updates. oops. --- src/Views/AppListUpdateView.vala | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index bef18f6ad..53bb16c33 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -142,6 +142,7 @@ namespace AppCenter.Views { AppCenter.App.refresh_action.activate.connect (() => { installed_liststore.remove_all (); + list_box.set_placeholder (loading_view); refresh_menuitem.sensitive = false; header_revealer.reveal_child = false; @@ -232,7 +233,9 @@ namespace AppCenter.Views { refresh_menuitem.sensitive = false; header_revealer.reveal_child = false; updated_revealer.reveal_child = false; + list_box.set_placeholder (loading_view); } else { + list_box.set_placeholder (null); refresh_menuitem.sensitive = true; on_updates_changed (); } From e1a89d55d9c76c295e9e40cf195512218bd3a4f5 Mon Sep 17 00:00:00 2001 From: italo-capasso Date: Sun, 22 Dec 2024 00:49:38 -0500 Subject: [PATCH 10/10] Check the vexpand value of list_box after adding the possible items in installed_liststore --- src/Views/AppListUpdateView.vala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Views/AppListUpdateView.vala b/src/Views/AppListUpdateView.vala index 53bb16c33..03e3c9365 100644 --- a/src/Views/AppListUpdateView.vala +++ b/src/Views/AppListUpdateView.vala @@ -302,13 +302,14 @@ namespace AppCenter.Views { unowned var flatpak_backend = AppCenterCore.FlatpakBackend.get_default (); var installed_apps = yield flatpak_backend.get_installed_applications (refresh_cancellable); installed_header.visible = !installed_apps.is_empty; - list_box.vexpand = installed_apps.is_empty; foreach (var package in installed_apps) { if (package.state != UPDATE_AVAILABLE && package.kind != ADDON && package.kind != FONT) { installed_liststore.insert_sorted (package, compare_installed_func); } } + + list_box.vexpand = installed_liststore.n_items <= 0; } refresh_cancellable = null;