Browse Source

Added properly handling when templates are added and removed

donoban 3 years ago
parent
commit
62489e5c78
1 changed files with 13 additions and 7 deletions
  1. 13 7
      qubesmanager/qube_manager.py

+ 13 - 7
qubesmanager/qube_manager.py

@@ -670,15 +670,9 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QMainWindow):
         self.frame_width = 0
         self.frame_height = 0
 
+        self.init_template_menu()
         self.context_menu = QMenu(self)
 
-        for vm in self.qubes_app.domains:
-            if vm.klass == 'TemplateVM':
-                action = self.template_menu.addAction(vm.name)
-                action.setData(vm.name)
-                action.setCheckable(True)
-                action.triggered.connect(partial(self.change_template, vm.name))
-
         self.context_menu.addAction(self.action_settings)
         self.context_menu.addMenu(self.template_menu)
         self.context_menu.addAction(self.action_editfwrules)
@@ -831,6 +825,15 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QMainWindow):
 
         progress.setValue(row_no)
 
+    def init_template_menu(self):
+        self.template_menu.clear()
+        for vm in self.qubes_app.domains:
+            if vm.klass == 'TemplateVM':
+                action = self.template_menu.addAction(vm.name)
+                action.setData(vm.name)
+                action.setCheckable(True)
+                action.triggered.connect(partial(self.change_template, vm.name))
+
     def setup_application(self):
         self.qt_app.setApplicationName(self.tr("Qube Manager"))
         self.qt_app.setWindowIcon(QIcon.fromTheme("qubes-manager"))
@@ -888,12 +891,15 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QMainWindow):
             domain = self.qubes_app.domains[vm]
             self.qubes_cache.add_vm(domain)
             self.proxy.invalidate()
+            if domain.klass == 'TemplateVM':
+                self.init_template_menu()
         except (exc.QubesException, KeyError):
             pass
 
     def on_domain_removed(self, _submitter, _event, **kwargs):
         self.qubes_cache.remove_vm(name=kwargs['vm'])
         self.proxy.invalidate()
+        self.init_template_menu()
 
     def on_domain_status_changed(self, vm, event, **_kwargs):
         try: