Repository navigation
[ryoku] shell: keep clicks in an expanded Controls drawer inside - #760
Open
techapostle wants to merge 1 commit into
Open
techapostle wants to merge 1 commit into
techapostle wants to merge 1 commit into
Conversation
Opening the Brightness or Volume drawer grows the Controls panel, and the panel window grows with it, but a press on the grown part closed the panel. The click-away window sits above the panel and passes presses through only where its mask cuts a hole. It never redraws after its first frame, so the mask edit for the taller panel never reached the compositor: a WAYLAND_DEBUG trace shows one set_input_region with the first frame and no later commit, and presses closed the panel from the old bottom edge down. The same applied to the media section appearing and to a panel that shrank. The hole is now the panel's whole column, which does not change while the panel is open. The panel window takes that column and places the card in it; a press in the clear part above or below the card closes the panel from there. The settings popup is bounded by the card instead of the window, so at the Center placement it no longer rises above the card. Note: Fixed: clicking inside the expanded Brightness or Volume drawer in Controls no longer closes the panel
This branch has not been deployed
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.
What changed
In Controls (Super+Escape), expanding the Brightness drawer (one slider per display) or the Volume drawer grows the panel, but clicking anywhere in the grown part closes the panel as if the click landed outside it.
Cause. The panel's QML geometry is right. The
ryoku-sidebar-leftlayer goes from 688x654 to 688x883 when the drawer opens, and the dismiss mask's hole updates to12,64 688x883in QML. But theryoku-corner-dismisswindow sits above the panel and never redraws after its first frame, so the new input region is never committed. AWAYLAND_DEBUGtrace of the running shell shows oneset_input_region(hole 654 tall) with the first frame and nothing after it until the surface is destroyed. Bisecting with synthetic clicks puts the close boundary at y=718, which is 64 + 654, the old height. A standalone Quickshell repro with the same env and mask bindings does update its mask, so I could not pin the stall below the Qt/Quickshell level. The same flaw hits the Volume drawer, the media section appearing, and a panel that shrinks, where the freed area lets clicks through to windows underneath.Fix. Nothing depends on the dismiss window redrawing anymore:
Sidebar.qml: the dismiss hole is the panel's whole column (panelX, roomY, wantedWidth, availableHeight), which does not change while the panel is open. The panel window takes that same column and places the card atpanelY - roomYwith heightwantedHeight. AMouseAreaunder the card closes the panel on presses in the clear part of the column and ignores presses on the card.ControlsBar.qml,ControlsBoard.qml,SidebarChrome.qml: the column window starts above the card at the Center placement. The window-wide overlay that fb5693d bounds the settings popup by would then let the popup rise about 105 px above the card. So the card is passed down, and the popup'sx,yandmaxHeightare measured against it, falling back to the overlay when no card is given. At the top placements the card equals the window, so the numbers match fb5693d exactly.ControlsSettingsPopup.qmlis unchanged.Cost: the panel's transparent buffer is column-sized while open (688x1004 here instead of 688x654). It redraws only while content animates. Nothing becomes resident, and no probes or timers are added.
Known limit: a store design that changes its width while open would still leave the hole stale horizontally. That is the same root cause; I have not seen it happen.
Independent of #759; both add an entry at the top of
ryoku/shell/CHANGELOG.md, so whichever merges second needs a one-line rebase.Area
ryoku
How it was tested
Arch, Hyprland 0.57.0, NVIDIA. The live shell's sidebar was set to unstable-dev's sidebar (including fb5693d) plus this change. Clicks were synthetic (ydotool), with screenshots (grim) and
hyprctl layers.Top-left placement:
Center placement, set through the gear and restored afterwards:
Also:
bin/ryoku-dev-lint-qmlpasses andbin/ryoku-dev-verify-qml-bindingsreports no property set twice. qmllint shows only the unqualifiedSidebarStateaccess the files already have.Not tested: store designs, top-center/top-right/left/right (same code path as top-left, the card at the window top), additional monitors, and reduced motion.
Checklist
[area] scope: summarycommit subject.CHANGELOG.mdupdated in the area I touched.--no-verify.luac -p), shell scripts passbash -n, and QML passesqmllintwhere applicable.