@@ -212,15 +212,43 @@ class PreloadDispvmHandler(AbstractTraitHolder):
212
212
"""Handler for preloaded disposables. Requires SpinButton widgets:
213
213
'basics_preload_dispvm'"""
214
214
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
+ ):
216
221
self .qapp = qapp
217
222
self .widget = widget
218
- # TODO: ben: only allow setting if default_dispvm is not empty.
223
+ self . dependent_widget = dependent_widget
219
224
# TODO: ben: if changing default_dispvm, set old value to 0 first.
220
225
self .preload_dispvm_adjustment = Gtk .Adjustment ()
221
226
self .preload_dispvm_adjustment .configure (0 , 0 , 50 , 1 , 10 , 0 )
222
227
self .widget .configure (self .preload_dispvm_adjustment , 0.1 , 0 )
223
228
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 )
224
252
225
253
@staticmethod
226
254
def get_readable_description () -> str : # pylint: disable=arguments-differ
@@ -233,7 +261,9 @@ def save(self):
233
261
"""Save changes: update system value and mark it as new initial value"""
234
262
if not self .is_changed ():
235
263
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 (
237
267
self .widget .get_value ()
238
268
)
239
269
@@ -247,7 +277,7 @@ def is_changed(self) -> bool:
247
277
"""Has the user selected something different from the initial value?"""
248
278
if not self .widget .is_sensitive ():
249
279
return False
250
- if self .widget .get_value () != self .get_current_value ():
280
+ if int ( self .widget .get_value () ) != self .get_current_value ():
251
281
return True
252
282
return False
253
283
@@ -260,9 +290,9 @@ def get_unsaved(self):
260
290
261
291
def get_current_value (self ):
262
292
"""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 )
266
296
267
297
def update_current_value (self ):
268
298
"""This should never be called."""
@@ -303,9 +333,7 @@ def save_values(self, values_dict: Dict[str, int]):
303
333
"""Wants a dict of 'vm-min-mem': value in MiB and
304
334
'dom0-mem-boost': value in MiB"""
305
335
# 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 ()}
309
337
310
338
assert (
311
339
len (text_dict ) == 2
@@ -474,9 +502,7 @@ def __init__(self, qapp: qubesadmin.Qubes, widget: Gtk.ComboBoxText):
474
502
)
475
503
476
504
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 ]
480
506
kernels = sorted (kernels , key = KernelVersion )
481
507
kernels_dict = {kernel : kernel for kernel in kernels }
482
508
kernels_dict ["(none)" ] = None
@@ -583,7 +609,9 @@ def __init__(self, gtk_builder: Gtk.Builder, qapp: qubesadmin.Qubes):
583
609
)
584
610
self .handlers .append (
585
611
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 ,
587
615
)
588
616
)
589
617
@@ -633,9 +661,7 @@ def __init__(self, gtk_builder: Gtk.Builder, qapp: qubesadmin.Qubes):
633
661
is_bool = False ,
634
662
)
635
663
)
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 ))
639
665
640
666
self .handlers .append (MemoryHandler (gtk_builder ))
641
667
0 commit comments