Commit graph

98 commits

Author SHA1 Message Date
Maximilian Seidler
07b5e1b4cd
core: fix background screenshot on nvidia (#656)
Fixes DMA buffer screencopy on nvidia cards. Additionally adds shm screencopy as an option
2025-01-24 14:25:37 +01:00
Maximilian Seidler
d547d1d4e3
core: move wayland event reading into the poll thread (#655)
This was done, so that we can

  wl_display_prepare_read -> poll -> wl_display_read_events

That fixes synchronization issues on nvidia proprietary drivers.
2025-01-21 13:42:11 +00:00
Maximilian Seidler
00d2cbfee3
core: introduce animation manager and animation config (#631)
BREAKING:
- Removed `input-field:dots_fade_time`. Now configured via
`animation=inputFieldDots,...`
- Removed `input-field:fail_transition`. Now configured via
`animation=inputFieldColors,...`
- Removed `general:no_fade_in` and `general:no_fade_out`. Now configured
globally via `animations:enabled` or via `animation=fadeIn,...` and
`animation=fadeOut,...`
2025-01-06 12:34:21 +00:00
vaxerski
8f68fad50a core: bind to wl_seat v8
fixes #638
2025-01-04 17:32:44 +01:00
Vaxry
753c538dea
Core: move to hyprwayland-scanner (#624)
nix: add hyprwayland-scanner dep

flake.lock: update

---------

Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
2024-12-29 18:36:08 +00:00
vaxerski
77d194c1e9 core: clean up pointer logic and clang-format 2024-12-29 16:40:01 +01:00
Maximilian Seidler
fe35a8068c
core: terminate auth after recieving finished (#586) 2024-12-18 15:52:35 +01:00
Maximilian Seidler
a4b0562749
auth: add an interface for different authentication methods (#578)
* auth: add an interface for different authentication methods

* auth: pick inline feedback based on last active implementation

* config: move auth options to auth:<auth_impl>

BREAKING:
- general:pam_module -> auth:pam:module
- general:enable_fingerprint -> auth:fingerprint:enabled
- general:fingerprint_ready_message -> auth:fingerprint:ready_message
- general:fingerprint_present_message ->
auth:fingerprint:present_message

* auth: don't clear password input for fingerprint auth check

* fingerprint: checkAuthenticated when handling verfiy status

* Revert conditionally clearing the password input buffer

Makes sure the input field can show the fail text for fingerprint auth.

* auth: virtual instead of override, remove braces

* pam: join the thread

* auth: remove isAuthenticated and switch to a control flow based unlock

* auth: initialize authentication before aquiring the session lock
2024-12-16 19:58:36 +01:00
Maximilian Seidler
8010b81e7b
core: move to Hyprutils::OS::CProcess for spawning processes (#575)
* core: move to Hyprutils::OS::CProcess for spawning processes

* nix: flake update
2024-12-08 16:42:16 +01:00
Maximilian Seidler
d8bd25b52d
core: add support for composed keys (#551) 2024-11-11 15:49:51 +00:00
moggiesir
f48540fcd4
auth: Support parallel fingerprint auth (#514)
* auth: Support parallel fingerprint auth

I chose to use Fprint's dbus interface directly rather than going through pam (which uses Fprint's dbus interface) due to poor handling of system sleep somewhere between fprintd and pam. When preparing for sleep, fprintd puts the device to sleep, which causes VerifyStatus to emit with verify-unknown-error, which normally should be responded to by calling both Device.StopVerify and Device.Release (and this is what pam does). Unfortunately, if you try to release the device when the system is preparing for sleep, you'll get an error that the device is busy and then you can't can't claim or release the device for 30 seconds.

pam also has a max timeout for pam_fprintd.so of 99 seconds, and so if we used pam, we'd have to deal with the timeouts and keep restarting the auth conversation.

gdm/gnome-session lock seems to get around these issues by having a shutter on top of the lock screen that you have to interact with first that gives gnome-session a trigger to start fingerprint auth.

* nix/overlays: add sdbus overlay

---------

Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
2024-10-22 01:08:24 +01:00
Maximilian Seidler
eb63207ef0
core: make attemptRestoreOnDeath faster and hyprland exclusive (#506)
* core: make attemptRestoreOnDeath hyprland exclusive

* core: destoy lock and sessionLockSurfaces in attemptRestoreOnDeath
2024-10-05 14:30:19 +01:00
Maximilian Seidler
9ea804788c
core: set capslock and numlock states on startup (#496) 2024-09-25 09:56:20 +01:00
Yang, Ying-chao
7bb4113a7e
core: fix crash caused by exiting without joining running thread (#464) 2024-08-21 11:25:14 +01:00
Maximilian Seidler
9393a3e94d
core: add fractional_scaling option (#456)
* config: add fractional_scaling option

0 -> off
1 -> on
2 -> auto

* core: default auto option for fractional_scaling

* locksurface: fallback to integer scaling
2024-08-05 20:22:01 +02:00
Aaron Blasko
5d85ea03b0
renderer: add --no-fade-in (#453) 2024-08-03 17:34:54 +02:00
Vaxry
58e1a4a499 core: add --version 2024-07-24 13:58:59 +02:00
Maximilian Seidler
20c01d91d4
core: make sure m_sLockState.lock is present in onLockFinished and releaseSessionLock (#432) 2024-07-19 17:26:38 +02:00
Maximilian Seidler
9514925a7c
core: grace unlock improvements and auth fixes for grace/SIGUSR1 unlocks (#424)
* core: check m_bTerminate for grace unlocks

* core: remove reference to the lock object on finished

* core: add isUnlocked

true if m_bFadeStarted or m_bTerminate

* auth: return early on grace or SIGUSR1 unlocks
2024-07-17 15:22:42 +02:00
Maximilian Seidler
69d37d2663
core: immediately create session lock surfaces (#421)
* core: immediately create session lock surfaces

Instead of waiting for the `locked` event, create session lock surfaces
right away.

* core: don't allow unlock_and_destroy if `locked` has never been recieved
2024-07-14 16:59:06 +02:00
Maximilian Seidler
b407128cae
core: handle ext_session_lock_v1::finished as defined in the protocol (#418) 2024-07-11 16:15:32 +02:00
davc0n
944caff79f
config: add input-field fail_timeout option (#406)
* config: add input-field fail_timeout option

* config: change input-field fail_timeout to milliseconds

* input-field: fix configFailTimeoutMs type and init
2024-07-09 17:43:31 +02:00
Jasson
d8ccc6f96a
core: Label exception handling + Frambuffer checks + headers (#413)
* Added exception handling in label constructor

* Framebuffer fix + moved headers

* added optional header
2024-07-09 11:32:49 +02:00
Maximilian Seidler
0552a1eddd
core: add option to render solid background immediatly when bg assets are not ready (#407)
* asyncResourceGatherer: start the asyncLoop at the same time as gather

This is a prerequesit for labels beeing drawn, while backgrounds are
note ready yet.

* core: allow immediate rendering even when backgrounds are not gathered yet

Note:
We don't really need to call `asyncResourceGatherer::apply` in the
`renderLock` function, since it will get called by a call to
`asyncResourceGatherer::getAssetById` anyways.

* background: render color rectangle when asset is not ready yet

* config: add general:immediate_render config option

* core: use the --immediate-render flag in attemptRestoreOnDeath
2024-07-07 18:43:17 +02:00
Tom Englund
7fb3c03500
hyprlock: ensure members are accessed direct (#404)
if the unique_ptr is reset directly accessing it from the destructor
causes crashes on Clang/libc++, just access the members directly.
2024-07-06 12:24:29 +02:00
Maximilian Seidler
88b9ce48ed
core: improve dynamic output handling (#386)
* core: check for sessionLockSurface before calling render

This is needed, because when a new monitor is added via `onGlobal` the
order of the events is not guaranteed. Meaning that render for a
particular monitor might get called before a `CSessionLockSurface` for
that monitor exists.

* renderer: remove widgets for destroyed lockSurfaces

* asyncResourceGatherer: don't create duplicate dma frames for a specific stringPort

* core: remove renderer widgets in ~CSessionLockSurface instead of in onGlobalRemoved

* Revert "core: remove renderer widgets in ~CSessionLockSurface instead of in onGlobalRemoved"

This reverts commit 405aa42de8.

Because of destruction order, it is safer to do it in `onGlobalRemoved`.

* core: ditch dynamic DMAFrame generation

* core: identify DMAFrames via output size and stringPort

* core: fallback to background color for dynamic outputs with background:path=screenshot

* core: remove output pointer from DMAFrame
2024-07-02 00:45:06 +02:00
Florian Walter
210b456c15
core: fix second instance of hyprlock unlocking session (#376)
* fix second instance of hyprlock unlocking session

* fix segfault when lock cannot be acquired

* improve ordering of display roundtrips
2024-06-25 13:46:58 +02:00
Tom Englund
58c93d8de8
core: fix a few reported leaks by asan (#349)
* widgets: add missing virtual destructor

destructor is missing and as a consequence all sub classes gets wrongly
destructed reported as "new-delete-type-mismatch" by asan.

* gatherer: free memory allocated by pango

with pango_parse_markup its up to the caller of the function to free the
pointer to the text returned stored in this buf.

* core: add destructor and free devices

add a destructor and free both drmDevice and gbmDevice, leaks reported
by asan.

* core: free xkb allocated state and keymap

free xkb state and keymap on destruction to prevent leak on exit and
less asan spam.

* locksurface: destroy the surface frame on done

the callback was never being destroyed and is leaking on each
frameCallback creation, call wl_callback_destroy in onCallback() and
free the memory. reported with asan.
2024-05-25 20:05:37 +02:00
Vaxry
972c1c27e6 restore: move to runtime dir and check his
fixes #346
2024-05-23 12:58:54 +02:00
Maximilian Seidler
316c37746d
core: add key repeat for backspace and make del clear the input (#277)
* core: add support for repeating backspace when held

* core: move keysym handling to a seperate function in order to reuse it for key repeat

* core: get keyboard repeat info from wayland

* core: defaults for keyboard repeat and delay
2024-05-14 16:11:45 +01:00
Maximilian Seidler
883fbdfe01
auth: implement a full pam conversation (#205)
* auth: implement a full pam conversation

* input-field: fixup failedAttempts and color change

Credits to @bvr-yr

* pam: set default module to hyprland

* input-field: backup previous asset

* auth: restart auth in onPasswordCheckTimer

* auth: immediately switch to waiting when input was submitted

* auth: remove redundant waitingForPamAuth

* auth: add inputRequested and reschedule submitInput

* auth: clear password buffer and handle submitInput before input is requested

* Revert "input-field: backup previous asset"

This reverts commit 89702945be6af4aa43f54688ad34a4ccba994a3e.

Without the backup we avoid rendering the prompt placeholder for one frame when the failText is not available.
Looks better this way.

* auth: fallback to su if pam_module not in /etc/pam.d

rare occasion where a path check even works on nix

* auth: rename inputSubmitted and resubmit callback

* auth: detach failText from the conversation

* fix rebase mistake

* auth: make sure prompt and failText are not reset when restarting auth

needed for labels

* auth: force update timers when the prompt changes

* auth: remove unused stuff
2024-04-10 22:41:31 +01:00
Maximilian Seidler
d9f6441254
core: use --immediate for attemptRestoreOnDeath (#270) 2024-04-10 11:28:24 +01:00
Maximilian Seidler
a50db6d56d
core: avoid double unlocks with no_fade_out (#257) 2024-04-09 11:14:04 +01:00
Noah GITsham
87fce7923f
core: Make Ctrl+u clear password input (#226)
* Make Ctrl+u clear password input

* Fix inconsistent indentation

* Make Ctrl+Backspace clear password input
2024-03-24 20:43:32 +00:00
YoussefAswad
230f8aadb5
config: add option to ignore empty input (#218) 2024-03-23 15:02:03 +00:00
bvr-yr
f77e17e4d2
label: add $LAYOUT variable (#211)
* label: add `$LAYOUT` variable

* add exclamation mark as wildcard to hide layout
2024-03-21 15:19:12 +00:00
Maximilian Seidler
b50acfaf94
input-field: only render the current output on fade out callback (#206) 2024-03-19 02:49:12 +00:00
Staz Modrzynski
2ae79757d5
core: Add missing destructors causing segfaults (#199)
Co-authored-by: Staz M <staz@staz.io>
2024-03-17 15:44:37 +00:00
bvr-yr
23224d40e4
input-field: various fixes (#198)
* input-field: some fixes

* simplify; correctly check passlen(utf8) in draw return

* correctly erase utf-8 on backspace

* render on up events too

* omglul

me dumb

* revert fade speed change
2024-03-17 00:32:43 +00:00
Maximilian Seidler
7ee406bf9b
core: fade out improvements (#194)
* core: allow fade out for grace unlock

* core: disable input once fade out started

* core: render when fade out started

* core: allow fade out for other compositors

Works fine in sway altough it fades to a black screen not to the desktop.
Still looks kinda good.

* Revert "core: allow fade out for other compositors"

This reverts commit adfeb543ad.

* misc: rename lock and unlock functions
2024-03-15 18:49:07 +00:00
Maximilian Seidler
e040c56ad2
core: fix libc++ compatibility (#195)
* core: add missing header

libc++ compatibility #193

* input-field: fix wrong clock type
2024-03-15 14:43:29 +00:00
Abhinav Anil
1c92c6109c
renderer: add fade out animation and property to disable (#188)
* renderer, Nix/HM module: add fade out animation and prop

* fix: fade duration and disable on non hyprland session

* fix: revert needsFrame condition, update duration to 500ms

* fix: make shadows obey widget opacity
2024-03-14 13:23:41 +00:00
Maximilian Seidler
ae889b47a0
core: mmap keymap buffer with MAP_PRIVATE (#190) 2024-03-14 13:12:43 +00:00
bvr-yr
988d5b3957
label: add $FAIL and $ATTEMPTS (#186)
* label: add `$ATTEMPTS` variable

* labels: also add `$FAIL`

* SHOUT
2024-03-13 21:25:06 +00:00
bvr-yr
f3a41161ec
input-field: add capslock and numlock options (#182)
* input-field: add capslock and numlock options

* fixups

* Nix/HM module: add {caps,num}lock options

---------

Co-authored-by: Mihai Fufezan <fufexan@protonmail.com>
2024-03-13 01:10:42 +00:00
Vaxry
21d9efe5c9 signal: ignore signals after critical 2024-03-10 21:42:42 +00:00
bvr-yr
066e0ae88f
core: force update labels on SIGUSR2 (#169)
* core: force update labels on `SIGUSR2`

* allow 0ms and force
2024-03-10 21:38:01 +00:00
Maximilian Seidler
766d470308
input-field: display utf-8 codepoint length (#164) 2024-03-10 14:33:01 +00:00
Abi Hafshin Alfarouq
160fe3553f
core: Handle slow pam verification (#157)
* Handle slow pam verification

For example when using systemd-homed with fido auth

* fix code style
2024-03-09 16:46:22 +00:00
bvr-yr
149b6737c2
input-field: fail display improvments (#154)
* input-field: fail display improvments

* update Home Manager

* add `$ATTEMPTS` variable, change defaults

* nix wording

* log failed attempts
2024-03-09 16:44:58 +00:00