diff options
author | Cole Robinson <crobinso@redhat.com> | 2013-06-13 17:05:33 -0400 |
---|---|---|
committer | Cole Robinson <crobinso@redhat.com> | 2013-06-13 17:05:33 -0400 |
commit | e2435b6d02ec2fe571d13849ea3de2fa08f473f6 (patch) | |
tree | 84feed78250fcc0bc81b84f6eaaa23aecbf29047 | |
parent | 04f0113c2d793f4ea647722ff0c3b3da7f6f4505 (diff) | |
download | virt-manager-e2435b6d02ec2fe571d13849ea3de2fa08f473f6.tar.gz |
asyncjob: Simplify registering a cancel callback
-rw-r--r-- | virtManager/asyncjob.py | 34 | ||||
-rw-r--r-- | virtManager/engine.py | 10 | ||||
-rw-r--r-- | virtManager/migrate.py | 11 |
3 files changed, 22 insertions, 33 deletions
diff --git a/virtManager/asyncjob.py b/virtManager/asyncjob.py index ce700cbd..4d87302c 100644 --- a/virtManager/asyncjob.py +++ b/virtManager/asyncjob.py @@ -162,22 +162,22 @@ class vmmAsyncJob(vmmGObjectUI): def __init__(self, callback, args, title, text, parent, - async=True, show_progress=True, - cancel_back=None, cancel_args=None): + async=True, show_progress=True, cancel_cb=None): """ @async: If False, run synchronously without a separate thread @show_progress: If False, don't actually show a progress dialog - @cancel_back: If operation supports cancelling, call this function - when cancel button is clicked - @cancel_args: Arguments for optional cancel_back + @cancel_cb: Cancel callback if operation supports it. + (cb, arg1, arg2, ...) """ vmmGObjectUI.__init__(self, "vmm-progress.ui", "vmm-progress") self.topwin.set_transient_for(parent) self.async = bool(async) self.show_progress = bool(show_progress) - self.cancel_job = cancel_back - self.cancel_args = [self] + (cancel_args or []) + + cancel_cb = cancel_cb or (None, []) + self.cancel_cb = cancel_cb[0] + self.cancel_args = [self] + list(cancel_cb[1:]) self.job_canceled = False self._error_info = None @@ -200,10 +200,7 @@ class vmmAsyncJob(vmmGObjectUI): # UI state self.topwin.set_title(title) self.widget("pbar-text").set_text(text) - if self.cancel_job: - self.widget("cancel-async-job").show() - else: - self.widget("cancel-async-job").hide() + self.widget("cancel-async-job").set_visible(bool(self.cancel_cb)) ############# @@ -229,11 +226,11 @@ class vmmAsyncJob(vmmGObjectUI): return self._meter def can_cancel(self): - return bool(self.cancel_job) + return bool(self.cancel_cb) def _cleanup(self): self.bg_thread = None - self.cancel_job = None + self.cancel_cb = None self.cancel_args = None self._meter = None @@ -265,8 +262,9 @@ class vmmAsyncJob(vmmGObjectUI): if self.show_progress: self.topwin.present() - if not self.cancel_job and self.show_progress: - self.topwin.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) + if not self.cancel_cb and self.show_progress: + self.topwin.get_window().set_cursor( + Gdk.Cursor.new(Gdk.CursorType.WATCH)) if self.async: self.bg_thread.start() @@ -289,7 +287,7 @@ class vmmAsyncJob(vmmGObjectUI): def delete(self, ignore1=None, ignore2=None): thread_active = (self.bg_thread.isAlive() or not self.async) - if not self.cancel_job or not thread_active: + if not self.cancel_cb or not thread_active: return res = self.err.warn_chkbox( @@ -306,10 +304,10 @@ class vmmAsyncJob(vmmGObjectUI): def cancel(self, ignore1=None, ignore2=None): - if not self.cancel_job: + if not self.cancel_cb: return - self.cancel_job(*self.cancel_args) + self.cancel_cb(*self.cancel_args) if self.job_canceled: self.hide_warning() self.set_stage_text(_("Cancelling job..."), canceling=True) diff --git a/virtManager/engine.py b/virtManager/engine.py index e7b0a8e2..2a9a1764 100644 --- a/virtManager/engine.py +++ b/virtManager/engine.py @@ -776,19 +776,15 @@ class vmmEngine(vmmGObject): if not path: return - _cancel_back = None - _cancel_args = [] + _cancel_cb = None if vm.getjobinfo_supported: - _cancel_back = self._save_cancel - _cancel_args = [vm] + _cancel_cb = (self._save_cancel, vm) progWin = vmmAsyncJob(self._save_callback, [vm, path], _("Saving Virtual Machine"), _("Saving virtual machine memory to disk "), - src.topwin, - cancel_back=_cancel_back, - cancel_args=_cancel_args) + src.topwin, cancel_cb=_cancel_cb) error, details = progWin.run() if error is not None: diff --git a/virtManager/migrate.py b/virtManager/migrate.py index 243cee80..a48e98ab 100644 --- a/virtManager/migrate.py +++ b/virtManager/migrate.py @@ -470,12 +470,9 @@ class vmmMigrateDialog(vmmGObjectUI): self.topwin.set_sensitive(False) self.topwin.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) + cancel_cb = None if self.vm.getjobinfo_supported: - _cancel_back = self.cancel_migration - _cancel_args = [self.vm] - else: - _cancel_back = None - _cancel_args = [None] + cancel_cb = (self.cancel_migration, self.vm) progWin = vmmAsyncJob(self._async_migrate, [self.vm, destconn, uri, rate, live, secure, @@ -484,9 +481,7 @@ class vmmMigrateDialog(vmmGObjectUI): (_("Migrating VM '%s' from %s to %s. " "This may take a while.") % (self.vm.get_name(), srchost, dsthost)), - self.topwin, - cancel_back=_cancel_back, - cancel_args=_cancel_args) + self.topwin, cancel_cb=cancel_cb) error, details = progWin.run() self.topwin.set_sensitive(True) |