summaryrefslogtreecommitdiff
path: root/src/layout
Commit message (Collapse)AuthorAgeFilesLines
* algo/scrolling: various scrolling view related bugfixes (#13974)erstarr2026-05-0817-29/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix scrolling view move when a grouped window is closed - prevent redundant space assignment for a grouped window that's about to be unmapped, add a `FOCUS_REASON` for unmapping grouped windows * fix focus_fallback after unmapping a window floating moving view * fix view change when changing workspaces (special and normal). add an optional `RECALCULATE_REASON` parameter to `recalculate()` calls of all algorithms. add an optional `RECALCULATE_MONITOR_REASON` parameter to `recalculateMonitor()` calls. add 2 new `FOCUS_REASON`s, for workspace change and special workspace toggle * Fix hyprctl keyword causing scrolling view move. rename INPUT_MODE_KB to INPUT_MODE_HARD since it seems to have little to do with keybinds * fix fullscreen/maximise moving the scrolling view * fix opening of layer 3 programs moving scrolling view * refactor, clean up and clang-format * fix bad decisions * fix includes, clang-format. * remove TODO * `focuswindow` no longer moves scrolling view when `follow_focus = 0` * fix: changes in a group's current window no longer casues scrolling view shift when `follow_focus = 0` * fix: `moveintogroup`, `movewindoworgroup` no longer causes scrolling view change if `follow_focus = 0` * clang-format * add `RECALCULATE_REASON_UNKNOWN`, `RECALCULATE_MONITOR_REASON_UNKNOWN`, `REMOVE_FROM_GROUP_REASON_UNKNOWN` remove optional wrapper from their enums, refactor code to work with the change * dispatches that call `switchtoWindow()` in CKeybindManager no longer cause scrolling view to move if `follow_focus = 0`. They still cause the move if `follow_focus = 1` Dispatches effected by this: `movefocus`, `cyclenext`, `focuscurrentorlast`, `focuscurrentorurgent` * Fix for Lua: switchToWondow * Fix for Lua: focus({window}) * Fix for Lua: Move Window Into Group * clang-format * Drop `hyprctl keyword` change * test: `focus({window})` with `follow_focus = false` * test: `focus({window})` with `follow_focus = true` * test: test Focus Fallback * test: Focus Fallback with groups * test: workspace change * test: special workspace toggle * test: workspace change - special to special also minor refactoring * test: close window in a group * test: move window into group `follow_focus = false` minor fix in test: expect -> assert * test: move window into group `follow_focus = true` * test: new layer * test: maximise fix in test: expect to assert. * test: fullscreen * test: `dispatch window.focus({ direction })` when `follow_focus = false` * test: `dispatch window.focus({ direction })` when `follow_focus = true` test-fix: expect -> assert * test: move focus within group when `follow_focus = false` * test: move focus within group when `follow_focus = true` * test-fix: kill all layers before killing all windows in layers test. prevents internal post test cleanup function failing to kill all layers test-fix: maximized and fullscreen swapped between their tests test-fix: testScrollingViewBehaviourMoveFocusInGroupFollowFocusTrue missing layout initialization test-fix: testScrollingViewBehaviourWorkspaceChange, testScrollingViewBehaviourCloseWindowInGroup have stale window class in a comment clang-format * catch up with main: move to new test function * clean-up the clean-up part of the tests: redundant * clang-format * pain * suffering: fix rebase fail * test: manually kill all layers since the cleanup function fails * remove test: fullscreen and maximise. scrolling has its own behaviour now
* layout/scrolling: fix edge detection in recalculate() (#14359)Vaxry2026-05-081-4/+9
| | | ref #14339
* gestures: add scroll_move (#14063)Vaxry2026-05-072-0/+166
|
* layout/scrolling: handle fullscreen manually (#14190)Vaxry2026-05-0717-80/+599
| | | Makes scroll handle fullscreen by itself, allowing for fs scrolls.
* config/lua: add simple layout API (#14258)Vaxry2026-05-063-3/+26
| | | Adds a simple layout lua api
* layout/master: fix rollprev/rollnext focusing the wrong window (#14209)Kyler Clay2026-05-021-4/+12
| | | | | * layout/master: fix rollprev/rollnext focusing the wrong window * tests/master: add tests for rollnext/rollprev focus
* layout/dwindle,master: return invalid layoutmsg errorsVaxry2026-05-022-2/+4
|
* cleanup: avoid repeated weak_ptr::lock() usage in MasterAlgorithm (#14226)Visal Vijay2026-04-301-3/+9
|
* desktop/window: refactor over fullscreen stateVaxry2026-04-292-2/+2
|
* desktop/window: expand hidden into proper statesVaxry2026-04-291-5/+10
|
* config/lua: add ExpressionVec2, allow using a table for vec2 rules (#14197)Vaxry2026-04-281-6/+6
|
* config/errors: Report and categorize errors properly for actions (#14192)Vaxry2026-04-2816-181/+191
| | | | Makes all errors categorized, some not displayed, some displayed. All errors can be obtained after hl.dispatch()
* config/lua: init lua config manager, use lua if available (#13817)Vaxry2026-04-2612-153/+150
| | | Adds a new lua config manager, which will automatically be used if there is a lua config present.
* algo/scroll: add center for centering the current col (#14059)Vaxry2026-04-171-0/+11
| | | ref #14027
* monocle: avoid repeated workspace monitor lock() calls (#14085)Visal Vijay2026-04-161-2/+3
| | | | | | | | | * refactor(monocle): avoid repeated workspace monitor lock() calls * clang-format * cleanup: avoid repeated weak_ptr::lock() calls * style: shorten variable name PMONITORWORKSPACEOWNER to PMONITOR
* layout/algo: preserve focused target if applicable on layout switches (#14058)Vaxry2026-04-121-0/+13
| | | fixes #13804
* cleanup: avoid repeated weak_ptr lock() calls in conditions (#14057)Visal Vijay2026-04-121-1/+2
|
* layouts/dwindle: override force after window drags (#14002)Vaxry2026-04-051-1/+1
|
* layout: revert "replace string comparison with ID-based matching in ↵Vaxry2026-04-021-16/+4
| | | | | | | | | | WorkspaceAlgoMatcher (#13943)" This reverts commit 529f72249c2cf4cefc824a612aeddf2d5f858f54. It's not better, see https://github.com/hyprwm/Hyprland/pull/13943#issuecomment-4180474615 God damnit.
* algo/scrolling: add expel, consume, and consume_or_expel (#13869)Vaxry2026-04-021-6/+62
| | | ref https://github.com/hyprwm/Hyprland/discussions/13403\#discussioncomment-15972750
* layout: replace string comparison with ID-based matching in ↵Visal Vijay2026-04-011-4/+16
| | | | | | | WorkspaceAlgoMatcher (#13943) * perf(layout): replace string comparison with ID-based matching in WorkspaceAlgoMatcher * perf(layout): replace string comparison with ID-based matching in WorkspaceAlgoMatcher
* input: allow focus to switch to most recently used window on closed (#13769)Chris Naporlee2026-03-281-1/+3
|
* algo/scrolling: improve behavior with focus_fit_method = center (#13795)fvla2026-03-262-3/+5
|
* layout: guard null workspace in CWindowTarget::updatePos() (#13861)Barrett Ruth2026-03-261-0/+3
|
* config: cleanup the entire config infrastructure (#13785)Vaxry2026-03-207-26/+35
| | | | Massively refactors the config infrastructure, sorely needed and will be req'd for the lua stuff
* algo/master: fix crash on null target in getNextTargetVaxry2026-03-171-1/+1
|
* window/rules: add scrolling_width (#13754)ItsOhen2026-03-172-8/+9
|
* source: c-f for new clang versionVaxry2026-03-151-2/+2
|
* algo/scroll: fix std::clamp assertion crash on resume from suspend (#13737)Nathan Ollerenshaw2026-03-152-1/+22
|
* algo/scroll: reverse horizontal dir mapping of vertical scroll directions ↵Sola2026-03-131-4/+4
| | | | (#13647)
* algo/dwindle: fix precise mouse setting (#13678)Bastien Souchu2026-03-102-31/+7
|
* layout: fix crash on monitor reconnect due to stale workspace statematjam2026-03-103-3/+18
| | | | Guard against null/expired workspace and monitor pointers during layout recalculation triggered by arrangeMonitors after sleep/wake.
* layout: fix null deref in focalPointForDir and moveInDirection (#13652)James Bingen2026-03-102-2/+18
| | | | | | Added a guard against expired m_parent weak pointer in IModeAlgorithm::focalPointForDir when the fullscreen monitor path is taken, and also added a null check in CLayoutManager::moveInDirection. This seemed to have fixed a segfault triggered by a 3-finger swipe gesture end on a fullscreen tiled window.
* algo/dwindle: Respect `force_split` when moving windows to workspaces (#13038)Nikolai Nechaev2026-03-102-12/+10
| | | | | | Respect `dwindle:force_split` not only when mapping new windows, but also when moving windows to workspaces. Fixes #13009.
* algo/dwindle: do NOT use smart_split for overridden focal point (#13635)Vaxry2026-03-091-2/+2
| | | ref #13594
* layout: fix drag_threshold window snap regression (rebased for #12890) (#13140)Mihail Costea2026-03-091-2/+2
| | | | | | Guard position assignments in updateDragWindow() behind m_dragThresholdReached to prevent windows from snapping to cursor before drag_threshold is exceeded. Fixes: https://github.com/hyprwm/Hyprland/pull/13140
* layout/windowTarget: add visualBox (#13626)outfoxxed2026-03-096-60/+72
| | | | Allows layouts to explicitly define the visual geometry of a tiled window.
* algo/scroll: fix unsigned wrap (#13634)Yujon Pradhananga2026-03-071-0/+3
|
* layout/groupTarget: fix crash on null space assignment (#13614)Vaxry2026-03-072-2/+4
| | | nullchecks my life
* dwindle: add rotatesplit layoutmsg and tests (#13235)Mikhail2026-03-062-0/+51
|
* algo/scrolling: add config options for focus and swapcol wrapping (#13518)Thedudeman2026-03-051-6/+15
|
* core: fix i586 build (#13550)Florian "sp1rit2026-03-041-1/+1
| | | Signed-off-by: Florian "sp1rit"​ <sp1rit@disroot.org>
* algo/scrolling: fix rare crashVaxry2026-03-031-1/+1
|
* hyprctl: fix workspace dynamic effect reloading (#13537)Vaxry2026-03-031-0/+1
| | | ref https://github.com/hyprwm/Hyprland/discussions/12806
* layout/windowTarget: override maximized box status in updateGeom (#13535)Vaxry2026-03-031-0/+5
| | | | ref https://github.com/hyprwm/Hyprland/discussions/13525
* algo/dwindle: don't crash on empty swapsplit (#13533)Vaxry2026-03-032-18/+29
| | | ref https://github.com/hyprwm/Hyprland/discussions/13530
* algo/master: fix crash after dpms (#13522)UjinT342026-03-031-8/+10
|
* layout/algos: use binds:window_direction_monitor_fallback for moves (#13508)Vaxry2026-03-024-4/+25
| | | ref https://github.com/hyprwm/Hyprland/discussions/13473
* algo/scrolling: fix offset on removeTarget (#13515)Vaxry2026-03-021-4/+8
|
* desktop/group: respect direction when moving window out of group (#13490)André Silva2026-03-021-1/+1
|