Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
TriggerParser.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
6#include <phosphorcompositor_export.h>
7
8#include <QDBusArgument>
9#include <QVariant>
10#include <QVariantList>
11#include <QVariantMap>
12#include <QVector>
13#include <Qt>
14
15namespace PhosphorCompositor {
16
24{
25 int modifier = 0;
26 int mouseButton = 0;
27};
28
35namespace TriggerParser {
36
43inline bool checkModifier(int modifierSetting, Qt::KeyboardModifiers mods)
44{
45 const bool shiftHeld = mods.testFlag(Qt::ShiftModifier);
46 const bool ctrlHeld = mods.testFlag(Qt::ControlModifier);
47 const bool altHeld = mods.testFlag(Qt::AltModifier);
48 const bool metaHeld = mods.testFlag(Qt::MetaModifier);
49
50 switch (modifierSetting) {
51 case 0:
52 return false; // Disabled
53 case 1:
54 return shiftHeld; // Shift
55 case 2:
56 return ctrlHeld; // Ctrl
57 case 3:
58 return altHeld; // Alt
59 case 4:
60 return metaHeld; // Meta
61 case 5:
62 return ctrlHeld && altHeld; // CtrlAlt
63 case 6:
64 return ctrlHeld && shiftHeld; // CtrlShift
65 case 7:
66 return altHeld && shiftHeld; // AltShift
67 case 8:
68 return true; // AlwaysActive
69 case 9:
70 return altHeld && metaHeld; // AltMeta
71 case 10:
72 return ctrlHeld && altHeld && metaHeld; // CtrlAltMeta
73 default:
74 return false;
75 }
76}
77
86inline bool anyTriggerHeld(const QVector<ParsedTrigger>& triggers, Qt::KeyboardModifiers mods,
87 Qt::MouseButtons mouseButtons)
88{
89 for (const auto& t : triggers) {
90 const bool modMatch = (t.modifier == 0) || checkModifier(t.modifier, mods);
91 const bool btnMatch = (t.mouseButton == 0) || (static_cast<int>(mouseButtons) & t.mouseButton) != 0;
92 if (modMatch && btnMatch && (t.modifier != 0 || t.mouseButton != 0))
93 return true;
94 }
95 return false;
96}
97
109PHOSPHORCOMPOSITOR_EXPORT QVector<ParsedTrigger>
110parseTriggers(const QVariant& triggerVariant, const QString& modifierFieldName, const QString& mouseButtonFieldName);
111
112} // namespace TriggerParser
113} // namespace PhosphorCompositor
bool checkModifier(int modifierSetting, Qt::KeyboardModifiers mods)
Map DragModifier enum value to Qt modifier flags.
Definition TriggerParser.h:43
PHOSPHORCOMPOSITOR_EXPORT QVector< ParsedTrigger > parseTriggers(const QVariant &triggerVariant, const QString &modifierFieldName, const QString &mouseButtonFieldName)
Parse trigger list from D-Bus QVariantList (handles QDBusArgument wrapping)
bool anyTriggerHeld(const QVector< ParsedTrigger > &triggers, Qt::KeyboardModifiers mods, Qt::MouseButtons mouseButtons)
Check if any parsed trigger is currently held.
Definition TriggerParser.h:86
Definition AutotileState.h:16
Pre-parsed activation trigger (avoids QVariant unboxing in hot path)
Definition TriggerParser.h:24
int mouseButton
Definition TriggerParser.h:26
int modifier
Definition TriggerParser.h:25