feat(overview): show windows from all monitors#85
Open
enhulsman wants to merge 3 commits intoAxenide:mainfrom
Open
feat(overview): show windows from all monitors#85enhulsman wants to merge 3 commits intoAxenide:mainfrom
enhulsman wants to merge 3 commits intoAxenide:mainfrom
Conversation
Introduce local workspace tracking (trackedWorkspaceId) so Tab/arrow key navigation, window clicks, and Enter-with-empty-search no longer dispatch Hyprland IPC commands while the focus grab is active. This prevents the overview from closing itself mid-interaction due to IPC-triggered onCleared events. Changes: - Tab/Shift-Tab/Arrow keys update trackedWorkspaceId locally - Enter with empty search closes overview, then dispatches workspace - Single-click on window emits workspaceNavigated signal (no dispatch) - Double-click on window closes overview first, then focuses - Remove focuswindow dispatch on hover (prevents cursor warping) - Add "workspace" to HyprlandData IPC ignore list - Dynamic badge sizing (12% of min dimension, floor 12px) - Workspace tile background color prevents white bleed-through - focusedWorkspaceIndicator z:10 for correct render order
Animate border.color instead of border.width on hover. The width 0→2 animation caused geometry changes that produced a brief visual glitch on the screencopy preview.
Remove the monitor filter from both grid and scrolling overview layouts so windows from all monitors are visible in each screen's overview. Cross-monitor windows are scaled proportionally using uniform scaling to preserve aspect ratio within ScreencopyView letterboxing. Same- monitor windows get scale 1.0 (behavior identical to before). Changes: - Remove monitor filter from filteredWindowData (grid) and workspaceWindows (scrolling) - Add per-window crossScaleX/Y/Uniform and centering offsets - Look up each window's actual monitor for position calculation - Add solid background fill to prevent white bleed-through - Pass monitors list to ScrollingWorkspace delegate - Fix contentBounds to use crossScaleUniform for position
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prerequisites
Depends on #83 (
fix/overview-decouple-dispatch) — please merge that first. This PR builds on the local workspace tracking it introduces. Removing the monitor filter means the overview shows windows across all monitors, and that needs thetrackedWorkspaceIdinfrastructure for correct workspace group filtering during navigation.Note: the diff currently includes #83's changes since both target main. Once that merges, the diff will update to show only this PR's changes.
Problem
I run a dual-monitor setup (1080p + ultrawide) and noticed the overview only shows windows from the current monitor. If I have a browser on my ultrawide and a terminal on my main screen, opening the overview on either one only shows half my windows. I'd have to remember which screen something is on to find it, which kind of defeats the point of having an overview.
The window list is just filtered by monitor ID, so each screen's overview only shows its own windows.
Solution
Remove the monitor filter from the window list in both
Overview.qml(grid layout) andScrollingWorkspace.qml(scrolling layout).Since monitors can have different resolutions, cross-monitor windows need scale correction:
crossScaleUniform = min(overviewWidth/windowMonWidth, overviewHeight/windowMonHeight)ScreencopyViewletterboxing)Same-monitor windows get scale 1.0 — single-monitor users won't notice any difference.
Other things I fixed along the way
Colors.backgroundfill to prevent white bleed-through on cross-monitor tilesfocusedWorkspaceIndicatorgetsz: 10so it renders above window previewsmonitorslist is threaded intoScrollingWorkspacefor the scrolling layoutFiles Changed
modules/widgets/overview/Overview.qml: remove monitor filter, cross-scale per window, z-order fix, background fillmodules/widgets/overview/OverviewWindow.qml: crossScaleX/crossScaleY properties, dynamic badgemodules/widgets/overview/ScrollingOverview.qml: pass monitors to delegatemodules/widgets/overview/ScrollingWorkspace.qml: remove filter, cross-scale positioningTesting