diff --git a/icons/to-be-outdated.png b/icons/to-be-outdated.png
new file mode 100644
index 0000000..42634dd
Binary files /dev/null and b/icons/to-be-outdated.png differ
diff --git a/qubesmanager/table_widgets.py b/qubesmanager/table_widgets.py
index 258dd3a..6237537 100644
--- a/qubesmanager/table_widgets.py
+++ b/qubesmanager/table_widgets.py
@@ -459,7 +459,7 @@ class VmUpdateInfoWidget(QWidget):
self.set_value(value)
def set_value(self, value):
- if value == "outdated":
+ if value in ("outdated", "to-be-outdated"):
self.value = 30
elif value == "update":
self.value = 20
@@ -484,7 +484,7 @@ class VmUpdateInfoWidget(QWidget):
layout.addWidget(self.icon, alignment=Qt.AlignCenter)
self.setLayout(layout)
- self.previous_outdated = False
+ self.previous_outdated_state = None
self.previous_update_recommended = None
self.value = None
self.tableItem = VmUpdateInfoWidget.VmUpdateInfoItem(self.value, vm)
@@ -493,13 +493,22 @@ class VmUpdateInfoWidget(QWidget):
if vm.type == "HVM":
return
- outdated = vm.is_outdated()
- if outdated and not self.previous_outdated:
- self.update_status_widget("outdated")
- elif not outdated and self.previous_outdated:
- self.update_status_widget(None)
+ if vm.is_outdated():
+ outdated_state = "outdated"
+ # During TemplateVM shutdown, there's an interval of a few seconds
+ # during which vm.template.is_running() returns false but
+ # vm.is_outdated() does not yet return true, so the icon disappears.
+ # This looks goofy, but we've decided not to fix it at this time
+ # (2015-02-09).
+ elif vm.template and vm.template.is_running():
+ outdated_state = "to-be-outdated"
+ else:
+ outdated_state = None
- self.previous_outdated = outdated
+ if outdated_state != self.previous_outdated_state:
+ self.update_status_widget(outdated_state)
+
+ self.previous_outdated_state = outdated_state
if not vm.is_updateable():
return
@@ -551,7 +560,11 @@ class VmUpdateInfoWidget(QWidget):
elif state == "outdated":
label_text = "VM outdated"
icon_path = ":/outdated.png"
- tooltip_text = "The VM must be restarted for its filesystem to reflect the template's recent changes."
+ tooltip_text = "The VM must be restarted for its filesystem to reflect the template's recent committed changes."
+ elif state == "to-be-outdated":
+ label_text = "TemplateVM running"
+ icon_path = ":/to-be-outdated.png"
+ tooltip_text = "The TemplateVM must be stopped before changes from its current session can be picked up by this VM."
elif state == None:
label_text = ""
icon_path = None
diff --git a/resources.qrc b/resources.qrc
index 664f506..c9f9172 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -8,6 +8,7 @@
icons/global-settings.png
icons/on-icon/off.png
icons/outdated.png
+ icons/to-be-outdated.png
icons/update-recommended.png
icons/show-all-running.png
icons/mount.png