summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
Commit message (Collapse)AuthorAgeFilesLines
* compositor: recalculate workspace state after fs state update (#14369)mainVaxry2026-05-081-0/+5
|
* algo/scrolling: various scrolling view related bugfixes (#13974)erstarr2026-05-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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: handle fullscreen manually (#14190)Vaxry2026-05-071-56/+86
| | | Makes scroll handle fullscreen by itself, allowing for fs scrolls.
* compositor: move SessionLockManager init from STAGE_LATE to STAGE_BASICINIT ↵Maximilian Seidler2026-05-031-3/+3
| | | | (#14272)
* helpers/systemInfo: extract info fns (#14222)Vaxry2026-04-301-19/+11
|
* config/workspace-rules: support modifying persistent and monitor (#14217)shezdy2026-04-301-2/+2
| | | | | * workspace rules: support modifying persistent and monitor * support modifying isDefault
* desktop/window: refactor over fullscreen stateVaxry2026-04-291-11/+27
|
* desktop/window: expand hidden into proper statesVaxry2026-04-291-9/+10
|
* desktop/window: add alpha container for alpha calculationsVaxry2026-04-291-3/+4
|
* config/lua: init lua config manager, use lua if available (#13817)Vaxry2026-04-261-25/+24
| | | Adds a new lua config manager, which will automatically be used if there is a lua config present.
* input: implement follow_mouse_shrink (#13707)Mihail Costea2026-04-201-1/+11
| | | | | | | | | | | | | | | | | * input: implement follow_mouse_shrink Add a new config option `input:follow_mouse_shrink` (INT, 0-300, default 0) that shrinks inactive window hitboxes by the specified number of pixels for focus detection purposes. This creates a dead zone in gaps between windows where moving the cursor will not trigger a focus change. The shrink only applies to inactive (non-focused) windows and only during mouse-move focus checks (follow_mouse = 1). Click and scroll interactions are unaffected — clicking on a window in the shrunk area still works normally once the window is focused. Closes #9973 * tests: add integration test for follow_mouse_shrink
* errorOverlay: modernize, refactor, use GPU rendering (#14122)Vaxry2026-04-191-4/+4
| | | | | | | Improves the overlay's rendering: - GPU accelerated - supports gradients - wraps - cleaner code a bit
* debug/overlay: optimize rendering, cleanup and nicetify (#14097)Vaxry2026-04-161-4/+4
| | | | optimizes the rendering, drops direct cairo, fixes up api. Also improves the visuals etc of the overlay
* renderer: Various CM fixes, part 8 of refactors (#13860)UjinT342026-04-161-2/+2
| | | Part 8 of Ujin's refactors.
* notifications: move and small refactor (#14094)Vaxry2026-04-161-11/+11
| | | moves to notification/, and adds a new style manager getter.
* compositor: fix floating input/visual z-order desync after fullscreen (#14015)chocoblocko92026-04-111-0/+2
|
* desktop/popup: cache popup extentsVaxry2026-04-071-2/+2
| | | | caches popup extents in the head to avoid potentially expensive traversals
* internal: silence compiler warnings about unused return values (#13997)Tom Englund2026-04-051-6/+8
| | | | | | | | | | | | | | | | * misc: silence warnings about ignoring return value on reads silence warnings on ignored return values on read() and print an error if it occurs. * misc: silence warnings about ignoring return value on writes silence warnings on ignored return values on write() and print an error where we can, or pass them the maybe_unused attribute. * misc: silence warnings about ignoring return value on pipe silence warnings on ignored return value on pipe(), print an error and exit on failure.
* seat/compositor: fix minor issues (#13958)Pppp11162026-04-021-1/+1
|
* renderer: refactor part 7: api fixes (#13631)UjinT342026-03-281-0/+1
| | | | | | | Part 7 of ujin's refactors --------- Co-authored-by: Vaxry <vaxry@vaxry.net>
* compositor: be more selective about how we expand the window box in getting ↵Sniffy Gumbles2026-03-221-2/+49
| | | | | | | | | coord (#13720) * Be more selective about how we expand the window box here so that we're not overlapping with any neighbouring windows. * Don't use getWindowInDirection to see if we're clear to expand the hit box. Instead, just see if our edge is close to the edge of the workspace. * Clang-format changes
* config: cleanup the entire config infrastructure (#13785)Vaxry2026-03-201-61/+73
| | | | Massively refactors the config infrastructure, sorely needed and will be req'd for the lua stuff
* source: c-f for new clang versionVaxry2026-03-151-4/+4
|
* compositor: When processing fullscreen states, only use effective mode where ↵Nikolai Nechaev2026-03-101-12/+18
| | | | | | | | | necessary (#13607) Simplify the compositor fullscreen state processing: use the complete fullscreen mode value except when the effective fullscreen mode value is needed. Fixes #13041.
* renderer: refactor gl renderer (#13488)UjinT342026-03-071-3/+4
|
* renderer: refactor resources and flags (#13471)UjinT342026-03-071-4/+9
|
* compositor: fix missing recheckWorkArea to prevent CReservedArea assert ↵Logan Collins2026-03-061-0/+2
| | | | failure (#13590)
* compositor: damage monitors on workspace attachment updatesVaxry2026-03-021-0/+4
| | | | ref https://github.com/hyprwm/Hyprland/discussions/13386
* layouts: fix crash on missed relayout updates (#13444)Vaxry2026-02-281-0/+1
|
* monitor: keep workspace monitor bindings on full reconnect (#13384)Zynix2026-02-281-0/+21
| | | When all monitors disconnect, non-active workspaces could migrate to the wrong output after reconnect. Preserve workspace ownership and re-apply assigned monitor bindings on connect.
* compositor: fix focus edge detection (#13425)Vaxry2026-02-281-8/+33
| | | | fixes edge detection, making it more relaxed and intuitive
* compositor: fix calculating x11 work area (#13347)Vaxry2026-02-251-27/+21
| | | in a multimon scenario, due to our positioning hacks, and due to the fact work area is a rect anyways, likely wont make sense
* event: refactor HookSystem into a typed event bus (#13333)Vaxry2026-02-221-20/+12
| | | | | Refactors the old HookSystem into a typed event bus with clear separation, discovery and types.
* protocols: implement image-capture-source-v1 and image-copy-capture-v1 (#11709)Ikalco2026-02-221-0/+1
| | | Implements the new screencopy protocols
* layout: rethonk layouts from the ground up (#12890)Vaxry2026-02-211-84/+54
| | | | | Rewrites layouts to be much smaller, and deal with much less annoying BS. Improves the overall architecture, unifies handling of pseudotiling, and various other improvements.
* compositor: guard null view() in getWindowFromSurface (#13255)garypippi2026-02-131-1/+1
|
* input: fix edge grab resize logic for gaps_out > 0 (#13144)ekhadley2026-02-011-0/+2
|
* renderer: fix mouse motion in VRR (#12665)Szwagi2026-01-311-0/+4
|
* animation: reset tick state on session activation (#13024)William Wernert2026-01-211-0/+4
| | | | | | | | | After suspend/wake, the animation tick timer state (m_lastTickValid, m_tickScheduled) could be stale, causing framerate drops when blur is enabled. This was introduced in 2b0fd417 which changed the animation tick timing mechanism. Reset the tick state when the session becomes active to ensure a clean state for the animation system.
* protocols/cm: Fix image description info events (#12781)UjinT342026-01-131-7/+10
| | | | | | | | | | | | | | | | | | | | | | | * fix image description info events * always send some target primaries * set edid values as target primaries and luminances * init monitor image description * set default luminances for tf * fix BT1886 luminances * fix mastering values and overrides * set maxCLL & maxFALL * typo * add FALL & CLL to preferred HDR image description * fix ref luminances
* protocols/syncobj: fix DRM sync obj support logging (#12946)Chris Naporlee2026-01-121-4/+4
|
* render/cm: various updates, remove old protocols (#12693)UjinT342025-12-271-17/+13
| | | | | | | | | | | | | * fix named primaries * default to gamma22 * mark mastering primaries as supported * remove xx-cm and frog support * immutable primaries and image descriptions * clang-format
* Desktop/history: Move history to desktop (#12676)Vaxry2025-12-201-11/+12
|
* debug: move to hyprutils' logger (#12673)Vaxry2025-12-181-142/+127
|
* compositor: warn on start via a log about start-hyprlandVaxry2025-12-171-1/+2
|
* desktop/layer: store aboveFs property and use thatVaxry2025-12-161-1/+5
|
* core/compositor: remove a monitor reset on cleanup (#12645)Mason Davy2025-12-151-3/+0
| | | | | | I've tested this change with different modes from the monitor default and validated that dpms still works, at least on my machine. If there's a good reason why this exists, feel free to correct me, but this helps get us closer to a flicker-free experience.
* compositor: fix isPointOnReservedAreaVaxry2025-12-131-2/+2
|
* compositor: return nullptr when cursor is outside of a maximized windows' boxVaxry2025-12-131-2/+12
|
* compositor: early return on no monitor (#12637)Tom Englund2025-12-121-1/+4
| | | | | getMonitorFromVector can return nullptr on empty m_monitors, as such is the case when the compositor is going down and a surface exist. return early in vectorToWindowUnified if that happends.