aboutsummaryrefslogtreecommitdiffstats
path: root/config/quickshell/overview-unified/modules/overview/Overview.qml
diff options
context:
space:
mode:
authorDon Williams <don.e.williams@gmail.com>2026-07-13 15:58:40 -0400
committerPinapelz <yukais@pinapelz.com>2026-08-29 21:40:34 -0700
commit292b6daf5c56ff60a6263ff4945e74e5ca4372e7 (patch)
tree0c01784cf05adc8deec5a8a50fa71e1db294c96e /config/quickshell/overview-unified/modules/overview/Overview.qml
parent54b56290253719aa71d8ccfddff6fa0424e22804 (diff)
Creating an overview version that works with all branches
Signed-off-by: Don Williams <don.e.williams@gmail.com> On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: config/quickshell/overview-unified/README.md new file: config/quickshell/overview-unified/assets/image.png new file: config/quickshell/overview-unified/common/Appearance.qml new file: config/quickshell/overview-unified/common/Config.qml new file: config/quickshell/overview-unified/common/functions/ColorUtils.qml new file: config/quickshell/overview-unified/common/functions/qmldir new file: config/quickshell/overview-unified/common/qmldir new file: config/quickshell/overview-unified/common/widgets/RectangularShadow.qml new file: config/quickshell/overview-unified/common/widgets/StyledRectangularShadow.qml new file: config/quickshell/overview-unified/common/widgets/StyledText.qml new file: config/quickshell/overview-unified/common/widgets/StyledToolTip.qml new file: config/quickshell/overview-unified/common/widgets/StyledToolTipContent.qml new file: config/quickshell/overview-unified/common/widgets/qmldir new file: config/quickshell/overview-unified/modules/overview/Overview.qml new file: config/quickshell/overview-unified/modules/overview/OverviewWidget.qml new file: config/quickshell/overview-unified/modules/overview/OverviewWindow.qml new file: config/quickshell/overview-unified/modules/overview/qmldir new file: config/quickshell/overview-unified/services/GlobalStates.qml new file: config/quickshell/overview-unified/services/HyprlandData.qml new file: config/quickshell/overview-unified/services/qmldir new file: config/quickshell/overview-unified/shell.qml new file: config/quickshell/qs-hyprview-trixie/LICENSE new file: config/quickshell/qs-hyprview-trixie/README.md new file: config/quickshell/qs-hyprview-trixie/common/Appearance.qml new file: config/quickshell/qs-hyprview-trixie/layouts/BandsLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/ColumnarLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/HeroLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/JustifiedLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/LayoutsManager.qml new file: config/quickshell/qs-hyprview-trixie/layouts/MasonryLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/SatelliteLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/SmartGridLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/SpiralLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/StarggeredLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/VortexLayout.qml new file: config/quickshell/qs-hyprview-trixie/layouts/qmldir new file: config/quickshell/qs-hyprview-trixie/modules/Hyprview.qml new file: config/quickshell/qs-hyprview-trixie/modules/SearchBox.qml new file: config/quickshell/qs-hyprview-trixie/modules/WindowThumbnail.qml new file: config/quickshell/qs-hyprview-trixie/modules/qmldir new file: config/quickshell/qs-hyprview-trixie/qs-hyprview-template.qml new file: config/quickshell/qs-hyprview-trixie/screenshots/bands.jpeg new file: config/quickshell/qs-hyprview-trixie/screenshots/hero.jpeg new file: config/quickshell/qs-hyprview-trixie/screenshots/masonry.jpeg new file: config/quickshell/qs-hyprview-trixie/screenshots/satellite.jpeg new file: config/quickshell/qs-hyprview-trixie/screenshots/smartgrid.jpeg new file: config/quickshell/qs-hyprview-trixie/screenshots/spiral.jpeg new file: config/quickshell/qs-hyprview-trixie/screenshots/staggered.jpeg new file: config/quickshell/qs-hyprview-trixie/screenshots/vortex.jpeg new file: config/quickshell/qs-hyprview-trixie/shell.qml
Diffstat (limited to 'config/quickshell/overview-unified/modules/overview/Overview.qml')
-rw-r--r--config/quickshell/overview-unified/modules/overview/Overview.qml147
1 files changed, 147 insertions, 0 deletions
diff --git a/config/quickshell/overview-unified/modules/overview/Overview.qml b/config/quickshell/overview-unified/modules/overview/Overview.qml
new file mode 100644
index 00000000..b3a299cb
--- /dev/null
+++ b/config/quickshell/overview-unified/modules/overview/Overview.qml
@@ -0,0 +1,147 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Quickshell
+import Quickshell.Io
+import Quickshell.Wayland
+import Quickshell.Hyprland
+import "../../common"
+import "../../services"
+import "."
+
+Scope {
+ id: overviewScope
+ Variants {
+ id: overviewVariants
+ model: Quickshell.screens
+ PanelWindow {
+ id: root
+ required property var modelData
+ readonly property HyprlandMonitor monitor: Hyprland.monitorFor(root.screen)
+ property bool monitorIsFocused: (Hyprland.focusedMonitor?.id == monitor?.id)
+ screen: modelData
+ visible: GlobalStates.overviewOpen
+
+ WlrLayershell.namespace: "quickshell:overview"
+ WlrLayershell.layer: WlrLayer.Overlay
+ WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
+ color: "transparent"
+
+ mask: Region {
+ item: GlobalStates.overviewOpen ? keyHandler : null
+ }
+
+ anchors {
+ top: true
+ bottom: true
+ left: !(Config?.options.overview.enable ?? true)
+ right: !(Config?.options.overview.enable ?? true)
+ }
+
+ HyprlandFocusGrab {
+ id: grab
+ windows: [root]
+ property bool canBeActive: root.monitorIsFocused
+ active: false
+ onCleared: () => {
+ if (!active)
+ GlobalStates.overviewOpen = false;
+ }
+ }
+
+ Connections {
+ target: GlobalStates
+ function onOverviewOpenChanged() {
+ if (GlobalStates.overviewOpen) {
+ delayedGrabTimer.start();
+ }
+ }
+ }
+
+ Timer {
+ id: delayedGrabTimer
+ interval: Config.options.hacks.arbitraryRaceConditionDelay
+ repeat: false
+ onTriggered: {
+ if (!grab.canBeActive)
+ return;
+ grab.active = GlobalStates.overviewOpen;
+ }
+ }
+
+ implicitWidth: columnLayout.implicitWidth
+ implicitHeight: columnLayout.implicitHeight
+
+ Item {
+ id: keyHandler
+ anchors.fill: parent
+ visible: GlobalStates.overviewOpen
+ focus: GlobalStates.overviewOpen
+
+ Keys.onPressed: event => {
+ if (event.key === Qt.Key_Escape || event.key === Qt.Key_Return) {
+ GlobalStates.overviewOpen = false;
+ event.accepted = true;
+ } else if (event.key === Qt.Key_Left || event.key === Qt.Key_Right || event.key === Qt.Key_Up || event.key === Qt.Key_Down) {
+ const workspacesPerGroup = Config.options.overview.rows * Config.options.overview.columns;
+ const currentId = Hyprland.focusedMonitor?.activeWorkspace?.id ?? 1;
+ const currentGroup = Math.floor((currentId - 1) / workspacesPerGroup);
+ const minWorkspaceId = currentGroup * workspacesPerGroup + 1;
+ const maxWorkspaceId = minWorkspaceId + workspacesPerGroup - 1;
+
+ let targetId;
+ if (event.key === Qt.Key_Left) {
+ targetId = currentId - 1;
+ if (targetId < minWorkspaceId) targetId = maxWorkspaceId;
+ } else if (event.key === Qt.Key_Right) {
+ targetId = currentId + 1;
+ if (targetId > maxWorkspaceId) targetId = minWorkspaceId;
+ } else if (event.key === Qt.Key_Up) {
+ targetId = currentId - Config.options.overview.columns;
+ if (targetId < minWorkspaceId) targetId += workspacesPerGroup;
+ } else {
+ targetId = currentId + Config.options.overview.columns;
+ if (targetId > maxWorkspaceId) targetId -= workspacesPerGroup;
+ }
+
+ Hyprland.dispatch("workspace " + targetId);
+ event.accepted = true;
+ }
+ }
+ }
+
+ ColumnLayout {
+ id: columnLayout
+ visible: GlobalStates.overviewOpen
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ top: parent.top
+ topMargin: 100
+ }
+
+ Loader {
+ id: overviewLoader
+ active: GlobalStates.overviewOpen && (Config?.options.overview.enable ?? true)
+ sourceComponent: OverviewWidget {
+ panelWindow: root
+ visible: true
+ }
+ }
+ }
+ }
+ }
+
+ IpcHandler {
+ target: "overview"
+
+ function toggle() {
+ GlobalStates.overviewOpen = !GlobalStates.overviewOpen;
+ }
+ function close() {
+ GlobalStates.overviewOpen = false;
+ }
+ function open() {
+ GlobalStates.overviewOpen = true;
+ }
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage