1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-28 14:05:21 -04:00
Files
DankMaterialShell/quickshell/Widgets/PopoutHoverDismiss.qml
T
purian23 6bee1b2c86 feat(HoverMode): implement hover popout & launcher functionality in all modes
- New Hover toggle found in DankBar Settings
- New Hover to Reveal Launcher in FrameTab Settings
2026-06-27 22:47:38 -04:00

76 lines
2.1 KiB
QML

pragma ComponentBehavior: Bound
import QtQuick
import qs.Common
Item {
id: root
required property bool dismissEnabled
required property bool dismissSuspended
required property bool surfaceVisible
property int graceInterval: 150
property bool bodyHovered: false
property real globalOffsetX: 0
property real globalOffsetY: 0
signal dismissRequested
function cancelPending() {
graceTimer.stop();
hoverTracker.cancelPending();
}
function updateBodyHover(over) {
bodyHovered = over;
if (over) {
graceTimer.stop();
} else if (dismissEnabled && !dismissSuspended && surfaceVisible) {
graceTimer.restart();
}
}
function updateCursor(sceneX, sceneY) {
PopoutManager.updateHoverCursor(sceneX + globalOffsetX, sceneY + globalOffsetY);
}
onDismissEnabledChanged: {
if (!dismissEnabled)
cancelPending();
}
onDismissSuspendedChanged: {
if (dismissSuspended)
graceTimer.stop();
else if (dismissEnabled && surfaceVisible && !bodyHovered)
graceTimer.restart();
}
onSurfaceVisibleChanged: {
if (!surfaceVisible)
cancelPending();
}
Timer {
id: graceTimer
interval: root.graceInterval
repeat: false
onTriggered: {
if (!root.dismissEnabled || root.dismissSuspended || !root.surfaceVisible || root.bodyHovered)
return;
if (PopoutManager.cursorOverBar(PopoutManager.hoverCursorGlobalX, PopoutManager.hoverCursorGlobalY))
return;
root.dismissRequested();
}
}
HoverDismissTracker {
id: hoverTracker
enabled: root.dismissEnabled && !root.dismissSuspended && root.surfaceVisible
shouldDismiss: function () {
return !PopoutManager.cursorOverBar(PopoutManager.hoverCursorGlobalX, PopoutManager.hoverCursorGlobalY);
}
onDismissRequested: root.dismissRequested()
onHoverMoved: (gx, gy) => root.updateCursor(gx, gy)
}
}