diff --git a/src/alpm_utils.vala b/src/alpm_utils.vala index 17ef45fbad67e290f39bee25096a7fea32f95121..1695f9a5d40797b5a9011c1729bc689c255da1a4 100644 --- a/src/alpm_utils.vala +++ b/src/alpm_utils.vala @@ -726,6 +726,10 @@ namespace Pamac { success = false; } } + if (cancellable.is_cancelled ()) { + trans_release (); + return false; + } return success; } diff --git a/src/cli.vala b/src/cli.vala index 72493a033fca19e66e333bc70d978dd8ca297e7a..a2bfb69ef5996de1e1668dcc9ab02fb16762a342 100644 --- a/src/cli.vala +++ b/src/cli.vala @@ -585,12 +585,6 @@ namespace Pamac { transaction = new TransactionCli (database); transaction.finished.connect (on_transaction_finished); transaction.sysupgrade_finished.connect (on_transaction_finished); - transaction.start_preparing.connect (() => { - trans_cancellable = true; - }); - transaction.stop_preparing.connect (() => { - trans_cancellable = false; - }); transaction.start_downloading.connect (() => { trans_cancellable = true; }); @@ -623,7 +617,7 @@ namespace Pamac { } else { stdout.printf ("\n"); } - return false; + return true; } int get_term_width () { diff --git a/src/manager_window.vala b/src/manager_window.vala index 2093dcade0e32c3d686a62616950f16708d1048c..8b547b469b656c9564e0d6c435e214803a028834 100644 --- a/src/manager_window.vala +++ b/src/manager_window.vala @@ -2646,12 +2646,8 @@ namespace Pamac { [GtkCallback] void on_preferences_button_clicked () { - if (transaction.get_lock ()) { - this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - run_preferences_dialog (); - } else { - transaction.display_error (dgettext (null, "Waiting for another package manager to quit"), {}); - } + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + run_preferences_dialog (); } public void run_preferences_dialog () { @@ -2670,7 +2666,6 @@ namespace Pamac { } void on_run_preferences_dialog_finished () { - transaction.unlock (); if (browse_stack.visible_child_name == "updates") { database.get_updates.begin (on_get_updates_finished); origin_stack.visible_child_name = "checking"; @@ -2752,7 +2747,7 @@ namespace Pamac { this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); sysupgrade_running = true; apply_button.sensitive = false; - cancel_button.sensitive = true; + cancel_button.sensitive = false; string[] temp_ign_pkgs = {}; foreach (unowned string name in temporary_ignorepkgs) { temp_ign_pkgs += name; @@ -2854,7 +2849,7 @@ namespace Pamac { void on_start_preparing () { this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - cancel_button.sensitive = true; + cancel_button.sensitive = false; } void on_stop_preparing () { diff --git a/src/system_daemon.vala b/src/system_daemon.vala index 44c55fc6b7e4c0ee3d17b7c91746b5fb91f63cca..664deec4a6c4b128e4cd9aef6e70048e050b52e1 100644 --- a/src/system_daemon.vala +++ b/src/system_daemon.vala @@ -111,9 +111,13 @@ namespace Pamac { downloading_updates_finished (); }); alpm_utils.trans_prepare_finished.connect ((success) => { + if (!success) { + unlock_priv (); + } trans_prepare_finished (success); }); alpm_utils.trans_commit_finished.connect ((success) => { + unlock_priv (); database_modified (); trans_commit_finished (success); }); @@ -242,17 +246,13 @@ namespace Pamac { public bool unlock (GLib.BusName sender) throws Error { if (lock_id == sender) { - lock_id = new BusName (""); - authorized = false; + unlock_priv (); return true; } return false; } private async bool check_authorization (GLib.BusName sender) { - if (lock_id != sender) { - return false; - } if (authorized) { return true; } @@ -387,10 +387,6 @@ namespace Pamac { } public void start_refresh (bool force, GLib.BusName sender) throws Error { - if (lock_id != sender) { - refresh_finished (false); - return; - } alpm_utils.force_refresh = force; if (alpm_utils.downloading_updates) { alpm_utils.cancellable.cancel (); @@ -520,6 +516,9 @@ namespace Pamac { } public void start_trans_commit (GLib.BusName sender) throws Error { + if (lock_id != sender) { + return; + } check_authorization.begin (sender, (obj, res) => { bool authorized = check_authorization.end (res); if (authorized) { @@ -540,6 +539,7 @@ namespace Pamac { return; } alpm_utils.trans_release (); + unlock_priv (); } public void trans_cancel (GLib.BusName sender) throws Error { @@ -547,6 +547,12 @@ namespace Pamac { return; } alpm_utils.trans_cancel (); + unlock_priv (); + } + + private void unlock_priv () { + lock_id = new BusName (""); + authorized = false; } [DBus (no_reply = true)]