pragma ComponentBehavior: Bound import Quickshell import Quickshell.Wayland import Quickshell.Widgets import Quickshell.Hyprland import QtQuick import Qt.labs.folderlistmodel 2.11 import QtQuick.Effects import qs import qs.settings import qs.widgets Rectangle { id: main layer.enabled: true layer.effect: MultiEffect { id: dropShadow source: main shadowEnabled: true shadowHorizontalOffset: 4 shadowVerticalOffset: 2 shadowOpacity: 0.5 shadowColor: "#020202" } required property real moduleHeight required property int screenHeight color: Colors.moduleBg radius: Config.rounding implicitWidth: moduleHeight implicitHeight: moduleHeight MaterialIcon { anchors.centerIn: main text: "\ue1bc" font.bold: true } MouseArea { id: clickHandler anchors.fill: main acceptedButtons: Qt.LeftButton cursorShape: Qt.PointingHandCursor onClicked: { wallPicker.visible = !wallPicker.visible; } } WlrLayershell { id: wallPicker visible: false exclusionMode: ExclusionMode.Ignore keyboardFocus: WlrKeyboardFocus.OnDemand implicitHeight: main.screenHeight / 8 color: 'transparent' anchors { bottom: true left: true right: true } margins { bottom: 20 left: 20 right: 20 } HyprlandFocusGrab { id: grabber active: wallPicker.visible windows: [wallPicker] onCleared: wallPicker.visible = false } onVisibleChanged: { if (wallPicker.visible) container.forceActiveFocus(); } ClippingRectangle { id: container focus: true Keys.onEscapePressed: { wallPicker.visible = false; } anchors.fill: parent color: Colors.base01 radius: Config.rounding border.width: 2 border.color: Colors.base0D GridView { id: wallpaperLayout clip: true snapMode: GridView.SnapOneRow flow: GridView.FlowTopToBottom cellHeight: container.height cellWidth: container.width / 8 anchors.fill: parent anchors.rightMargin: 10 model: wallpaperList delegate: ClippingWrapperRectangle { id: wallTile margin: 10 required property var modelData color: 'transparent' implicitWidth: wallPicker.width / 8 implicitHeight: wallPicker.height child: ClippingRectangle { id: wpRounder color: 'transparent' radius: Config.rounding / 1.5 Image { id: wallpaper anchors.fill: parent source: wallTile.modelData.filePath sourceSize.width: 16 * 30 sourceSize.height: 9 * 30 asynchronous: true cache: true } MouseArea { id: wpClickHandler anchors.fill: parent cursorShape: Qt.PointingHandCursor acceptedButtons: Qt.LeftButton hoverEnabled: true onClicked: { Config.wallpaper = wallTile.modelData.filePath; } } } } } FolderListModel { id: wallpaperList folder: Config.wallDir nameFilters: ["*.png"] } } } }