summaryrefslogtreecommitdiff
path: root/src/managers
Commit message (Collapse)AuthorAgeFilesLines
* config: allow hashes for parsing colors (#14337)Vaxry2026-05-081-4/+5
|
* gestures: add scroll_move (#14063)Vaxry2026-05-072-0/+172
|
* renderer: more FP16 fixes (#14070)UjinT342026-05-071-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix fp16 blur with invalidation * restore tonemap code * fix fade outs * add sdr compat for unaware surfaces * use a better work space, not linear, only for sdr * fix hl tf -> wp tf * cache workbuffer descriptions * linear not normalised WIP * clear offload fb * CM math * fix includes * use precalculated cm for shadows * inner glow cm * quad cm * fix unmodified copy * codegen * cache color CM * mark blur dirty when CM/DS changes * avoid icc workbuffer * fp16 blur finish hack * fix output hdr luminances * use srgb for mirroring/sharing with fp16 * defaults people --------- Co-authored-by: Vaxry <vaxry@vaxry.net>
* layout/scrolling: handle fullscreen manually (#14190)Vaxry2026-05-072-4/+24
| | | Makes scroll handle fullscreen by itself, allowing for fs scrolls.
* config: add device tags (#13728)ArchSav2026-05-052-1/+14
| | | | | --------- Co-authored-by: Mio Argillander <mio@argillander.me>
* windows/focus: add fallbacks when focussing workspaces (#14270)fazzi2026-05-041-1/+2
|
* InputManager: add guards to confineToRegion to avoid issues (#14269)fazzi2026-05-031-0/+6
|
* sessionLock: send locked instead of denied when missing a lock frame for 5 ↵Maximilian Seidler2026-05-032-21/+16
| | | | | | | | | | | | | | | | seconds (#14271) The protocol seems to allow this, because it explicitly mentions either session lock surface or compositor blanking the output in this sentence: > The locked event must not be sent until a new "locked" frame (either from a session lock surface or the compositor blanking the output) has been presented on all outputs and no security sensitive normal/unlocked content is possibly visible. Since `locked_screen_delay` is capped to 5 seconds, after the 5 seconds this timer is registered for, we assume that all outputs are covered either by lockedead or by an actual lock frame. Thus sending locked is ok.
* screenshare: round captureBox after scaling to fix region capture at ↵Tony Miller2026-05-021-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | fractional scales (#14257) After scaling m_captureBox from logical to pixel coordinates, the box may have non-integer dimensions (e.g. logical 401x301 at scale 1.25 -> pixel 501.25x376.25). m_bufferSize is then computed as captureBox.size() and sent to the client as int32 width/height (truncating the fraction), but m_bufferSize itself stays as a fractional Vector2D. When the client allocates the integer-sized buffer and submits it, CScreenshareFrame::share() rejects it with ERROR_BUFFER_SIZE because Vector2D::operator== is exact double comparison: (501, 376) != (501.25, 376.25). The frame is sent failed, and the client retries forever. The SHARE_WINDOW path already rounds its bufferSize; the SHARE_REGION path didn't. Round the captureBox immediately after scaling so all downstream consumers (m_bufferSize, render translates) see clean integer pixel coordinates. Reproducer at scale 1.25 on a 1920x1080 monitor: wf-recorder -g '500,200 401x301' -f /tmp/x.mp4 # "Failed to copy frame, retrying..." until exit wf-recorder -g '500,200 400x300' -f /tmp/x.mp4 # works (400*1.25=500, 300*1.25=375, both integer)
* internal: improve cursor size logging (#14180)Niko Savola2026-05-021-2/+2
|
* desktop/windowRule: add `confine_pointer` window rule (#13379)fazzi2026-05-021-23/+42
|
* keybinds: fix keycode matching on lua (#14254)Vaxry2026-05-022-23/+45
|
* gestures: add live pinch cursor zoom (#14049)Barrett Ruth2026-05-022-5/+57
|
* screenshare: adjust session cleanup and event emission order (#14229)Eren2026-05-012-8/+10
| | | | | | | | | | | | | | | | * fix(screenshare): adjust session cleanup and event emission order Revised the handling of `stoppedListener` initialization in `getManagedSession` to ensure correct scoping and lifecycle management. Updated the `stop` method in `CScreenshareSession` to adjust the order of `screenshareEvents` and `stopped.emit()` to prevent potential use-after-free scenarios. * fix(screenshare): ensure managedSession removal uses consistent target reference This change updates the lambda in the stopped listener to use a pre-fetched target pointer for comparison when erasing sessions. * fix(screenshare): use early-return and smart ptr comparison in session cleanup
* protocolMgr: set m_self properly when updating mirrored outputsVaxry2026-05-011-1/+3
| | | | | | When we have onMonitorModeChange, we can't leave an output with a null m_self as that will fuck up other things wanting a ref ref https://github.com/basecamp/omarchy/issues/5457
* xdg-shell: queue state updates for toplevel (#14227)Vaxry2026-04-302-9/+48
| | | ref https://github.com/hyprwm/Hyprland/discussions/14224
* binds: add an auto_consuming flag (#13919)MightyPlaza2026-04-302-3/+4
|
* config/lua: cannot disable animation (#14215)phanium2026-04-301-2/+2
| | | | | | | * config/lua: cannot disable animation seems regression from 9ee5ff1f7181cc5fa575f1702802ccb78c21ba12 * typing typo (auto generated by cmake)
* desktop/window: refactor over fullscreen stateVaxry2026-04-292-7/+6
|
* desktop/window: add alpha container for alpha calculationsVaxry2026-04-293-23/+27
|
* animations: add springs (#14171)Vaxry2026-04-291-7/+4
|
* config/lua: fix unbind behavior (#14199)Vaxry2026-04-292-0/+18
|
* seat: fix dropped wl_keyboard.enter after stale keyboardFocusResource (#14143)Psilocybin782026-04-271-25/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * seat: fix dropped wl_keyboard.enter after stale keyboardFocusResource CSeatManager::setKeyboardFocus's leave loop was gated on m_state.keyboardFocusResource (a WP<CWLSeatResource>). That weak pointer can expire between focus cycles — most reliably via the explicit `.reset()` in KeybindManager::passKeys for XWayland targets, but also in practice after certain wl_seat rebind sequences from toolkit-level churn. When the WP is expired, the leave loop's `if (m_state.keyboardFocusResource)` is false, the loop is skipped, and no wl_keyboard.leave is sent for the previous focus. The old client's CWLKeyboardResource keeps m_currentSurface pointing at its old surface. On the next focus back to that surface, CWLKeyboardResource::sendEnter's per-keyboard dedup fires (`if (m_currentSurface == surface) return;`) and the enter is silently dropped. Net result: client believes it's still focused, compositor routes keys via m_state.keyboardFocusResource which now points somewhere else, typed keystrokes silently go to a different window. A mouse drag resyncs because InputManager::processMouseDownNormal → refocus() → mouseMoveUnified(refocus=true) → rawWindowFocus(…, foundSurface) takes a different path that forces the leave/enter pair through. Reported and reproducible in discussion #14141. Fix: iterate PROTO::seat->m_keyboards (the global owning list) in the leave loop and let sendLeave()'s own m_currentSurface gate decide whether each keyboard needs the event. sendLeave() and the sendMods(0,…) that precedes it are already gated on m_currentSurface being set, so iterating every keyboard is a no-op for any keyboard that wasn't on the previous focus — identical semantics to the old code in the healthy case, correct in the broken case. Enter loop unchanged: it's driven by surf->client() which is a cached wl_client* on the surface resource, stable across cycles. Verified against the repro in #14141 (two wev instances cycled via `hyprctl dispatch focuswindow`). Before the fix both windows get stuck in a "I am focused" state after ~3 cycles. After the fix leave/enter pair each dispatch cleanly. * seat: apply same leave-loop fix to setPointerFocus Identical failure mode to the keyboard case in the previous commit: setPointerFocus's leave loop is gated on m_state.pointerFocusResource, which can expire between focus changes. When it does, the leave is skipped, the previously-focused client's wl_pointer m_currentSurface stays stuck, and the next sendEnter's per-pointer dedup silently drops the enter. sendPointerButton also early-returns on `if (!m_state.pointerFocusResource)`, so the visible symptom is "a click on a taskbar / dock / menu button doesn't register after a layer-shell Overlay surface appeared or disappeared, until the user moves the mouse." Motion re-syncs focus via InputManager::mouseMoveUnified → setPointerFocus with a fresh resource, at which point clicks work again. Fix is the same: iterate PROTO::seat->m_pointers and let sendLeave's m_currentSurface gate decide. No-op for pointers not on the old surface.
* keybindMgr: use legacy behavior for single-key binds on lua (#14176)Vaxry2026-04-271-2/+18
|
* input: fix device configs for pointer devicesVaxry2026-04-261-1/+1
|
* config/lua: init lua config manager, use lua if available (#13817)Vaxry2026-04-2625-2619/+281
| | | Adds a new lua config manager, which will automatically be used if there is a lua config present.
* screenshare/frame: set m_copied after shm copy succeeds (#14165)Vaxry2026-04-251-0/+1
|
* keybinds: fix missing z-order update on floating toggle (#14100)Conner2026-04-201-0/+3
|
* input: implement follow_mouse_shrink (#13707)Mihail Costea2026-04-201-1/+2
| | | | | | | | | | | | | | | | | * 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
* renderer: Various CM fixes, part 8 of refactors (#13860)UjinT342026-04-162-4/+18
| | | Part 8 of Ujin's refactors.
* groups: fix `movewindoworgroup` when moving from group to group (#14086)Nikolai Nechaev2026-04-161-0/+2
| | | | | | | | | | | | | * Add test for movewindowgroup * groups: Fix `movewindoworgroup` moving into group Fixes `CKeybindManager::moveWindowIntoGroup` to remove a window from a group before attempting to add it to another group. Addresses #13843. But the animation of moving a window from a group into another group now looks weird: as if the whole target group is being moved.
* monocle: avoid repeated workspace monitor lock() calls (#14085)Visal Vijay2026-04-161-2/+5
| | | | | | | | | * refactor(monocle): avoid repeated workspace monitor lock() calls * clang-format * cleanup: avoid repeated weak_ptr::lock() calls * style: shorten variable name PMONITORWORKSPACEOWNER to PMONITOR
* screencopy: clear buffer before rendering (#14064)outfoxxed2026-04-131-4/+4
| | | | If reusing wl_buffers when capturing a transparent window, the current frame would overlay the previous frame instead of replacing it.
* keybinds: fix wrong space assignment in pin (#14061)Vaxry2026-04-121-1/+1
|
* input: avoid repeated weak_ptr::lock() and ensure consistent usage (#14039)Visal Vijay2026-04-101-3/+6
|
* input: lazy cache getWindowIdeal()Vaxry2026-04-071-7/+20
|
* egl: move over to use hyprgraphics (#12988)Tom Englund2026-04-052-6/+8
| | | use the hyprgraphics helpers instead.
* xwayland: pipe through monitor in coordinate mapping (#13700)Andreas Backx2026-04-052-18/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | * xwayland: prefer monitor-aware hover coords Introduce monitor-aware XWayland coordinate helpers and keep the X11 hover path anchored to the main surface box while preserving detailed debug logging, reducing dependence on nearest-monitor guesses in layout-sensitive input paths. * xwayland: use window monitor for reported coords Report X11 window positions through the window's known monitor instead of the generic nearest-monitor heuristic so boundary-aligned outputs keep stable XWayland coordinates. * xwayland: use window monitor for real position restore Convert XWayland geometry back into compositor space using the window's current monitor when available so vertically offset layouts do not round-trip through the wrong output. * xwayland: use window monitor for unmanaged geometry Restore override-redirect X11 geometry through the window's known monitor so helper windows and popups avoid nearest-monitor misclassification on offset layouts. * xwayland: remove monitor conversion debug logging Drop the temporary XWayland hover and coordinate conversion diagnostics now that the monitor-selection bug is confirmed and the window-monitor based conversions fix the issue. * xwayland: drop unrelated focused-motion change Remove the exploratory X11-specific pointer focus scaling from InputManager so the monitor mapping fix stays narrowly scoped to the XWayland coordinate conversion changes that actually resolve the bug. * clang-format XWaylandManager
* internal: silence compiler warnings about unused return values (#13997)Tom Englund2026-04-051-1/+3
| | | | | | | | | | | | | | | | * 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.
* animation: avoid redundant damage calls in tickVaxry2026-04-041-132/+204
| | | | animated variables would independently damage, that's redundant.
* desktop/window: reduce window deco updates (#13980)Vaxry2026-04-041-5/+2
| | | AVARDAMAGE_ENTIRE doesn't mean the geometry changed, so no point in an expensive update
* monitor: centralize solitary and scanout eligibility checksPppp11162026-04-041-1/+1
|
* seat/compositor: fix minor issues (#13958)Pppp11162026-04-021-2/+4
|
* renderer: refactor part 7: api fixes (#13631)UjinT342026-03-287-79/+75
| | | | | | | Part 7 of ujin's refactors --------- Co-authored-by: Vaxry <vaxry@vaxry.net>
* protocols: allow xdg-foreign to be used by sandboxed apps (#13854)ssareta2026-03-281-0/+2
| | | | | * allowlist xdgForeignExporter * also allow importer
* dispatchers: add moveintoorcreategroup (#13325)littleblack1112026-03-282-0/+41
|
* renderer/cm: Support wp-cm-v1 version 2 (#12817)UjinT342026-03-251-1/+2
|
* screencopy: check share session state (#13839)UjinT342026-03-253-1/+6
|
* protocols: reimplement unstable/xdg-foreign-v2 (#13716)Chris Naporlee2026-03-231-0/+5
|