domain: Send 'oldstatus' in status-changed signal

We can then use this to hook up internal signal handlers to do needed
things on status update (rather than bog down _update_status).
This commit is contained in:
Cole Robinson
2010-02-27 10:42:43 -05:00
parent 5e22e3bd6f
commit 4db7c4e48d
5 changed files with 27 additions and 15 deletions

View File

@@ -759,7 +759,7 @@ class vmmDetails(gobject.GObject):
if newpage == PAGE_CONSOLE or newpage >= PAGE_DYNAMIC_OFFSET:
self.last_console_page = newpage
def update_widget_states(self, vm, status):
def update_widget_states(self, vm, status, ignore=None):
self.toggle_toolbar(self.window.get_widget("details-menu-view-toolbar"))
destroy = vm.is_destroyable()

View File

@@ -63,7 +63,7 @@ class vmmDomainBase(vmmLibvirtObject):
__gsignals__ = {
"status-changed": (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE,
[int]),
[int, int]),
"resources-sampled": (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE,
[]),
@@ -1149,7 +1149,7 @@ class vmmDomain(vmmDomainBase):
def __init__(self, config, connection, backend, uuid):
vmmDomainBase.__init__(self, config, connection, backend, uuid)
self.lastStatus = None
self.lastStatus = libvirt.VIR_DOMAIN_SHUTOFF
self.record = []
self.maxRecord = { "diskRdRate" : 10.0,
"diskWrRate" : 10.0,
@@ -1174,6 +1174,10 @@ class vmmDomain(vmmDomainBase):
self._active_xml_flags) = self.connection.get_dom_flags(
self._backend)
# Hook up our own status listeners
self.connect("status-changed", self._update_start_vcpus)
self.connect("status-changed", self._check_install_status)
##########################
# Internal virDomain API #
##########################
@@ -1759,6 +1763,20 @@ class vmmDomain(vmmDomainBase):
# End XML Altering API #
########################
def _update_start_vcpus(self, ignore, status, oldstatus):
if oldstatus not in [ libvirt.VIR_DOMAIN_SHUTDOWN,
libvirt.VIR_DOMAIN_SHUTOFF,
libvirt.VIR_DOMAIN_CRASHED ]:
return
# Want to track the startup vcpu amount, which is the
# cap of how many VCPUs can be added
self._startup_vcpus = None
self.vcpu_max_count()
def _check_install_status(self, ignore, status, oldstatus):
pass
def _update_status(self, status=None):
if status == None:
info = self.get_info()
@@ -1766,16 +1784,10 @@ class vmmDomain(vmmDomainBase):
status = self._normalize_status(status)
if status != self.lastStatus:
if self.lastStatus in [ libvirt.VIR_DOMAIN_SHUTDOWN,
libvirt.VIR_DOMAIN_SHUTOFF,
libvirt.VIR_DOMAIN_CRASHED ]:
# Want to track the startup vcpu amount, which is the
# cap of how many VCPUs can be added
self._startup_vcpus = None
self.vcpu_max_count()
oldstatus = self.lastStatus
self.lastStatus = status
util.safe_idle_add(util.idle_emit, self, "status-changed", status)
util.safe_idle_add(util.idle_emit, self, "status-changed",
oldstatus, status)
def tick(self, now):

View File

@@ -937,7 +937,7 @@ class vmmManager(gobject.GObject):
# State/UI updating methods #
#############################
def vm_status_changed(self, vm, status):
def vm_status_changed(self, vm, status, ignore):
parent = self.rows[vm.get_connection().get_uri()].iter
vmlist = self.window.get_widget("vm-list")

View File

@@ -72,7 +72,7 @@ class vmmSerialConsole(gtk.HBox):
def handle_unrealize(self, src=None, ignore=None):
self.closetty()
def vm_status_changed(self, src, status):
def vm_status_changed(self, src, status, ignore):
if status in [ libvirt.VIR_DOMAIN_RUNNING ]:
self.opentty()
else:

View File

@@ -336,7 +336,7 @@ class vmmSystray(gobject.GObject):
placeholder.set_sensitive(False)
vm_menu.add(placeholder)
def vm_state_changed(self, vm, ignore=None):
def vm_state_changed(self, vm, ignore=None, ignore2=None):
menu_item = self._get_vm_menu_item(vm)
if not menu_item:
return