Merge pull request 'Update start/stop button based on VM state' (#689) from Mic92-wayland-update into main
All checks were successful
checks / test (push) Successful in 33s
checks-impure / test (push) Successful in 1m20s

This commit is contained in:
clan-bot 2024-01-04 17:50:25 +00:00
commit 96e2deee1f
3 changed files with 28 additions and 30 deletions

View File

@ -157,13 +157,9 @@ class ProcessManager:
return self.by_pid(pid=proc.pid)
def running_procs(self) -> list[str]:
res = []
for ident, proc in self.procs.copy().items():
if proc.proc.is_alive():
res.append(ident)
else:
del self.procs[ident]
return res
alive_procs = filter(lambda pair: pair[1].proc.is_alive(), self.procs.items())
self.procs = dict(alive_procs)
return list(self.procs.keys())
def spawn(
self,
@ -189,6 +185,7 @@ class ProcessManager:
print("Killing all processes", file=sys.stderr)
for proc in self.procs.values():
proc.kill_group()
self.procs.clear()
def kill(self, ident: str) -> None:
if ident not in self.procs:

View File

@ -3,7 +3,7 @@ from collections.abc import Callable
from gi.repository import Gdk, GdkPixbuf, Gtk
from ..interfaces import Callbacks
from ..models import VMBase
from ..models import VMBase, VMStatus
from .context_menu import VmMenu
@ -89,29 +89,26 @@ class ClanList(Gtk.Box):
cbs: Callbacks,
selected_vm: VMBase | None,
vms: list[VMBase],
show_toolbar: bool = True,
) -> None:
super().__init__(orientation=Gtk.Orientation.VERTICAL, expand=True)
self.remount_edit_view = remount_edit
self.remount_list_view = remount_list
self.set_selected = set_selected
self.show_toolbar = show_toolbar
self.cbs = cbs
self.show_join = cbs.show_join
self.selected_vm: VMBase | None = selected_vm
if show_toolbar:
self.toolbar = ClanListToolbar(
on_start_clicked=self.on_start_clicked,
on_stop_clicked=self.on_stop_clicked,
on_edit_clicked=self.on_edit_clicked,
on_join_clan_clicked=self.on_join_clan_clicked,
on_flash_clicked=self.on_flash_clicked,
)
self.toolbar.set_is_selected(self.selected_vm is not None)
self.add(self.toolbar)
self.toolbar = ClanListToolbar(
on_start_clicked=self.on_start_clicked,
on_stop_clicked=self.on_stop_clicked,
on_edit_clicked=self.on_edit_clicked,
on_join_clan_clicked=self.on_join_clan_clicked,
on_flash_clicked=self.on_flash_clicked,
)
self.toolbar.set_selected_vm(self.selected_vm)
self.add(self.toolbar)
self.add(
ClanListView(
@ -146,11 +143,7 @@ class ClanList(Gtk.Box):
self.remount_edit_view()
def on_select_vm(self, vm: VMBase) -> None:
if self.show_toolbar:
if vm is None:
self.toolbar.set_is_selected(False)
else:
self.toolbar.set_is_selected(True)
self.toolbar.set_selected_vm(vm)
self.set_selected(vm)
self.selected_vm = vm
@ -188,11 +181,11 @@ class ClanListToolbar(Gtk.Toolbar):
self.flash_button.connect("clicked", on_flash_clicked)
self.add(self.flash_button)
def set_is_selected(self, s: bool) -> None:
if s:
def set_selected_vm(self, vm: VMBase | None) -> None:
if vm:
self.edit_button.set_sensitive(True)
self.start_button.set_sensitive(True)
self.stop_button.set_sensitive(True)
self.start_button.set_sensitive(vm.status == VMStatus.STOPPED)
self.stop_button.set_sensitive(vm.status == VMStatus.RUNNING)
else:
self.edit_button.set_sensitive(False)
self.start_button.set_sensitive(False)

View File

@ -57,9 +57,17 @@ class OverviewWindow(Gtk.ApplicationWindow):
widget = self.stack.get_child_by_name("list")
if widget:
widget.destroy()
vms = []
for vm in get_initial_vms(self.cbs.running_vms()):
vms.append(vm.base)
# FIXME: It feels very odd that we have to re-fetch the selected VM.
# The model should be just updated in-place.
if self.selected_vm and vm.base.url == self.selected_vm.url:
self.selected_vm = vm.base
clan_list = ClanList(
vms=[vm.base for vm in get_initial_vms(self.cbs.running_vms())],
vms=vms,
cbs=self.cbs,
remount_list=self.remount_list_view,
remount_edit=self.remount_edit_view,