Also, allow the user to cancel media check while it's working. --- pyanaconda/ui/gui/spokes/source.glade | 1 + pyanaconda/ui/gui/spokes/source.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/source.glade b/pyanaconda/ui/gui/spokes/source.glade index 91d716d..554d673 100644 --- a/pyanaconda/ui/gui/spokes/source.glade +++ b/pyanaconda/ui/gui/spokes/source.glade @@ -91,6 +91,7 @@ <property name="type_hint">dialog</property> <property name="decorated">False</property> <property name="has_resize_grip">False</property> + <signal name="close" handler="on_close" swapped="no"/> <child internal-child="vbox"> <object class="GtkBox" id="dialog-vbox1"> <property name="can_focus">False</property> diff --git a/pyanaconda/ui/gui/spokes/source.py b/pyanaconda/ui/gui/spokes/source.py index 7bcae6e..869bba2 100644 --- a/pyanaconda/ui/gui/spokes/source.py +++ b/pyanaconda/ui/gui/spokes/source.py @@ -25,7 +25,7 @@ import time import logging log = logging.getLogger("anaconda")
-import os.path +import os, signal
from gi.repository import GLib
@@ -155,6 +155,7 @@ class MediaCheckDialog(GUIObject): def __init__(self, data): GUIObject.__init__(self, data) self.progressBar = self.builder.get_object("mediaCheck-progressBar") + self._pid = None
def _checkisoEndsCB(self, pid, status): doneButton = self.builder.get_object("doneButton") @@ -168,6 +169,7 @@ class MediaCheckDialog(GUIObject): self.progressBar.set_fraction(1.0) doneButton.set_sensitive(True) GLib.spawn_close_pid(pid) + self._pid = None
def _checkisoStdoutWatcher(self, fd, condition): if condition == GLib.IOCondition.HUP: @@ -187,7 +189,7 @@ class MediaCheckDialog(GUIObject): return True
def run(self, devicePath): - (retval, pid, _stdin, stdout, _stderr) = \ + (retval, self._pid, _stdin, stdout, _stderr) = \ GLib.spawn_async_with_pipes(None, ["checkisomd5", "--gauge", devicePath], [], GLib.SpawnFlags.DO_NOT_REAP_CHILD|GLib.SpawnFlags.SEARCH_PATH, None, None) @@ -195,13 +197,19 @@ class MediaCheckDialog(GUIObject): return
# This function waits for checkisomd5 to end and then cleans up after it. - GLib.child_watch_add(pid, self._checkisoEndsCB) + GLib.child_watch_add(self._pid, self._checkisoEndsCB)
# This function watches the process's stdout. GLib.io_add_watch(stdout, GLib.IOCondition.IN|GLib.IOCondition.HUP, self._checkisoStdoutWatcher)
self.window.run()
+ def on_close(self, *args): + if self._pid: + os.kill(self._pid, signal.SIGKILL) + + self.window.destroy() + def on_done_clicked(self, *args): self.window.destroy()