Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
6469dd8341
@ -68,22 +68,18 @@ class RenameVMThread(QtCore.QThread):
|
|||||||
setattr(holder, prop, new_vm)
|
setattr(holder, prop, new_vm)
|
||||||
except qubesadmin.exc.QubesException:
|
except qubesadmin.exc.QubesException:
|
||||||
failed_props += [(holder, prop)]
|
failed_props += [(holder, prop)]
|
||||||
|
|
||||||
if not failed_props:
|
if not failed_props:
|
||||||
del self.vm.app.domains[self.vm.name]
|
del self.vm.app.domains[self.vm.name]
|
||||||
else:
|
else:
|
||||||
list_text = utils.format_dependencies_list(failed_props)
|
list_text = utils.format_dependencies_list(failed_props)
|
||||||
|
self.msg = (self.tr("Warning: rename partially unsuccessful!"),
|
||||||
QtGui.QMessageBox.warning(
|
self.tr("Some properties could not be changed to "
|
||||||
None,
|
"the new name. The system has now both {} "
|
||||||
self.tr("Warning: rename partially unsuccessful"),
|
"and {} qubes. To resolve this, please "
|
||||||
self.tr("Some properties could not be changed to the new "
|
"check and change the following properties "
|
||||||
"name. The system has now both {} and {} qubes. "
|
"and remove the qube {} manually.<br>"
|
||||||
"To resolve this, please check and change the "
|
).format(self.vm.name, self.vm.name,
|
||||||
"following properties and remove the qube {} "
|
self.vm.name) + list_text)
|
||||||
"manually.<br> ").format(
|
|
||||||
self.vm.name, self.vm.name, self.vm.name)\
|
|
||||||
+ list_text)
|
|
||||||
|
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
self.msg = ("Rename error!", str(ex))
|
self.msg = ("Rename error!", str(ex))
|
||||||
@ -162,6 +158,17 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
|
|
||||||
self.tabWidget.currentChanged.connect(self.current_tab_changed)
|
self.tabWidget.currentChanged.connect(self.current_tab_changed)
|
||||||
|
|
||||||
|
# Initialize several auxillary variables for pylint's sake
|
||||||
|
self.netvm_idx = None
|
||||||
|
self.kernel_idx = None
|
||||||
|
self.label_idx = None
|
||||||
|
self.template_idx = None
|
||||||
|
self.root_img_size = None
|
||||||
|
self.priv_img_size = None
|
||||||
|
self.default_dispvm_idx = None
|
||||||
|
self.virt_mode_idx = None
|
||||||
|
self.virt_mode_list = None
|
||||||
|
|
||||||
###### basic tab
|
###### basic tab
|
||||||
self.__init_basic_tab__()
|
self.__init_basic_tab__()
|
||||||
self.rename_vm_button.clicked.connect(self.rename_vm)
|
self.rename_vm_button.clicked.connect(self.rename_vm)
|
||||||
@ -414,6 +421,8 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
(lambda vm: vm.provides_network),
|
(lambda vm: vm.provides_network),
|
||||||
allow_default=True, allow_none=True)
|
allow_default=True, allow_none=True)
|
||||||
|
|
||||||
|
self.netVM.currentIndexChanged.connect(self.check_warn_dispvmnetvm)
|
||||||
|
|
||||||
self.include_in_backups.setChecked(self.vm.include_in_backups)
|
self.include_in_backups.setChecked(self.vm.include_in_backups)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -467,6 +476,7 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
if self.vmlabel.currentIndex() != self.label_idx:
|
if self.vmlabel.currentIndex() != self.label_idx:
|
||||||
label = self.label_list[self.vmlabel.currentIndex()]
|
label = self.label_list[self.vmlabel.currentIndex()]
|
||||||
self.vm.label = label
|
self.vm.label = label
|
||||||
|
self.label_idx = self.vmlabel.currentIndex()
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
@ -475,6 +485,7 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
if self.template_name.currentIndex() != self.template_idx:
|
if self.template_name.currentIndex() != self.template_idx:
|
||||||
self.vm.template = \
|
self.vm.template = \
|
||||||
self.template_list[self.template_name.currentIndex()]
|
self.template_list[self.template_name.currentIndex()]
|
||||||
|
self.template_idx = self.template_name.currentIndex()
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
@ -482,6 +493,7 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
try:
|
try:
|
||||||
if self.netVM.currentIndex() != self.netvm_idx:
|
if self.netVM.currentIndex() != self.netvm_idx:
|
||||||
self.vm.netvm = self.netvm_list[self.netVM.currentIndex()]
|
self.vm.netvm = self.netvm_list[self.netVM.currentIndex()]
|
||||||
|
self.netvm_idx = self.netVM.currentIndex()
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
@ -514,6 +526,7 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
if self.priv_img_size != priv_size:
|
if self.priv_img_size != priv_size:
|
||||||
try:
|
try:
|
||||||
self.vm.volumes['private'].resize(priv_size * 1024**2)
|
self.vm.volumes['private'].resize(priv_size * 1024**2)
|
||||||
|
self.priv_img_size = priv_size
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
@ -522,6 +535,7 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
if self.root_img_size != sys_size:
|
if self.root_img_size != sys_size:
|
||||||
try:
|
try:
|
||||||
self.vm.volumes['root'].resize(sys_size * 1024**2)
|
self.vm.volumes['root'].resize(sys_size * 1024**2)
|
||||||
|
self.root_img_size = sys_size
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
@ -547,6 +561,32 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
"allowed value."))
|
"allowed value."))
|
||||||
self.init_mem.setValue(self.max_mem_size.value() / 10)
|
self.init_mem.setValue(self.max_mem_size.value() / 10)
|
||||||
|
|
||||||
|
def check_warn_dispvmnetvm(self):
|
||||||
|
if not hasattr(self.vm, 'default_dispvm'):
|
||||||
|
self.warn_netvm_dispvm.setVisible(False)
|
||||||
|
return
|
||||||
|
dispvm = self.default_dispvm_list[
|
||||||
|
self.default_dispvm.currentIndex()]
|
||||||
|
own_netvm = self.netvm_list[self.netVM.currentIndex()]
|
||||||
|
|
||||||
|
if dispvm == qubesadmin.DEFAULT:
|
||||||
|
dispvm = self.vm.property_get_default('default_dispvm')
|
||||||
|
|
||||||
|
if dispvm == self.vm:
|
||||||
|
self.warn_netvm_dispvm.setVisible(False)
|
||||||
|
return
|
||||||
|
|
||||||
|
dispvm_netvm = getattr(dispvm, 'netvm', None)
|
||||||
|
|
||||||
|
if own_netvm == qubesadmin.DEFAULT:
|
||||||
|
own_netvm = self.vm.property_get_default('netvm')
|
||||||
|
|
||||||
|
if dispvm_netvm and dispvm_netvm != own_netvm:
|
||||||
|
self.warn_netvm_dispvm.setVisible(True)
|
||||||
|
else:
|
||||||
|
self.warn_netvm_dispvm.setVisible(False)
|
||||||
|
|
||||||
|
|
||||||
def rename_vm(self):
|
def rename_vm(self):
|
||||||
|
|
||||||
dependencies = admin_utils.vm_dependencies(self.vm.app, self.vm)
|
dependencies = admin_utils.vm_dependencies(self.vm.app, self.vm)
|
||||||
@ -691,7 +731,10 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
None,
|
None,
|
||||||
(lambda vm: getattr(vm, 'template_for_dispvms', False)),
|
(lambda vm: getattr(vm, 'template_for_dispvms', False)),
|
||||||
allow_default=True, allow_none=True)
|
allow_default=True, allow_none=True)
|
||||||
|
self.default_dispvm.currentIndexChanged.connect(
|
||||||
|
self.check_warn_dispvmnetvm)
|
||||||
|
|
||||||
|
self.check_warn_dispvmnetvm()
|
||||||
self.update_virt_mode_list()
|
self.update_virt_mode_list()
|
||||||
|
|
||||||
windows_running = \
|
windows_running = \
|
||||||
@ -704,6 +747,11 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
self.seamless_on_button.clicked.connect(self.enable_seamless)
|
self.seamless_on_button.clicked.connect(self.enable_seamless)
|
||||||
self.seamless_off_button.clicked.connect(self.disable_seamless)
|
self.seamless_off_button.clicked.connect(self.disable_seamless)
|
||||||
|
|
||||||
|
if hasattr(self.vm, "template_for_dispvms"):
|
||||||
|
self.dvm_template_checkbox.setChecked(self.vm.template_for_dispvms)
|
||||||
|
else:
|
||||||
|
self.dvm_template_checkbox.setVisible(False)
|
||||||
|
|
||||||
def enable_seamless(self):
|
def enable_seamless(self):
|
||||||
self.vm.run_service_for_stdio("qubes.SetGuiMode", input=b'SEAMLESS')
|
self.vm.run_service_for_stdio("qubes.SetGuiMode", input=b'SEAMLESS')
|
||||||
|
|
||||||
@ -742,6 +790,7 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
if self.kernel.currentIndex() != self.kernel_idx:
|
if self.kernel.currentIndex() != self.kernel_idx:
|
||||||
self.vm.kernel = self.kernel_list[
|
self.vm.kernel = self.kernel_list[
|
||||||
self.kernel.currentIndex()]
|
self.kernel.currentIndex()]
|
||||||
|
self.kernel_idx = self.kernel.currentIndex()
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
@ -750,15 +799,29 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
if self.default_dispvm.currentIndex() != self.default_dispvm_idx:
|
if self.default_dispvm.currentIndex() != self.default_dispvm_idx:
|
||||||
self.vm.default_dispvm = \
|
self.vm.default_dispvm = \
|
||||||
self.default_dispvm_list[self.default_dispvm.currentIndex()]
|
self.default_dispvm_list[self.default_dispvm.currentIndex()]
|
||||||
|
self.default_dispvm_idx = self.default_dispvm.currentIndex()
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if self.virt_mode.currentIndex() != self.virt_mode_idx:
|
if self.virt_mode.currentIndex() != self.virt_mode_idx:
|
||||||
self.vm.virt_mode = self.selected_virt_mode()
|
self.vm.virt_mode = self.selected_virt_mode()
|
||||||
|
self.virt_mode_idx = self.virt_mode.currentIndex()
|
||||||
except Exception as ex: # pylint: disable=broad-except
|
except Exception as ex: # pylint: disable=broad-except
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
|
if getattr(self.vm, "template_for_dispvms", False) != \
|
||||||
|
self.dvm_template_checkbox.isChecked():
|
||||||
|
try:
|
||||||
|
self.vm.template_for_dispvms = \
|
||||||
|
self.dvm_template_checkbox.isChecked()
|
||||||
|
if self.dvm_template_checkbox.isChecked():
|
||||||
|
self.vm.features["appmenus-dispvm"] = True
|
||||||
|
else:
|
||||||
|
del self.vm.features["appmenus-dispvm"]
|
||||||
|
except Exception as ex: # pylint: disable=broad-except
|
||||||
|
msg.append(str(ex))
|
||||||
|
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
def include_in_balancing_changed(self, state):
|
def include_in_balancing_changed(self, state):
|
||||||
@ -811,7 +874,6 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
|
|
||||||
self.virt_mode.clear()
|
self.virt_mode.clear()
|
||||||
|
|
||||||
# pylint: disable=attribute-defined-outside-init
|
|
||||||
self.virt_mode_list, self.virt_mode_idx = utils.prepare_choice(\
|
self.virt_mode_list, self.virt_mode_idx = utils.prepare_choice(\
|
||||||
self.virt_mode, self.vm, 'virt_mode', choices, None,\
|
self.virt_mode, self.vm, 'virt_mode', choices, None,\
|
||||||
allow_default=True, transform=(lambda x: str(x).upper()))
|
allow_default=True, transform=(lambda x: str(x).upper()))
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
<locale language="English" country="UnitedStates"/>
|
<locale language="English" country="UnitedStates"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="basic_tab">
|
<widget class="QWidget" name="basic_tab">
|
||||||
<property name="locale">
|
<property name="locale">
|
||||||
@ -379,6 +379,19 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="3">
|
||||||
|
<widget class="QLabel" name="warn_netvm_dispvm">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Caution: default DispVM template has a different Networking setting than this qube. Unexpected network access may occur!</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../resources.qrc">:/warning.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -779,7 +792,7 @@ border-width: 1px;</string>
|
|||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>15</number>
|
<number>15</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="1" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_26">
|
<widget class="QLabel" name="label_26">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Default DispVM:</string>
|
<string>Default DispVM:</string>
|
||||||
@ -789,17 +802,17 @@ border-width: 1px;</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QComboBox" name="default_dispvm"/>
|
<widget class="QComboBox" name="default_dispvm"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0" colspan="2">
|
<item row="3" column="0" colspan="2">
|
||||||
<widget class="QPushButton" name="boot_from_device_button">
|
<widget class="QPushButton" name="boot_from_device_button">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Boot qube from CDROM</string>
|
<string>Boot qube from CDROM</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0" colspan="2">
|
<item row="4" column="0" colspan="2">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="seamless_on_button">
|
<widget class="QPushButton" name="seamless_on_button">
|
||||||
@ -825,6 +838,16 @@ The qube must be running to disable seamless mode; this setting is not persisten
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="dvm_template_checkbox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Allow starting DisposableVMs from this qube</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
Loading…
Reference in New Issue
Block a user