Skip to content

Commit 8331269

Browse files
committed
Deal with runtime default dispvm changes
1 parent 17ecb4d commit 8331269

File tree

2 files changed

+44
-18
lines changed

2 files changed

+44
-18
lines changed

.pylintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ notes=FIXME,FIX,XXX,TODO
9191
[FORMAT]
9292

9393
# Maximum number of characters on a single line.
94-
max-line-length=80
94+
max-line-length=88
9595

9696
# Maximum number of lines in a module
9797
max-module-lines=3000

qubes_config/global_config/basics_handler.py

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -212,15 +212,43 @@ class PreloadDispvmHandler(AbstractTraitHolder):
212212
"""Handler for preloaded disposables. Requires SpinButton widgets:
213213
'basics_preload_dispvm'"""
214214

215-
def __init__(self, qapp: qubesadmin.Qubes, widget: Gtk.SpinButton):
215+
def __init__(
216+
self,
217+
qapp: qubesadmin.Qubes,
218+
widget: Gtk.SpinButton,
219+
dependent_widget: Gtk.ComboBox,
220+
):
216221
self.qapp = qapp
217222
self.widget = widget
218-
# TODO: ben: only allow setting if default_dispvm is not empty.
223+
self.dependent_widget = dependent_widget
219224
# TODO: ben: if changing default_dispvm, set old value to 0 first.
220225
self.preload_dispvm_adjustment = Gtk.Adjustment()
221226
self.preload_dispvm_adjustment.configure(0, 0, 50, 1, 10, 0)
222227
self.widget.configure(self.preload_dispvm_adjustment, 0.1, 0)
223228
self.widget.set_value(self.get_current_value())
229+
self.dependent_widget.connect("changed", self.on_dependent_changed)
230+
if not self.get_dependent_value():
231+
self.widget.set_sensitive(False)
232+
233+
def get_dependent_value(self):
234+
treeiter = self.dependent_widget.get_active_iter()
235+
if treeiter is not None:
236+
model = self.dependent_widget.get_model()
237+
value = model[treeiter][3]
238+
if value == "None":
239+
value = None
240+
else:
241+
value = None
242+
return value
243+
244+
def on_dependent_changed(self):
245+
value = self.get_dependent_value()
246+
if value:
247+
self.widget.set_sensitive(True)
248+
self.widget.set_value(self.get_current_value())
249+
else:
250+
self.widget.set_value(0)
251+
self.widget.set_sensitive(False)
224252

225253
@staticmethod
226254
def get_readable_description() -> str: # pylint: disable=arguments-differ
@@ -233,7 +261,9 @@ def save(self):
233261
"""Save changes: update system value and mark it as new initial value"""
234262
if not self.is_changed():
235263
return
236-
self.qapp.default_dispvm.features["preload-dispvm-max"] = int(
264+
if not (qube := self.get_dependent_value()):
265+
return
266+
self.qapp.domains[qube].features["preload-dispvm-max"] = int(
237267
self.widget.get_value()
238268
)
239269

@@ -247,7 +277,7 @@ def is_changed(self) -> bool:
247277
"""Has the user selected something different from the initial value?"""
248278
if not self.widget.is_sensitive():
249279
return False
250-
if self.widget.get_value() != self.get_current_value():
280+
if int(self.widget.get_value()) != self.get_current_value():
251281
return True
252282
return False
253283

@@ -260,9 +290,9 @@ def get_unsaved(self):
260290

261291
def get_current_value(self):
262292
"""This should never be called."""
263-
return int(
264-
self.qapp.default_dispvm.features.get("preload-dispvm-max", 0) or 0
265-
)
293+
if not (qube := self.get_dependent_value()):
294+
return 0
295+
return int(self.qapp.domains[qube].features.get("preload-dispvm-max", 0) or 0)
266296

267297
def update_current_value(self):
268298
"""This should never be called."""
@@ -303,9 +333,7 @@ def save_values(self, values_dict: Dict[str, int]):
303333
"""Wants a dict of 'vm-min-mem': value in MiB and
304334
'dom0-mem-boost': value in MiB"""
305335
# qmemman settings
306-
text_dict = {
307-
key: str(int(value)) + "MiB" for key, value in values_dict.items()
308-
}
336+
text_dict = {key: str(int(value)) + "MiB" for key, value in values_dict.items()}
309337

310338
assert (
311339
len(text_dict) == 2
@@ -474,9 +502,7 @@ def __init__(self, qapp: qubesadmin.Qubes, widget: Gtk.ComboBoxText):
474502
)
475503

476504
def _get_kernel_options(self) -> Dict[str, str]:
477-
kernels = [
478-
kernel.vid for kernel in self.qapp.pools["linux-kernel"].volumes
479-
]
505+
kernels = [kernel.vid for kernel in self.qapp.pools["linux-kernel"].volumes]
480506
kernels = sorted(kernels, key=KernelVersion)
481507
kernels_dict = {kernel: kernel for kernel in kernels}
482508
kernels_dict["(none)"] = None
@@ -583,7 +609,9 @@ def __init__(self, gtk_builder: Gtk.Builder, qapp: qubesadmin.Qubes):
583609
)
584610
self.handlers.append(
585611
PreloadDispvmHandler(
586-
qapp=self.qapp, widget=self.preload_dispvm_spin
612+
qapp=self.qapp,
613+
widget=self.preload_dispvm_spin,
614+
dependent_widget=self.defdispvm_combo,
587615
)
588616
)
589617

@@ -633,9 +661,7 @@ def __init__(self, gtk_builder: Gtk.Builder, qapp: qubesadmin.Qubes):
633661
is_bool=False,
634662
)
635663
)
636-
self.handlers.append(
637-
KernelHolder(qapp=self.qapp, widget=self.kernel_combo)
638-
)
664+
self.handlers.append(KernelHolder(qapp=self.qapp, widget=self.kernel_combo))
639665

640666
self.handlers.append(MemoryHandler(gtk_builder))
641667

0 commit comments

Comments
 (0)