diff --git a/qubesmanager/settings.py b/qubesmanager/settings.py
index 73bf647..56a6fef 100644
--- a/qubesmanager/settings.py
+++ b/qubesmanager/settings.py
@@ -209,8 +209,6 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtWidgets.QDialog):
####### services tab
self.__init_services_tab__()
- self.service_line_edit.lineEdit().returnPressed.connect(
- self.__add_service__)
self.add_srv_button.clicked.connect(self.__add_service__)
self.remove_srv_button.clicked.connect(self.__remove_service__)
@@ -1074,35 +1072,49 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtWidgets.QDialog):
self.services_list.addItem(item)
self.new_srv_dict[service] = self.vm.features[feature]
- # add suggested services
- self.service_line_edit.addItem('clocksync')
- self.service_line_edit.addItem('crond')
- self.service_line_edit.addItem('cups')
- self.service_line_edit.addItem('disable-default-route')
- self.service_line_edit.addItem('disable-dns-server')
- self.service_line_edit.addItem('network-manager')
- self.service_line_edit.addItem('qubes-firewall')
- self.service_line_edit.addItem('qubes-network')
- self.service_line_edit.addItem('qubes-update-check')
- self.service_line_edit.addItem('qubes-updates-proxy')
- self.service_line_edit.addItem('qubes-yum-proxy')
- self.service_line_edit.addItem('updates-proxy-setup')
- self.service_line_edit.addItem('yum-proxy-setup')
+ self.service_line_edit.addItem("")
+
+ supported_services = []
+ service_prefix = "supported-service."
+
+ for feature in self.vm.features:
+ if feature.startswith(service_prefix):
+ supported_services.append(feature[len(service_prefix):])
+ if getattr(self.vm, "template", None):
+ for feature in self.vm.template.features:
+ if feature.startswith(service_prefix):
+ supported_services.add(feature[len(service_prefix):])
+
+ for service in sorted(supported_services):
+ self.service_line_edit.addItem(service)
+
+ self.service_line_edit.addItem(self.tr('(custom...)'))
self.service_line_edit.setEditText("")
def __add_service__(self):
srv = str(self.service_line_edit.currentText()).strip()
+
if srv != "":
+ if self.service_line_edit.currentIndex() == \
+ len(self.service_line_edit) - 1:
+ (custom_name, ok) = QtWidgets.QInputDialog.getText(
+ self, self.tr("Custom service name"),
+ self.tr(
+ "Name of the service:"))
+ if ok:
+ srv = custom_name.strip()
+ else:
+ return
if srv in self.new_srv_dict:
QtWidgets.QMessageBox.information(
self,
'',
self.tr('Service already on the list!'))
- else:
- item = QtWidgets.QListWidgetItem(srv)
- item.setCheckState(ui_settingsdlg.QtCore.Qt.Checked)
- self.services_list.addItem(item)
- self.new_srv_dict[srv] = True
+ return
+ item = QtWidgets.QListWidgetItem(srv)
+ item.setCheckState(ui_settingsdlg.QtCore.Qt.Checked)
+ self.services_list.addItem(item)
+ self.new_srv_dict[srv] = True
def __remove_service__(self):
item = self.services_list.currentItem()
diff --git a/ui/settingsdlg.ui b/ui/settingsdlg.ui
index e5f7563..96e51c6 100644
--- a/ui/settingsdlg.ui
+++ b/ui/settingsdlg.ui
@@ -29,7 +29,7 @@
- 1
+ 5
@@ -1433,47 +1433,85 @@ The qube must be running to disable seamless mode; this setting is not persisten
Services
- -
-
-
- Qt::Vertical
+
-
+
+
+
+ 0
+ 0
+
-
-
- 20
- 40
-
-
-
+
- -
-
-
- -
+
-
Checked services will be turned on.
- -
-
-
- Unchecked services will be turned off.
-
-
-
- -
+
-
Unlisted services will follow default settings.
- -
+
-
+
+
+ Unchecked services will be turned off.
+
+
+
+ -
+
+
-
+
+
+ Select a service:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Services listed here are explicitly supported by the qube. Additional services may be added with the '+' button on the right.
+
+
+
+
+
+
+ -
+
+
+ Add
+
+
+
+ :/add.png:/add.png
+
+
+
+ 24
+ 24
+
+
+
+
+
+
+ -
-
+ Remove service
@@ -1487,32 +1525,18 @@ The qube must be running to disable seamless mode; this setting is not persisten
- -
-
-
- Services listed here are only base Qubes services - other services may be installed and implemented.
+
-
+
+
+ Qt::Vertical
-
- true
-
-
-
- -
-
-
-
-
-
-
- :/add.png:/add.png
-
-
+
- 24
- 24
+ 20
+ 40
-
+
@@ -1568,10 +1592,7 @@ The qube must be running to disable seamless mode; this setting is not persisten
temp_full_access_time
no_strict_reset_button
refresh_apps_button
- service_line_edit
- add_srv_button
services_list
- remove_srv_button