Deskflow 1.24.0.365
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
28class Event
29{
30public:
31 using Flags = uint32_t;
33 {
34 inline static const Flags NoFlags = 0x00;
35 inline static const Flags DeliverImmediately = 0x01;
36 inline static const Flags DontFreeData = 0x02;
37 };
38
39 Event() = default;
40 Event(const Event &) = delete;
41 Event(Event &&other) = default;
42 Event &operator=(const Event &) = delete;
43 Event &operator=(Event &&) = default;
44
46
54 explicit Event(EventTypes type, void *target = nullptr, void *data = nullptr, Flags flags = EventFlags::NoFlags)
55 : m_type(type),
56 m_target(target),
57 m_data(data),
58 m_flags(flags)
59 {
60 // do nothing
61 }
62
63 Event(EventTypes type, void *target, EventData *dataObject) : m_type(type), m_target(target), m_dataObject(dataObject)
64 {
65 // do nothing
66 }
67
69
70
72
75 static void deleteData(const Event &event)
76 {
77 switch (event.getType()) {
78 using enum EventTypes;
79 case Unknown:
80 case Quit:
81 case System:
82 case Timer:
83 break;
84
85 default:
86 if ((event.getFlags() & EventFlags::DontFreeData) == 0) {
87 free(event.getData());
88 delete event.getDataObject();
89 }
90 break;
91 }
92 }
93
95
99 void setDataObject(EventData *dataObject)
100 {
101 assert(m_dataObject == nullptr);
102 m_dataObject = dataObject;
103 };
104
106
108
110
114 {
115 return m_type;
116 }
117
119
122 void *getTarget() const
123 {
124 return m_target;
125 }
126
128
131 void *getData() const
132 {
133 return m_data;
134 }
135
137
143 {
144 return m_dataObject;
145 }
146
148
152 {
153 return m_flags;
154 }
155
157
158private:
160 void *m_target = nullptr;
161 void *m_data = nullptr;
162 Flags m_flags = EventFlags::NoFlags;
163 EventData *m_dataObject = nullptr;
164};
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
Definition Event.h:18
virtual ~EventData()=default
EventData()=default
uint32_t Flags
Definition Event.h:31
Event & operator=(const Event &)=delete
void * getTarget() const
Get the event target.
Definition Event.h:122
Event & operator=(Event &&)=default
Event(Event &&other)=default
EventData * getDataObject() const
Get the event data (non-POD).
Definition Event.h:142
Event(EventTypes type, void *target=nullptr, void *data=nullptr, Flags flags=EventFlags::NoFlags)
Create Event with data (POD).
Definition Event.h:54
void * getData() const
Get the event data (POD).
Definition Event.h:131
static void deleteData(const Event &event)
Release event data.
Definition Event.h:75
Event(const Event &)=delete
Event(EventTypes type, void *target, EventData *dataObject)
Definition Event.h:63
EventTypes getType() const
Get event type.
Definition Event.h:113
void setDataObject(EventData *dataObject)
Set data (non-POD).
Definition Event.h:99
Event()=default
Flags getFlags() const
Get event flags.
Definition Event.h:151
EventTypes
Definition EventTypes.h:13
@ Unknown
Definition EventTypes.h:17
Definition Event.h:33
static const Flags NoFlags
No flags.
Definition Event.h:34
static const Flags DontFreeData
Don't free data in deleteData.
Definition Event.h:36
static const Flags DeliverImmediately
Dispatch and free event immediately.
Definition Event.h:35