Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,4 @@ checks:black:
variables:
DIR: .
SKIP_PYLINT: 1
BLACK_ARGS: -l88 -v --diff --color --check
2 changes: 1 addition & 1 deletion .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ notes=FIXME,FIX,XXX,TODO
[FORMAT]

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

# Maximum number of lines in a module
max-module-lines=3000
Expand Down
1 change: 1 addition & 0 deletions icons/scalable/devices-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions icons/scalable/devices-light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions icons/scalable/qubes-icon-add.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions icons/scalable/qubes-icon-edit.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions icons/scalable/qubes-icon-remove.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions icons/scalable/qubes-unplug.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10,324 changes: 6,228 additions & 4,096 deletions qubes_config/global_config.glade

Large diffs are not rendered by default.

121 changes: 111 additions & 10 deletions qubes_config/global_config/basics_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@
new_value = self.model.get_selected()
setattr(self.trait_holder, self.trait_name, new_value)

def get_model(self) -> TraitSelector:
def get_model(self) -> VMListModeler:
return self.model


Expand Down Expand Up @@ -208,6 +208,99 @@
return self.model


class PreloadDispvmHandler(AbstractTraitHolder):
"""Handler for preloaded disposables. Requires SpinButton widgets:
'basics_preload_dispvm'"""

def __init__(
self,
qapp: qubesadmin.Qubes,
widget: Gtk.SpinButton,
defdispvm_model: VMListModeler,
is_dvm_template: Optional[Callable] = None,
):
self.qapp = qapp
self.widget = widget
self.defdispvm_model = defdispvm_model
self.defdispvm_model.connect_change_callback(self.on_defdispvm_changed)
self.is_dvm_template = is_dvm_template
self.preload_dispvm_adjustment = Gtk.Adjustment()
self.preload_dispvm_adjustment.configure(0, 0, 50, 1, 10, 0)
self.widget.configure(self.preload_dispvm_adjustment, 0.1, 0)
self.widget.set_value(self.get_current_value())
self.widget.set_sensitive(bool(self.get_defdispvm_value()))

def get_defdispvm_value(self):
return self.defdispvm_model.get_selected()

def on_defdispvm_changed(self):
value = self.get_defdispvm_value()
if value:
self.widget.set_sensitive(True)
self.widget.set_value(self.get_current_value())
else:
self.widget.set_value(0)
self.widget.set_sensitive(False)

@staticmethod
def get_readable_description() -> str: # pylint: disable=arguments-differ
"""Get human-readable description of the widget"""
# the pylint: disable above is because pylint does not understand
# static methods
return _("Number of preloaded disposables from default dispvm")

Check warning on line 250 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L250

Added line #L250 was not covered by tests

def save(self):
"""Save changes: update system value and mark it as new initial value"""
if not self.is_changed():
return
if not self.get_defdispvm_value():
return
apply_feature_change(

Check warning on line 258 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L256-L258

Added lines #L256 - L258 were not covered by tests
self.qapp.domains["dom0"],
"preload-dispvm-max",
int(self.widget.get_value()),
)

def reset(self):
"""Reset selection to the initial value."""
if not self.widget.is_sensitive():
return

Check warning on line 267 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L267

Added line #L267 was not covered by tests
self.widget.set_value(self.get_current_value())

def is_changed(self) -> bool:
"""Has the user selected something different from the initial value?"""
if not self.widget.is_sensitive():
return False
if int(self.widget.get_value()) != self.get_current_value():
return True

Check warning on line 275 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L275

Added line #L275 was not covered by tests
return False

def get_unsaved(self):
"""Get human-readable description of unsaved changes, or
empty string if none were found."""
if self.is_changed():
return self.get_readable_description()

Check warning on line 282 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L282

Added line #L282 was not covered by tests
return ""

def get_current_value(self):
"""This should never be called."""
if not self.get_defdispvm_value():
return 0
if not self.is_dvm_template:
return 0

Check warning on line 290 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L290

Added line #L290 was not covered by tests
return int(
get_feature(self.qapp.domains["dom0"], "preload-dispvm-max") or 0
)

def update_current_value(self):
"""This should never be called."""
raise NotImplementedError

Check warning on line 297 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L297

Added line #L297 was not covered by tests

def get_model(self) -> TraitSelector:
"""This should never be called."""
raise NotImplementedError

Check warning on line 301 in qubes_config/global_config/basics_handler.py

View check run for this annotation

Codecov / codecov/patch

qubes_config/global_config/basics_handler.py#L301

Added line #L301 was not covered by tests


class QMemManHelper:
"""Helper class to handle the ugliness of managing qmemman config."""

Expand Down Expand Up @@ -238,9 +331,7 @@
"""Wants a dict of 'vm-min-mem': value in MiB and
'dom0-mem-boost': value in MiB"""
# qmemman settings
text_dict = {
key: str(int(value)) + "MiB" for key, value in values_dict.items()
}
text_dict = {key: str(int(value)) + "MiB" for key, value in values_dict.items()}

assert (
len(text_dict) == 2
Expand Down Expand Up @@ -409,9 +500,7 @@
)

def _get_kernel_options(self) -> Dict[str, str]:
kernels = [
kernel.vid for kernel in self.qapp.pools["linux-kernel"].volumes
]
kernels = [kernel.vid for kernel in self.qapp.pools["linux-kernel"].volumes]
kernels = sorted(kernels, key=KernelVersion)
kernels_dict = {kernel: kernel for kernel in kernels}
kernels_dict["(none)"] = None
Expand Down Expand Up @@ -456,6 +545,9 @@
self.defdispvm_combo: Gtk.ComboBox = gtk_builder.get_object(
"basics_defdispvm_combo"
)
self.preload_dispvm_spin: Gtk.SpinButton = gtk_builder.get_object(
"basics_preload_dispvm"
)
self.fullscreen_combo: Gtk.ComboBoxText = gtk_builder.get_object(
"basics_fullscreen_combo"
)
Expand Down Expand Up @@ -513,6 +605,17 @@
additional_options=NONE_CATEGORY,
)
)
defdispvm_model: VMListModeler = self.handlers[
-1
].get_model() # type: ignore
self.handlers.append(
PreloadDispvmHandler(
qapp=self.qapp,
widget=self.preload_dispvm_spin,
defdispvm_model=defdispvm_model,
is_dvm_template=self._default_dispvm_filter,
)
)
self.handlers.append(
FeatureHandler(
trait_holder=self.vm,
Expand Down Expand Up @@ -559,9 +662,7 @@
is_bool=False,
)
)
self.handlers.append(
KernelHolder(qapp=self.qapp, widget=self.kernel_combo)
)
self.handlers.append(KernelHolder(qapp=self.qapp, widget=self.kernel_combo))

self.handlers.append(MemoryHandler(gtk_builder))

Expand Down
4 changes: 1 addition & 3 deletions qubes_config/global_config/conflict_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,7 @@ def __init__(
self.own_file_name = own_file_name
self.policy_manager = policy_manager

self.problem_box: Gtk.Box = gtk_builder.get_object(
f"{prefix}_problem_box"
)
self.problem_box: Gtk.Box = gtk_builder.get_object(f"{prefix}_problem_box")
self.problem_list: Gtk.ListBox = gtk_builder.get_object(
f"{prefix}_problem_files_list"
)
Expand Down
Loading