Complete contextual desktop controls

This commit is contained in:
Gabriel Brown
2026-08-20 22:00:53 -04:00
parent a90f6eb357
commit 69ecec7ecf
9 changed files with 249 additions and 23 deletions
@@ -176,33 +176,33 @@ Item {
height: aspect > 0 ? width / aspect : parent.height
opacity: hasContent ? 1 : 0
// The capture context isn't ready the instant the layer surface is
// told to become visible — it needs the surface to actually map,
// which takes a frame or two. Calling captureFrame() before then
// logs "no recording context is ready" and yields nothing, so
// retry a few times and then give up quietly (the caption and app
// icon are still shown, so a missing thumbnail is cosmetic).
property int captureAttempts: 0
// A ScreencopyView cannot tell us that its recording context is
// ready before a capture. The enclosing overview gets that
// context only after its first rendered frame, so defer the first
// one-shot capture to that event. Retrying before then only emits
// "no recording context is ready" warnings; if a capture later
// cannot produce content, the app icon remains the fallback.
property bool recordingReady: false
function tryCapture(): void {
captureAttempts = 0;
captureRetry.restart();
if (shot.hasContent)
return;
if (!shot.recordingReady) {
frameReady.restart();
return;
}
shot.captureFrame();
}
// `shot`, not `parent`: Timer is a QtObject, so `parent` does not
// resolve to the enclosing ScreencopyView.
Timer {
id: captureRetry
interval: 80
repeat: true
FrameAnimation {
id: frameReady
running: false
onTriggered: {
if (shot.hasContent || shot.captureAttempts >= 6) {
stop();
running = false;
if (shot.hasContent)
return;
}
shot.captureAttempts++;
shot.captureFrame();
shot.recordingReady = true;
shot.tryCapture();
}
}