From 3221b56ac3403de8eca9436a6b95c415b7b08a70 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Mon, 16 May 2016 16:27:23 -0400 Subject: [PATCH] viewers: Show spice error message in the UI on disconnect --- virtManager/console.py | 8 +++++--- virtManager/viewers.py | 13 +++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/virtManager/console.py b/virtManager/console.py index 2b2f8f93f..1d931f088 100644 --- a/virtManager/console.py +++ b/virtManager/console.py @@ -751,13 +751,15 @@ class vmmConsolePages(vmmGObjectUI): self.err.show_err(_("USB redirection error"), text2=str(errstr), modal=True) - def _viewer_disconnected_set_page(self, ssherr): + def _viewer_disconnected_set_page(self, errdetails, ssherr): if self.vm.is_runable(): # Exit was probably for legitimate reasons self._show_vm_status_unavailable() return msg = _("Viewer was disconnected.") + if errdetails: + msg += "\n" + errdetails if ssherr: logging.debug("SSH tunnel error output: %s", ssherr) msg += "\n\n" @@ -765,7 +767,7 @@ class vmmConsolePages(vmmGObjectUI): self._activate_unavailable_page(msg) - def _viewer_disconnected(self, ignore, ssherr): + def _viewer_disconnected(self, ignore, errdetails, ssherr): self.widget("console-pages").set_current_page( _CONSOLE_PAGE_UNAVAILABLE) self._close_viewer() @@ -774,7 +776,7 @@ class vmmConsolePages(vmmGObjectUI): # Make sure modifiers are set correctly self._viewer_focus_changed() - self._viewer_disconnected_set_page(ssherr) + self._viewer_disconnected_set_page(errdetails, ssherr) self._refresh_resizeguest_from_settings() def _viewer_connected(self, ignore): diff --git a/virtManager/viewers.py b/virtManager/viewers.py index a4aa87c3f..50465218e 100644 --- a/virtManager/viewers.py +++ b/virtManager/viewers.py @@ -56,7 +56,7 @@ class Viewer(vmmGObject): "pointer-grab": (GObject.SignalFlags.RUN_FIRST, None, []), "pointer-ungrab": (GObject.SignalFlags.RUN_FIRST, None, []), "connected": (GObject.SignalFlags.RUN_FIRST, None, []), - "disconnected": (GObject.SignalFlags.RUN_FIRST, None, [str]), + "disconnected": (GObject.SignalFlags.RUN_FIRST, None, [str, str]), "auth-error": (GObject.SignalFlags.RUN_FIRST, None, [str, bool]), "auth-rejected": (GObject.SignalFlags.RUN_FIRST, None, [str]), "need-auth": (GObject.SignalFlags.RUN_FIRST, None, [bool, bool]), @@ -165,9 +165,9 @@ class Viewer(vmmGObject): def _get_grab_keys(self): return self._display.get_grab_keys().as_string() - def _emit_disconnected(self): + def _emit_disconnected(self, errdetails=None): ssherr = self._tunnels.get_err_output() - self.emit("disconnected", ssherr) + self.emit("disconnected", errdetails, ssherr) ####################################################### @@ -565,7 +565,12 @@ class SpiceViewer(Viewer): if channel.get_error(): error = channel.get_error().message logging.debug("Spice channel event=%s message=%s", event, error) - self._emit_disconnected() + + msg = _("Encountered SPICE %(error-name)s") % { + "error-name": event.value_nick} + if error: + msg += ": %s" % error + self._emit_disconnected(msg) def _fd_channel_event_cb(self, channel, event): # When we see any event from the channel, release the