* core: handle rerendering when frameCallback is pending
* core: log when skipping label updates
* asyncResourceGatherer: remove busy and use loopMutex
Makes getAssetById fail less often and thus labels get more stable
updates
* asyncResourceGatherer: revision locking
`assetsMutex` was not needed, since `apply` only gets called from the
main thread and resources are also only aquired via the main thread.
`preloadTargets`, previously kinda guarded by the `busy` flag are now
locked as suggested in #367 (but via a copy of `peloadTargets`).
`apply` now returns a boolean so that the locking of preloadTargets in
combination with checking `preloadTargets.empty()` is a bit nicer.
* asyncResourceGatherer: remove explicit template arg for unique lock
* 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.
* 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
* input-field: new color features
* add nix HM
* add workaround for faillasset not being shown on empty imput
* comment
* change cfg option name
* remove TODO
* small fix
* one more edge check
* dedup changeColor function
* simplify more
* 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
* background: fix background not rendering when resource gatherer is busy
* asyncResourceGatherer: check cairo_surface_status
* background: clear resource id when texture is invalid
* label: render output via stringPort instead of surface
* label: retry onAssetCallback
Calling `render` might not update the asset when the surfaces frameCallback is already set.
* Revert "label: fix rendering with multiple timers that fire at the same time (#147)"
This reverts commit e9a57f0dae.
* input-field: add fade out timeout
* input-field: let dots reset themselfs
Now the dots kind of fade into the placeholder text on a failure.
* Nix/HM module: add input-field:fade_timeout option
This makes it so that
1. The renderer is triggered when the onPasswordCheckTimer callback is fired. Previously you had to give an
additional input for the renderer to be triggered and the fail reason to show.
2. The updateDots function now sets dots.currentAmout to 0, when a failID is present.
That leads to the draw function to return false and the failReason to be displayed until another input happens.
* Add OpenPAM support (used by BSDs except OpenBSD)
-- Package 'pam', required by 'virtual:world', not found
CMake Error at /usr/local/share/cmake/Modules/FindPkgConfig.cmake:619 (message):
The following required packages were not found:
- pam
src/core/Password.cpp:6:10: fatal error: 'security/pam_misc.h' file not found
6 | #include <security/pam_misc.h>
| ^~~~~~~~~~~~~~~~~~~~~
* Add missing headers
src/renderer/widgets/IWidget.cpp: In member function 'virtual IWidget::SFormatResult IWidget::formatString(std::string)':
src/renderer/widgets/IWidget.cpp:51:41: error: 'getlogin' was not declared in this scope
51 | replaceAll(in, "$USER", std::string{getlogin()});
| ^~~~~~~~
src/renderer/widgets/IWidget.cpp:51:51: error: no matching function for call to 'std::__cxx11::basic_string<char>::basic_string(<brace-enclosed initializer list>)'
51 | replaceAll(in, "$USER", std::string{getlogin()});
| ^
src/renderer/DMAFrame.cpp: In member function 'bool CDMAFrame::onBufferDone()':
src/renderer/DMAFrame.cpp:181:17: error: 'close' was not declared in this scope; did you mean 'pclose'?
181 | close(fd[plane_tmp]);
| ^~~~~
| pclose
src/renderer/DMAFrame.cpp:196:13: error: 'close' was not declared in this scope; did you mean 'pclose'?
196 | close(fd[plane]);
| ^~~~~
| pclose
src/core/Password.cpp: In lambda function:
src/core/Password.cpp:44:31: error: 'strdup' was not declared in this scope
44 | reply->resp = strdup(pass.c_str());
| ^~~~~~
src/core/hyprlock.cpp: In member function 'void CHyprlock::spawnAsync(const std::string&)':
src/core/hyprlock.cpp:768:9: error: 'sigemptyset' was not declared in this scope
768 | sigemptyset(&set);
| ^~~~~~~~~~~
src/core/hyprlock.cpp:769:21: error: 'SIG_SETMASK' was not declared in this scope
769 | sigprocmask(SIG_SETMASK, &set, NULL);
| ^~~~~~~~~~~
src/core/hyprlock.cpp:769:9: error: 'sigprocmask' was not declared in this scope
769 | sigprocmask(SIG_SETMASK, &set, NULL);
| ^~~~~~~~~~~