import QtQuick import QtQuick.Window import org.kde.layershell 1.0 as LayerShell import Nebula.UI Window { id: root readonly property int outputWidth: OutputTracker.width > 0 ? OutputTracker.width : (screen && screen.width > 0 ? screen.width : Screen.width) readonly property int outputHeight: OutputTracker.height > 0 ? OutputTracker.height : (screen && screen.height > 0 ? screen.height : Screen.height) title: qsTr("Nebula Launcher") color: "transparent" flags: Qt.FramelessWindowHint visible: ShellState.launcherOpen || launcher.opacity > 0.01 width: outputWidth height: Math.max(1, outputHeight - Theme.topBarHeight) LayerShell.Window.scope: "nebula-launcher" LayerShell.Window.layer: LayerShell.Window.LayerOverlay LayerShell.Window.anchors: LayerShell.Window.AnchorTop | LayerShell.Window.AnchorBottom | LayerShell.Window.AnchorLeft | LayerShell.Window.AnchorRight LayerShell.Window.margins.top: Theme.topBarHeight LayerShell.Window.exclusionZone: 0 LayerShell.Window.keyboardInteractivity: ShellState.launcherOpen ? LayerShell.Window.KeyboardInteractivityExclusive : LayerShell.Window.KeyboardInteractivityNone Item { anchors.fill: parent focus: ShellState.launcherOpen Keys.onEscapePressed: { event.accepted = true ShellState.closeLauncher() } } MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: ShellState.closeLauncher() } Launcher { id: launcher x: 10 y: 10 width: Math.min(420, parent.width - 20) height: Math.min(implicitHeight, Math.min(640, parent.height - 24)) opacity: ShellState.launcherOpen ? 1 : 0 yOffset: ShellState.launcherOpen ? 0 : -6 scale: ShellState.launcherOpen ? 1 : 0.985 focus: ShellState.launcherOpen Behavior on opacity { NumberAnimation { duration: Theme.animationNormal easing.type: Easing.OutCubic } } Behavior on yOffset { NumberAnimation { duration: Theme.animationNormal easing.type: Easing.OutCubic } } Behavior on scale { NumberAnimation { duration: Theme.animationNormal easing.type: Easing.OutCubic } } } }