console: Make sure viewer is properly cleaned up

This commit is contained in:
Cole Robinson 2011-05-18 17:36:08 -04:00
parent eeb0879d8f
commit 9567ab9181

View File

@ -37,7 +37,7 @@ import signal
import socket import socket
import logging import logging
from virtManager.baseclass import vmmGObjectUI from virtManager.baseclass import vmmGObjectUI, vmmGObject
from virtManager.error import vmmErrorDialog from virtManager.error import vmmErrorDialog
# Console pages # Console pages
@ -198,10 +198,19 @@ class Tunnels(object):
return errout return errout
class Viewer(object): class Viewer(vmmGObject):
def __init__(self, console, config): def __init__(self, console):
vmmGObject.__init__(self)
self.console = console self.console = console
self.config = config self.display = None
def cleanup(self):
vmmGObject.cleanup(self)
self.console = None
if self.display:
self.display.destroy()
self.display = None self.display = None
def get_widget(self): def get_widget(self):
@ -256,10 +265,11 @@ class Viewer(object):
raise NotImplementedError() raise NotImplementedError()
class VNCViewer(Viewer): class VNCViewer(Viewer):
def __init__(self, console, config): def __init__(self, console):
Viewer.__init__(self, console, config) Viewer.__init__(self, console)
self.display = gtkvnc.Display() self.display = gtkvnc.Display()
self.sockfd = None self.sockfd = None
# Last noticed desktop resolution # Last noticed desktop resolution
self.desktop_resolution = None self.desktop_resolution = None
@ -395,8 +405,8 @@ class VNCViewer(Viewer):
class SpiceViewer(Viewer): class SpiceViewer(Viewer):
def __init__(self, console, config): def __init__(self, console):
Viewer.__init__(self, console, config) Viewer.__init__(self, console)
self.spice_session = None self.spice_session = None
self.display = None self.display = None
self.audio = None self.audio = None
@ -564,6 +574,9 @@ class vmmConsolePages(vmmGObjectUI):
def cleanup(self): def cleanup(self):
vmmGObjectUI.cleanup(self) vmmGObjectUI.cleanup(self)
self.vm = None self.vm = None
if self.viewer:
self.viewer.cleanup()
self.viewer = None self.viewer = None
########################## ##########################
@ -778,6 +791,7 @@ class vmmConsolePages(vmmGObjectUI):
viewport.remove(w) viewport.remove(w)
v.close() v.close()
v.cleanup()
self.viewer_connected = False self.viewer_connected = False
def update_widget_states(self, vm, status_ignore): def update_widget_states(self, vm, status_ignore):
@ -975,12 +989,12 @@ class vmmConsolePages(vmmGObjectUI):
gaddr, gport, gsocket)) gaddr, gport, gsocket))
try: try:
if protocol == "vnc": if protocol == "vnc":
self.viewer = VNCViewer(self, self.config) self.viewer = VNCViewer(self)
self.window.get_widget("console-vnc-viewport").add( self.window.get_widget("console-vnc-viewport").add(
self.viewer.get_widget()) self.viewer.get_widget())
self.viewer.init_widget() self.viewer.init_widget()
elif protocol == "spice": elif protocol == "spice":
self.viewer = SpiceViewer(self, self.config) self.viewer = SpiceViewer(self)
self.set_enable_accel() self.set_enable_accel()