6#include <phosphorcompositor_export.h>
8#include <QDBusArgument>
10#include <QVariantList>
39namespace TriggerParser {
50inline bool checkModifier(
int modifierSetting, Qt::KeyboardModifiers mods)
52 const bool shiftHeld = mods.testFlag(Qt::ShiftModifier);
53 const bool ctrlHeld = mods.testFlag(Qt::ControlModifier);
54 const bool altHeld = mods.testFlag(Qt::AltModifier);
55 const bool metaHeld = mods.testFlag(Qt::MetaModifier);
57 switch (modifierSetting) {
69 return ctrlHeld && altHeld;
71 return ctrlHeld && shiftHeld;
73 return altHeld && shiftHeld;
77 return altHeld && metaHeld;
79 return ctrlHeld && altHeld && metaHeld;
81 return metaHeld && shiftHeld;
83 return ctrlHeld && metaHeld;
99 switch (modifierSetting) {
101 return Qt::ShiftModifier;
103 return Qt::ControlModifier;
105 return Qt::AltModifier;
107 return Qt::MetaModifier;
109 return Qt::ControlModifier | Qt::AltModifier;
111 return Qt::ControlModifier | Qt::ShiftModifier;
113 return Qt::AltModifier | Qt::ShiftModifier;
115 return Qt::AltModifier | Qt::MetaModifier;
117 return Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
119 return Qt::MetaModifier | Qt::ShiftModifier;
121 return Qt::ControlModifier | Qt::MetaModifier;
123 return Qt::NoModifier;
144 constexpr Qt::KeyboardModifiers chordMask =
145 Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
176 Qt::MouseButtons mouseButtons)
178 for (
const auto& t : triggers) {
179 if (t.modifier == 0 && t.mouseButton == 0) {
182 const bool btnMatch = (t.mouseButton == 0) || (
static_cast<int>(mouseButtons) & t.mouseButton) != 0;
198inline bool anyTriggerHeld(
const QVector<ParsedTrigger>& triggers, Qt::KeyboardModifiers mods,
199 Qt::MouseButtons mouseButtons)
201 for (
const auto& t : triggers) {
202 const bool modMatch = (t.modifier == 0) ||
checkModifier(t.modifier, mods);
203 const bool btnMatch = (t.mouseButton == 0) || (
static_cast<int>(mouseButtons) & t.mouseButton) != 0;
204 if (modMatch && btnMatch && (t.modifier != 0 || t.mouseButton != 0))
221PHOSPHORCOMPOSITOR_EXPORT QVector<ParsedTrigger>
222parseTriggers(
const QVariant& triggerVariant,
const QString& modifierFieldName,
const QString& mouseButtonFieldName);
bool checkModifier(int modifierSetting, Qt::KeyboardModifiers mods)
Map DragModifier enum value to Qt modifier flags.
Definition TriggerParser.h:50
PHOSPHORCOMPOSITOR_EXPORT QVector< ParsedTrigger > parseTriggers(const QVariant &triggerVariant, const QString &modifierFieldName, const QString &mouseButtonFieldName)
Parse trigger list from D-Bus QVariantList (handles QDBusArgument wrapping)
Qt::KeyboardModifiers modifierMaskFor(int modifierSetting)
The Qt modifier mask a DragModifier enumerator stands for.
Definition TriggerParser.h:97
bool anyTriggerHeldExact(const QVector< ParsedTrigger > &triggers, Qt::KeyboardModifiers mods, Qt::MouseButtons mouseButtons)
Whether any trigger matches the current state exactly on MODIFIERS.
Definition TriggerParser.h:175
bool exactModifierMatch(int modifierSetting, Qt::KeyboardModifiers mods)
Whether mods is EXACTLY the combination modifierSetting names.
Definition TriggerParser.h:142
bool anyTriggerHeld(const QVector< ParsedTrigger > &triggers, Qt::KeyboardModifiers mods, Qt::MouseButtons mouseButtons)
Check if any parsed trigger is currently held.
Definition TriggerParser.h:198
Definition DaemonClient.h:22
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
bool operator==(const ParsedTrigger &other) const =default
Value equality, so a consumer caching a parsed list can tell a real settings change from a re-publish...