import qs import qs.services import qs.modules.common import qs.modules.common.widgets import qs.modules.common.functions import QtQuick import QtQuick.Controls import Quickshell import Quickshell.Io import Quickshell.Wayland import Quickshell.Hyprland Scope { id: root Loader { id: wallpaperSelectorLoader active: GlobalStates.wallpaperSelectorOpen sourceComponent: PanelWindow { id: panelWindow readonly property HyprlandMonitor monitor: Hyprland.monitorFor(panelWindow.screen) property bool monitorIsFocused: (Hyprland.focusedMonitor?.id == monitor?.id) exclusionMode: ExclusionMode.Ignore WlrLayershell.namespace: "quickshell:wallpaperSelector" WlrLayershell.layer: WlrLayer.Overlay color: "transparent" anchors.top: true margins { top: Config?.options.bar.vertical ? Appearance.sizes.hyprlandGapsOut : Appearance.sizes.barHeight + Appearance.sizes.hyprlandGapsOut } mask: Region { item: content } implicitHeight: Appearance.sizes.wallpaperSelectorHeight implicitWidth: Appearance.sizes.wallpaperSelectorWidth HyprlandFocusGrab { // Click outside to close id: grab windows: [ panelWindow ] active: wallpaperSelectorLoader.active onCleared: () => { if (!active) GlobalStates.wallpaperSelectorOpen = false; } } WallpaperSelectorContent { id: content anchors { fill: parent } } } } function toggleWallpaperSelector() { if (Config.options.wallpaperSelector.useSystemFileDialog) { Wallpapers.openFallbackPicker(Appearance.m3colors.darkmode); return; } GlobalStates.wallpaperSelectorOpen = !GlobalStates.wallpaperSelectorOpen } IpcHandler { target: "wallpaperSelector" function toggle(): void { root.toggleWallpaperSelector(); } function random(): void { Wallpapers.randomFromCurrentFolder(); } } GlobalShortcut { name: "wallpaperSelectorToggle" description: "Toggle wallpaper selector" onPressed: { root.toggleWallpaperSelector(); } } GlobalShortcut { name: "wallpaperSelectorRandom" description: "Select random wallpaper in current folder" onPressed: { Wallpapers.randomFromCurrentFolder(); } } }