diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-10-31 00:14:08 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-31 00:14:08 +0000 |
| commit | 5e6cec962c780956177e56355ffc1d64cc5f83ca (patch) | |
| tree | 9277452bb7202094e8a2a2cac3acea7aaa964772 /src/managers/cursor/CursorShapeOverrideController.cpp | |
| parent | 6ade4d58cab67e18aa758ef664e36421cab4d8b2 (diff) | |
cursor: refactor override handling (#12166)
much cleaner and more reliable. Should fix https://github.com/hyprwm/Hyprland/issues/12088
Diffstat (limited to 'src/managers/cursor/CursorShapeOverrideController.cpp')
| -rw-r--r-- | src/managers/cursor/CursorShapeOverrideController.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/managers/cursor/CursorShapeOverrideController.cpp b/src/managers/cursor/CursorShapeOverrideController.cpp new file mode 100644 index 00000000..45064277 --- /dev/null +++ b/src/managers/cursor/CursorShapeOverrideController.cpp @@ -0,0 +1,43 @@ +#include "CursorShapeOverrideController.hpp" + +#include <ranges> + +using namespace Cursor; + +void CShapeOverrideController::setOverride(const std::string& name, eCursorShapeOverrideGroup group) { + if (m_overrides[group] == name) + return; + + m_overrides[group] = name; + + recheckOverridesResendIfChanged(); +} + +void CShapeOverrideController::unsetOverride(eCursorShapeOverrideGroup group) { + if (m_overrides[group].empty()) + return; + + m_overrides[group] = ""; + + recheckOverridesResendIfChanged(); +} + +void CShapeOverrideController::recheckOverridesResendIfChanged() { + for (const auto& s : m_overrides | std::views::reverse) { + if (s.empty()) + continue; + + if (s == m_overrideShape) + return; + + m_overrideShape = s; + m_events.overrideChanged.emit(s); + return; + } + + if (m_overrideShape.empty()) + return; + + m_overrideShape = ""; + m_events.overrideChanged.emit(""); +} |
