43 void glibThread(
const void *);
44 void setupSession(XdpGlobalShortcutsSession *session);
46 void createSessionDone(GObject *
object, GAsyncResult *res);
47 void bindShortcutsDone(GObject *
object, GAsyncResult *res);
49 void handleSessionClosed(XdpSession *session);
51 XdpGlobalShortcutsSession *session,
const char *shortcutId,
const guint64 timestamp,
const GVariant *options
53 void handleDeactivated(
54 XdpGlobalShortcutsSession *session,
const char *shortcutId,
const guint64 timestamp,
const GVariant *options
56 void handleShortcutsChanged(XdpGlobalShortcutsSession *session, GPtrArray *shortcuts);
59 static void sessionClosed(XdpSession *session,
const gpointer
data)
64 static void activated(
65 XdpGlobalShortcutsSession *session,
const char *shortcutId,
const guint64 timestamp,
const GVariant *options,
72 static void deactivated(
73 XdpGlobalShortcutsSession *session,
const char *shortcutId,
const guint64 timestamp,
const GVariant *options,
80 static void shortcutsChanged(XdpGlobalShortcutsSession *session, GPtrArray *shortcuts,
const gpointer
data)
85 enum class Signal : uint8_t
98 std::string shortcutId;
99 std::string description;
100 std::string preferredTrigger;
103 static std::optional<xkb_keysym_t> deskflowKeyToXkbKeysym(
KeyID key);
104 static std::string keyNameForPreferredTrigger(
KeyID key);
106 static bool isValidPreferredTriggerIdentifier(
const std::string &
name);
108 gboolean createSession();
110 void bindShortcuts();
112 std::uint32_t hotKeyIdForShortcutId(
const char *shortcutId)
const;
113 static Binding makeBinding(
const HotKey &hotkey);
114 std::vector<Binding> bindingsSnapshot()
const;
117 EiScreen *m_screen =
nullptr;
118 IEventQueue *m_events =
nullptr;
120 Thread *m_glibThread =
nullptr;
121 GMainLoop *m_glibMainLoop =
nullptr;
123 XdpPortal *m_portal =
nullptr;
124 XdpGlobalShortcutsSession *m_session =
nullptr;
125 GCancellable *m_cancellable =
nullptr;
127 std::map<Signal, gulong> m_signals = {
128 {Signal::SessionClosed, 0},
129 {Signal::Activated, 0},
130 {Signal::Deactivated, 0},
131 {Signal::ShortcutsChanged, 0},
134 mutable std::mutex m_bindingsMutex;
135 guint m_pendingIdleSource = 0;
137 std::vector<Binding> m_bindings;