aboutsummaryrefslogtreecommitdiffstats
path: root/vm-manager/VmPanel.qml
diff options
context:
space:
mode:
Diffstat (limited to 'vm-manager/VmPanel.qml')
-rw-r--r--vm-manager/VmPanel.qml14
1 files changed, 11 insertions, 3 deletions
diff --git a/vm-manager/VmPanel.qml b/vm-manager/VmPanel.qml
index cf224d6..5960a1a 100644
--- a/vm-manager/VmPanel.qml
+++ b/vm-manager/VmPanel.qml
@@ -62,16 +62,21 @@ Scope {
// Which verbs make sense in the current state, mirroring the states the
// old rofi script switched on.
- function actionsFor(s) {
+ function actionsFor(s, saved) {
if (s === "running")
return [["shutdown", "Shutdown"], ["reboot", "Reboot"], ["suspend", "Suspend"],
["reset", "Reset"], ["destroy", "Force stop"]];
if (s === "paused" || s === "suspended")
return [["resume", "Resume"], ["shutdown", "Shutdown"], ["destroy", "Force stop"]];
+ // Only worth offering when a saved image actually exists: without one
+ // managedsave-remove fails, and the button would be noise on every
+ // other VM.
+ if (saved)
+ return [["start", "Start"], ["discardsave", "Discard saved state"]];
return [["start", "Start"]];
}
- function isDestructive(a) { return a === "reset" || a === "destroy"; }
+ function isDestructive(a) { return a === "reset" || a === "destroy" || a === "discardsave"; }
function run(vm, action) {
if (isDestructive(action)) root.confirming = { kind: action, vm: vm, snap: "" };
@@ -265,6 +270,7 @@ Scope {
sourceComponent: detail
property string vmName: modelData
property string vmState: vm.state ?? ""
+ property bool vmSaved: vm.saved ?? false
}
}
}
@@ -282,6 +288,7 @@ Scope {
readonly property string vmName: parent.vmName
readonly property string vmState: parent.vmState
+ readonly property bool vmSaved: parent.vmSaved
Rectangle { width: parent.width; height: 1; color: Qt.alpha(Theme.text, 0.08) }
@@ -299,7 +306,7 @@ Scope {
spacing: 8
Repeater {
- model: root.actionsFor(vmState)
+ model: root.actionsFor(vmState, vmSaved)
Button {
required property var modelData
text: modelData[1]
@@ -391,6 +398,7 @@ Scope {
if (c.kind === "revert") return `Revert ${c.vm} to "${c.snap}"? Changes since that snapshot are lost.`;
if (c.kind === "snapdelete") return `Delete snapshot "${c.snap}"?`;
if (c.kind === "destroy") return `Force stop ${c.vm}? This is a power cut, not a shutdown.`;
+ if (c.kind === "discardsave") return `Discard the saved state of ${c.vm}? Its memory image is deleted and the next start boots cold. The disk is untouched.`;
if (c.kind === "reset") return `Reset ${c.vm}? This is a hard reset, not a reboot.`;
return "";
}