Fork the desktop off Omarchy as a self-contained system
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import QtQuick
|
||||
|
||||
// Hyprland leaves an already-mapped layer surface at its old global position
|
||||
// when its monitor moves within the layout: undocking disables the internal
|
||||
// panel, the external monitor shifts to x=0, and long-lived surfaces such as
|
||||
// the bar and background keep rendering at the old offset — or entirely
|
||||
// off-screen — until they are unmapped and remapped. Watch the screen's
|
||||
// origin and pulse `remapping` when it moves; the owning window folds that
|
||||
// into its `visible` binding so the compositor re-places the surface at the
|
||||
// monitor's new origin.
|
||||
Item {
|
||||
id: root
|
||||
|
||||
required property var window
|
||||
readonly property var screen: window ? window.screen : null
|
||||
|
||||
// Fold into the window's binding: visible: <shown> && !guard.remapping
|
||||
property bool remapping: false
|
||||
|
||||
visible: false
|
||||
|
||||
// A layout reshuffle can move the monitor more than once before it lands.
|
||||
// Let the positions settle before the single remap pulse.
|
||||
Timer {
|
||||
id: settleTimer
|
||||
interval: 200
|
||||
onTriggered: root.remapping = true
|
||||
}
|
||||
|
||||
// Hold the surface unmapped for a beat so the compositor processes the
|
||||
// unmap before the remap instead of coalescing them into a no-op.
|
||||
Timer {
|
||||
interval: 50
|
||||
running: root.remapping
|
||||
onTriggered: root.remapping = false
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: root.screen
|
||||
function onXChanged() { settleTimer.restart() }
|
||||
function onYChanged() { settleTimer.restart() }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user