Deskflow 1.26.0.207
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
Event.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2004 Chris Schoeneman
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "EventTypes.h"
11
12#include <assert.h>
13#include <cstdlib>
14
16
18{
19public:
20 EventData() = default;
21 virtual ~EventData() = default;
22};
23
25{
26public:
27 explicit ExitEventData(int exitCode) : m_exitCode(exitCode) {};
28 ~ExitEventData() override = default;
29 int exitCode() const
30 {
31 return m_exitCode;
32 }
33
34private:
35 int m_exitCode;
36};
37
39
42class Event
43{
44public:
45 using Flags = uint32_t;
47 {
48 inline static const Flags NoFlags = 0x00;
49 inline static const Flags DeliverImmediately = 0x01;
50 inline static const Flags DontFreeData = 0x02;
51 };
52
53 Event() = default;
54 Event(const Event &) = delete;
55 Event(Event &&other) = default;
56 Event &operator=(const Event &) = delete;
57 Event &operator=(Event &&) = default;
58
60
68 explicit Event(EventTypes type, void *target = nullptr, void *data = nullptr, Flags flags = EventFlags::NoFlags)
69 : m_type(type),
70 m_target(target),
71 m_data(data),
72 m_flags(flags)
73 {
74 // do nothing
75 }
76
77 Event(EventTypes type, void *target, EventData *dataObject) : m_type(type), m_target(target), m_dataObject(dataObject)
78 {
79 // do nothing
80 }
81
83
84
86
89 static void deleteData(const Event &event)
90 {
91 switch (event.getType()) {
92 using enum EventTypes;
93 case Unknown:
94 case System:
95 case Timer:
96 break;
97
98 default:
99 if ((event.getFlags() & EventFlags::DontFreeData) == 0) {
100 free(event.getData());
101 delete event.getDataObject();
102 }
103 break;
104 }
105 }
106
108
112 void setDataObject(EventData *dataObject)
113 {
114 assert(m_dataObject == nullptr);
115 m_dataObject = dataObject;
116 };
117
119
121
123
127 {
128 return m_type;
129 }
130
132
135 void *getTarget() const
136 {
137 return m_target;
138 }
139
141
144 void *getData() const
145 {
146 return m_data;
147 }
148
150
156 {
157 return m_dataObject;
158 }
159
161
165 {
166 return m_flags;
167 }
168
170
171private:
173 void *m_target = nullptr;
174 void *m_data = nullptr;
175 Flags m_flags = EventFlags::NoFlags;
176 EventData *m_dataObject = nullptr;
177};
static void FAR int int flags
Definition ArchNetworkWinsock.cpp:38
static int void FAR * data
Definition ArchNetworkWinsock.cpp:35
static int type
Definition ArchNetworkWinsock.cpp:45
@ Unknown
Definition NetworkProtocol.h:16
Definition Event.h:18
virtual ~EventData()=default
EventData()=default
uint32_t Flags
Definition Event.h:45
Event & operator=(const Event &)=delete
void * getTarget() const
Get the event target.
Definition Event.h:135
Event & operator=(Event &&)=default
Event(Event &&other)=default
EventData * getDataObject() const
Get the event data (non-POD).
Definition Event.h:155
Event(EventTypes type, void *target=nullptr, void *data=nullptr, Flags flags=EventFlags::NoFlags)
Create Event with data (POD).
Definition Event.h:68
void * getData() const
Get the event data (POD).
Definition Event.h:144
static void deleteData(const Event &event)
Release event data.
Definition Event.h:89
Event(const Event &)=delete
Event(EventTypes type, void *target, EventData *dataObject)
Definition Event.h:77
EventTypes getType() const
Get event type.
Definition Event.h:126
void setDataObject(EventData *dataObject)
Set data (non-POD).
Definition Event.h:112
Event()=default
Flags getFlags() const
Get event flags.
Definition Event.h:164
ExitEventData(int exitCode)
Definition Event.h:27
~ExitEventData() override=default
int exitCode() const
Definition Event.h:29
EventTypes
Definition EventTypes.h:13
@ Unknown
Definition EventTypes.h:17
Definition Event.h:47
static const Flags NoFlags
No flags.
Definition Event.h:48
static const Flags DontFreeData
Don't free data in deleteData.
Definition Event.h:50
static const Flags DeliverImmediately
Dispatch and free event immediately.
Definition Event.h:49