summaryrefslogtreecommitdiff
path: root/src/managers/cursor/CursorShapeOverrideController.cpp
blob: 450642772eceadf456064b07721e023ecb530111 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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("");
}