From 194cb715a30159b3a6ba9000ab141dda3661c300 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Mon, 8 Jul 2013 19:13:52 -0400 Subject: [PATCH] console: A few tweaks to usbredir code - Make sure to set menu item to unsensitive when console closes - Avoid dep on latest spice-gtk git for channel_type_from_string - Create usbwidget every time it's requested, like virt-viewer does - Minor style fixes --- virtManager/console.py | 43 +++++++++++++++++------------------------- virtManager/details.py | 10 ++++------ 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/virtManager/console.py b/virtManager/console.py index 5ff5cb049..51175c0f5 100644 --- a/virtManager/console.py +++ b/virtManager/console.py @@ -456,7 +456,6 @@ class SpiceViewer(Viewer): self.audio = None self.display_channel = None self.usbdev_manager = None - self.usbwidget = None def _init_widget(self): self.set_grab_keys() @@ -509,7 +508,6 @@ class SpiceViewer(Viewer): self.display = None self.display_channel = None self.usbdev_manager = None - self.usbwidget = None def is_open(self): return self.spice_session is not None @@ -565,24 +563,17 @@ class SpiceViewer(Viewer): return None return self.display_channel.get_properties("width", "height") - def _create_usbdev_manager(self): - if self.usbdev_manager: - return self.usbdev_manager - - if self.spice_session: - self.usbdev_manager = SpiceClientGLib.UsbDeviceManager.get(self.spice_session) - if self.usbdev_manager: - self.usbdev_manager.connect("auto-connect-failed", self._usbdev_redirect_error) - self.usbdev_manager.connect("device-error", self._usbdev_redirect_error) - - return self.usbdev_manager - def _create_spice_session(self): self.spice_session = SpiceClientGLib.Session() gtk_session = SpiceClientGtk.GtkSession.get(self.spice_session) gtk_session.set_property("auto-clipboard", True) - self._create_usbdev_manager() + self.usbdev_manager = SpiceClientGLib.UsbDeviceManager.get( + self.spice_session) + self.usbdev_manager.connect("auto-connect-failed", + self._usbdev_redirect_error) + self.usbdev_manager.connect("device-error", + self._usbdev_redirect_error) autoredir = self.config.get_auto_redirection() if autoredir: @@ -652,22 +643,22 @@ class SpiceViewer(Viewer): usb_device_description_fmt = _("%s %s %s at %d-%d") - if self.spice_session: - self.usbwidget = SpiceClientGtk.UsbDeviceWidget.new(self.spice_session, - usb_device_description_fmt) - self.usbwidget.connect("connect-failed", self._usbdev_redirect_error) - return self.usbwidget + if not self.spice_session: + return - return + usbwidget = SpiceClientGtk.UsbDeviceWidget.new( + self.spice_session, + usb_device_description_fmt) + usbwidget.connect("connect-failed", self._usbdev_redirect_error) + return usbwidget def has_usb_redirection(self): - usbredir_channel_type = SpiceClientGLib.Channel.string_to_type('usbredir') + if not self.spice_session or not self.usbdev_manager: + return False - if self.spice_session: - if self._create_usbdev_manager() and \ - self.spice_session.has_channel_type(usbredir_channel_type): + for c in self.spice_session.get_channels(): + if c.__class__ is SpiceClientGLib.UsbredirChannel: return True - return False diff --git a/virtManager/details.py b/virtManager/details.py index 3b49ff39c..64137fd58 100644 --- a/virtManager/details.py +++ b/virtManager/details.py @@ -1562,12 +1562,10 @@ class vmmDetails(vmmGObjectUI): self.vm.get_uuid()) def control_vm_menu(self, src_ignore): - if (self.console.viewer and - self.console.viewer.has_usb_redirection() and - self.vm.has_spicevmc_type_redirdev()): - widget = self.widget("details-menu-usb-redirection") - if not widget.get_sensitive(): - widget.set_sensitive(True) + can_usb = bool(self.console.viewer and + self.console.viewer.has_usb_redirection() and + self.vm.has_spicevmc_type_redirdev()) + self.widget("details-menu-usb-redirection").set_sensitive(can_usb) def control_vm_run(self, src_ignore): self.emit("action-run-domain",