From 55a7fa3266a876c19f77cae475d1040c68f3ec98 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Thu, 1 May 2025 21:50:53 -0400 Subject: [PATCH] Port simplified EventTypes from https://github.com/input-leap/input-leap/pull/1545/commits/8b23570379c383cc70475ff54b008ff9dde00af8 --- src/lib/base/CMakeLists.txt | 1 - src/lib/base/Event.cpp | 16 +- src/lib/base/Event.h | 21 +- src/lib/base/EventQueue.cpp | 92 +- src/lib/base/EventQueue.h | 66 +- src/lib/base/EventTypes.cpp | 170 ---- src/lib/base/EventTypes.h | 950 +++++------------- src/lib/base/IEventQueue.h | 65 +- src/lib/client/Client.cpp | 78 +- src/lib/client/Client.h | 2 +- src/lib/client/ServerProxy.cpp | 13 +- src/lib/deskflow/Chunk.h | 2 +- src/lib/deskflow/ClientApp.cpp | 30 +- src/lib/deskflow/IPlatformScreen.h | 2 +- src/lib/deskflow/KeyState.cpp | 10 +- src/lib/deskflow/PacketStreamFilter.cpp | 8 +- src/lib/deskflow/Screen.cpp | 2 +- src/lib/deskflow/ServerApp.cpp | 60 +- src/lib/deskflow/StreamChunker.cpp | 17 +- src/lib/deskflow/win32/AppUtilWindows.cpp | 4 +- src/lib/io/StreamFilter.cpp | 4 +- src/lib/net/SecureSocket.cpp | 18 +- src/lib/net/TCPListenSocket.cpp | 2 +- src/lib/net/TCPSocket.cpp | 41 +- src/lib/net/TCPSocket.h | 2 +- src/lib/platform/EiEventQueueBuffer.cpp | 2 +- src/lib/platform/EiScreen.cpp | 24 +- src/lib/platform/EiScreen.h | 2 +- src/lib/platform/MSWindowsDesks.cpp | 4 +- .../platform/MSWindowsEventQueueBuffer.cpp | 6 +- src/lib/platform/MSWindowsKeyState.cpp | 2 +- src/lib/platform/MSWindowsScreen.cpp | 49 +- src/lib/platform/MSWindowsScreen.h | 4 +- src/lib/platform/OSXScreen.h | 4 +- src/lib/platform/OSXScreen.mm | 74 +- src/lib/platform/OSXScreenSaver.cpp | 4 +- src/lib/platform/PortalInputCapture.cpp | 8 +- src/lib/platform/PortalRemoteDesktop.cpp | 10 +- src/lib/platform/XWindowsEventQueueBuffer.cpp | 2 +- src/lib/platform/XWindowsScreen.cpp | 34 +- src/lib/platform/XWindowsScreen.h | 4 +- src/lib/platform/XWindowsScreenSaver.cpp | 8 +- src/lib/server/ClientListener.cpp | 31 +- src/lib/server/ClientProxy1_0.cpp | 32 +- src/lib/server/ClientProxy1_3.cpp | 4 +- src/lib/server/ClientProxy1_5.cpp | 6 +- src/lib/server/ClientProxy1_6.cpp | 4 +- src/lib/server/ClientProxyUnknown.cpp | 38 +- src/lib/server/InputFilter.cpp | 75 +- src/lib/server/Server.cpp | 103 +- src/test/mock/deskflow/MockEventQueue.h | 27 +- src/test/mock/io/MockStream.h | 8 +- src/test/shared/TestEventQueue.cpp | 7 +- src/test/unittests/deskflow/KeyStateTests.cpp | 61 -- src/test/unittests/server/ConfigTests.cpp | 2 +- 55 files changed, 684 insertions(+), 1631 deletions(-) delete mode 100644 src/lib/base/EventTypes.cpp diff --git a/src/lib/base/CMakeLists.txt b/src/lib/base/CMakeLists.txt index 1034dbcd5..0f4b089ab 100644 --- a/src/lib/base/CMakeLists.txt +++ b/src/lib/base/CMakeLists.txt @@ -9,7 +9,6 @@ add_library(base STATIC Event.h EventQueue.cpp EventQueue.h - EventTypes.cpp EventTypes.h FinalAction.h FunctionEventJob.cpp diff --git a/src/lib/base/Event.cpp b/src/lib/base/Event.cpp index abceff296..567afd931 100644 --- a/src/lib/base/Event.cpp +++ b/src/lib/base/Event.cpp @@ -11,12 +11,12 @@ // Event // -Event::Event() : m_type(kUnknown), m_target(nullptr), m_data(nullptr), m_flags(0), m_dataObject(nullptr) +Event::Event() : m_type(EventTypes::Unknown), m_target(nullptr), m_data(nullptr), m_flags(0), m_dataObject(nullptr) { // do nothing } -Event::Event(Type type, void *target, void *data, Flags flags) +Event::Event(EventTypes type, void *target, void *data, Flags flags) : m_type(type), m_target(target), m_data(data), @@ -26,7 +26,7 @@ Event::Event(Type type, void *target, void *data, Flags flags) // do nothing } -Event::Event(Type type, void *target, EventData *dataObject) +Event::Event(EventTypes type, void *target, EventData *dataObject) : m_type(type), m_target(target), m_data(nullptr), @@ -35,7 +35,7 @@ Event::Event(Type type, void *target, EventData *dataObject) { } -Event::Type Event::getType() const +EventTypes Event::getType() const { return m_type; } @@ -63,10 +63,10 @@ Event::Flags Event::getFlags() const void Event::deleteData(const Event &event) { switch (event.getType()) { - case kUnknown: - case kQuit: - case kSystem: - case kTimer: + case EventTypes::Unknown: + case EventTypes::Quit: + case EventTypes::System: + case EventTypes::Timer: break; default: diff --git a/src/lib/base/Event.h b/src/lib/base/Event.h index 0a7e54636..b12f4eb87 100644 --- a/src/lib/base/Event.h +++ b/src/lib/base/Event.h @@ -7,8 +7,11 @@ #pragma once +#include "EventTypes.h" #include "common/Common.h" +using deskflow::EventTypes; + class EventData { public: @@ -23,16 +26,6 @@ A \c Event holds an event type and a pointer to event data. class Event { public: - using Type = uint32_t; - enum - { - kUnknown, //!< The event type is unknown - kQuit, //!< The quit event - kSystem, //!< The data points to a system event type - kTimer, //!< The data points to timer info - kLast //!< Must be last - }; - using Flags = uint32_t; enum { @@ -52,7 +45,7 @@ public: \p target is the intended recipient of the event. \p flags is any combination of \c Flags. */ - Event(Type type, void *target = nullptr, void *data = nullptr, Flags flags = kNone); + Event(EventTypes type, void *target = nullptr, void *data = nullptr, Flags flags = kNone); //! Create \c Event with non-POD data /*! @@ -60,7 +53,7 @@ public: \p target is the intended recipient of the event. \p dataObject with event data */ - Event(Type type, void *target, EventData *dataObject); + Event(EventTypes type, void *target, EventData *dataObject); //! @name manipulators //@{ @@ -86,7 +79,7 @@ public: /*! Returns the event type. */ - Type getType() const; + EventTypes getType() const; //! Get the event target /*! @@ -117,7 +110,7 @@ public: //@} private: - Type m_type; + EventTypes m_type; void *m_target; void *m_data; Flags m_flags; diff --git a/src/lib/base/EventQueue.cpp b/src/lib/base/EventQueue.cpp index be470b8a1..8833a2b8f 100644 --- a/src/lib/base/EventQueue.cpp +++ b/src/lib/base/EventQueue.cpp @@ -16,29 +16,11 @@ #include -EVENT_TYPE_ACCESSOR(Client) -EVENT_TYPE_ACCESSOR(IStream) -EVENT_TYPE_ACCESSOR(IDataSocket) -EVENT_TYPE_ACCESSOR(IListenSocket) -EVENT_TYPE_ACCESSOR(ISocket) -EVENT_TYPE_ACCESSOR(OSXScreen) -EVENT_TYPE_ACCESSOR(ClientListener) -EVENT_TYPE_ACCESSOR(ClientProxy) -EVENT_TYPE_ACCESSOR(ClientProxyUnknown) -EVENT_TYPE_ACCESSOR(Server) -EVENT_TYPE_ACCESSOR(ServerApp) -EVENT_TYPE_ACCESSOR(IKeyState) -EVENT_TYPE_ACCESSOR(IPrimaryScreen) -EVENT_TYPE_ACCESSOR(IScreen) -EVENT_TYPE_ACCESSOR(Clipboard) -EVENT_TYPE_ACCESSOR(File) -EVENT_TYPE_ACCESSOR(Ei) - // interrupt handler. this just adds a quit event to the queue. static void interrupt(Arch::ESignal, void *data) { auto *events = static_cast(data); - events->addEvent(Event(Event::kQuit)); + events->addEvent(Event(EventTypes::Quit)); } // @@ -47,24 +29,6 @@ static void interrupt(Arch::ESignal, void *data) EventQueue::EventQueue() : m_systemTarget(0), - m_nextType(Event::kLast), - m_typesForClient(nullptr), - m_typesForIStream(nullptr), - m_typesForIDataSocket(nullptr), - m_typesForIListenSocket(nullptr), - m_typesForISocket(nullptr), - m_typesForOSXScreen(nullptr), - m_typesForClientListener(nullptr), - m_typesForClientProxy(nullptr), - m_typesForClientProxyUnknown(nullptr), - m_typesForServer(nullptr), - m_typesForServerApp(nullptr), - m_typesForIKeyState(nullptr), - m_typesForIPrimaryScreen(nullptr), - m_typesForIScreen(nullptr), - m_typesForClipboard(nullptr), - m_typesForFile(nullptr), - m_typesForEi(nullptr), m_readyMutex(new Mutex), m_readyCondVar(new CondVar(m_readyMutex, false)) { @@ -103,49 +67,13 @@ void EventQueue::loop() Event event; getEvent(event); - while (event.getType() != Event::kQuit) { + while (event.getType() != EventTypes::Quit) { dispatchEvent(event); Event::deleteData(event); getEvent(event); } } -Event::Type EventQueue::registerTypeOnce(Event::Type &type, const char *name) -{ - ArchMutexLock lock(m_mutex); - if (type == Event::kUnknown) { - m_typeMap.insert(std::make_pair(m_nextType, name)); - LOG((CLOG_DEBUG1 "registered event type %s as %d", name, m_nextType)); - type = m_nextType++; - } - return type; -} - -const char *EventQueue::getTypeName(Event::Type type) -{ - switch (type) { - case Event::kUnknown: - return "nil"; - - case Event::kQuit: - return "quit"; - - case Event::kSystem: - return "system"; - - case Event::kTimer: - return "timer"; - - default: - TypeMap::const_iterator i = m_typeMap.find(type); - if (i == m_typeMap.end()) { - return ""; - } else { - return i->second; - } - } -} - void EventQueue::adoptBuffer(IEventQueueBuffer *buffer) { ArchMutexLock lock(m_mutex); @@ -235,7 +163,7 @@ bool EventQueue::dispatchEvent(const Event &event) void *target = event.getTarget(); IEventJob *job = getHandler(event.getType(), target); if (job == nullptr) { - job = getHandler(Event::kUnknown, target); + job = getHandler(EventTypes::Unknown, target); } if (job != nullptr) { job->run(event); @@ -248,9 +176,9 @@ void EventQueue::addEvent(const Event &event) { // discard bogus event types switch (event.getType()) { - case Event::kUnknown: - case Event::kSystem: - case Event::kTimer: + case EventTypes::Unknown: + case EventTypes::System: + case EventTypes::Timer: return; default: @@ -332,7 +260,7 @@ void EventQueue::deleteTimer(EventQueueTimer *timer) m_buffer->deleteTimer(timer); } -void EventQueue::adoptHandler(Event::Type type, void *target, IEventJob *handler) +void EventQueue::adoptHandler(EventTypes type, void *target, IEventJob *handler) { ArchMutexLock lock(m_mutex); IEventJob *&job = m_handlers[target][type]; @@ -340,7 +268,7 @@ void EventQueue::adoptHandler(Event::Type type, void *target, IEventJob *handler job = handler; } -void EventQueue::removeHandler(Event::Type type, void *target) +void EventQueue::removeHandler(EventTypes type, void *target) { IEventJob *handler = nullptr; { @@ -385,7 +313,7 @@ bool EventQueue::isEmpty() const return (m_buffer->isEmpty() && getNextTimerTimeout() != 0.0); } -IEventJob *EventQueue::getHandler(Event::Type type, void *target) const +IEventJob *EventQueue::getHandler(EventTypes type, void *target) const { ArchMutexLock lock(m_mutex); HandlerTable::const_iterator index = m_handlers.find(target); @@ -464,7 +392,7 @@ bool EventQueue::hasTimerExpired(Event &event) // prepare event and reset the timer's clock timer.fillEvent(m_timerEvent); - event = Event(Event::kTimer, timer.getTarget(), &m_timerEvent); + event = Event(EventTypes::Timer, timer.getTarget(), &m_timerEvent); timer.reset(); // reinsert timer into queue if it's not a one-shot diff --git a/src/lib/base/EventQueue.h b/src/lib/base/EventQueue.h index 9f001d7f8..a7101443d 100644 --- a/src/lib/base/EventQueue.h +++ b/src/lib/base/EventQueue.h @@ -43,13 +43,11 @@ public: EventQueueTimer *newTimer(double duration, void *target) override; EventQueueTimer *newOneShotTimer(double duration, void *target) override; void deleteTimer(EventQueueTimer *) override; - void adoptHandler(Event::Type type, void *target, IEventJob *handler) override; - void removeHandler(Event::Type type, void *target) override; + void adoptHandler(EventTypes type, void *target, IEventJob *handler) override; + void removeHandler(EventTypes type, void *target) override; void removeHandlers(void *target) override; - Event::Type registerTypeOnce(Event::Type &type, const char *name) override; bool isEmpty() const override; - IEventJob *getHandler(Event::Type type, void *target) const override; - const char *getTypeName(Event::Type type) override; + IEventJob *getHandler(EventTypes type, void *target) const override; void *getSystemTarget() override; void waitForReady() const override; @@ -92,18 +90,12 @@ private: using TimerQueue = PriorityQueue; using EventTable = std::map; using EventIDList = std::vector; - using TypeMap = std::map; - using NameMap = std::map; - using TypeHandlerTable = std::map; + using TypeHandlerTable = std::map; using HandlerTable = std::map; int m_systemTarget; ArchMutex m_mutex; - // registered events - Event::Type m_nextType; - TypeMap m_typeMap; - // buffer of events IEventQueueBuffer *m_buffer; @@ -120,58 +112,8 @@ private: // event handlers HandlerTable m_handlers; -public: - // - // Event type providers. - // - ClientEvents &forClient() override; - IStreamEvents &forIStream() override; - IDataSocketEvents &forIDataSocket() override; - IListenSocketEvents &forIListenSocket() override; - ISocketEvents &forISocket() override; - OSXScreenEvents &forOSXScreen() override; - ClientListenerEvents &forClientListener() override; - ClientProxyEvents &forClientProxy() override; - ClientProxyUnknownEvents &forClientProxyUnknown() override; - ServerEvents &forServer() override; - ServerAppEvents &forServerApp() override; - IKeyStateEvents &forIKeyState() override; - IPrimaryScreenEvents &forIPrimaryScreen() override; - IScreenEvents &forIScreen() override; - ClipboardEvents &forClipboard() override; - FileEvents &forFile() override; - EiEvents &forEi() override; - private: - ClientEvents *m_typesForClient; - IStreamEvents *m_typesForIStream; - IDataSocketEvents *m_typesForIDataSocket; - IListenSocketEvents *m_typesForIListenSocket; - ISocketEvents *m_typesForISocket; - OSXScreenEvents *m_typesForOSXScreen; - ClientListenerEvents *m_typesForClientListener; - ClientProxyEvents *m_typesForClientProxy; - ClientProxyUnknownEvents *m_typesForClientProxyUnknown; - ServerEvents *m_typesForServer; - ServerAppEvents *m_typesForServerApp; - IKeyStateEvents *m_typesForIKeyState; - IPrimaryScreenEvents *m_typesForIPrimaryScreen; - IScreenEvents *m_typesForIScreen; - ClipboardEvents *m_typesForClipboard; - FileEvents *m_typesForFile; - EiEvents *m_typesForEi; Mutex *m_readyMutex; CondVar *m_readyCondVar; std::queue m_pending; }; - -#define EVENT_TYPE_ACCESSOR(type_) \ -type_##Events& \ -EventQueue::for##type_() \ - { \ - if (m_typesFor##type_ == nullptr) { \ - m_typesFor##type_ = new type_##Events(); \ - m_typesFor##type_->setEvents(dynamic_cast(this)); \ - } \ - return *m_typesFor##type_; \ - } diff --git a/src/lib/base/EventTypes.cpp b/src/lib/base/EventTypes.cpp deleted file mode 100644 index 8e8cdb5b5..000000000 --- a/src/lib/base/EventTypes.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "base/EventTypes.h" -#include "base/IEventQueue.h" - -#include - -EventTypes::EventTypes() : m_events(nullptr) -{ -} - -IEventQueue *EventTypes::getEvents() const -{ - assert(m_events != nullptr); - return m_events; -} - -void EventTypes::setEvents(IEventQueue *events) -{ - m_events = events; -} - -// -// Client -// - -REGISTER_EVENT(Client, connected) -REGISTER_EVENT(Client, connectionFailed) -REGISTER_EVENT(Client, connectionRefused) -REGISTER_EVENT(Client, disconnected) - -// -// IStream -// - -REGISTER_EVENT(IStream, inputReady) -REGISTER_EVENT(IStream, outputFlushed) -REGISTER_EVENT(IStream, outputError) -REGISTER_EVENT(IStream, inputShutdown) -REGISTER_EVENT(IStream, outputShutdown) -REGISTER_EVENT(IStream, inputFormatError) - -// -// IDataSocket -// - -REGISTER_EVENT(IDataSocket, connected) -REGISTER_EVENT(IDataSocket, secureConnected) -REGISTER_EVENT(IDataSocket, connectionFailed) - -// -// IListenSocket -// - -REGISTER_EVENT(IListenSocket, connecting) - -// -// ISocket -// - -REGISTER_EVENT(ISocket, disconnected) -REGISTER_EVENT(ISocket, stopRetry) - -// -// OSXScreen -// - -REGISTER_EVENT(OSXScreen, confirmSleep) - -// -// ClientListener -// - -REGISTER_EVENT(ClientListener, accepted) -REGISTER_EVENT(ClientListener, connected) - -// -// ClientProxy -// - -REGISTER_EVENT(ClientProxy, ready) -REGISTER_EVENT(ClientProxy, disconnected) - -// -// ClientProxyUnknown -// - -REGISTER_EVENT(ClientProxyUnknown, success) -REGISTER_EVENT(ClientProxyUnknown, failure) - -// -// Server -// - -REGISTER_EVENT(Server, error) -REGISTER_EVENT(Server, connected) -REGISTER_EVENT(Server, disconnected) -REGISTER_EVENT(Server, switchToScreen) -REGISTER_EVENT(Server, switchInDirection) -REGISTER_EVENT(Server, keyboardBroadcast) -REGISTER_EVENT(Server, lockCursorToScreen) -REGISTER_EVENT(Server, screenSwitched) - -// -// ServerApp -// - -REGISTER_EVENT(ServerApp, reloadConfig) -REGISTER_EVENT(ServerApp, forceReconnect) -REGISTER_EVENT(ServerApp, resetServer) - -// -// IKeyState -// - -REGISTER_EVENT(IKeyState, keyDown) -REGISTER_EVENT(IKeyState, keyUp) -REGISTER_EVENT(IKeyState, keyRepeat) - -// -// IPrimaryScreen -// - -REGISTER_EVENT(IPrimaryScreen, buttonDown) -REGISTER_EVENT(IPrimaryScreen, buttonUp) -REGISTER_EVENT(IPrimaryScreen, motionOnPrimary) -REGISTER_EVENT(IPrimaryScreen, motionOnSecondary) -REGISTER_EVENT(IPrimaryScreen, wheel) -REGISTER_EVENT(IPrimaryScreen, screensaverActivated) -REGISTER_EVENT(IPrimaryScreen, screensaverDeactivated) -REGISTER_EVENT(IPrimaryScreen, hotKeyDown) -REGISTER_EVENT(IPrimaryScreen, hotKeyUp) -REGISTER_EVENT(IPrimaryScreen, fakeInputBegin) -REGISTER_EVENT(IPrimaryScreen, fakeInputEnd) - -// -// IScreen -// - -REGISTER_EVENT(IScreen, error) -REGISTER_EVENT(IScreen, shapeChanged) -REGISTER_EVENT(IScreen, suspend) -REGISTER_EVENT(IScreen, resume) - -// -// Clipboard -// - -REGISTER_EVENT(Clipboard, clipboardGrabbed) -REGISTER_EVENT(Clipboard, clipboardChanged) -REGISTER_EVENT(Clipboard, clipboardSending) - -// -// File -// - -REGISTER_EVENT(File, fileChunkSending) -REGISTER_EVENT(File, fileReceiveCompleted) -REGISTER_EVENT(File, keepAlive) - -// -// Ei -// - -REGISTER_EVENT(Ei, connected) -REGISTER_EVENT(Ei, sessionClosed) diff --git a/src/lib/base/EventTypes.h b/src/lib/base/EventTypes.h index 15f119d3d..0e55ee163 100644 --- a/src/lib/base/EventTypes.h +++ b/src/lib/base/EventTypes.h @@ -1,730 +1,244 @@ /* * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2023 Input-Leap Developers * SPDX-FileCopyrightText: (C) 2013 - 2016 Symless Ltd. * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception */ #pragma once -#include "base/Event.h" - -class IEventQueue; - -class EventTypes +#include +namespace deskflow { +enum class EventTypes : uint32_t { -public: - EventTypes(); - void setEvents(IEventQueue *events); + /** An unknown event type. This type is used as a placeholder for unknown events when + filtering events. + */ + Unknown, -protected: - IEventQueue *getEvents() const; + /// Exit has been requested. + Quit, -private: - IEventQueue *m_events; -}; - -#define REGISTER_EVENT(type_, name_) \ - Event::Type type_##Events::name_() \ - { \ - return getEvents()->registerTypeOnce(m_##name_, __FUNCTION__); \ - } - -class ClientEvents : public EventTypes -{ -public: - //! @name accessors - //@{ - - //! Get connected event type - /*! - Returns the connected event type. This is sent when the client has - successfully connected to the server. - */ - Event::Type connected(); - - //! Get connection failed event type - /*! - Returns the connection failed event type. This is sent when the - server fails for some reason. The event data is a FailInfo*. - */ - Event::Type connectionFailed(); - - //! Get connection refused event type - /*! - Returns the connection refused event type. This is sent when the - server refuses for some reason. The event data is a FailInfo*. - */ - Event::Type connectionRefused(); - - //! Get disconnected event type - /*! - Returns the disconnected event type. This is sent when the client - has disconnected from the server (and only after having successfully - connected). - */ - Event::Type disconnected(); - - //@} - -private: - Event::Type m_connected = Event::kUnknown; - Event::Type m_connectionFailed = Event::kUnknown; - Event::Type m_connectionRefused = Event::kUnknown; - Event::Type m_disconnected = Event::kUnknown; -}; - -class IStreamEvents : public EventTypes -{ -public: - IStreamEvents() - : m_inputReady(Event::kUnknown), - m_outputFlushed(Event::kUnknown), - m_outputError(Event::kUnknown), - m_inputShutdown(Event::kUnknown), - m_outputShutdown(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get input ready event type - /*! - Returns the input ready event type. A stream sends this event - when \c read() will return with data. - */ - Event::Type inputReady(); - - //! Get output flushed event type - /*! - Returns the output flushed event type. A stream sends this event - when the output buffer has been flushed. If there have been no - writes since the event was posted, calling \c shutdownOutput() or - \c close() will not discard any data and \c flush() will return - immediately. - */ - Event::Type outputFlushed(); - - //! Get output error event type - /*! - Returns the output error event type. A stream sends this event - when a write has failed. - */ - Event::Type outputError(); - - //! Get input shutdown event type - /*! - Returns the input shutdown event type. This is sent when the - input side of the stream has shutdown. When the input has - shutdown, no more data will ever be available to read. - */ - Event::Type inputShutdown(); - - //! Get output shutdown event type - /*! - Returns the output shutdown event type. This is sent when the - output side of the stream has shutdown. When the output has - shutdown, no more data can ever be written to the stream. Any - attempt to do so will generate a output error event. - */ - Event::Type outputShutdown(); - - /** Get input format error event type - This is sent when a stream receives an irrecoverable input format error. - */ - Event::Type inputFormatError(); - - //@} - -private: - Event::Type m_inputReady; - Event::Type m_outputFlushed; - Event::Type m_outputError; - Event::Type m_inputShutdown; - Event::Type m_outputShutdown; - Event::Type m_inputFormatError; -}; - -class IDataSocketEvents : public EventTypes -{ -public: - IDataSocketEvents() - : m_connected(Event::kUnknown), - m_secureConnected(Event::kUnknown), - m_connectionFailed(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get connected event type - /*! - Returns the socket connected event type. A socket sends this - event when a remote connection has been established. - */ - Event::Type connected(); - - //! Get secure connected event type - /*! - Returns the secure socket connected event type. A secure socket sends - this event when a remote connection has been established. - */ - Event::Type secureConnected(); - - //! Get connection failed event type - /*! - Returns the socket connection failed event type. A socket sends - this event when an attempt to connect to a remote port has failed. - The data is a pointer to a ConnectionFailedInfo. - */ - Event::Type connectionFailed(); - - //@} - -private: - Event::Type m_connected; - Event::Type m_secureConnected; - Event::Type m_connectionFailed; -}; - -class IListenSocketEvents : public EventTypes -{ -public: - IListenSocketEvents() : m_connecting(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get connecting event type - /*! - Returns the socket connecting event type. A socket sends this - event when a remote connection is waiting to be accepted. - */ - Event::Type connecting(); - - //@} - -private: - Event::Type m_connecting; -}; - -class ISocketEvents : public EventTypes -{ -public: - ISocketEvents() : m_disconnected(Event::kUnknown), m_stopRetry(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get disconnected event type - /*! - Returns the socket disconnected event type. A socket sends this - event when the remote side of the socket has disconnected or - shutdown both input and output. - */ - Event::Type disconnected(); - - //! Get stop retry event type - /*! - Returns the stop retry event type. This is sent when the client - doesn't want to reconnect after it disconnects from the server. - */ - Event::Type stopRetry(); - - //@} - -private: - Event::Type m_disconnected; - Event::Type m_stopRetry; -}; - -class OSXScreenEvents : public EventTypes -{ -public: - OSXScreenEvents() : m_confirmSleep(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - Event::Type confirmSleep(); - - //@} - -private: - Event::Type m_confirmSleep; -}; - -class ClientListenerEvents : public EventTypes -{ -public: - ClientListenerEvents() : m_accepted(Event::kUnknown), m_connected(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get accepted event type - /*! - Returns the accepted event type. This is sent whenever a server - accepts a client. - */ - Event::Type accepted(); - - //! Get connected event type - /*! - Returns the connected event type. This is sent whenever a - a client connects. - */ - Event::Type connected(); - - //@} - -private: - Event::Type m_accepted; - Event::Type m_connected; -}; - -class ClientProxyEvents : public EventTypes -{ -public: - ClientProxyEvents() : m_ready(Event::kUnknown), m_disconnected(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get ready event type - /*! - Returns the ready event type. This is sent when the client has - completed the initial handshake. Until it is sent, the client is - not fully connected. - */ - Event::Type ready(); - - //! Get disconnect event type - /*! - Returns the disconnect event type. This is sent when the client - disconnects or is disconnected. The target is getEventTarget(). - */ - Event::Type disconnected(); - - //@} - -private: - Event::Type m_ready; - Event::Type m_disconnected; -}; - -class ClientProxyUnknownEvents : public EventTypes -{ -public: - ClientProxyUnknownEvents() : m_success(Event::kUnknown), m_failure(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get success event type - /*! - Returns the success event type. This is sent when the client has - correctly responded to the hello message. The target is this. - */ - Event::Type success(); - - //! Get failure event type - /*! - Returns the failure event type. This is sent when a client fails - to correctly respond to the hello message. The target is this. - */ - Event::Type failure(); - - //@} - -private: - Event::Type m_success; - Event::Type m_failure; -}; - -class ServerEvents : public EventTypes -{ -public: - ServerEvents() - : m_error(Event::kUnknown), - m_connected(Event::kUnknown), - m_disconnected(Event::kUnknown), - m_switchToScreen(Event::kUnknown), - m_switchInDirection(Event::kUnknown), - m_keyboardBroadcast(Event::kUnknown), - m_lockCursorToScreen(Event::kUnknown), - m_screenSwitched(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get error event type - /*! - Returns the error event type. This is sent when the server fails - for some reason. - */ - Event::Type error(); - - //! Get connected event type - /*! - Returns the connected event type. This is sent when a client screen - has connected. The event data is a \c ScreenConnectedInfo* that - indicates the connected screen. - */ - Event::Type connected(); - - //! Get disconnected event type - /*! - Returns the disconnected event type. This is sent when all the - clients have disconnected. - */ - Event::Type disconnected(); - - //! Get switch to screen event type - /*! - Returns the switch to screen event type. The server responds to this - by switching screens. The event data is a \c SwitchToScreenInfo* - that indicates the target screen. - */ - Event::Type switchToScreen(); - - //! Get switch in direction event type - /*! - Returns the switch in direction event type. The server responds to this - by switching screens. The event data is a \c SwitchInDirectionInfo* - that indicates the target direction. - */ - Event::Type switchInDirection(); - - //! Get keyboard broadcast event type - /*! - Returns the keyboard broadcast event type. The server responds - to this by turning on keyboard broadcasting or turning it off. The - event data is a \c KeyboardBroadcastInfo*. - */ - Event::Type keyboardBroadcast(); - - //! Get lock cursor event type - /*! - Returns the lock cursor event type. The server responds to this - by locking the cursor to the active screen or unlocking it. The - event data is a \c LockCursorToScreenInfo*. - */ - Event::Type lockCursorToScreen(); - - //! Get screen switched event type - /*! - Returns the screen switched event type. This is raised when the - screen has been switched to a client. - */ - Event::Type screenSwitched(); - - //@} - -private: - Event::Type m_error; - Event::Type m_connected; - Event::Type m_disconnected; - Event::Type m_switchToScreen; - Event::Type m_switchInDirection; - Event::Type m_keyboardBroadcast; - Event::Type m_lockCursorToScreen; - Event::Type m_screenSwitched; -}; - -class ServerAppEvents : public EventTypes -{ -public: - ServerAppEvents() : m_reloadConfig(Event::kUnknown), m_forceReconnect(Event::kUnknown), m_resetServer(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - Event::Type reloadConfig(); - Event::Type forceReconnect(); - Event::Type resetServer(); - - //@} - -private: - Event::Type m_reloadConfig; - Event::Type m_forceReconnect; - Event::Type m_resetServer; -}; - -class IKeyStateEvents : public EventTypes -{ -public: - IKeyStateEvents() : m_keyDown(Event::kUnknown), m_keyUp(Event::kUnknown), m_keyRepeat(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get key down event type. Event data is KeyInfo*, count == 1. - Event::Type keyDown(); - - //! Get key up event type. Event data is KeyInfo*, count == 1. - Event::Type keyUp(); - - //! Get key repeat event type. Event data is KeyInfo*. - Event::Type keyRepeat(); - - //@} - -private: - Event::Type m_keyDown; - Event::Type m_keyUp; - Event::Type m_keyRepeat; -}; - -class IPrimaryScreenEvents : public EventTypes -{ -public: - IPrimaryScreenEvents() - : m_buttonDown(Event::kUnknown), - m_buttonUp(Event::kUnknown), - m_motionOnPrimary(Event::kUnknown), - m_motionOnSecondary(Event::kUnknown), - m_wheel(Event::kUnknown), - m_screensaverActivated(Event::kUnknown), - m_screensaverDeactivated(Event::kUnknown), - m_hotKeyDown(Event::kUnknown), - m_hotKeyUp(Event::kUnknown), - m_fakeInputBegin(Event::kUnknown), - m_fakeInputEnd(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! button down event type. Event data is ButtonInfo*. - Event::Type buttonDown(); - - //! button up event type. Event data is ButtonInfo*. - Event::Type buttonUp(); - - //! mouse motion on the primary screen event type - /*! - Event data is MotionInfo* and the values are an absolute position. - */ - Event::Type motionOnPrimary(); - - //! mouse motion on a secondary screen event type - /*! - Event data is MotionInfo* and the values are motion deltas not - absolute coordinates. - */ - Event::Type motionOnSecondary(); - - //! mouse wheel event type. Event data is WheelInfo*. - Event::Type wheel(); - - //! screensaver activated event type - Event::Type screensaverActivated(); - - //! screensaver deactivated event type - Event::Type screensaverDeactivated(); - - //! hot key down event type. Event data is HotKeyInfo*. - Event::Type hotKeyDown(); - - //! hot key up event type. Event data is HotKeyInfo*. - Event::Type hotKeyUp(); - - //! start of fake input event type - Event::Type fakeInputBegin(); - - //! end of fake input event type - Event::Type fakeInputEnd(); - - //@} - -private: - Event::Type m_buttonDown; - Event::Type m_buttonUp; - Event::Type m_motionOnPrimary; - Event::Type m_motionOnSecondary; - Event::Type m_wheel; - Event::Type m_screensaverActivated; - Event::Type m_screensaverDeactivated; - Event::Type m_hotKeyDown; - Event::Type m_hotKeyUp; - Event::Type m_fakeInputBegin; - Event::Type m_fakeInputEnd; -}; - -class IScreenEvents : public EventTypes -{ -public: - IScreenEvents() - : m_error(Event::kUnknown), - m_shapeChanged(Event::kUnknown), - m_suspend(Event::kUnknown), - m_resume(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get error event type - /*! - Returns the error event type. This is sent whenever the screen has - failed for some reason (e.g. the X Windows server died). - */ - Event::Type error(); - - //! Get shape changed event type - /*! - Returns the shape changed event type. This is sent whenever the - screen's shape changes. - */ - Event::Type shapeChanged(); - - //! Get suspend event type - /*! - Returns the suspend event type. This is sent whenever the system goes - to sleep or a user session is deactivated (fast user switching). - */ - Event::Type suspend(); - - //! Get resume event type - /*! - Returns the resume event type. This is sent whenever the system wakes - up or a user session is activated (fast user switching). - */ - Event::Type resume(); - - //@} - -private: - Event::Type m_error; - Event::Type m_shapeChanged; - Event::Type m_suspend; - Event::Type m_resume; -}; - -class ClipboardEvents : public EventTypes -{ -public: - ClipboardEvents() - : m_clipboardGrabbed(Event::kUnknown), - m_clipboardChanged(Event::kUnknown), - m_clipboardSending(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get clipboard grabbed event type - /*! - Returns the clipboard grabbed event type. This is sent whenever the - clipboard is grabbed by some other application so we don't own it - anymore. The data is a pointer to a ClipboardInfo. - */ - Event::Type clipboardGrabbed(); - - //! Get clipboard changed event type - /*! - Returns the clipboard changed event type. This is sent whenever the - contents of the clipboard has changed. The data is a pointer to a - IScreen::ClipboardInfo. - */ - Event::Type clipboardChanged(); - - //! Clipboard sending event type - /*! - Returns the clipboard sending event type. This is used to send - clipboard chunks. - */ - Event::Type clipboardSending(); - - //@} - -private: - Event::Type m_clipboardGrabbed; - Event::Type m_clipboardChanged; - Event::Type m_clipboardSending; -}; - -class FileEvents : public EventTypes -{ -public: - FileEvents() - : m_fileChunkSending(Event::kUnknown), - m_fileReceiveCompleted(Event::kUnknown), - m_keepAlive(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Sending a file chunk - Event::Type fileChunkSending(); - - //! Completed receiving a file - Event::Type fileReceiveCompleted(); - - //! Send a keep alive - Event::Type keepAlive(); - - //@} - -private: - Event::Type m_fileChunkSending; - Event::Type m_fileReceiveCompleted; - Event::Type m_keepAlive; -}; - -class EiEvents : public EventTypes -{ -public: - EiEvents() : m_connected(Event::kUnknown), m_sessionClosed(Event::kUnknown) - { - } - - //! @name accessors - //@{ - - //! Get connected event type - /*! - This event is sent whenever connection to EIS is established and a file - descriptor for reading events is available. - */ - Event::Type connected(); - - //! Get session closed event type - /*! - This event is sent whenever the portal session managing our EIS connection - is closed. - */ - Event::Type sessionClosed(); - - //@} - -private: - Event::Type m_connected; - Event::Type m_sessionClosed; + /// This event is sent when system event occurs. The data is a pointer to system event type + System, + + /// This event is sent when a timer event occurs. The data is pointer to TimerInfo. + Timer, + + /// This event is sent when the client has successfully connected to the server. + ClientConnected, + + /** This event is sent when the server refuses the client */ + ClientConnectionRefused, + + /** This event is sent when the server fails for some reason. + The event data is a pointer to FailInfo. + */ + ClientConnectionFailed, + + /** This event is sent when the client has disconnected from the server (and only after having + successfully connected). + */ + ClientDisconnected, + + /// A stream sends this event when \c read() will return with data. + StreamInputReady, + + /** A stream sends this event when the output buffer has been flushed. If there have been no + writes since the event was posted, calling \c shutdownOutput() or close() will not discard + any data and \c flush() will return immediately. + */ + StreamOutputFlushed, + + /// A stream sends this event when a write has failed. + StreamOutputError, + + /** This event is sent when the input side of the stream has shutdown. When the input has + shutdown, no more data will ever be available to read. + */ + StreamInputShutdown, + + /** This event is sent when the output side of the stream has shutdown. When the output has + shutdown, no more data can ever be written to the stream. Any attempt to do so will + generate a output error event. + */ + StreamOutputShutdown, + + /// This event is sent when a stream receives an irrecoverable input format error. + StreamInputFormatError, + + /// A socket sends this event when a remote connection has been established. + DataSocketConnected, + + /// A secure socket sends this event when a remote connection has been established. + DataSocketSecureConnected, + + /** A socket sends this event when an attempt to connect to a remote port has failed. + The data is a pointer to a ConnectionFailedInfo. + */ + DataSocketConnectionFailed, + + /// A socket sends this event when a remote connection is waiting to be accepted. + ListenSocketConnecting, + + /** A socket sends this event when the remote side of the socket has disconnected or + shutdown both input and output. + */ + SocketDisconnected, + + /// This is sent when the client doesn't want to reconnect after it disconnects from the server. + SocketStopRetry, + + OsxScreenConfirmSleep, + + /// This event is sent whenever a server accepts a client. + ClientListenerAccepted, + + /** This event is sent when the client has completed the initial handshake. Until it is sent, + the client is not fully connected. + */ + ClientProxyReady, + + /** This event is sent when the client disconnects or is disconnected. The target is + getEventTarget(). + */ + ClientProxyDisconnected, + + /** This event is sent when the client has correctly responded to the hello message. + The target is this. + */ + ClientProxyUnknownSuccess, + + /** This event is sent when a client fails to correctly respond to the hello message. + The target is this. + */ + ClientProxyUnknownFailure, + + /** This event is sent when a client screen has connected. + The event data is a pointer to ScreenConnectedInfo that indicates the connected screen. + */ + ServerConnected, + + /// This is event sent when all the clients have disconnected. + ServerDisconnected, + + /** This event is sent to inform the server to switch screens. + The event data is a pointer to SwitchToScreenInfo that indicates the target screen. + */ + ServerSwitchToScreen, + + /// This event is sent to inform the server to toggle screens. These is no event data. + ServerToggleScreen, + + /** This event is sent to inform the server to switch screens. + The event data is a pointer to SwitchInDirectionInfo that indicates the target direction. + */ + ServerSwitchInDirection, + + /** This event is sent to inform the server to turn keyboard broadcasting on or off. + The event data is a pointer to KeyboardBroadcastInfo. + */ + ServerKeyboardBroadcast, + + /** This event is sent to inform the server to lock the cursor to the active screen or to + unlock it. The event data is a pointer to LockCursorToScreenInfo. + */ + ServerLockCursorToScreen, + + /// This event is sent when the screen has been switched to a client. + ServerScreenSwitched, + + ServerAppReloadConfig, + ServerAppForceReconnect, + ServerAppResetServer, + + /// This event is sent when key is down. Event data is a pointer to KeyInfo (count == 1) + KeyStateKeyDown, + /// This event is sent when key is up. Event data is a pointer to KeyInfo (count == 1) + KeyStateKeyUp, + /// This event is sent when key is repeated. Event data is a pointer to KeyInfo. + KeyStateKeyRepeat, + + /// This event is sent when button is down. Event data is a pointer to ButtonInfo + PrimaryScreenButtonDown, + + /// This event is sent when button is up. Event data is a pointer to ButtonInfo + PrimaryScreenButtonUp, + + /** This event is sent when mouse moves on primary screen. + Event data is a pointer to MotionInfo, the values are absolute position. + */ + PrimaryScreenMotionOnPrimary, + + /** This event is sent when mouse moves on secondary screen. + Event data is a pointer to MotionInfo, the values are relative motion deltas. + */ + PrimaryScreenMotionOnSecondary, + + /// This event is sent when mouse wheel is rotated. Event data is a pointer to WheelInfo. + PrimaryScreenWheel, + + /// This event is sent when screensaver is activated. + PrimaryScreenSaverActivated, + + /// This event is sent when screensaver is deactivated. + PrimaryScreenSaverDeactivated, + + /// This event is sent when hotkey is down. Event data is a pointer to HotKeyInfo. + PrimaryScreenHotkeyDown, + + /// This event is sent when hotkey is up. Event data is a pointer to HotKeyInfo. + PrimaryScreenHotkeyUp, + + /// This event is sent when fake input begins. + PrimaryScreenFakeInputBegin, + + /// This event is sent when fake input ends. + PrimaryScreenFakeInputEnd, + + /** This event is sent whenever the screen has failed for some reason (e.g. the X Windows + server died). + */ + ScreenError, + + /// This event is sent whenever the screen's shape changes. + ScreenShapeChanged, + + /** This event is sent whenever the system goes to sleep or a user session is deactivated (fast + user switching). + */ + ScreenSuspend, + + /** This event is sent whenever the system wakes up or a user session is activated (fast user + switching). + */ + ScreenResume, + + /** This event is sent whenever the clipboard is grabbed by some other application so we + don't own it anymore. The data is a pointer to a ClipboardInfo. + */ + ClipboardGrabbed, + + /** This event is sent whenever the contents of the clipboard has changed. + The data is a pointer to a ClipboardInfo. + */ + ClipboardChanged, + + /// This event is sent whenever a clipboard chunk is transferred. + ClipboardSending, + + /// This event is sent whenever a file chunk is transferred. + FileChunkSending, + + /// This event is sent whenever file has been received. + FileReceiveCompleted, + + /// This event is a keepalive event. + FileKeepAlive, + + /// Start libEI + EIConnected, + /// Stop libEi + EISessionClosed }; +} // namespace deskflow diff --git a/src/lib/base/IEventQueue.h b/src/lib/base/IEventQueue.h index 3aabbe7d5..bd1a0701d 100644 --- a/src/lib/base/IEventQueue.h +++ b/src/lib/base/IEventQueue.h @@ -8,6 +8,7 @@ #pragma once #include "base/Event.h" +#include "base/EventTypes.h" #include "common/IInterface.h" #include @@ -18,25 +19,6 @@ class IEventQueueBuffer; // IEventQueueBuffer. class EventQueueTimer; -// Event type registration classes. -class ClientEvents; -class IStreamEvents; -class IDataSocketEvents; -class IListenSocketEvents; -class ISocketEvents; -class OSXScreenEvents; -class ClientListenerEvents; -class ClientProxyEvents; -class ClientProxyUnknownEvents; -class ServerEvents; -class ServerAppEvents; -class IKeyStateEvents; -class IPrimaryScreenEvents; -class IScreenEvents; -class ClipboardEvents; -class FileEvents; -class EiEvents; - //! Event queue interface /*! An event queue provides a queue of Events. Clients can block waiting @@ -137,14 +119,14 @@ public: of type \p type. If no such handler exists it will use the handler for \p target and type \p kUnknown if it exists. */ - virtual void adoptHandler(Event::Type type, void *target, IEventJob *handler) = 0; + virtual void adoptHandler(EventTypes type, void *target, IEventJob *handler) = 0; //! Unregister an event handler for an event type /*! Unregisters an event handler for the \p type, \p target pair and deletes it. */ - virtual void removeHandler(Event::Type type, void *target) = 0; + virtual void removeHandler(EventTypes type, void *target) = 0; //! Unregister all event handlers for an event target /*! @@ -152,14 +134,6 @@ public: */ virtual void removeHandlers(void *target) = 0; - //! Creates a new event type - /*! - If \p type contains \c kUnknown then it is set to a unique event - type id otherwise it is left alone. The final value of \p type - is returned. - */ - virtual Event::Type registerTypeOnce(Event::Type &type, const char *name) = 0; - //! Wait for event queue to become ready /*! Blocks on the current thread until the event queue is ready for events to @@ -183,42 +157,13 @@ public: Finds and returns the event handler for the \p type, \p target pair if it exists, otherwise it returns nullptr. */ - virtual IEventJob *getHandler(Event::Type type, void *target) const = 0; - - //! Get name for event - /*! - Returns the name for the event \p type. This is primarily for - debugging. - */ - virtual const char *getTypeName(Event::Type type) = 0; + virtual IEventJob *getHandler(EventTypes type, void *target) const = 0; //! Get the system event type target /*! - Returns the target to use for dispatching \c Event::kSystem events. + Returns the target to use for dispatching \c EventTypes::System events. */ virtual void *getSystemTarget() = 0; //@} - - // - // Event type providers. - // - - virtual ClientEvents &forClient() = 0; - virtual IStreamEvents &forIStream() = 0; - virtual IDataSocketEvents &forIDataSocket() = 0; - virtual IListenSocketEvents &forIListenSocket() = 0; - virtual ISocketEvents &forISocket() = 0; - virtual OSXScreenEvents &forOSXScreen() = 0; - virtual ClientListenerEvents &forClientListener() = 0; - virtual ClientProxyEvents &forClientProxy() = 0; - virtual ClientProxyUnknownEvents &forClientProxyUnknown() = 0; - virtual ServerEvents &forServer() = 0; - virtual ServerAppEvents &forServerApp() = 0; - virtual IKeyStateEvents &forIKeyState() = 0; - virtual IPrimaryScreenEvents &forIPrimaryScreen() = 0; - virtual IScreenEvents &forIScreen() = 0; - virtual ClipboardEvents &forClipboard() = 0; - virtual FileEvents &forFile() = 0; - virtual EiEvents &forEi() = 0; }; diff --git a/src/lib/client/Client.cpp b/src/lib/client/Client.cpp index d2053b668..870966f13 100644 --- a/src/lib/client/Client.cpp +++ b/src/lib/client/Client.cpp @@ -75,19 +75,18 @@ Client::Client( // register suspend/resume event handlers m_events->adoptHandler( - m_events->forIScreen().suspend(), getEventTarget(), new TMethodEventJob(this, &Client::handleSuspend) + EventTypes::ScreenSuspend, getEventTarget(), new TMethodEventJob(this, &Client::handleSuspend) ); m_events->adoptHandler( - m_events->forIScreen().resume(), getEventTarget(), new TMethodEventJob(this, &Client::handleResume) + EventTypes::ScreenResume, getEventTarget(), new TMethodEventJob(this, &Client::handleResume) ); if (m_args.m_enableDragDrop) { m_events->adoptHandler( - m_events->forFile().fileChunkSending(), this, new TMethodEventJob(this, &Client::handleFileChunkSending) + EventTypes::FileChunkSending, this, new TMethodEventJob(this, &Client::handleFileChunkSending) ); m_events->adoptHandler( - m_events->forFile().fileReceiveCompleted(), this, - new TMethodEventJob(this, &Client::handleFileReceiveCompleted) + EventTypes::FileReceiveCompleted, this, new TMethodEventJob(this, &Client::handleFileReceiveCompleted) ); } @@ -111,8 +110,8 @@ Client::~Client() return; } - m_events->removeHandler(m_events->forIScreen().suspend(), getEventTarget()); - m_events->removeHandler(m_events->forIScreen().resume(), getEventTarget()); + m_events->removeHandler(EventTypes::ScreenSuspend, getEventTarget()); + m_events->removeHandler(EventTypes::ScreenResume, getEventTarget()); cleanupTimer(); cleanupScreen(); @@ -179,7 +178,7 @@ void Client::disconnect(const char *msg) if (msg) { sendConnectionFailedEvent(msg); } else { - sendEvent(m_events->forClient().disconnected(), nullptr); + sendEvent(EventTypes::ClientDisconnected, nullptr); } } @@ -190,7 +189,7 @@ void Client::refuseConnection(const char *msg) if (msg) { auto info = new FailInfo(msg); info->m_retry = true; - Event event(m_events->forClient().connectionRefused(), getEventTarget(), info, Event::kDontFreeData); + Event event(EventTypes::ClientConnectionRefused, getEventTarget(), info, Event::kDontFreeData); m_events->addEvent(event); } } @@ -199,7 +198,7 @@ void Client::handshakeComplete() { m_ready = true; m_screen->enable(); - sendEvent(m_events->forClient().connected(), nullptr); + sendEvent(EventTypes::ClientConnected, nullptr); } bool Client::isConnected() const @@ -410,7 +409,7 @@ void Client::sendClipboard(ClipboardID id) } } -void Client::sendEvent(Event::Type type, void *data) +void Client::sendEvent(EventTypes type, void *data) { m_events->addEvent(Event(type, getEventTarget(), data)); } @@ -419,7 +418,7 @@ void Client::sendConnectionFailedEvent(const char *msg) { auto *info = new FailInfo(msg); info->m_retry = true; - Event event(m_events->forClient().connectionFailed(), getEventTarget(), info, Event::kDontFreeData); + Event event(EventTypes::ClientConnectionFailed, getEventTarget(), info, Event::kDontFreeData); m_events->addEvent(event); } @@ -439,18 +438,18 @@ void Client::setupConnecting() if (m_args.m_enableCrypto) { m_events->adoptHandler( - m_events->forIDataSocket().secureConnected(), m_stream->getEventTarget(), + EventTypes::DataSocketSecureConnected, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleConnected) ); } else { m_events->adoptHandler( - m_events->forIDataSocket().connected(), m_stream->getEventTarget(), + EventTypes::DataSocketConnected, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleConnected) ); } m_events->adoptHandler( - m_events->forIDataSocket().connectionFailed(), m_stream->getEventTarget(), + EventTypes::DataSocketConnectionFailed, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleConnectionFailed) ); } @@ -460,28 +459,27 @@ void Client::setupConnection() assert(m_stream != nullptr); m_events->adoptHandler( - m_events->forISocket().disconnected(), m_stream->getEventTarget(), + EventTypes::SocketDisconnected, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleDisconnected) ); m_events->adoptHandler( - m_events->forIStream().inputReady(), m_stream->getEventTarget(), - new TMethodEventJob(this, &Client::handleHello) + EventTypes::StreamInputReady, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleHello) ); m_events->adoptHandler( - m_events->forIStream().outputError(), m_stream->getEventTarget(), + EventTypes::StreamOutputError, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleOutputError) ); m_events->adoptHandler( - m_events->forIStream().inputShutdown(), m_stream->getEventTarget(), + EventTypes::StreamInputShutdown, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleDisconnected) ); m_events->adoptHandler( - m_events->forIStream().outputShutdown(), m_stream->getEventTarget(), + EventTypes::StreamOutputShutdown, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleDisconnected) ); m_events->adoptHandler( - m_events->forISocket().stopRetry(), m_stream->getEventTarget(), + EventTypes::SocketStopRetry, m_stream->getEventTarget(), new TMethodEventJob(this, &Client::handleStopRetry) ); } @@ -493,12 +491,10 @@ void Client::setupScreen() m_ready = false; m_server = new ServerProxy(this, m_stream, m_events); m_events->adoptHandler( - m_events->forIScreen().shapeChanged(), getEventTarget(), - new TMethodEventJob(this, &Client::handleShapeChanged) + EventTypes::ScreenShapeChanged, getEventTarget(), new TMethodEventJob(this, &Client::handleShapeChanged) ); m_events->adoptHandler( - m_events->forClipboard().clipboardGrabbed(), getEventTarget(), - new TMethodEventJob(this, &Client::handleClipboardGrabbed) + EventTypes::ClipboardGrabbed, getEventTarget(), new TMethodEventJob(this, &Client::handleClipboardGrabbed) ); } @@ -506,7 +502,7 @@ void Client::setupTimer() { assert(m_timer == nullptr); m_timer = m_events->newOneShotTimer(2.0, nullptr); - m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob(this, &Client::handleConnectTimeout)); + m_events->adoptHandler(EventTypes::Timer, m_timer, new TMethodEventJob(this, &Client::handleConnectTimeout)); } void Client::cleanup() @@ -521,20 +517,20 @@ void Client::cleanup() void Client::cleanupConnecting() { if (m_stream != nullptr) { - m_events->removeHandler(m_events->forIDataSocket().connected(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIDataSocket().connectionFailed(), m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::DataSocketConnected, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::DataSocketConnectionFailed, m_stream->getEventTarget()); } } void Client::cleanupConnection() { if (m_stream != nullptr) { - m_events->removeHandler(m_events->forIStream().inputReady(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIStream().outputError(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIStream().inputShutdown(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIStream().outputShutdown(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forISocket().disconnected(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forISocket().stopRetry(), m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputReady, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamOutputError, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputShutdown, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamOutputShutdown, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::SocketDisconnected, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::SocketStopRetry, m_stream->getEventTarget()); cleanupStream(); } } @@ -546,8 +542,8 @@ void Client::cleanupScreen() m_screen->disable(); m_ready = false; } - m_events->removeHandler(m_events->forIScreen().shapeChanged(), getEventTarget()); - m_events->removeHandler(m_events->forClipboard().clipboardGrabbed(), getEventTarget()); + m_events->removeHandler(EventTypes::ScreenShapeChanged, getEventTarget()); + m_events->removeHandler(EventTypes::ClipboardGrabbed, getEventTarget()); delete m_server; m_server = nullptr; } @@ -556,7 +552,7 @@ void Client::cleanupScreen() void Client::cleanupTimer() { if (m_timer != nullptr) { - m_events->removeHandler(Event::kTimer, m_timer); + m_events->removeHandler(EventTypes::Timer, m_timer); m_events->deleteTimer(m_timer); m_timer = nullptr; } @@ -610,7 +606,7 @@ void Client::handleOutputError(const Event &, void *) cleanupScreen(); cleanupConnection(); LOG((CLOG_WARN "error sending to server")); - sendEvent(m_events->forClient().disconnected(), nullptr); + sendEvent(EventTypes::ClientDisconnected, nullptr); } void Client::handleDisconnected(const Event &, void *) @@ -619,7 +615,7 @@ void Client::handleDisconnected(const Event &, void *) cleanupScreen(); cleanupConnection(); LOG((CLOG_DEBUG1 "disconnected")); - sendEvent(m_events->forClient().disconnected(), nullptr); + sendEvent(EventTypes::ClientDisconnected, nullptr); } void Client::handleShapeChanged(const Event &, void *) @@ -663,7 +659,7 @@ void Client::handleHello(const Event &, void *) // receive another event for already pending messages so we fake // one. if (m_stream->isReady()) { - m_events->addEvent(Event(m_events->forIStream().inputReady(), m_stream->getEventTarget())); + m_events->addEvent(Event(EventTypes::StreamInputReady, m_stream->getEventTarget())); } } diff --git a/src/lib/client/Client.h b/src/lib/client/Client.h index 692ae1c0c..28796b672 100644 --- a/src/lib/client/Client.h +++ b/src/lib/client/Client.h @@ -186,7 +186,7 @@ public: private: void sendClipboard(ClipboardID); - void sendEvent(Event::Type, void *); + void sendEvent(EventTypes, void *); void sendConnectionFailedEvent(const char *msg); void sendFileChunk(const void *data); void sendFileThread(void *); diff --git a/src/lib/client/ServerProxy.cpp b/src/lib/client/ServerProxy.cpp index 9705a701d..07ea5b731 100644 --- a/src/lib/client/ServerProxy.cpp +++ b/src/lib/client/ServerProxy.cpp @@ -56,12 +56,12 @@ ServerProxy::ServerProxy(Client *client, deskflow::IStream *stream, IEventQueue // handle data on stream m_events->adoptHandler( - m_events->forIStream().inputReady(), m_stream->getEventTarget(), + EventTypes::StreamInputReady, m_stream->getEventTarget(), new TMethodEventJob(this, &ServerProxy::handleData) ); m_events->adoptHandler( - m_events->forClipboard().clipboardSending(), this, + EventTypes::ClipboardSending, this, new TMethodEventJob(this, &ServerProxy::handleClipboardSendingEvent) ); @@ -72,20 +72,21 @@ ServerProxy::ServerProxy(Client *client, deskflow::IStream *stream, IEventQueue ServerProxy::~ServerProxy() { setKeepAliveRate(-1.0); - m_events->removeHandler(m_events->forIStream().inputReady(), m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputReady, m_stream->getEventTarget()); } void ServerProxy::resetKeepAliveAlarm() { if (m_keepAliveAlarmTimer != nullptr) { - m_events->removeHandler(Event::kTimer, m_keepAliveAlarmTimer); + m_events->removeHandler(EventTypes::Timer, m_keepAliveAlarmTimer); m_events->deleteTimer(m_keepAliveAlarmTimer); m_keepAliveAlarmTimer = nullptr; } if (m_keepAliveAlarm > 0.0) { m_keepAliveAlarmTimer = m_events->newOneShotTimer(m_keepAliveAlarm, nullptr); m_events->adoptHandler( - Event::kTimer, m_keepAliveAlarmTimer, new TMethodEventJob(this, &ServerProxy::handleKeepAliveAlarm) + EventTypes::Timer, m_keepAliveAlarmTimer, + new TMethodEventJob(this, &ServerProxy::handleKeepAliveAlarm) ); } } @@ -822,7 +823,7 @@ void ServerProxy::fileChunkReceived() int result = FileChunk::assemble(m_stream, m_client->getReceivedFileData(), m_client->getExpectedFileSize()); if (result == kFinish) { - m_events->addEvent(Event(m_events->forFile().fileReceiveCompleted(), m_client)); + m_events->addEvent(Event(EventTypes::FileReceiveCompleted, m_client)); } else if (result == kStart) { if (m_client->getDragFileList().size() > 0) { std::string filename = m_client->getDragFileList().at(0).getFilename(); diff --git a/src/lib/deskflow/Chunk.h b/src/lib/deskflow/Chunk.h index 6b8baf8e3..67627969c 100644 --- a/src/lib/deskflow/Chunk.h +++ b/src/lib/deskflow/Chunk.h @@ -7,7 +7,7 @@ #pragma once #include "common/Common.h" -#include +#include class Chunk : public EventData { diff --git a/src/lib/deskflow/ClientApp.cpp b/src/lib/deskflow/ClientApp.cpp index 92418e016..89fac5fa0 100644 --- a/src/lib/deskflow/ClientApp.cpp +++ b/src/lib/deskflow/ClientApp.cpp @@ -238,7 +238,7 @@ double ClientApp::nextRestartTimeout() void ClientApp::handleScreenError(const Event &, void *) { LOG((CLOG_CRIT "error on screen")); - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } deskflow::Screen *ClientApp::openClientScreen() @@ -246,7 +246,7 @@ deskflow::Screen *ClientApp::openClientScreen() deskflow::Screen *screen = createScreen(); screen->setEnableDragDrop(argsBase().m_enableDragDrop); m_events->adoptHandler( - m_events->forIScreen().error(), screen->getEventTarget(), + EventTypes::ScreenError, screen->getEventTarget(), new TMethodEventJob(this, &ClientApp::handleScreenError) ); return screen; @@ -255,7 +255,7 @@ deskflow::Screen *ClientApp::openClientScreen() void ClientApp::closeClientScreen(deskflow::Screen *screen) { if (screen != nullptr) { - m_events->removeHandler(m_events->forIScreen().error(), screen->getEventTarget()); + m_events->removeHandler(EventTypes::ScreenError, screen->getEventTarget()); delete screen; } } @@ -265,7 +265,7 @@ void ClientApp::handleClientRestart(const Event &, void *vtimer) // discard old timer auto *timer = static_cast(vtimer); m_events->deleteTimer(timer); - m_events->removeHandler(Event::kTimer, timer); + m_events->removeHandler(EventTypes::Timer, timer); // reconnect startClient(); @@ -277,7 +277,7 @@ void ClientApp::scheduleClientRestart(double retryTime) LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime)); EventQueueTimer *timer = m_events->newOneShotTimer(retryTime, nullptr); m_events->adoptHandler( - Event::kTimer, timer, new TMethodEventJob(this, &ClientApp::handleClientRestart, timer) + EventTypes::Timer, timer, new TMethodEventJob(this, &ClientApp::handleClientRestart, timer) ); } @@ -311,7 +311,7 @@ void ClientApp::handleClientRefused(const Event &e, void *) updateStatus(std::string("Failed to connect to server: ") + info->m_what); if (!args().m_restartable || !info->m_retry) { LOG((CLOG_ERR "failed to connect to server: %s", info->m_what.c_str())); - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } else { LOG((CLOG_WARN "failed to connect to server: %s", info->m_what.c_str())); if (!m_suspended) { @@ -324,7 +324,7 @@ void ClientApp::handleClientDisconnected(const Event &, void *) { LOG((CLOG_NOTE "disconnected from server")); if (!args().m_restartable) { - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } else if (!m_suspended) { scheduleClientRestart(nextRestartTimeout()); } @@ -337,22 +337,22 @@ Client *ClientApp::openClient(const std::string &name, const NetworkAddress &add try { m_events->adoptHandler( - m_events->forClient().connected(), client->getEventTarget(), + EventTypes::ClientConnected, client->getEventTarget(), new TMethodEventJob(this, &ClientApp::handleClientConnected) ); m_events->adoptHandler( - m_events->forClient().connectionFailed(), client->getEventTarget(), + EventTypes::ClientConnectionFailed, client->getEventTarget(), new TMethodEventJob(this, &ClientApp::handleClientFailed) ); m_events->adoptHandler( - m_events->forClient().connectionRefused(), client->getEventTarget(), + EventTypes::ClientConnectionRefused, client->getEventTarget(), new TMethodEventJob(this, &ClientApp::handleClientRefused) ); m_events->adoptHandler( - m_events->forClient().disconnected(), client->getEventTarget(), + EventTypes::ClientDisconnected, client->getEventTarget(), new TMethodEventJob(this, &ClientApp::handleClientDisconnected) ); @@ -370,10 +370,10 @@ void ClientApp::closeClient(Client *client) return; } - m_events->removeHandler(m_events->forClient().connected(), client); - m_events->removeHandler(m_events->forClient().connectionFailed(), client); - m_events->removeHandler(m_events->forClient().connectionRefused(), client); - m_events->removeHandler(m_events->forClient().disconnected(), client); + m_events->removeHandler(EventTypes::ClientConnected, client); + m_events->removeHandler(EventTypes::ClientConnectionFailed, client); + m_events->removeHandler(EventTypes::ClientConnectionRefused, client); + m_events->removeHandler(EventTypes::ClientDisconnected, client); delete client; } diff --git a/src/lib/deskflow/IPlatformScreen.h b/src/lib/deskflow/IPlatformScreen.h index 6ee488b1d..e919bbc60 100644 --- a/src/lib/deskflow/IPlatformScreen.h +++ b/src/lib/deskflow/IPlatformScreen.h @@ -203,7 +203,7 @@ protected: A platform screen is expected to install a handler for system events in its c'tor like so: \code - m_events->adoptHandler(Event::kSystem, + m_events->adoptHandler(EventTypes::System, m_events->getSystemTarget(), new TMethodEventJob(this, &CXXXPlatformScreen::handleSystemEvent)); diff --git a/src/lib/deskflow/KeyState.cpp b/src/lib/deskflow/KeyState.cpp index 8940337e1..ce315e8d2 100644 --- a/src/lib/deskflow/KeyState.cpp +++ b/src/lib/deskflow/KeyState.cpp @@ -712,16 +712,16 @@ void KeyState::sendKeyEvent( if (isAutoRepeat) { // ignore auto-repeat on half-duplex keys } else { - m_events->addEvent(Event(m_events->forIKeyState().keyDown(), target, KeyInfo::alloc(key, mask, button, 1))); - m_events->addEvent(Event(m_events->forIKeyState().keyUp(), target, KeyInfo::alloc(key, mask, button, 1))); + m_events->addEvent(Event(EventTypes::KeyStateKeyDown, target, KeyInfo::alloc(key, mask, button, 1))); + m_events->addEvent(Event(EventTypes::KeyStateKeyUp, target, KeyInfo::alloc(key, mask, button, 1))); } } else { if (isAutoRepeat) { - m_events->addEvent(Event(m_events->forIKeyState().keyRepeat(), target, KeyInfo::alloc(key, mask, button, count))); + m_events->addEvent(Event(EventTypes::KeyStateKeyRepeat, target, KeyInfo::alloc(key, mask, button, count))); } else if (press) { - m_events->addEvent(Event(m_events->forIKeyState().keyDown(), target, KeyInfo::alloc(key, mask, button, 1))); + m_events->addEvent(Event(EventTypes::KeyStateKeyDown, target, KeyInfo::alloc(key, mask, button, 1))); } else { - m_events->addEvent(Event(m_events->forIKeyState().keyUp(), target, KeyInfo::alloc(key, mask, button, 1))); + m_events->addEvent(Event(EventTypes::KeyStateKeyUp, target, KeyInfo::alloc(key, mask, button, 1))); } } } diff --git a/src/lib/deskflow/PacketStreamFilter.cpp b/src/lib/deskflow/PacketStreamFilter.cpp index e55789beb..4f5abf9af 100644 --- a/src/lib/deskflow/PacketStreamFilter.cpp +++ b/src/lib/deskflow/PacketStreamFilter.cpp @@ -65,7 +65,7 @@ uint32_t PacketStreamFilter::read(void *buffer, uint32_t n) readPacketSize(); if (m_inputShutdown && m_size == 0) { - m_events->addEvent(Event(m_events->forIStream().inputShutdown(), getEventTarget())); + m_events->addEvent(Event(EventTypes::StreamInputShutdown, getEventTarget())); } return n; @@ -121,7 +121,7 @@ bool PacketStreamFilter::readPacketSize() m_size = ((uint32_t)buffer[0] << 24) | ((uint32_t)buffer[1] << 16) | ((uint32_t)buffer[2] << 8) | (uint32_t)buffer[3]; if (m_size > PROTOCOL_MAX_MESSAGE_LENGTH) { - m_events->addEvent(Event(m_events->forIStream().inputFormatError(), getEventTarget())); + m_events->addEvent(Event(EventTypes::StreamInputFormatError, getEventTarget())); return false; } } @@ -159,12 +159,12 @@ bool PacketStreamFilter::readMore() void PacketStreamFilter::filterEvent(const Event &event) { - if (event.getType() == m_events->forIStream().inputReady()) { + if (event.getType() == EventTypes::StreamInputReady) { Lock lock(&m_mutex); if (!readMore()) { return; } - } else if (event.getType() == m_events->forIStream().inputShutdown()) { + } else if (event.getType() == EventTypes::StreamInputShutdown) { // discard this if we have buffered data Lock lock(&m_mutex); m_inputShutdown = true; diff --git a/src/lib/deskflow/Screen.cpp b/src/lib/deskflow/Screen.cpp index ea73ef58e..cb07e9bfd 100644 --- a/src/lib/deskflow/Screen.cpp +++ b/src/lib/deskflow/Screen.cpp @@ -430,7 +430,7 @@ void Screen::enablePrimary() m_screen->openScreensaver(true); // claim screen changed size - m_events->addEvent(Event(m_events->forIScreen().shapeChanged(), getEventTarget())); + m_events->addEvent(Event(EventTypes::ScreenShapeChanged, getEventTarget())); } void Screen::enableSecondary() diff --git a/src/lib/deskflow/ServerApp.cpp b/src/lib/deskflow/ServerApp.cpp index 86998eb8b..2184f3697 100644 --- a/src/lib/deskflow/ServerApp.cpp +++ b/src/lib/deskflow/ServerApp.cpp @@ -155,7 +155,7 @@ void ServerApp::help() void ServerApp::reloadSignalHandler(Arch::ESignal, void *) { IEventQueue *events = App::instance().getEvents(); - events->addEvent(Event(events->forServerApp().reloadConfig(), events->getSystemTarget())); + events->addEvent(Event(EventTypes::ServerAppReloadConfig, events->getSystemTarget())); } void ServerApp::reloadConfig(const Event &, void *) @@ -222,7 +222,7 @@ void ServerApp::handleClientConnected(const Event &, void *vlistener) void ServerApp::handleClientsDisconnected(const Event &, void *) { - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } void ServerApp::closeServer(Server *server) @@ -238,18 +238,18 @@ void ServerApp::closeServer(Server *server) double timeout = 3.0; EventQueueTimer *timer = m_events->newOneShotTimer(timeout, nullptr); m_events->adoptHandler( - Event::kTimer, timer, new TMethodEventJob(this, &ServerApp::handleClientsDisconnected) + EventTypes::Timer, timer, new TMethodEventJob(this, &ServerApp::handleClientsDisconnected) ); m_events->adoptHandler( - m_events->forServer().disconnected(), server, + EventTypes::ServerDisconnected, server, new TMethodEventJob(this, &ServerApp::handleClientsDisconnected) ); m_events->loop(); - m_events->removeHandler(Event::kTimer, timer); + m_events->removeHandler(EventTypes::Timer, timer); m_events->deleteTimer(timer); - m_events->removeHandler(m_events->forServer().disconnected(), server); + m_events->removeHandler(EventTypes::ServerDisconnected, server); // done with server delete server; @@ -258,7 +258,7 @@ void ServerApp::closeServer(Server *server) void ServerApp::stopRetryTimer() { if (m_timer != nullptr) { - m_events->removeHandler(Event::kTimer, m_timer); + m_events->removeHandler(EventTypes::Timer, m_timer); m_events->deleteTimer(m_timer); m_timer = nullptr; } @@ -276,7 +276,7 @@ void ServerApp::updateStatus(const std::string &msg) void ServerApp::closeClientListener(ClientListener *listen) { if (listen != nullptr) { - m_events->removeHandler(m_events->forClientListener().connected(), listen); + m_events->removeHandler(EventTypes::ClientListenerAccepted, listen); delete listen; } } @@ -305,9 +305,9 @@ void ServerApp::closePrimaryClient(PrimaryClient *primaryClient) void ServerApp::closeServerScreen(deskflow::Screen *screen) { if (screen != nullptr) { - m_events->removeHandler(m_events->forIScreen().error(), screen->getEventTarget()); - m_events->removeHandler(m_events->forIScreen().suspend(), screen->getEventTarget()); - m_events->removeHandler(m_events->forIScreen().resume(), screen->getEventTarget()); + m_events->removeHandler(EventTypes::ScreenError, screen->getEventTarget()); + m_events->removeHandler(EventTypes::ScreenSuspend, screen->getEventTarget()); + m_events->removeHandler(EventTypes::ScreenResume, screen->getEventTarget()); delete screen; } } @@ -348,7 +348,7 @@ void ServerApp::retryHandler(const Event &, void *) LOG((CLOG_DEBUG1 "retry server initialization")); m_serverState = kUninitialized; if (!initServer()) { - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } break; @@ -356,11 +356,11 @@ void ServerApp::retryHandler(const Event &, void *) LOG((CLOG_DEBUG1 "retry server initialization")); m_serverState = kUninitialized; if (!initServer()) { - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } else if (m_serverState == kInitialized) { LOG((CLOG_DEBUG1 "starting server")); if (!startServer()) { - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } } break; @@ -369,7 +369,7 @@ void ServerApp::retryHandler(const Event &, void *) LOG((CLOG_DEBUG1 "retry starting server")); m_serverState = kInitialized; if (!startServer()) { - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } break; } @@ -417,7 +417,7 @@ bool ServerApp::initServer() assert(m_timer == nullptr); LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime)); m_timer = m_events->newOneShotTimer(retryTime, nullptr); - m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob(this, &ServerApp::retryHandler)); + m_events->adoptHandler(EventTypes::Timer, m_timer, new TMethodEventJob(this, &ServerApp::retryHandler)); m_serverState = kInitializing; return true; } else { @@ -431,16 +431,15 @@ deskflow::Screen *ServerApp::openServerScreen() deskflow::Screen *screen = createScreen(); screen->setEnableDragDrop(argsBase().m_enableDragDrop); m_events->adoptHandler( - m_events->forIScreen().error(), screen->getEventTarget(), + EventTypes::ScreenError, screen->getEventTarget(), new TMethodEventJob(this, &ServerApp::handleScreenError) ); m_events->adoptHandler( - m_events->forIScreen().suspend(), screen->getEventTarget(), + EventTypes::ScreenSuspend, screen->getEventTarget(), new TMethodEventJob(this, &ServerApp::handleSuspend) ); m_events->adoptHandler( - m_events->forIScreen().resume(), screen->getEventTarget(), - new TMethodEventJob(this, &ServerApp::handleResume) + EventTypes::ScreenResume, screen->getEventTarget(), new TMethodEventJob(this, &ServerApp::handleResume) ); return screen; } @@ -497,7 +496,7 @@ bool ServerApp::startServer() const auto retryTime = 10.0; LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime)); m_timer = m_events->newOneShotTimer(retryTime, nullptr); - m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob(this, &ServerApp::retryHandler)); + m_events->adoptHandler(EventTypes::Timer, m_timer, new TMethodEventJob(this, &ServerApp::retryHandler)); m_serverState = kStarting; return true; } else { @@ -542,7 +541,7 @@ PrimaryClient *ServerApp::openPrimaryClient(const std::string &name, deskflow::S void ServerApp::handleScreenError(const Event &, void *) { LOG((CLOG_CRIT "error on screen")); - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); } void ServerApp::handleSuspend(const Event &, void *) @@ -571,7 +570,7 @@ ClientListener *ServerApp::openClientListener(const NetworkAddress &address) auto *listen = new ClientListener(getAddress(address), getSocketFactory(), m_events, securityLevel); m_events->adoptHandler( - m_events->forClientListener().connected(), listen, + EventTypes::ClientListenerAccepted, listen, new TMethodEventJob(this, &ServerApp::handleClientConnected, listen) ); @@ -583,12 +582,11 @@ Server *ServerApp::openServer(ServerConfig &config, PrimaryClient *primaryClient auto *server = new Server(config, primaryClient, m_serverScreen, m_events, args()); try { m_events->adoptHandler( - m_events->forServer().disconnected(), server, new TMethodEventJob(this, &ServerApp::handleNoClients) + EventTypes::ServerDisconnected, server, new TMethodEventJob(this, &ServerApp::handleNoClients) ); m_events->adoptHandler( - m_events->forServer().screenSwitched(), server, - new TMethodEventJob(this, &ServerApp::handleScreenSwitched) + EventTypes::ServerScreenSwitched, server, new TMethodEventJob(this, &ServerApp::handleScreenSwitched) ); } catch (std::bad_alloc &ba) { @@ -653,21 +651,21 @@ int ServerApp::mainLoop() // handle hangup signal by reloading the server's configuration ARCH->setSignalHandler(Arch::kHANGUP, &reloadSignalHandler, nullptr); m_events->adoptHandler( - m_events->forServerApp().reloadConfig(), m_events->getSystemTarget(), + EventTypes::ServerAppReloadConfig, m_events->getSystemTarget(), new TMethodEventJob(this, &ServerApp::reloadConfig) ); // handle force reconnect event by disconnecting clients. they'll // reconnect automatically. m_events->adoptHandler( - m_events->forServerApp().forceReconnect(), m_events->getSystemTarget(), + EventTypes::ServerAppForceReconnect, m_events->getSystemTarget(), new TMethodEventJob(this, &ServerApp::forceReconnect) ); // to work around the sticky meta keys problem, we'll give users // the option to reset the state of the server. m_events->adoptHandler( - m_events->forServerApp().resetServer(), m_events->getSystemTarget(), + EventTypes::ServerAppResetServer, m_events->getSystemTarget(), new TMethodEventJob(this, &ServerApp::resetServer) ); @@ -693,8 +691,8 @@ int ServerApp::mainLoop() // close down LOG((CLOG_DEBUG1 "stopping server")); - m_events->removeHandler(m_events->forServerApp().forceReconnect(), m_events->getSystemTarget()); - m_events->removeHandler(m_events->forServerApp().reloadConfig(), m_events->getSystemTarget()); + m_events->removeHandler(EventTypes::ServerAppForceReconnect, m_events->getSystemTarget()); + m_events->removeHandler(EventTypes::ServerAppReloadConfig, m_events->getSystemTarget()); cleanupServer(); updateStatus(); LOG((CLOG_NOTE "stopped server")); diff --git a/src/lib/deskflow/StreamChunker.cpp b/src/lib/deskflow/StreamChunker.cpp index 545740f84..6c8c1d6dd 100644 --- a/src/lib/deskflow/StreamChunker.cpp +++ b/src/lib/deskflow/StreamChunker.cpp @@ -46,8 +46,7 @@ void StreamChunker::sendFile(char *filename, IEventQueue *events, void *eventTar // send first message (file size) std::string fileSize = deskflow::string::sizeTypeToString(size); FileChunk *sizeMessage = FileChunk::start(fileSize); - - events->addEvent(Event(events->forFile().fileChunkSending(), eventTarget, sizeMessage)); + events->addEvent(Event(EventTypes::FileChunkSending, eventTarget, sizeMessage)); // send chunk messages with a fixed chunk size size_t sentLength = 0; @@ -61,7 +60,7 @@ void StreamChunker::sendFile(char *filename, IEventQueue *events, void *eventTar break; } - events->addEvent(Event(events->forFile().keepAlive(), eventTarget)); + events->addEvent(Event(EventTypes::FileKeepAlive, eventTarget)); // make sure we don't read too much from the mock data. if (sentLength + chunkSize > size) { @@ -74,7 +73,7 @@ void StreamChunker::sendFile(char *filename, IEventQueue *events, void *eventTar FileChunk *fileChunk = FileChunk::data(data, chunkSize); delete[] chunkData; - events->addEvent(Event(events->forFile().fileChunkSending(), eventTarget, fileChunk)); + events->addEvent(Event(EventTypes::FileChunkSending, eventTarget, fileChunk)); sentLength += chunkSize; file.seekg(sentLength, std::ios::beg); @@ -87,7 +86,7 @@ void StreamChunker::sendFile(char *filename, IEventQueue *events, void *eventTar // send last message FileChunk *end = FileChunk::end(); - events->addEvent(Event(events->forFile().fileChunkSending(), eventTarget, end)); + events->addEvent(Event(EventTypes::FileChunkSending, eventTarget, end)); file.close(); @@ -102,14 +101,14 @@ void StreamChunker::sendClipboard( std::string dataSize = deskflow::string::sizeTypeToString(size); ClipboardChunk *sizeMessage = ClipboardChunk::start(id, sequence, dataSize); - events->addEvent(Event(events->forClipboard().clipboardSending(), eventTarget, sizeMessage)); + events->addEvent(Event(EventTypes::ClipboardSending, eventTarget, sizeMessage)); // send clipboard chunk with a fixed size size_t sentLength = 0; size_t chunkSize = g_chunkSize; while (true) { - events->addEvent(Event(events->forFile().keepAlive(), eventTarget)); + events->addEvent(Event(EventTypes::FileKeepAlive, eventTarget)); // make sure we don't read too much from the mock data. if (sentLength + chunkSize > size) { @@ -119,7 +118,7 @@ void StreamChunker::sendClipboard( std::string chunk(data.substr(sentLength, chunkSize).c_str(), chunkSize); ClipboardChunk *dataChunk = ClipboardChunk::data(id, sequence, chunk); - events->addEvent(Event(events->forClipboard().clipboardSending(), eventTarget, dataChunk)); + events->addEvent(Event(EventTypes::ClipboardSending, eventTarget, dataChunk)); sentLength += chunkSize; if (sentLength == size) { @@ -130,7 +129,7 @@ void StreamChunker::sendClipboard( // send last message ClipboardChunk *end = ClipboardChunk::end(id, sequence); - events->addEvent(Event(events->forClipboard().clipboardSending(), eventTarget, end)); + events->addEvent(Event(EventTypes::ClipboardSending, eventTarget, end)); LOG((CLOG_DEBUG "sent clipboard size=%d", sentLength)); } diff --git a/src/lib/deskflow/win32/AppUtilWindows.cpp b/src/lib/deskflow/win32/AppUtilWindows.cpp index 1b0bb701d..0af5ded54 100644 --- a/src/lib/deskflow/win32/AppUtilWindows.cpp +++ b/src/lib/deskflow/win32/AppUtilWindows.cpp @@ -51,7 +51,7 @@ BOOL WINAPI AppUtilWindows::consoleHandler(DWORD) { LOG((CLOG_INFO "got shutdown signal")); IEventQueue *events = AppUtil::instance().app().getEvents(); - events->addEvent(Event(Event::kQuit)); + events->addEvent(Event(EventTypes::Quit)); return TRUE; } @@ -207,7 +207,7 @@ void AppUtilWindows::eventLoop() if (closeEventResult == WAIT_OBJECT_0) { LOG_DEBUG("windows event loop received close event"); - m_events->addEvent(Event(Event::kQuit)); + m_events->addEvent(Event(EventTypes::Quit)); m_eventThreadRunning = false; } else if (closeEventResult == WAIT_OBJECT_0 + 1) { MSG msg; diff --git a/src/lib/io/StreamFilter.cpp b/src/lib/io/StreamFilter.cpp index 16e3be55e..b15a6a12a 100644 --- a/src/lib/io/StreamFilter.cpp +++ b/src/lib/io/StreamFilter.cpp @@ -21,14 +21,14 @@ StreamFilter::StreamFilter(IEventQueue *events, deskflow::IStream *stream, bool // replace handlers for m_stream m_events->removeHandlers(m_stream->getEventTarget()); m_events->adoptHandler( - Event::kUnknown, m_stream->getEventTarget(), + EventTypes::Unknown, m_stream->getEventTarget(), new TMethodEventJob(this, &StreamFilter::handleUpstreamEvent) ); } StreamFilter::~StreamFilter() { - m_events->removeHandler(Event::kUnknown, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::Unknown, m_stream->getEventTarget()); if (m_adopted) { delete m_stream; } diff --git a/src/lib/net/SecureSocket.cpp b/src/lib/net/SecureSocket.cpp index 96017a8d4..d60c942e0 100644 --- a/src/lib/net/SecureSocket.cpp +++ b/src/lib/net/SecureSocket.cpp @@ -92,7 +92,7 @@ void SecureSocket::close() void SecureSocket::connect(const NetworkAddress &addr) { m_events->adoptHandler( - m_events->forIDataSocket().connected(), getEventTarget(), + EventTypes::DataSocketConnected, getEventTarget(), new TMethodEventJob(this, &SecureSocket::handleTCPConnected) ); @@ -161,15 +161,15 @@ TCPSocket::EJobResult SecureSocket::doRead() // send input ready if input buffer was empty if (wasEmpty) { - sendEvent(m_events->forIStream().inputReady()); + sendEvent(EventTypes::StreamInputReady); } } else { // remote write end of stream hungup. our input side // has therefore shutdown but don't flush our buffer // since there's still data to be read. - sendEvent(m_events->forIStream().inputShutdown()); + sendEvent(EventTypes::StreamInputShutdown); if (!m_writable && m_inputBuffer.getSize() == 0) { - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); m_connected = false; } m_readable = false; @@ -640,9 +640,9 @@ void SecureSocket::checkResult(int status, int &retry) void SecureSocket::disconnect() { - sendEvent(getEvents()->forISocket().stopRetry()); - sendEvent(getEvents()->forISocket().disconnected()); - sendEvent(getEvents()->forIStream().inputShutdown()); + sendEvent(EventTypes::SocketStopRetry); + sendEvent(EventTypes::SocketDisconnected); + sendEvent(EventTypes::StreamInputShutdown); } bool SecureSocket::verifyCertFingerprint(const deskflow::fs::path &fingerprintDbPath) @@ -709,7 +709,7 @@ ISocketMultiplexerJob *SecureSocket::serviceConnect(ISocketMultiplexerJob *job, // If status > 0, success if (status > 0) { - sendEvent(m_events->forIDataSocket().secureConnected()); + sendEvent(EventTypes::DataSocketSecureConnected); return newJob(); } @@ -736,7 +736,7 @@ ISocketMultiplexerJob *SecureSocket::serviceAccept(ISocketMultiplexerJob *job, b // If status > 0, success if (status > 0) { - sendEvent(m_events->forClientListener().accepted()); + sendEvent(EventTypes::ClientListenerAccepted); return newJob(); } diff --git a/src/lib/net/TCPListenSocket.cpp b/src/lib/net/TCPListenSocket.cpp index 6c5bb7cb6..f2bf4fee3 100644 --- a/src/lib/net/TCPListenSocket.cpp +++ b/src/lib/net/TCPListenSocket.cpp @@ -130,7 +130,7 @@ ISocketMultiplexerJob *TCPListenSocket::serviceListening(ISocketMultiplexerJob * return nullptr; } if (read) { - m_events->addEvent(Event(m_events->forIListenSocket().connecting(), this)); + m_events->addEvent(Event(EventTypes::ListenSocketConnecting, this)); // stop polling on this socket until the client accepts return nullptr; } diff --git a/src/lib/net/TCPSocket.cpp b/src/lib/net/TCPSocket.cpp index 5f43ddfdc..def09bfd1 100644 --- a/src/lib/net/TCPSocket.cpp +++ b/src/lib/net/TCPSocket.cpp @@ -96,7 +96,7 @@ void TCPSocket::close() // clear buffers and enter disconnected state if (m_connected) { - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); } onDisconnected(); @@ -133,7 +133,7 @@ uint32_t TCPSocket::read(void *buffer, uint32_t n) // if no more data and we cannot read or write then send disconnected if (n > 0 && m_inputBuffer.getSize() == 0 && !m_readable && !m_writable) { - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); m_connected = false; } @@ -148,7 +148,7 @@ void TCPSocket::write(const void *buffer, uint32_t n) // must not have shutdown output if (!m_writable) { - sendEvent(m_events->forIStream().outputError()); + sendEvent(EventTypes::StreamOutputError); return; } @@ -195,7 +195,7 @@ void TCPSocket::shutdownInput() // shutdown buffer for reading if (m_readable) { - sendEvent(m_events->forIStream().inputShutdown()); + sendEvent(EventTypes::StreamInputShutdown); onInputShutdown(); useNewJob = true; } @@ -221,7 +221,7 @@ void TCPSocket::shutdownOutput() // shutdown buffer for writing if (m_writable) { - sendEvent(m_events->forIStream().outputShutdown()); + sendEvent(EventTypes::StreamOutputShutdown); onOutputShutdown(); useNewJob = true; } @@ -263,7 +263,7 @@ void TCPSocket::connect(const NetworkAddress &addr) try { if (ARCH->connectSocket(m_socket, addr.getAddress())) { - sendEvent(m_events->forIDataSocket().connected()); + sendEvent(EventTypes::DataSocketConnected); onConnected(); } else { // connection is in progress @@ -324,15 +324,15 @@ TCPSocket::EJobResult TCPSocket::doRead() // send input ready if input buffer was empty if (wasEmpty) { - sendEvent(m_events->forIStream().inputReady()); + sendEvent(EventTypes::StreamInputReady); } } else { // remote write end of stream hungup. our input side // has therefore shutdown but don't flush our buffer // since there's still data to be read. - sendEvent(m_events->forIStream().inputShutdown()); + sendEvent(EventTypes::StreamInputShutdown); if (!m_writable && m_inputBuffer.getSize() == 0) { - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); m_connected = false; } m_readable = false; @@ -397,11 +397,10 @@ ISocketMultiplexerJob *TCPSocket::newJob() void TCPSocket::sendConnectionFailedEvent(const char *msg) { auto *info = new ConnectionFailedInfo(msg); - m_events->addEvent(Event(m_events->forIDataSocket().connectionFailed(), getEventTarget(), info, Event::kDontFreeData) - ); + m_events->addEvent(Event(EventTypes::DataSocketConnectionFailed, getEventTarget(), info, Event::kDontFreeData)); } -void TCPSocket::sendEvent(Event::Type type) +void TCPSocket::sendEvent(EventTypes type) { m_events->addEvent(Event(type, getEventTarget())); } @@ -410,7 +409,7 @@ void TCPSocket::discardWrittenData(int bytesWrote) { m_outputBuffer.pop(bytesWrote); if (m_outputBuffer.getSize() == 0) { - sendEvent(m_events->forIStream().outputFlushed()); + sendEvent(EventTypes::StreamOutputFlushed); m_flushed = true; m_flushed.broadcast(); } @@ -480,7 +479,7 @@ ISocketMultiplexerJob *TCPSocket::serviceConnecting(ISocketMultiplexerJob *job, } if (write) { - sendEvent(m_events->forIDataSocket().connected()); + sendEvent(EventTypes::DataSocketConnected); onConnected(); return newJob(); } @@ -493,7 +492,7 @@ ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, b Lock lock(&m_mutex); if (error) { - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); onDisconnected(); return newJob(); } @@ -506,23 +505,23 @@ ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, b // remote read end of stream hungup. our output side // has therefore shutdown. onOutputShutdown(); - sendEvent(m_events->forIStream().outputShutdown()); + sendEvent(EventTypes::StreamOutputShutdown); if (!m_readable && m_inputBuffer.getSize() == 0) { - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); m_connected = false; } result = kNew; } catch (XArchNetworkDisconnected &) { // stream hungup onDisconnected(); - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); result = kNew; } catch (XArchNetwork &e) { // other write error LOG((CLOG_WARN "error writing socket: %s", e.what())); onDisconnected(); - sendEvent(m_events->forIStream().outputError()); - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::StreamOutputError); + sendEvent(EventTypes::SocketDisconnected); result = kNew; } } @@ -532,7 +531,7 @@ ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, b result = doRead(); } catch (XArchNetworkDisconnected &) { // stream hungup - sendEvent(m_events->forISocket().disconnected()); + sendEvent(EventTypes::SocketDisconnected); onDisconnected(); result = kNew; } catch (XArchNetwork &e) { diff --git a/src/lib/net/TCPSocket.h b/src/lib/net/TCPSocket.h index a1f3a672e..8c2b0c9a6 100644 --- a/src/lib/net/TCPSocket.h +++ b/src/lib/net/TCPSocket.h @@ -93,7 +93,7 @@ protected: return m_mutex; } - void sendEvent(Event::Type); + void sendEvent(EventTypes); void discardWrittenData(int bytesWrote); private: diff --git a/src/lib/platform/EiEventQueueBuffer.cpp b/src/lib/platform/EiEventQueueBuffer.cpp index ae92c4b9b..dd4752b90 100644 --- a/src/lib/platform/EiEventQueueBuffer.cpp +++ b/src/lib/platform/EiEventQueueBuffer.cpp @@ -117,7 +117,7 @@ IEventQueueBuffer::Type EiEventQueueBuffer::getEvent(Event &event, uint32_t &dat return kUser; } - event = Event(Event::kSystem, events_->getSystemTarget()); + event = Event(EventTypes::System, events_->getSystemTarget()); return kSystem; } diff --git a/src/lib/platform/EiScreen.cpp b/src/lib/platform/EiScreen.cpp index c1ea6df50..79778e307 100644 --- a/src/lib/platform/EiScreen.cpp +++ b/src/lib/platform/EiScreen.cpp @@ -49,19 +49,19 @@ EiScreen::EiScreen(bool is_primary, IEventQueue *events, bool use_portal) key_state_ = new EiKeyState(this, events); // install event handlers events_->adoptHandler( - Event::kSystem, events_->getSystemTarget(), new TMethodEventJob(this, &EiScreen::handleSystemEvent) + EventTypes::System, events_->getSystemTarget(), new TMethodEventJob(this, &EiScreen::handleSystemEvent) ); if (use_portal) { events_->adoptHandler( - events_->forEi().connected(), getEventTarget(), + EventTypes::EIConnected, getEventTarget(), new TMethodEventJob(this, &EiScreen::handle_connected_to_eis_event) ); if (is_primary) { portal_input_capture_ = new PortalInputCapture(this, events_); } else { events_->adoptHandler( - events_->forEi().sessionClosed(), getEventTarget(), + EventTypes::EISessionClosed, getEventTarget(), new TMethodEventJob(this, &EiScreen::handle_portal_session_closed) ); portal_remote_desktop_ = new PortalRemoteDesktop(this, events_); @@ -79,7 +79,7 @@ EiScreen::EiScreen(bool is_primary, IEventQueue *events, bool use_portal) EiScreen::~EiScreen() { events_->adoptBuffer(nullptr); - events_->removeHandler(Event::kSystem, events_->getSystemTarget()); + events_->removeHandler(EventTypes::System, events_->getSystemTarget()); cleanup_ei(); @@ -437,7 +437,7 @@ void EiScreen::update_shape() cursor_x_ = x_ + w_ / 2; cursor_y_ = y_ + h_ / 2; - sendEvent(events_->forIScreen().shapeChanged(), nullptr); + sendEvent(EventTypes::ScreenShapeChanged, nullptr); } void EiScreen::add_device(struct ei_device *device) @@ -509,7 +509,7 @@ void EiScreen::remove_device(struct ei_device *device) update_shape(); } -void EiScreen::sendEvent(Event::Type type, void *data) +void EiScreen::sendEvent(EventTypes type, void *data) { events_->addEvent(Event(type, getEventTarget(), data)); } @@ -549,7 +549,7 @@ bool EiScreen::on_hotkey(KeyID keyid, bool is_pressed, KeyModifierMask mask) // key combinations may not work correctly, more effort is needed here. auto id = it->second.find_by_mask(mask); if (id != 0) { - Event::Type type = is_pressed ? events_->forIPrimaryScreen().hotKeyDown() : events_->forIPrimaryScreen().hotKeyUp(); + EventTypes type = is_pressed ? EventTypes::PrimaryScreenHotkeyDown : EventTypes::PrimaryScreenHotkeyUp; sendEvent(type, HotKeyInfo::alloc(id)); return true; } @@ -594,7 +594,7 @@ void EiScreen::on_button_event(ei_event *event) return; } - auto eventType = pressed ? events_->forIPrimaryScreen().buttonDown() : events_->forIPrimaryScreen().buttonUp(); + auto eventType = pressed ? EventTypes::PrimaryScreenButtonDown : EventTypes::PrimaryScreenButtonUp; sendEvent(eventType, ButtonInfo::alloc(button, mask)); } @@ -639,7 +639,7 @@ void EiScreen::on_pointer_scroll_event(ei_event *event) // remain compatible with other platforms (including X11). if (x != 0 || y != 0) sendEvent( - events_->forIPrimaryScreen().wheel(), + EventTypes::PrimaryScreenWheel, WheelInfo::alloc((int32_t)-x * PIXEL_TO_WHEEL_RATIO, (int32_t)-y * PIXEL_TO_WHEEL_RATIO) ); @@ -663,7 +663,7 @@ void EiScreen::on_pointer_scroll_discrete_event(ei_event *event) // libei and deskflow seem to use opposite directions, so we have // to send the opposite of the value reported by EI if we want to // remain compatible with other platforms (including X11). - sendEvent(events_->forIPrimaryScreen().wheel(), WheelInfo::alloc(-dx, -dy)); + sendEvent(EventTypes::PrimaryScreenWheel, WheelInfo::alloc(-dx, -dy)); } void EiScreen::on_motion_event(ei_event *event) @@ -675,7 +675,7 @@ void EiScreen::on_motion_event(ei_event *event) if (is_on_screen_) { LOG_DEBUG("event: motion on primary x=%i y=%i)", cursor_x_, cursor_y_); - sendEvent(events_->forIPrimaryScreen().motionOnPrimary(), MotionInfo::alloc(cursor_x_, cursor_y_)); + sendEvent(EventTypes::PrimaryScreenMotionOnPrimary, MotionInfo::alloc(cursor_x_, cursor_y_)); if (portal_input_capture_->is_active()) { portal_input_capture_->release(); } @@ -686,7 +686,7 @@ void EiScreen::on_motion_event(ei_event *event) auto pixel_dy = static_cast(buffer_dy); if (pixel_dx || pixel_dy) { LOG_DEBUG1("event: motion on secondary x=%d y=%d", pixel_dx, pixel_dy); - sendEvent(events_->forIPrimaryScreen().motionOnSecondary(), MotionInfo::alloc(pixel_dx, pixel_dy)); + sendEvent(EventTypes::PrimaryScreenMotionOnSecondary, MotionInfo::alloc(pixel_dx, pixel_dy)); buffer_dx -= pixel_dx; buffer_dy -= pixel_dy; } diff --git a/src/lib/platform/EiScreen.h b/src/lib/platform/EiScreen.h index 58a705e9d..1ea378cdb 100644 --- a/src/lib/platform/EiScreen.h +++ b/src/lib/platform/EiScreen.h @@ -88,7 +88,7 @@ protected: private: void init_ei(); void cleanup_ei(); - void sendEvent(Event::Type type, void *data); + void sendEvent(EventTypes type, void *data); ButtonID map_button_from_evdev(ei_event *event) const; void on_key_event(ei_event *event); void on_button_event(ei_event *event); diff --git a/src/lib/platform/MSWindowsDesks.cpp b/src/lib/platform/MSWindowsDesks.cpp index 091ec1b33..7b5788b69 100644 --- a/src/lib/platform/MSWindowsDesks.cpp +++ b/src/lib/platform/MSWindowsDesks.cpp @@ -157,7 +157,7 @@ void MSWindowsDesks::enable() // change but as far as i can tell it doesn't. m_timer = m_events->newTimer(0.2, nullptr); m_events->adoptHandler( - Event::kTimer, m_timer, new TMethodEventJob(this, &MSWindowsDesks::handleCheckDesk) + EventTypes::Timer, m_timer, new TMethodEventJob(this, &MSWindowsDesks::handleCheckDesk) ); updateKeys(); @@ -167,7 +167,7 @@ void MSWindowsDesks::disable() { // remove timer if (m_timer != nullptr) { - m_events->removeHandler(Event::kTimer, m_timer); + m_events->removeHandler(EventTypes::Timer, m_timer); m_events->deleteTimer(m_timer); m_timer = nullptr; } diff --git a/src/lib/platform/MSWindowsEventQueueBuffer.cpp b/src/lib/platform/MSWindowsEventQueueBuffer.cpp index 752b816e2..95b9ccda7 100644 --- a/src/lib/platform/MSWindowsEventQueueBuffer.cpp +++ b/src/lib/platform/MSWindowsEventQueueBuffer.cpp @@ -81,16 +81,16 @@ IEventQueueBuffer::Type MSWindowsEventQueueBuffer::getEvent(Event &event, uint32 if (result == -1) { return kNone; } else if (result == 0) { - event = Event(Event::kQuit); + event = Event(EventTypes::Quit); return kSystem; } else if (m_daemonQuit != 0 && m_event.message == m_daemonQuit) { - event = Event(Event::kQuit); + event = Event(EventTypes::Quit); return kSystem; } else if (m_event.message == m_userEvent) { dataID = static_cast(m_event.wParam); return kUser; } else { - event = Event(Event::kSystem, m_events->getSystemTarget(), &m_event); + event = Event(EventTypes::System, m_events->getSystemTarget(), &m_event); return kSystem; } } diff --git a/src/lib/platform/MSWindowsKeyState.cpp b/src/lib/platform/MSWindowsKeyState.cpp index c13b6e853..1c8e8c8e6 100644 --- a/src/lib/platform/MSWindowsKeyState.cpp +++ b/src/lib/platform/MSWindowsKeyState.cpp @@ -605,7 +605,7 @@ void MSWindowsKeyState::init() void MSWindowsKeyState::disable() { if (m_fixTimer != nullptr) { - m_events->removeHandler(Event::kTimer, m_fixTimer); + m_events->removeHandler(EventTypes::Timer, m_fixTimer); m_events->deleteTimer(m_fixTimer); m_fixTimer = nullptr; } diff --git a/src/lib/platform/MSWindowsScreen.cpp b/src/lib/platform/MSWindowsScreen.cpp index 26842661e..b27718068 100644 --- a/src/lib/platform/MSWindowsScreen.cpp +++ b/src/lib/platform/MSWindowsScreen.cpp @@ -172,7 +172,7 @@ MSWindowsScreen::MSWindowsScreen( // install event handlers m_events->adoptHandler( - Event::kSystem, m_events->getSystemTarget(), + EventTypes::System, m_events->getSystemTarget(), new TMethodEventJob(this, &MSWindowsScreen::handleSystemEvent) ); @@ -186,7 +186,7 @@ MSWindowsScreen::~MSWindowsScreen() disable(); m_events->adoptBuffer(nullptr); - m_events->removeHandler(Event::kSystem, m_events->getSystemTarget()); + m_events->removeHandler(EventTypes::System, m_events->getSystemTarget()); delete m_keyState; delete m_desks; delete m_screensaver; @@ -222,7 +222,7 @@ void MSWindowsScreen::enable() // we need to poll some things to fix them m_fixTimer = m_events->newTimer(1.0, nullptr); m_events->adoptHandler( - Event::kTimer, m_fixTimer, new TMethodEventJob(this, &MSWindowsScreen::handleFixes) + EventTypes::Timer, m_fixTimer, new TMethodEventJob(this, &MSWindowsScreen::handleFixes) ); // install our clipboard snooper @@ -265,7 +265,7 @@ void MSWindowsScreen::disable() // uninstall fix timer if (m_fixTimer != nullptr) { - m_events->removeHandler(Event::kTimer, m_fixTimer); + m_events->removeHandler(EventTypes::Timer, m_fixTimer); m_events->deleteTimer(m_fixTimer); m_fixTimer = nullptr; } @@ -416,8 +416,8 @@ void MSWindowsScreen::checkClipboards() if (m_ownClipboard && !MSWindowsClipboard::isOwnedByDeskflow()) { LOG((CLOG_DEBUG "clipboard changed: lost ownership and no notification received")); m_ownClipboard = false; - sendClipboardEvent(m_events->forClipboard().clipboardGrabbed(), kClipboardClipboard); - sendClipboardEvent(m_events->forClipboard().clipboardGrabbed(), kClipboardSelection); + sendClipboardEvent(EventTypes::ClipboardGrabbed, kClipboardClipboard); + sendClipboardEvent(EventTypes::ClipboardGrabbed, kClipboardSelection); } } @@ -909,12 +909,12 @@ void MSWindowsScreen::destroyWindow(HWND hwnd) const } } -void MSWindowsScreen::sendEvent(Event::Type type, void *data) +void MSWindowsScreen::sendEvent(EventTypes type, void *data) { m_events->addEvent(Event(type, getEventTarget(), data)); } -void MSWindowsScreen::sendClipboardEvent(Event::Type type, ClipboardID id) +void MSWindowsScreen::sendClipboardEvent(EventTypes type, ClipboardID id) { ClipboardInfo *info = (ClipboardInfo *)malloc(sizeof(ClipboardInfo)); if (info == nullptr) { @@ -1050,7 +1050,7 @@ bool MSWindowsScreen::onEvent(HWND, UINT msg, WPARAM wParam, LPARAM lParam, LRES /* On windows 10 we don't receive WM_POWERBROADCAST after sleep. We receive only WM_TIMECHANGE hence this message is used to resume.*/ case WM_TIMECHANGE: - m_events->addEvent(Event(m_events->forIScreen().resume(), getEventTarget(), nullptr, Event::kDeliverImmediately)); + m_events->addEvent(Event(EventTypes::ScreenResume, getEventTarget(), nullptr, Event::kDeliverImmediately)); break; case WM_POWERBROADCAST: @@ -1058,12 +1058,11 @@ bool MSWindowsScreen::onEvent(HWND, UINT msg, WPARAM wParam, LPARAM lParam, LRES case PBT_APMRESUMEAUTOMATIC: case PBT_APMRESUMECRITICAL: case PBT_APMRESUMESUSPEND: - m_events->addEvent(Event(m_events->forIScreen().resume(), getEventTarget(), nullptr, Event::kDeliverImmediately)); + m_events->addEvent(Event(EventTypes::ScreenResume, getEventTarget(), nullptr, Event::kDeliverImmediately)); break; case PBT_APMSUSPEND: - m_events->addEvent(Event(m_events->forIScreen().suspend(), getEventTarget(), nullptr, Event::kDeliverImmediately) - ); + m_events->addEvent(Event(EventTypes::ScreenSuspend, getEventTarget(), nullptr, Event::kDeliverImmediately)); break; } *result = TRUE; @@ -1242,15 +1241,15 @@ bool MSWindowsScreen::onHotKey(WPARAM wParam, LPARAM lParam) } // find what kind of event - Event::Type type; + EventTypes type; if ((lParam & 0x80000000u) == 0u) { if ((lParam & 0x40000000u) != 0u) { // ignore key repeats but it counts as a hot key return true; } - type = m_events->forIPrimaryScreen().hotKeyDown(); + type = EventTypes::PrimaryScreenHotkeyDown; } else { - type = m_events->forIPrimaryScreen().hotKeyUp(); + type = EventTypes::PrimaryScreenHotkeyUp; } // generate event @@ -1287,12 +1286,12 @@ bool MSWindowsScreen::onMouseButton(WPARAM wParam, LPARAM lParam) if (pressed) { LOG((CLOG_DEBUG1 "event: button press button=%d", button)); if (button != kButtonNone) { - sendEvent(m_events->forIPrimaryScreen().buttonDown(), ButtonInfo::alloc(button, mask)); + sendEvent(EventTypes::PrimaryScreenButtonDown, ButtonInfo::alloc(button, mask)); } } else { LOG((CLOG_DEBUG1 "event: button release button=%d", button)); if (button != kButtonNone) { - sendEvent(m_events->forIPrimaryScreen().buttonUp(), ButtonInfo::alloc(button, mask)); + sendEvent(EventTypes::PrimaryScreenButtonUp, ButtonInfo::alloc(button, mask)); } } } @@ -1331,7 +1330,7 @@ bool MSWindowsScreen::onMouseMove(int32_t mx, int32_t my) if (m_isOnScreen) { // motion on primary screen - sendEvent(m_events->forIPrimaryScreen().motionOnPrimary(), MotionInfo::alloc(m_xCursor, m_yCursor)); + sendEvent(EventTypes::PrimaryScreenMotionOnPrimary, MotionInfo::alloc(m_xCursor, m_yCursor)); if (m_buttons[kButtonLeft] == true && m_draggingStarted == false) { m_draggingStarted = true; @@ -1356,7 +1355,7 @@ bool MSWindowsScreen::onMouseMove(int32_t mx, int32_t my) LOG((CLOG_DEBUG "dropped bogus delta motion: %+d,%+d", x, y)); } else { // send motion - sendEvent(m_events->forIPrimaryScreen().motionOnSecondary(), MotionInfo::alloc(x, y)); + sendEvent(EventTypes::PrimaryScreenMotionOnSecondary, MotionInfo::alloc(x, y)); } } @@ -1368,7 +1367,7 @@ bool MSWindowsScreen::onMouseWheel(int32_t xDelta, int32_t yDelta) // ignore message if posted prior to last mark change if (!ignore()) { LOG((CLOG_DEBUG1 "event: button wheel delta=%+d,%+d", xDelta, yDelta)); - sendEvent(m_events->forIPrimaryScreen().wheel(), WheelInfo::alloc(xDelta, yDelta)); + sendEvent(EventTypes::PrimaryScreenWheel, WheelInfo::alloc(xDelta, yDelta)); } return true; } @@ -1391,12 +1390,12 @@ bool MSWindowsScreen::onScreensaver(bool activated) if (activated) { if (!m_screensaverActive && m_screensaver->checkStarted(DESKFLOW_MSG_SCREEN_SAVER, FALSE, 0)) { m_screensaverActive = true; - sendEvent(m_events->forIPrimaryScreen().screensaverActivated()); + sendEvent(EventTypes::PrimaryScreenSaverActivated); } } else { if (m_screensaverActive) { m_screensaverActive = false; - sendEvent(m_events->forIPrimaryScreen().screensaverDeactivated()); + sendEvent(EventTypes::PrimaryScreenSaverDeactivated); } } @@ -1428,7 +1427,7 @@ bool MSWindowsScreen::onDisplayChange() } // send new screen info - sendEvent(m_events->forIScreen().shapeChanged()); + sendEvent(EventTypes::ScreenShapeChanged); LOG((CLOG_DEBUG "screen shape: %d,%d %dx%d %s", m_x, m_y, m_w, m_h, m_multimon ? "(multi-monitor)" : "")); } @@ -1444,8 +1443,8 @@ void MSWindowsScreen::onClipboardChange() if (m_ownClipboard) { LOG((CLOG_DEBUG "clipboard changed: lost ownership")); m_ownClipboard = false; - sendClipboardEvent(m_events->forClipboard().clipboardGrabbed(), kClipboardClipboard); - sendClipboardEvent(m_events->forClipboard().clipboardGrabbed(), kClipboardSelection); + sendClipboardEvent(EventTypes::ClipboardGrabbed, kClipboardClipboard); + sendClipboardEvent(EventTypes::ClipboardGrabbed, kClipboardSelection); } } else if (!m_ownClipboard) { LOG((CLOG_DEBUG "clipboard changed: %s owned", kAppId)); diff --git a/src/lib/platform/MSWindowsScreen.h b/src/lib/platform/MSWindowsScreen.h index 7871d133e..a00ffbb90 100644 --- a/src/lib/platform/MSWindowsScreen.h +++ b/src/lib/platform/MSWindowsScreen.h @@ -152,10 +152,10 @@ private: // convenience function to send events public: // HACK - void sendEvent(Event::Type type, void * = nullptr); + void sendEvent(EventTypes type, void * = nullptr); private: // HACK - void sendClipboardEvent(Event::Type type, ClipboardID id); + void sendClipboardEvent(EventTypes type, ClipboardID id); // handle message before it gets dispatched. returns true iff // the message should not be dispatched. diff --git a/src/lib/platform/OSXScreen.h b/src/lib/platform/OSXScreen.h index cbcc53f57..1cebcd9ef 100644 --- a/src/lib/platform/OSXScreen.h +++ b/src/lib/platform/OSXScreen.h @@ -116,8 +116,8 @@ private: void postMouseEvent(CGPoint &) const; // convenience function to send events - void sendEvent(Event::Type type, void * = nullptr) const; - void sendClipboardEvent(Event::Type type, ClipboardID id) const; + void sendEvent(EventTypes type, void * = nullptr) const; + void sendClipboardEvent(EventTypes type, ClipboardID id) const; // message handlers bool onMouseMove(CGFloat mx, CGFloat my); diff --git a/src/lib/platform/OSXScreen.mm b/src/lib/platform/OSXScreen.mm index 9b8a15f3f..6e4c37a9a 100644 --- a/src/lib/platform/OSXScreen.mm +++ b/src/lib/platform/OSXScreen.mm @@ -150,7 +150,7 @@ OSXScreen::OSXScreen( // watch for requests to sleep m_events->adoptHandler( - m_events->forOSXScreen().confirmSleep(), getEventTarget(), + EventTypes::OsxScreenConfirmSleep, getEventTarget(), new TMethodEventJob(this, &OSXScreen::handleConfirmSleep) ); @@ -161,7 +161,7 @@ OSXScreen::OSXScreen( LOG((CLOG_DEBUG "starting watchSystemPowerThread")); m_pmWatchThread = new Thread(new TMethodJob(this, &OSXScreen::watchSystemPowerThread)); } catch (...) { - m_events->removeHandler(m_events->forOSXScreen().confirmSleep(), getEventTarget()); + m_events->removeHandler(EventTypes::OsxScreenConfirmSleep, getEventTarget()); if (m_switchEventHandlerRef != 0) { RemoveEventHandler(m_switchEventHandlerRef); } @@ -175,7 +175,8 @@ OSXScreen::OSXScreen( // install event handlers m_events->adoptHandler( - Event::kSystem, m_events->getSystemTarget(), new TMethodEventJob(this, &OSXScreen::handleSystemEvent) + EventTypes::System, m_events->getSystemTarget(), + new TMethodEventJob(this, &OSXScreen::handleSystemEvent) ); // install the platform event queue @@ -187,7 +188,7 @@ OSXScreen::~OSXScreen() disable(); m_events->adoptBuffer(nullptr); - m_events->removeHandler(Event::kSystem, m_events->getSystemTarget()); + m_events->removeHandler(EventTypes::System, m_events->getSystemTarget()); if (m_pmWatchThread) { // make sure the thread has setup the runloop. @@ -208,7 +209,7 @@ OSXScreen::~OSXScreen() delete m_pmThreadReady; delete m_pmMutex; - m_events->removeHandler(m_events->forOSXScreen().confirmSleep(), getEventTarget()); + m_events->removeHandler(EventTypes::OsxScreenConfirmSleep, getEventTarget()); RemoveEventHandler(m_switchEventHandlerRef); @@ -701,7 +702,7 @@ void OSXScreen::enable() // watch the clipboard m_clipboardTimer = m_events->newTimer(1.0, nullptr); m_events->adoptHandler( - Event::kTimer, m_clipboardTimer, new TMethodEventJob(this, &OSXScreen::handleClipboardCheck) + EventTypes::Timer, m_clipboardTimer, new TMethodEventJob(this, &OSXScreen::handleClipboardCheck) ); if (m_isPrimary) { @@ -766,7 +767,7 @@ void OSXScreen::disable() // uninstall clipboard timer if (m_clipboardTimer != nullptr) { - m_events->removeHandler(Event::kTimer, m_clipboardTimer); + m_events->removeHandler(EventTypes::Timer, m_clipboardTimer); m_events->deleteTimer(m_clipboardTimer); m_clipboardTimer = nullptr; } @@ -854,8 +855,8 @@ void OSXScreen::checkClipboards() LOG((CLOG_DEBUG2 "checking clipboard")); if (m_pasteboard.synchronize()) { LOG((CLOG_DEBUG "clipboard changed")); - sendClipboardEvent(m_events->forClipboard().clipboardGrabbed(), kClipboardClipboard); - sendClipboardEvent(m_events->forClipboard().clipboardGrabbed(), kClipboardSelection); + sendClipboardEvent(EventTypes::ClipboardGrabbed, kClipboardClipboard); + sendClipboardEvent(EventTypes::ClipboardGrabbed, kClipboardSelection); } } @@ -903,12 +904,12 @@ bool OSXScreen::isPrimary() const return m_isPrimary; } -void OSXScreen::sendEvent(Event::Type type, void *data) const +void OSXScreen::sendEvent(EventTypes type, void *data) const { m_events->addEvent(Event(type, getEventTarget(), data)); } -void OSXScreen::sendClipboardEvent(Event::Type type, ClipboardID id) const +void OSXScreen::sendClipboardEvent(EventTypes type, ClipboardID id) const { ClipboardInfo *info = (ClipboardInfo *)malloc(sizeof(ClipboardInfo)); info->m_id = id; @@ -1009,7 +1010,7 @@ bool OSXScreen::onMouseMove(CGFloat mx, CGFloat my) if (m_isOnScreen) { // motion on primary screen - sendEvent(m_events->forIPrimaryScreen().motionOnPrimary(), MotionInfo::alloc(m_xCursor, m_yCursor)); + sendEvent(EventTypes::PrimaryScreenMotionOnPrimary, MotionInfo::alloc(m_xCursor, m_yCursor)); if (m_buttonState.test(0)) { m_draggingStarted = true; } @@ -1043,7 +1044,7 @@ bool OSXScreen::onMouseMove(CGFloat mx, CGFloat my) // And keep only the fractional part m_xFractionalMove -= intX; m_yFractionalMove -= intY; - sendEvent(m_events->forIPrimaryScreen().motionOnSecondary(), MotionInfo::alloc(intX, intY)); + sendEvent(EventTypes::PrimaryScreenMotionOnSecondary, MotionInfo::alloc(intX, intY)); } } @@ -1059,13 +1060,13 @@ bool OSXScreen::onMouseButton(bool pressed, uint16_t macButton) LOG((CLOG_DEBUG1 "event: button press button=%d", button)); if (button != kButtonNone) { KeyModifierMask mask = m_keyState->getActiveModifiers(); - sendEvent(m_events->forIPrimaryScreen().buttonDown(), ButtonInfo::alloc(button, mask)); + sendEvent(EventTypes::PrimaryScreenButtonDown, ButtonInfo::alloc(button, mask)); } } else { LOG((CLOG_DEBUG1 "event: button release button=%d", button)); if (button != kButtonNone) { KeyModifierMask mask = m_keyState->getActiveModifiers(); - sendEvent(m_events->forIPrimaryScreen().buttonUp(), ButtonInfo::alloc(button, mask)); + sendEvent(EventTypes::PrimaryScreenButtonUp, ButtonInfo::alloc(button, mask)); } } @@ -1106,7 +1107,7 @@ bool OSXScreen::onMouseButton(bool pressed, uint16_t macButton) bool OSXScreen::onMouseWheel(int32_t xDelta, int32_t yDelta) const { LOG((CLOG_DEBUG1 "event: button wheel delta=%+d,%+d", xDelta, yDelta)); - sendEvent(m_events->forIPrimaryScreen().wheel(), WheelInfo::alloc(xDelta, yDelta)); + sendEvent(EventTypes::PrimaryScreenWheel, WheelInfo::alloc(xDelta, yDelta)); return true; } @@ -1160,9 +1161,9 @@ bool OSXScreen::onKey(CGEventRef event) if (m_modifierHotKeys.count(newMask) > 0) { m_activeModifierHotKey = m_modifierHotKeys[newMask]; m_activeModifierHotKeyMask = newMask; - m_events->addEvent(Event( - m_events->forIPrimaryScreen().hotKeyDown(), getEventTarget(), HotKeyInfo::alloc(m_activeModifierHotKey) - )); + m_events->addEvent( + Event(EventTypes::PrimaryScreenHotkeyDown, getEventTarget(), HotKeyInfo::alloc(m_activeModifierHotKey)) + ); } } @@ -1172,7 +1173,7 @@ bool OSXScreen::onKey(CGEventRef event) KeyModifierMask mask = (newMask & m_activeModifierHotKeyMask); if (mask != m_activeModifierHotKeyMask) { m_events->addEvent( - Event(m_events->forIPrimaryScreen().hotKeyUp(), getEventTarget(), HotKeyInfo::alloc(m_activeModifierHotKey)) + Event(EventTypes::PrimaryScreenHotkeyUp, getEventTarget(), HotKeyInfo::alloc(m_activeModifierHotKey)) ); m_activeModifierHotKey = 0; m_activeModifierHotKeyMask = 0; @@ -1189,11 +1190,11 @@ bool OSXScreen::onKey(CGEventRef event) uint32_t id = i->second; // determine event type - Event::Type type; + EventTypes type; if (eventKind == kCGEventKeyDown) { - type = m_events->forIPrimaryScreen().hotKeyDown(); + type = EventTypes::PrimaryScreenHotkeyDown; } else if (eventKind == kCGEventKeyUp) { - type = m_events->forIPrimaryScreen().hotKeyUp(); + type = EventTypes::PrimaryScreenHotkeyUp; } else { return false; } @@ -1273,12 +1274,12 @@ bool OSXScreen::onHotKey(EventRef event) const uint32_t id = hkid.id; // determine event type - Event::Type type; + EventTypes type; uint32_t eventKind = GetEventKind(event); if (eventKind == kEventHotKeyPressed) { - type = m_events->forIPrimaryScreen().hotKeyDown(); + type = EventTypes::PrimaryScreenHotkeyDown; } else if (eventKind == kEventHotKeyReleased) { - type = m_events->forIPrimaryScreen().hotKeyUp(); + type = EventTypes::PrimaryScreenHotkeyUp; } else { return false; } @@ -1361,14 +1362,16 @@ void OSXScreen::enableDragTimer(bool enable) { if (enable && m_dragTimer == nullptr) { m_dragTimer = m_events->newTimer(0.01, nullptr); - m_events->adoptHandler(Event::kTimer, m_dragTimer, new TMethodEventJob(this, &OSXScreen::handleDrag)); + m_events->adoptHandler( + EventTypes::Timer, m_dragTimer, new TMethodEventJob(this, &OSXScreen::handleDrag) + ); CGEventRef event = CGEventCreate(nullptr); CGPoint mouse = CGEventGetLocation(event); m_dragLastPoint.h = (short)mouse.x; m_dragLastPoint.v = (short)mouse.y; CFRelease(event); } else if (!enable && m_dragTimer != nullptr) { - m_events->removeHandler(Event::kTimer, m_dragTimer); + m_events->removeHandler(EventTypes::Timer, m_dragTimer); m_events->deleteTimer(m_dragTimer); m_dragTimer = nullptr; } @@ -1448,7 +1451,7 @@ bool OSXScreen::updateScreenShape() delete[] displays; // We want to notify the peer screen whether we are primary screen or not - sendEvent(m_events->forIScreen().shapeChanged()); + sendEvent(EventTypes::ScreenShapeChanged); LOG( (CLOG_DEBUG "screen shape: center=%d,%d size=%dx%d on %u %s", m_x, m_y, m_w, m_h, displayCount, @@ -1476,10 +1479,10 @@ pascal OSStatus OSXScreen::userSwitchCallback(EventHandlerCallRef nextHandler, E if (kind == kEventSystemUserSessionDeactivated) { LOG((CLOG_DEBUG "user session deactivated")); - events->addEvent(Event(events->forIScreen().suspend(), screen->getEventTarget())); + events->addEvent(Event(EventTypes::ScreenSuspend, screen->getEventTarget())); } else if (kind == kEventSystemUserSessionActivated) { LOG((CLOG_DEBUG "user session activated")); - events->addEvent(Event(events->forIScreen().resume(), screen->getEventTarget())); + events->addEvent(Event(EventTypes::ScreenResume, screen->getEventTarget())); } return (CallNextEventHandler(nextHandler, theEvent)); } @@ -1574,14 +1577,12 @@ void OSXScreen::handlePowerChangeRequest(natural_t messageType, void *messageArg // OSXScreen has to handle this in the main thread so we have to // queue a confirm sleep event here. we actually don't allow the // system to sleep until the event is handled. - m_events->addEvent( - Event(m_events->forOSXScreen().confirmSleep(), getEventTarget(), messageArg, Event::kDontFreeData) - ); + m_events->addEvent(Event(EventTypes::OsxScreenConfirmSleep, getEventTarget(), messageArg, Event::kDontFreeData)); return; case kIOMessageSystemHasPoweredOn: LOG((CLOG_DEBUG "system wakeup")); - m_events->addEvent(Event(m_events->forIScreen().resume(), getEventTarget())); + m_events->addEvent(Event(EventTypes::ScreenResume, getEventTarget())); break; default: @@ -1601,8 +1602,7 @@ void OSXScreen::handleConfirmSleep(const Event &event, void *) Lock lock(m_pmMutex); if (m_pmRootPort != 0) { // deliver suspend event immediately. - m_events->addEvent(Event(m_events->forIScreen().suspend(), getEventTarget(), nullptr, Event::kDeliverImmediately) - ); + m_events->addEvent(Event(EventTypes::ScreenSuspend, getEventTarget(), nullptr, Event::kDeliverImmediately)); LOG((CLOG_DEBUG "system will sleep")); IOAllowPowerChange(m_pmRootPort, messageArg); diff --git a/src/lib/platform/OSXScreenSaver.cpp b/src/lib/platform/OSXScreenSaver.cpp index aedc2a756..5d8c3e327 100644 --- a/src/lib/platform/OSXScreenSaver.cpp +++ b/src/lib/platform/OSXScreenSaver.cpp @@ -92,7 +92,7 @@ void OSXScreenSaver::processLaunched(ProcessSerialNumber psn) m_screenSaverPSN = psn; LOG((CLOG_DEBUG1 "screen saver engine launched, enabled=%d", m_enabled)); if (m_enabled) { - m_events->addEvent(Event(m_events->forIPrimaryScreen().screensaverActivated(), m_eventTarget)); + m_events->addEvent(Event(EventTypes::PrimaryScreenSaverActivated, m_eventTarget)); } } } @@ -102,7 +102,7 @@ void OSXScreenSaver::processTerminated(ProcessSerialNumber psn) if (m_screenSaverPSN.highLongOfPSN == psn.highLongOfPSN && m_screenSaverPSN.lowLongOfPSN == psn.lowLongOfPSN) { LOG((CLOG_DEBUG1 "screen saver engine terminated, enabled=%d", m_enabled)); if (m_enabled) { - m_events->addEvent(Event(m_events->forIPrimaryScreen().screensaverDeactivated(), m_eventTarget)); + m_events->addEvent(Event(EventTypes::PrimaryScreenSaverDeactivated, m_eventTarget)); } m_screenSaverPSN.highLongOfPSN = 0; diff --git a/src/lib/platform/PortalInputCapture.cpp b/src/lib/platform/PortalInputCapture.cpp index b48f01db8..d650a05a5 100644 --- a/src/lib/platform/PortalInputCapture.cpp +++ b/src/lib/platform/PortalInputCapture.cpp @@ -110,7 +110,7 @@ void PortalInputCapture::cb_session_closed(XdpSession *session) { LOG_ERR("portal input capture session was closed, exiting"); g_main_loop_quit(glib_main_loop_); - events_->addEvent(Event::kQuit); + events_->addEvent(EventTypes::Quit); g_signal_handler_disconnect(session, signals_[SESSION_CLOSED]); signals_[SESSION_CLOSED] = 0; @@ -125,7 +125,7 @@ void PortalInputCapture::cb_init_input_capture_session(GObject *object, GAsyncRe if (!session) { LOG_ERR("failed to initialize input capture session, quitting: %s", error->message); g_main_loop_quit(glib_main_loop_); - events_->addEvent(Event::kQuit); + events_->addEvent(EventTypes::Quit); return; } @@ -141,12 +141,12 @@ void PortalInputCapture::cb_init_input_capture_session(GObject *object, GAsyncRe if (fd < 0) { g_main_loop_quit(glib_main_loop_); - events_->addEvent(Event::kQuit); + events_->addEvent(EventTypes::Quit); return; } } // Socket ownership is transferred to the EiScreen - events_->addEvent(Event(events_->forEi().connected(), screen_->getEventTarget(), EiScreen::EiConnectInfo::alloc(fd))); + events_->addEvent(Event(EventTypes::EIConnected, screen_->getEventTarget(), EiScreen::EiConnectInfo::alloc(fd))); // FIXME: the lambda trick doesn't work here for unknown reasons, we need // the static function diff --git a/src/lib/platform/PortalRemoteDesktop.cpp b/src/lib/platform/PortalRemoteDesktop.cpp index 0f14532ae..0f7f68ac4 100644 --- a/src/lib/platform/PortalRemoteDesktop.cpp +++ b/src/lib/platform/PortalRemoteDesktop.cpp @@ -71,7 +71,7 @@ void PortalRemoteDesktop::cb_session_closed(XdpSession *session) LOG_ERR("portal remote desktop session was closed, reconnecting"); g_signal_handler_disconnect(session, session_signal_id_); session_signal_id_ = 0; - events_->addEvent(Event(events_->forEi().sessionClosed(), screen_->getEventTarget())); + events_->addEvent(Event(EventTypes::EISessionClosed, screen_->getEventTarget())); // gcc warning "Suspicious usage of 'sizeof(A*)'" can be ignored g_clear_object(&session_); @@ -87,7 +87,7 @@ void PortalRemoteDesktop::cb_session_started(GObject *object, GAsyncResult *res) if (!success) { LOG_ERR("failed to start portal remote desktop session, quitting: %s", error->message); g_main_loop_quit(glib_main_loop_); - events_->addEvent(Event::kQuit); + events_->addEvent(EventTypes::Quit); return; } @@ -100,12 +100,12 @@ void PortalRemoteDesktop::cb_session_started(GObject *object, GAsyncResult *res) fd = xdp_session_connect_to_eis(session, &error); if (fd < 0) { g_main_loop_quit(glib_main_loop_); - events_->addEvent(Event::kQuit); + events_->addEvent(EventTypes::Quit); return; } // Socket ownership is transferred to the EiScreen - events_->addEvent(Event(events_->forEi().connected(), screen_->getEventTarget(), EiScreen::EiConnectInfo::alloc(fd))); + events_->addEvent(Event(EventTypes::EIConnected, screen_->getEventTarget(), EiScreen::EiConnectInfo::alloc(fd))); } void PortalRemoteDesktop::cb_init_remote_desktop_session(GObject *object, GAsyncResult *res) @@ -120,7 +120,7 @@ void PortalRemoteDesktop::cb_init_remote_desktop_session(GObject *object, GAsync // fails. if (session_iteration_ == 0) { g_main_loop_quit(glib_main_loop_); - events_->addEvent(Event::kQuit); + events_->addEvent(EventTypes::Quit); } else { this->reconnect(1000); } diff --git a/src/lib/platform/XWindowsEventQueueBuffer.cpp b/src/lib/platform/XWindowsEventQueueBuffer.cpp index 97f504bca..28a8f4baa 100644 --- a/src/lib/platform/XWindowsEventQueueBuffer.cpp +++ b/src/lib/platform/XWindowsEventQueueBuffer.cpp @@ -150,7 +150,7 @@ IEventQueueBuffer::Type XWindowsEventQueueBuffer::getEvent(Event &event, uint32_ dataID = static_cast(m_event.xclient.data.l[0]); return kUser; } else { - event = Event(Event::kSystem, m_events->getSystemTarget(), &m_event); + event = Event(EventTypes::System, m_events->getSystemTarget(), &m_event); return kSystem; } } diff --git a/src/lib/platform/XWindowsScreen.cpp b/src/lib/platform/XWindowsScreen.cpp index fdc2e2832..dbc64d232 100644 --- a/src/lib/platform/XWindowsScreen.cpp +++ b/src/lib/platform/XWindowsScreen.cpp @@ -185,7 +185,7 @@ XWindowsScreen::XWindowsScreen( // install event handlers m_events->adoptHandler( - Event::kSystem, m_events->getSystemTarget(), + EventTypes::System, m_events->getSystemTarget(), new TMethodEventJob(this, &XWindowsScreen::handleSystemEvent) ); @@ -199,7 +199,7 @@ XWindowsScreen::~XWindowsScreen() assert(m_display != nullptr); m_events->adoptBuffer(nullptr); - m_events->removeHandler(Event::kSystem, m_events->getSystemTarget()); + m_events->removeHandler(EventTypes::System, m_events->getSystemTarget()); for (ClipboardID id = 0; id < kClipboardEnd; ++id) { delete m_clipboard[id]; } @@ -1110,12 +1110,12 @@ void XWindowsScreen::openIM() XSelectInput(m_display, m_root, StructureNotifyMask); } -void XWindowsScreen::sendEvent(Event::Type type, void *data) +void XWindowsScreen::sendEvent(EventTypes type, void *data) { m_events->addEvent(Event(type, getEventTarget(), data)); } -void XWindowsScreen::sendClipboardEvent(Event::Type type, ClipboardID id) +void XWindowsScreen::sendClipboardEvent(EventTypes type, ClipboardID id) { auto *info = (ClipboardInfo *)malloc(sizeof(ClipboardInfo)); info->m_id = id; @@ -1272,7 +1272,7 @@ void XWindowsScreen::handleSystemEvent(const Event &event, void *) ClipboardID id = getClipboardID(xevent->xselectionclear.selection); if (id != kClipboardEnd) { m_clipboard[id]->lost(xevent->xselectionclear.time); - sendClipboardEvent(m_events->forClipboard().clipboardGrabbed(), id); + sendClipboardEvent(EventTypes::ClipboardGrabbed, id); return; } } break; @@ -1345,7 +1345,7 @@ void XWindowsScreen::handleSystemEvent(const Event &event, void *) case ConfigureNotify: if (!m_isPrimary && xevent->xconfigure.window == m_root) { setShape(xevent->xconfigure.width, xevent->xconfigure.height); - sendEvent(m_events->forIScreen().shapeChanged()); + sendEvent(EventTypes::ScreenShapeChanged); } return; @@ -1390,7 +1390,7 @@ void XWindowsScreen::handleSystemEvent(const Event &event, void *) XResizeWindow(m_display, m_window, m_w, m_h); } - sendEvent(m_events->forIScreen().shapeChanged()); + sendEvent(EventTypes::ScreenShapeChanged); } } #endif @@ -1478,11 +1478,11 @@ bool XWindowsScreen::onHotKey(XKeyEvent &xkey, bool isRepeat) } // find what kind of event - Event::Type type; + EventTypes type; if (xkey.type == KeyPress) { - type = m_events->forIPrimaryScreen().hotKeyDown(); + type = EventTypes::PrimaryScreenHotkeyDown; } else if (xkey.type == KeyRelease) { - type = m_events->forIPrimaryScreen().hotKeyUp(); + type = EventTypes::PrimaryScreenHotkeyUp; } else { return false; } @@ -1500,7 +1500,7 @@ void XWindowsScreen::onMousePress(const XButtonEvent &xbutton) ButtonID button = mapButtonFromX(&xbutton); KeyModifierMask mask = m_keyState->mapModifiersFromX(xbutton.state); if (button != kButtonNone) { - sendEvent(m_events->forIPrimaryScreen().buttonDown(), ButtonInfo::alloc(button, mask)); + sendEvent(EventTypes::PrimaryScreenButtonDown, ButtonInfo::alloc(button, mask)); } } @@ -1510,13 +1510,13 @@ void XWindowsScreen::onMouseRelease(const XButtonEvent &xbutton) ButtonID button = mapButtonFromX(&xbutton); KeyModifierMask mask = m_keyState->mapModifiersFromX(xbutton.state); if (button != kButtonNone) { - sendEvent(m_events->forIPrimaryScreen().buttonUp(), ButtonInfo::alloc(button, mask)); + sendEvent(EventTypes::PrimaryScreenButtonUp, ButtonInfo::alloc(button, mask)); } else if (xbutton.button == 4) { // wheel forward (away from user) - sendEvent(m_events->forIPrimaryScreen().wheel(), WheelInfo::alloc(0, 120)); + sendEvent(EventTypes::PrimaryScreenWheel, WheelInfo::alloc(0, 120)); } else if (xbutton.button == 5) { // wheel backward (toward user) - sendEvent(m_events->forIPrimaryScreen().wheel(), WheelInfo::alloc(0, -120)); + sendEvent(EventTypes::PrimaryScreenWheel, WheelInfo::alloc(0, -120)); } // XXX -- support x-axis scrolling } @@ -1552,7 +1552,7 @@ void XWindowsScreen::onMouseMove(const XMotionEvent &xmotion) cntr = 0; } else if (m_isOnScreen) { // motion on primary screen - sendEvent(m_events->forIPrimaryScreen().motionOnPrimary(), MotionInfo::alloc(m_xCursor, m_yCursor)); + sendEvent(EventTypes::PrimaryScreenMotionOnPrimary, MotionInfo::alloc(m_xCursor, m_yCursor)); } else { // motion on secondary screen. warp mouse back to // center. @@ -1579,7 +1579,7 @@ void XWindowsScreen::onMouseMove(const XMotionEvent &xmotion) // warping to the primary screen's enter position, // effectively overriding it. if (x != 0 || y != 0) { - sendEvent(m_events->forIPrimaryScreen().motionOnSecondary(), MotionInfo::alloc(x, y)); + sendEvent(EventTypes::PrimaryScreenMotionOnSecondary, MotionInfo::alloc(x, y)); } } } @@ -1659,7 +1659,7 @@ void XWindowsScreen::onError() m_display = nullptr; // notify of failure - sendEvent(m_events->forIScreen().error(), nullptr); + sendEvent(EventTypes::ScreenError, nullptr); // FIXME -- should ensure that we ignore operations that involve // m_display from now on. however, Xlib will simply exit the diff --git a/src/lib/platform/XWindowsScreen.h b/src/lib/platform/XWindowsScreen.h index 5ee3b18a0..147ebbdcf 100644 --- a/src/lib/platform/XWindowsScreen.h +++ b/src/lib/platform/XWindowsScreen.h @@ -89,8 +89,8 @@ protected: private: // event sending - void sendEvent(Event::Type, void * = nullptr); - void sendClipboardEvent(Event::Type, ClipboardID); + void sendEvent(EventTypes, void * = nullptr); + void sendClipboardEvent(EventTypes, ClipboardID); // create the transparent cursor Cursor createBlankCursor() const; diff --git a/src/lib/platform/XWindowsScreenSaver.cpp b/src/lib/platform/XWindowsScreenSaver.cpp index 08218563e..154e2f172 100644 --- a/src/lib/platform/XWindowsScreenSaver.cpp +++ b/src/lib/platform/XWindowsScreenSaver.cpp @@ -107,7 +107,7 @@ XWindowsScreenSaver::XWindowsScreenSaver(Display *display, Window window, void * // install disable timer event handler m_events->adoptHandler( - Event::kTimer, this, new TMethodEventJob(this, &XWindowsScreenSaver::handleDisableTimer) + EventTypes::Timer, this, new TMethodEventJob(this, &XWindowsScreenSaver::handleDisableTimer) ); } @@ -117,7 +117,7 @@ XWindowsScreenSaver::~XWindowsScreenSaver() if (m_disableTimer != nullptr) { m_events->deleteTimer(m_disableTimer); } - m_events->removeHandler(Event::kTimer, this); + m_events->removeHandler(EventTypes::Timer, this); if (m_display != nullptr) { enableDPMS(m_dpmsEnabled); @@ -366,9 +366,9 @@ void XWindowsScreenSaver::setXScreenSaverActive(bool activated) updateDisableTimer(); if (activated) { - m_events->addEvent(Event(m_events->forIPrimaryScreen().screensaverActivated(), m_eventTarget)); + m_events->addEvent(Event(EventTypes::PrimaryScreenSaverActivated, m_eventTarget)); } else { - m_events->addEvent(Event(m_events->forIPrimaryScreen().screensaverDeactivated(), m_eventTarget)); + m_events->addEvent(Event(EventTypes::PrimaryScreenSaverDeactivated, m_eventTarget)); } } } diff --git a/src/lib/server/ClientListener.cpp b/src/lib/server/ClientListener.cpp index 2861b7f29..29fcc02d8 100644 --- a/src/lib/server/ClientListener.cpp +++ b/src/lib/server/ClientListener.cpp @@ -67,7 +67,7 @@ ClientProxy *ClientListener::getNextClient() if (!m_waitingClients.empty()) { client = m_waitingClients.front(); m_waitingClients.pop_front(); - m_events->removeHandler(m_events->forClientProxy().disconnected(), client); + m_events->removeHandler(EventTypes::ClientProxyDisconnected, client); } return client; } @@ -78,7 +78,7 @@ void ClientListener::start() // setup event handler m_events->adoptHandler( - m_events->forIListenSocket().connecting(), m_listen, + EventTypes::ListenSocketConnecting, m_listen, new TMethodEventJob(this, &ClientListener::handleClientConnecting) ); @@ -94,9 +94,9 @@ void ClientListener::stop() // discard already connected clients for (auto index = m_newClients.begin(); index != m_newClients.end(); ++index) { ClientProxyUnknown *client = *index; - m_events->removeHandler(m_events->forClientProxyUnknown().success(), client); - m_events->removeHandler(m_events->forClientProxyUnknown().failure(), client); - m_events->removeHandler(m_events->forClientProxy().disconnected(), client); + m_events->removeHandler(EventTypes::ClientProxyUnknownSuccess, client); + m_events->removeHandler(EventTypes::ClientProxyUnknownFailure, client); + m_events->removeHandler(EventTypes::ClientProxyDisconnected, client); delete client; } @@ -107,7 +107,7 @@ void ClientListener::stop() client = getNextClient(); } - m_events->removeHandler(m_events->forIListenSocket().connecting(), m_listen); + m_events->removeHandler(EventTypes::ListenSocketConnecting, m_listen); cleanupListenSocket(); cleanupClientSockets(); } @@ -115,8 +115,8 @@ void ClientListener::stop() void ClientListener::removeUnknownClient(ClientProxyUnknown *unknownClient) { if (unknownClient) { - m_events->removeHandler(m_events->forClientProxyUnknown().success(), unknownClient); - m_events->removeHandler(m_events->forClientProxyUnknown().failure(), unknownClient); + m_events->removeHandler(EventTypes::ClientProxyUnknownSuccess, unknownClient); + m_events->removeHandler(EventTypes::ClientProxyUnknownFailure, unknownClient); m_newClients.erase(unknownClient); delete unknownClient; } @@ -134,14 +134,15 @@ void ClientListener::handleClientConnecting(const Event &, void *) m_clientSockets.insert(socket); m_events->adoptHandler( - m_events->forClientListener().accepted(), socket->getEventTarget(), + EventTypes::ClientListenerAccepted, socket->getEventTarget(), new TMethodEventJob(this, &ClientListener::handleClientAccepted, socket) ); // When using non SSL, server accepts clients immediately, while SSL // has to call secure accept which may require retry if (m_securityLevel == SecurityLevel::PlainText) { - m_events->addEvent(Event(m_events->forClientListener().accepted(), socket->getEventTarget())); + + m_events->addEvent(Event(EventTypes::ClientListenerAccepted, socket->getEventTarget())); } } @@ -162,11 +163,11 @@ void ClientListener::handleClientAccepted(const Event &, void *vsocket) // watch for events from unknown client m_events->adoptHandler( - m_events->forClientProxyUnknown().success(), client, + EventTypes::ClientProxyUnknownSuccess, client, new TMethodEventJob(this, &ClientListener::handleUnknownClient, client) ); m_events->adoptHandler( - m_events->forClientProxyUnknown().failure(), client, + EventTypes::ClientProxyUnknownFailure, client, new TMethodEventJob(this, &ClientListener::handleUnknownClientFailure, client) ); } @@ -183,11 +184,11 @@ void ClientListener::handleUnknownClient(const Event &, void *vclient) if (client) { // handshake was successful m_waitingClients.push_back(client); - m_events->addEvent(Event(m_events->forClientListener().connected(), this)); + m_events->addEvent(Event(EventTypes::ClientListenerAccepted, this)); // watch for client to disconnect while it's in our queue m_events->adoptHandler( - m_events->forClientProxy().disconnected(), client, + EventTypes::ClientProxyDisconnected, client, new TMethodEventJob(this, &ClientListener::handleClientDisconnected, client) ); } else { @@ -215,7 +216,7 @@ void ClientListener::handleClientDisconnected(const Event &, void *vclient) for (WaitingClients::iterator i = m_waitingClients.begin(), n = m_waitingClients.end(); i != n; ++i) { if (*i == client) { m_waitingClients.erase(i); - m_events->removeHandler(m_events->forClientProxy().disconnected(), client); + m_events->removeHandler(EventTypes::ClientProxyDisconnected, client); // pull out the socket before deleting the client so // we know which socket we no longer need diff --git a/src/lib/server/ClientProxy1_0.cpp b/src/lib/server/ClientProxy1_0.cpp index 620bdc91d..e907d358a 100644 --- a/src/lib/server/ClientProxy1_0.cpp +++ b/src/lib/server/ClientProxy1_0.cpp @@ -28,27 +28,27 @@ ClientProxy1_0::ClientProxy1_0(const std::string &name, deskflow::IStream *strea { // install event handlers m_events->adoptHandler( - m_events->forIStream().inputReady(), stream->getEventTarget(), + EventTypes::StreamInputReady, stream->getEventTarget(), new TMethodEventJob(this, &ClientProxy1_0::handleData, nullptr) ); m_events->adoptHandler( - m_events->forIStream().outputError(), stream->getEventTarget(), + EventTypes::StreamOutputError, stream->getEventTarget(), new TMethodEventJob(this, &ClientProxy1_0::handleWriteError, nullptr) ); m_events->adoptHandler( - m_events->forIStream().inputShutdown(), stream->getEventTarget(), + EventTypes::StreamInputShutdown, stream->getEventTarget(), new TMethodEventJob(this, &ClientProxy1_0::handleDisconnect, nullptr) ); m_events->adoptHandler( - m_events->forIStream().inputFormatError(), stream->getEventTarget(), + EventTypes::StreamInputFormatError, stream->getEventTarget(), new TMethodEventJob(this, &ClientProxy1_0::handleDisconnect, nullptr) ); m_events->adoptHandler( - m_events->forIStream().outputShutdown(), stream->getEventTarget(), + EventTypes::StreamOutputShutdown, stream->getEventTarget(), new TMethodEventJob(this, &ClientProxy1_0::handleWriteError, nullptr) ); m_events->adoptHandler( - Event::kTimer, this, new TMethodEventJob(this, &ClientProxy1_0::handleFlatline, nullptr) + EventTypes::Timer, this, new TMethodEventJob(this, &ClientProxy1_0::handleFlatline, nullptr) ); setHeartbeatRate(kHeartRate, kHeartRate * kHeartBeatsUntilDeath); @@ -66,18 +66,18 @@ void ClientProxy1_0::disconnect() { removeHandlers(); getStream()->close(); - m_events->addEvent(Event(m_events->forClientProxy().disconnected(), getEventTarget())); + m_events->addEvent(Event(EventTypes::ClientProxyDisconnected, getEventTarget())); } void ClientProxy1_0::removeHandlers() { // uninstall event handlers - m_events->removeHandler(m_events->forIStream().inputReady(), getStream()->getEventTarget()); - m_events->removeHandler(m_events->forIStream().outputError(), getStream()->getEventTarget()); - m_events->removeHandler(m_events->forIStream().inputShutdown(), getStream()->getEventTarget()); - m_events->removeHandler(m_events->forIStream().outputShutdown(), getStream()->getEventTarget()); - m_events->removeHandler(m_events->forIStream().inputFormatError(), getStream()->getEventTarget()); - m_events->removeHandler(Event::kTimer, this); + m_events->removeHandler(EventTypes::StreamInputReady, getStream()->getEventTarget()); + m_events->removeHandler(EventTypes::StreamOutputError, getStream()->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputShutdown, getStream()->getEventTarget()); + m_events->removeHandler(EventTypes::StreamOutputShutdown, getStream()->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputFormatError, getStream()->getEventTarget()); + m_events->removeHandler(EventTypes::Timer, this); // remove timer removeHeartbeatTimer(); @@ -165,7 +165,7 @@ bool ClientProxy1_0::parseHandshakeMessage(const uint8_t *code) // future messages get parsed by parseMessage m_parser = &ClientProxy1_0::parseMessage; if (recvInfo()) { - m_events->addEvent(Event(m_events->forClientProxy().ready(), getEventTarget())); + m_events->addEvent(Event(EventTypes::ClientProxyReady, getEventTarget())); addHeartbeatTimer(); return true; } @@ -177,7 +177,7 @@ bool ClientProxy1_0::parseMessage(const uint8_t *code) { if (memcmp(code, kMsgDInfo, 4) == 0) { if (recvInfo()) { - m_events->addEvent(Event(m_events->forIScreen().shapeChanged(), getEventTarget())); + m_events->addEvent(Event(EventTypes::ScreenShapeChanged, getEventTarget())); return true; } return false; @@ -433,7 +433,7 @@ bool ClientProxy1_0::recvGrabClipboard() auto *info = new ClipboardInfo; info->m_id = id; info->m_sequenceNumber = seqNum; - m_events->addEvent(Event(m_events->forClipboard().clipboardGrabbed(), getEventTarget(), info)); + m_events->addEvent(Event(EventTypes::ClipboardGrabbed, getEventTarget(), info)); return true; } diff --git a/src/lib/server/ClientProxy1_3.cpp b/src/lib/server/ClientProxy1_3.cpp index c3ad3fcdf..395c06850 100644 --- a/src/lib/server/ClientProxy1_3.cpp +++ b/src/lib/server/ClientProxy1_3.cpp @@ -76,7 +76,7 @@ void ClientProxy1_3::addHeartbeatTimer() if (m_keepAliveRate > 0.0) { m_keepAliveTimer = m_events->newTimer(m_keepAliveRate, nullptr); m_events->adoptHandler( - Event::kTimer, m_keepAliveTimer, + EventTypes::Timer, m_keepAliveTimer, new TMethodEventJob(this, &ClientProxy1_3::handleKeepAlive, nullptr) ); } @@ -89,7 +89,7 @@ void ClientProxy1_3::removeHeartbeatTimer() { // remove the timer that sends keep alives periodically if (m_keepAliveTimer != nullptr) { - m_events->removeHandler(Event::kTimer, m_keepAliveTimer); + m_events->removeHandler(EventTypes::Timer, m_keepAliveTimer); m_events->deleteTimer(m_keepAliveTimer); m_keepAliveTimer = nullptr; } diff --git a/src/lib/server/ClientProxy1_5.cpp b/src/lib/server/ClientProxy1_5.cpp index 29ae32825..cc74011e3 100644 --- a/src/lib/server/ClientProxy1_5.cpp +++ b/src/lib/server/ClientProxy1_5.cpp @@ -26,14 +26,14 @@ ClientProxy1_5::ClientProxy1_5(const std::string &name, deskflow::IStream *strea { m_events->adoptHandler( - m_events->forFile().keepAlive(), this, + EventTypes::FileKeepAlive, this, new TMethodEventJob(this, &ClientProxy1_3::handleKeepAlive, nullptr) ); } ClientProxy1_5::~ClientProxy1_5() { - m_events->removeHandler(m_events->forFile().keepAlive(), this); + m_events->removeHandler(EventTypes::FileKeepAlive, this); } void ClientProxy1_5::sendDragInfo(uint32_t fileCount, const char *info, size_t size) @@ -67,7 +67,7 @@ void ClientProxy1_5::fileChunkReceived() int result = FileChunk::assemble(getStream(), server->getReceivedFileData(), server->getExpectedFileSize()); if (result == kFinish) { - m_events->addEvent(Event(m_events->forFile().fileReceiveCompleted(), server)); + m_events->addEvent(Event(EventTypes::FileReceiveCompleted, server)); } else if (result == kStart) { if (server->getFakeDragFileList().size() > 0) { std::string filename = server->getFakeDragFileList().at(0).getFilename(); diff --git a/src/lib/server/ClientProxy1_6.cpp b/src/lib/server/ClientProxy1_6.cpp index eb7c55797..6ea3889a3 100644 --- a/src/lib/server/ClientProxy1_6.cpp +++ b/src/lib/server/ClientProxy1_6.cpp @@ -23,7 +23,7 @@ ClientProxy1_6::ClientProxy1_6(const std::string &name, deskflow::IStream *strea m_events(events) { m_events->adoptHandler( - m_events->forClipboard().clipboardSending(), this, + EventTypes::ClipboardSending, this, new TMethodEventJob(this, &ClientProxy1_6::handleClipboardSendingEvent) ); } @@ -75,7 +75,7 @@ bool ClientProxy1_6::recvClipboard() auto *info = new ClipboardInfo; info->m_id = id; info->m_sequenceNumber = seq; - m_events->addEvent(Event(m_events->forClipboard().clipboardChanged(), getEventTarget(), info)); + m_events->addEvent(Event(EventTypes::ClipboardChanged, getEventTarget(), info)); } return true; diff --git a/src/lib/server/ClientProxyUnknown.cpp b/src/lib/server/ClientProxyUnknown.cpp index 8198bd3dc..b6da9bf34 100644 --- a/src/lib/server/ClientProxyUnknown.cpp +++ b/src/lib/server/ClientProxyUnknown.cpp @@ -44,7 +44,8 @@ ClientProxyUnknown::ClientProxyUnknown(deskflow::IStream *stream, double timeout assert(m_server != nullptr); m_events->adoptHandler( - Event::kTimer, this, new TMethodEventJob(this, &ClientProxyUnknown::handleTimeout, nullptr) + EventTypes::Timer, this, + new TMethodEventJob(this, &ClientProxyUnknown::handleTimeout, nullptr) ); m_timer = m_events->newOneShotTimer(timeout, this); addStreamHandlers(); @@ -80,7 +81,7 @@ void ClientProxyUnknown::sendSuccess() { m_ready = true; removeTimer(); - m_events->addEvent(Event(m_events->forClientProxyUnknown().success(), this)); + m_events->addEvent(Event(EventTypes::ClientProxyUnknownSuccess, this)); } void ClientProxyUnknown::sendFailure() @@ -90,31 +91,30 @@ void ClientProxyUnknown::sendFailure() m_ready = false; removeHandlers(); removeTimer(); - m_events->addEvent(Event(m_events->forClientProxyUnknown().failure(), this)); + m_events->addEvent(Event(EventTypes::ClientProxyUnknownFailure, this)); } void ClientProxyUnknown::addStreamHandlers() { assert(m_stream != nullptr); - m_events->adoptHandler( - m_events->forIStream().inputReady(), m_stream->getEventTarget(), + EventTypes::StreamInputReady, m_stream->getEventTarget(), new TMethodEventJob(this, &ClientProxyUnknown::handleData) ); m_events->adoptHandler( - m_events->forIStream().outputError(), m_stream->getEventTarget(), + EventTypes::StreamOutputError, m_stream->getEventTarget(), new TMethodEventJob(this, &ClientProxyUnknown::handleWriteError) ); m_events->adoptHandler( - m_events->forIStream().inputShutdown(), m_stream->getEventTarget(), + EventTypes::StreamInputShutdown, m_stream->getEventTarget(), new TMethodEventJob(this, &ClientProxyUnknown::handleDisconnect) ); m_events->adoptHandler( - m_events->forIStream().inputFormatError(), m_stream->getEventTarget(), + EventTypes::StreamInputFormatError, m_stream->getEventTarget(), new TMethodEventJob(this, &ClientProxyUnknown::handleDisconnect) ); m_events->adoptHandler( - m_events->forIStream().outputShutdown(), m_stream->getEventTarget(), + EventTypes::StreamOutputShutdown, m_stream->getEventTarget(), new TMethodEventJob(this, &ClientProxyUnknown::handleWriteError) ); } @@ -124,11 +124,11 @@ void ClientProxyUnknown::addProxyHandlers() assert(m_proxy != nullptr); m_events->adoptHandler( - m_events->forClientProxy().ready(), m_proxy, + EventTypes::ClientProxyReady, m_proxy, new TMethodEventJob(this, &ClientProxyUnknown::handleReady) ); m_events->adoptHandler( - m_events->forClientProxy().disconnected(), m_proxy, + EventTypes::ClientProxyDisconnected, m_proxy, new TMethodEventJob(this, &ClientProxyUnknown::handleDisconnect) ); } @@ -136,15 +136,15 @@ void ClientProxyUnknown::addProxyHandlers() void ClientProxyUnknown::removeHandlers() { if (m_stream != nullptr) { - m_events->removeHandler(m_events->forIStream().inputReady(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIStream().outputError(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIStream().inputShutdown(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIStream().inputFormatError(), m_stream->getEventTarget()); - m_events->removeHandler(m_events->forIStream().outputShutdown(), m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputReady, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamOutputError, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputShutdown, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamInputFormatError, m_stream->getEventTarget()); + m_events->removeHandler(EventTypes::StreamOutputShutdown, m_stream->getEventTarget()); } if (m_proxy != nullptr) { - m_events->removeHandler(m_events->forClientProxy().ready(), m_proxy); - m_events->removeHandler(m_events->forClientProxy().disconnected(), m_proxy); + m_events->removeHandler(EventTypes::ClientProxyReady, m_proxy); + m_events->removeHandler(EventTypes::ClientProxyDisconnected, m_proxy); } } @@ -152,7 +152,7 @@ void ClientProxyUnknown::removeTimer() { if (m_timer != nullptr) { m_events->deleteTimer(m_timer); - m_events->removeHandler(Event::kTimer, this); + m_events->removeHandler(EventTypes::Timer, this); m_timer = nullptr; } } diff --git a/src/lib/server/InputFilter.cpp b/src/lib/server/InputFilter.cpp index 5f35bbcf9..9685c4d60 100644 --- a/src/lib/server/InputFilter.cpp +++ b/src/lib/server/InputFilter.cpp @@ -73,10 +73,10 @@ InputFilter::EFilterStatus InputFilter::KeystrokeCondition::match(const Event &e EFilterStatus status; // check for hotkey events - Event::Type type = event.getType(); - if (type == m_events->forIPrimaryScreen().hotKeyDown()) { + EventTypes type = event.getType(); + if (type == EventTypes::PrimaryScreenHotkeyDown) { status = kActivate; - } else if (type == m_events->forIPrimaryScreen().hotKeyUp()) { + } else if (type == EventTypes::PrimaryScreenHotkeyUp) { status = kDeactivate; } else { return kNoMatch; @@ -150,10 +150,10 @@ InputFilter::EFilterStatus InputFilter::MouseButtonCondition::match(const Event EFilterStatus status; // check for hotkey events - Event::Type type = event.getType(); - if (type == m_events->forIPrimaryScreen().buttonDown()) { + EventTypes type = event.getType(); + if (type == EventTypes::PrimaryScreenButtonDown) { status = kActivate; - } else if (type == m_events->forIPrimaryScreen().buttonUp()) { + } else if (type == EventTypes::PrimaryScreenButtonUp) { status = kDeactivate; } else { return kNoMatch; @@ -188,7 +188,7 @@ std::string InputFilter::ScreenConnectedCondition::format() const InputFilter::EFilterStatus InputFilter::ScreenConnectedCondition::match(const Event &event) { - if (event.getType() == m_events->forServer().connected()) { + if (event.getType() == EventTypes::ServerConnected) { auto *info = static_cast(event.getData()); if (m_screen == info->m_screen || m_screen.empty()) { return kActivate; @@ -234,9 +234,7 @@ void InputFilter::LockCursorToScreenAction::perform(const Event &event) // send event Server::LockCursorToScreenInfo *info = Server::LockCursorToScreenInfo::alloc(s_state[m_mode]); - m_events->addEvent( - Event(m_events->forServer().lockCursorToScreen(), event.getTarget(), info, Event::kDeliverImmediately) - ); + m_events->addEvent(Event(EventTypes::ServerLockCursorToScreen, event.getTarget(), info, Event::kDeliverImmediately)); } InputFilter::RestartServer::RestartServer(IEventQueue *events, Mode mode) : m_mode(mode), m_events(events) @@ -294,15 +292,14 @@ void InputFilter::SwitchToScreenAction::perform(const Event &event) // pick screen name. if m_screen is empty then use the screen from // event if it has one. std::string screen = m_screen; - if (screen.empty() && event.getType() == m_events->forServer().connected()) { + if (screen.empty() && event.getType() == EventTypes::ServerConnected) { auto *info = static_cast(event.getData()); screen = info->m_screen; } // send event Server::SwitchToScreenInfo *info = Server::SwitchToScreenInfo::alloc(screen); - m_events->addEvent(Event(m_events->forServer().switchToScreen(), event.getTarget(), info, Event::kDeliverImmediately) - ); + m_events->addEvent(Event(EventTypes::ServerSwitchToScreen, event.getTarget(), info, Event::kDeliverImmediately)); } InputFilter::SwitchInDirectionAction::SwitchInDirectionAction(IEventQueue *events, EDirection direction) @@ -332,9 +329,7 @@ std::string InputFilter::SwitchInDirectionAction::format() const void InputFilter::SwitchInDirectionAction::perform(const Event &event) { Server::SwitchInDirectionInfo *info = Server::SwitchInDirectionInfo::alloc(m_direction); - m_events->addEvent( - Event(m_events->forServer().switchInDirection(), event.getTarget(), info, Event::kDeliverImmediately) - ); + m_events->addEvent(Event(EventTypes::ServerSwitchInDirection, event.getTarget(), info, Event::kDeliverImmediately)); } InputFilter::KeyboardBroadcastAction::KeyboardBroadcastAction(IEventQueue *events, Mode mode) @@ -394,9 +389,7 @@ void InputFilter::KeyboardBroadcastAction::perform(const Event &event) // send event Server::KeyboardBroadcastInfo *info = Server::KeyboardBroadcastInfo::alloc(s_state[m_mode], m_screens); - m_events->addEvent( - Event(m_events->forServer().keyboardBroadcast(), event.getTarget(), info, Event::kDeliverImmediately) - ); + m_events->addEvent(Event(EventTypes::ServerKeyboardBroadcast, event.getTarget(), info, Event::kDeliverImmediately)); } InputFilter::KeystrokeAction::KeystrokeAction(IEventQueue *events, IPlatformScreen::KeyInfo *info, bool press) @@ -456,14 +449,14 @@ std::string InputFilter::KeystrokeAction::format() const void InputFilter::KeystrokeAction::perform(const Event &event) { - Event::Type type = m_press ? m_events->forIKeyState().keyDown() : m_events->forIKeyState().keyUp(); + EventTypes type = m_press ? EventTypes::KeyStateKeyDown : EventTypes::KeyStateKeyUp; m_events->addEvent( - Event(m_events->forIPrimaryScreen().fakeInputBegin(), event.getTarget(), nullptr, Event::kDeliverImmediately) + Event(EventTypes::PrimaryScreenFakeInputBegin, event.getTarget(), nullptr, Event::kDeliverImmediately) ); m_events->addEvent(Event(type, event.getTarget(), m_keyInfo, Event::kDeliverImmediately | Event::kDontFreeData)); m_events->addEvent( - Event(m_events->forIPrimaryScreen().fakeInputEnd(), event.getTarget(), nullptr, Event::kDeliverImmediately) + Event(EventTypes::PrimaryScreenFakeInputEnd, event.getTarget(), nullptr, Event::kDeliverImmediately) ); } @@ -517,13 +510,11 @@ void InputFilter::MouseButtonAction::perform(const Event &event) if (m_buttonInfo->m_mask != 0) { KeyID key = m_press ? kKeySetModifiers : kKeyClearModifiers; modifierInfo = IKeyState::KeyInfo::alloc(key, m_buttonInfo->m_mask, 0, 1); - m_events->addEvent( - Event(m_events->forIKeyState().keyDown(), event.getTarget(), modifierInfo, Event::kDeliverImmediately) - ); + m_events->addEvent(Event(EventTypes::KeyStateKeyDown, event.getTarget(), modifierInfo, Event::kDeliverImmediately)); } // send button - Event::Type type = m_press ? m_events->forIPrimaryScreen().buttonDown() : m_events->forIPrimaryScreen().buttonUp(); + EventTypes type = m_press ? EventTypes::PrimaryScreenButtonDown : EventTypes::PrimaryScreenButtonUp; m_events->addEvent(Event(type, event.getTarget(), m_buttonInfo, Event::kDeliverImmediately | Event::kDontFreeData)); } @@ -805,49 +796,49 @@ void InputFilter::setPrimaryClient(PrimaryClient *client) rule->disable(m_primaryClient); } - m_events->removeHandler(m_events->forIKeyState().keyDown(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIKeyState().keyUp(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIKeyState().keyRepeat(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().buttonDown(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().buttonUp(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().hotKeyDown(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().hotKeyUp(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forServer().connected(), m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::KeyStateKeyDown, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::KeyStateKeyUp, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::KeyStateKeyRepeat, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenButtonDown, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenButtonUp, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenHotkeyDown, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenHotkeyUp, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::ServerConnected, m_primaryClient->getEventTarget()); } m_primaryClient = client; if (m_primaryClient != nullptr) { m_events->adoptHandler( - m_events->forIKeyState().keyDown(), m_primaryClient->getEventTarget(), + EventTypes::KeyStateKeyDown, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); m_events->adoptHandler( - m_events->forIKeyState().keyUp(), m_primaryClient->getEventTarget(), + EventTypes::KeyStateKeyUp, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); m_events->adoptHandler( - m_events->forIKeyState().keyRepeat(), m_primaryClient->getEventTarget(), + EventTypes::KeyStateKeyRepeat, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().buttonDown(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenButtonDown, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().buttonUp(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenButtonUp, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().hotKeyDown(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenHotkeyDown, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().hotKeyUp(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenHotkeyUp, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); m_events->adoptHandler( - m_events->forServer().connected(), m_primaryClient->getEventTarget(), + EventTypes::ServerConnected, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &InputFilter::handleEvent) ); diff --git a/src/lib/server/Server.cpp b/src/lib/server/Server.cpp index 8687b529e..2b21488aa 100644 --- a/src/lib/server/Server.cpp +++ b/src/lib/server/Server.cpp @@ -103,77 +103,74 @@ Server::Server( } // install event handlers - m_events->adoptHandler(Event::kTimer, this, new TMethodEventJob(this, &Server::handleSwitchWaitTimeout)); + m_events->adoptHandler(EventTypes::Timer, this, new TMethodEventJob(this, &Server::handleSwitchWaitTimeout)); m_events->adoptHandler( - m_events->forIKeyState().keyDown(), m_inputFilter, new TMethodEventJob(this, &Server::handleKeyDownEvent) + EventTypes::KeyStateKeyDown, m_inputFilter, new TMethodEventJob(this, &Server::handleKeyDownEvent) ); m_events->adoptHandler( - m_events->forIKeyState().keyUp(), m_inputFilter, new TMethodEventJob(this, &Server::handleKeyUpEvent) + EventTypes::KeyStateKeyUp, m_inputFilter, new TMethodEventJob(this, &Server::handleKeyUpEvent) ); m_events->adoptHandler( - m_events->forIKeyState().keyRepeat(), m_inputFilter, - new TMethodEventJob(this, &Server::handleKeyRepeatEvent) + EventTypes::KeyStateKeyRepeat, m_inputFilter, new TMethodEventJob(this, &Server::handleKeyRepeatEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().buttonDown(), m_inputFilter, + EventTypes::PrimaryScreenButtonDown, m_inputFilter, new TMethodEventJob(this, &Server::handleButtonDownEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().buttonUp(), m_inputFilter, - new TMethodEventJob(this, &Server::handleButtonUpEvent) + EventTypes::PrimaryScreenButtonUp, m_inputFilter, new TMethodEventJob(this, &Server::handleButtonUpEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().motionOnPrimary(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenMotionOnPrimary, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &Server::handleMotionPrimaryEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().motionOnSecondary(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenMotionOnSecondary, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &Server::handleMotionSecondaryEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().wheel(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenWheel, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &Server::handleWheelEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().screensaverActivated(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenSaverActivated, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &Server::handleScreensaverActivatedEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().screensaverDeactivated(), m_primaryClient->getEventTarget(), + EventTypes::PrimaryScreenSaverDeactivated, m_primaryClient->getEventTarget(), new TMethodEventJob(this, &Server::handleScreensaverDeactivatedEvent) ); m_events->adoptHandler( - m_events->forServer().switchToScreen(), m_inputFilter, + EventTypes::ServerSwitchToScreen, m_inputFilter, new TMethodEventJob(this, &Server::handleSwitchToScreenEvent) ); m_events->adoptHandler( - m_events->forServer().switchInDirection(), m_inputFilter, + EventTypes::ServerSwitchInDirection, m_inputFilter, new TMethodEventJob(this, &Server::handleSwitchInDirectionEvent) ); m_events->adoptHandler( - m_events->forServer().keyboardBroadcast(), m_inputFilter, + EventTypes::ServerKeyboardBroadcast, m_inputFilter, new TMethodEventJob(this, &Server::handleKeyboardBroadcastEvent) ); m_events->adoptHandler( - m_events->forServer().lockCursorToScreen(), m_inputFilter, + EventTypes::ServerLockCursorToScreen, m_inputFilter, new TMethodEventJob(this, &Server::handleLockCursorToScreenEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().fakeInputBegin(), m_inputFilter, + EventTypes::PrimaryScreenFakeInputBegin, m_inputFilter, new TMethodEventJob(this, &Server::handleFakeInputBeginEvent) ); m_events->adoptHandler( - m_events->forIPrimaryScreen().fakeInputEnd(), m_inputFilter, + EventTypes::PrimaryScreenFakeInputEnd, m_inputFilter, new TMethodEventJob(this, &Server::handleFakeInputEndEvent) ); if (m_args.m_enableDragDrop) { m_events->adoptHandler( - m_events->forFile().fileChunkSending(), this, - new TMethodEventJob(this, &Server::handleFileChunkSendingEvent) + EventTypes::FileChunkSending, this, new TMethodEventJob(this, &Server::handleFileChunkSendingEvent) ); m_events->adoptHandler( - m_events->forFile().fileReceiveCompleted(), this, + EventTypes::FileReceiveCompleted, this, new TMethodEventJob(this, &Server::handleFileReceiveCompletedEvent) ); } @@ -203,19 +200,19 @@ Server::~Server() } // remove event handlers and timers - m_events->removeHandler(m_events->forIKeyState().keyDown(), m_inputFilter); - m_events->removeHandler(m_events->forIKeyState().keyUp(), m_inputFilter); - m_events->removeHandler(m_events->forIKeyState().keyRepeat(), m_inputFilter); - m_events->removeHandler(m_events->forIPrimaryScreen().buttonDown(), m_inputFilter); - m_events->removeHandler(m_events->forIPrimaryScreen().buttonUp(), m_inputFilter); - m_events->removeHandler(m_events->forIPrimaryScreen().motionOnPrimary(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().motionOnSecondary(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().wheel(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().screensaverActivated(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().screensaverDeactivated(), m_primaryClient->getEventTarget()); - m_events->removeHandler(m_events->forIPrimaryScreen().fakeInputBegin(), m_inputFilter); - m_events->removeHandler(m_events->forIPrimaryScreen().fakeInputEnd(), m_inputFilter); - m_events->removeHandler(Event::kTimer, this); + m_events->removeHandler(EventTypes::KeyStateKeyDown, m_inputFilter); + m_events->removeHandler(EventTypes::KeyStateKeyUp, m_inputFilter); + m_events->removeHandler(EventTypes::KeyStateKeyRepeat, m_inputFilter); + m_events->removeHandler(EventTypes::PrimaryScreenButtonDown, m_inputFilter); + m_events->removeHandler(EventTypes::PrimaryScreenButtonUp, m_inputFilter); + m_events->removeHandler(EventTypes::PrimaryScreenMotionOnPrimary, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenMotionOnSecondary, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenWheel, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenSaverActivated, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenSaverDeactivated, m_primaryClient->getEventTarget()); + m_events->removeHandler(EventTypes::PrimaryScreenFakeInputBegin, m_inputFilter); + m_events->removeHandler(EventTypes::PrimaryScreenFakeInputEnd, m_inputFilter); + m_events->removeHandler(EventTypes::Timer, this); stopSwitch(); try { @@ -228,8 +225,8 @@ Server::~Server() for (auto index = m_oldClients.begin(); index != m_oldClients.end(); ++index) { BaseClientProxy *client = index->first; m_events->deleteTimer(index->second); - m_events->removeHandler(Event::kTimer, client); - m_events->removeHandler(m_events->forClientProxy().disconnected(), client); + m_events->removeHandler(EventTypes::Timer, client); + m_events->removeHandler(EventTypes::ClientProxyDisconnected, client); delete client; } @@ -287,7 +284,7 @@ void Server::adoptClient(BaseClientProxy *client) // watch for client disconnection m_events->adoptHandler( - m_events->forClientProxy().disconnected(), client, + EventTypes::ClientProxyDisconnected, client, new TMethodEventJob(this, &Server::handleClientDisconnected, client) ); @@ -317,7 +314,7 @@ void Server::adoptClient(BaseClientProxy *client) // send notification auto *info = new Server::ScreenConnectedInfo(getName(client)); - m_events->addEvent(Event(m_events->forServer().connected(), m_primaryClient->getEventTarget(), info)); + m_events->addEvent(Event(EventTypes::ServerConnected, m_primaryClient->getEventTarget(), info)); } void Server::disconnect() @@ -327,7 +324,7 @@ void Server::disconnect() Config emptyConfig(m_events); closeClients(emptyConfig); } else { - m_events->addEvent(Event(m_events->forServer().disconnected(), this)); + m_events->addEvent(Event(EventTypes::ServerDisconnected, this)); } } @@ -526,7 +523,7 @@ void Server::switchScreen(BaseClientProxy *dst, int32_t x, int32_t y, bool forSc } Server::SwitchToScreenInfo *info = Server::SwitchToScreenInfo::alloc(m_active->getName()); - m_events->addEvent(Event(m_events->forServer().screenSwitched(), this, info)); + m_events->addEvent(Event(EventTypes::ServerScreenSwitched, this, info)); } else { m_active->mouseMove(x, y); } @@ -2013,15 +2010,15 @@ bool Server::addClient(BaseClientProxy *client) // add event handlers m_events->adoptHandler( - m_events->forIScreen().shapeChanged(), client->getEventTarget(), + EventTypes::ScreenShapeChanged, client->getEventTarget(), new TMethodEventJob(this, &Server::handleShapeChanged, client) ); m_events->adoptHandler( - m_events->forClipboard().clipboardGrabbed(), client->getEventTarget(), + EventTypes::ClipboardGrabbed, client->getEventTarget(), new TMethodEventJob(this, &Server::handleClipboardGrabbed, client) ); m_events->adoptHandler( - m_events->forClipboard().clipboardChanged(), client->getEventTarget(), + EventTypes::ClipboardChanged, client->getEventTarget(), new TMethodEventJob(this, &Server::handleClipboardChanged, client) ); @@ -2049,9 +2046,9 @@ bool Server::removeClient(BaseClientProxy *client) } // remove event handlers - m_events->removeHandler(m_events->forIScreen().shapeChanged(), client->getEventTarget()); - m_events->removeHandler(m_events->forClipboard().clipboardGrabbed(), client->getEventTarget()); - m_events->removeHandler(m_events->forClipboard().clipboardChanged(), client->getEventTarget()); + m_events->removeHandler(EventTypes::ScreenShapeChanged, client->getEventTarget()); + m_events->removeHandler(EventTypes::ClipboardGrabbed, client->getEventTarget()); + m_events->removeHandler(EventTypes::ClipboardChanged, client->getEventTarget()); // remove from list m_clients.erase(getName(client)); @@ -2083,7 +2080,7 @@ void Server::closeClient(BaseClientProxy *client, const char *msg) double timeout = 5.0; EventQueueTimer *timer = m_events->newOneShotTimer(timeout, nullptr); m_events->adoptHandler( - Event::kTimer, timer, new TMethodEventJob(this, &Server::handleClientCloseTimeout, client) + EventTypes::Timer, timer, new TMethodEventJob(this, &Server::handleClientCloseTimeout, client) ); // move client to closing list @@ -2122,9 +2119,9 @@ void Server::removeActiveClient(BaseClientProxy *client) { if (removeClient(client)) { forceLeaveClient(client); - m_events->removeHandler(m_events->forClientProxy().disconnected(), client); + m_events->removeHandler(EventTypes::ClientProxyDisconnected, client); if (m_clients.size() == 1 && m_oldClients.empty()) { - m_events->addEvent(Event(m_events->forServer().disconnected(), this)); + m_events->addEvent(Event(EventTypes::ServerDisconnected, this)); } } } @@ -2133,12 +2130,12 @@ void Server::removeOldClient(BaseClientProxy *client) { OldClients::iterator i = m_oldClients.find(client); if (i != m_oldClients.end()) { - m_events->removeHandler(m_events->forClientProxy().disconnected(), client); - m_events->removeHandler(Event::kTimer, i->second); + m_events->removeHandler(EventTypes::ClientProxyDisconnected, client); + m_events->removeHandler(EventTypes::Timer, i->second); m_events->deleteTimer(i->second); m_oldClients.erase(i); if (m_clients.size() == 1 && m_oldClients.empty()) { - m_events->addEvent(Event(m_events->forServer().disconnected(), this)); + m_events->addEvent(Event(EventTypes::ServerDisconnected, this)); } } } diff --git a/src/test/mock/deskflow/MockEventQueue.h b/src/test/mock/deskflow/MockEventQueue.h index e3faf253d..c640ad87e 100644 --- a/src/test/mock/deskflow/MockEventQueue.h +++ b/src/test/mock/deskflow/MockEventQueue.h @@ -19,34 +19,15 @@ public: MOCK_METHOD(EventQueueTimer *, newTimer, (double, void *), (override)); MOCK_METHOD(bool, getEvent, (Event &, double), (override)); MOCK_METHOD(void, adoptBuffer, (IEventQueueBuffer *), (override)); - MOCK_METHOD(Event::Type, registerTypeOnce, (Event::Type &, const char *), (override)); MOCK_METHOD(void, removeHandlers, (void *), (override)); - MOCK_METHOD(Event::Type, registerType, (const char *)); + MOCK_METHOD(EventTypes, registerType, (const char *)); MOCK_METHOD(bool, isEmpty, (), (const, override)); - MOCK_METHOD(void, adoptHandler, (Event::Type, void *, IEventJob *), (override)); - MOCK_METHOD(const char *, getTypeName, (Event::Type), (override)); + MOCK_METHOD(void, adoptHandler, (EventTypes, void *, IEventJob *), (override)); MOCK_METHOD(void, addEvent, (const Event &), (override)); - MOCK_METHOD(void, removeHandler, (Event::Type, void *), (override)); + MOCK_METHOD(void, removeHandler, (EventTypes, void *), (override)); MOCK_METHOD(bool, dispatchEvent, (const Event &), (override)); - MOCK_METHOD(IEventJob *, getHandler, (Event::Type, void *), (const, override)); + MOCK_METHOD(IEventJob *, getHandler, (EventTypes, void *), (const, override)); MOCK_METHOD(void, deleteTimer, (EventQueueTimer *), (override)); MOCK_METHOD(void *, getSystemTarget, (), (override)); - MOCK_METHOD(ClientEvents &, forClient, (), (override)); - MOCK_METHOD(IStreamEvents &, forIStream, (), (override)); - MOCK_METHOD(IDataSocketEvents &, forIDataSocket, (), (override)); - MOCK_METHOD(IListenSocketEvents &, forIListenSocket, (), (override)); - MOCK_METHOD(ISocketEvents &, forISocket, (), (override)); - MOCK_METHOD(OSXScreenEvents &, forOSXScreen, (), (override)); - MOCK_METHOD(ClientListenerEvents &, forClientListener, (), (override)); - MOCK_METHOD(ClientProxyEvents &, forClientProxy, (), (override)); - MOCK_METHOD(ClientProxyUnknownEvents &, forClientProxyUnknown, (), (override)); - MOCK_METHOD(ServerEvents &, forServer, (), (override)); - MOCK_METHOD(ServerAppEvents &, forServerApp, (), (override)); - MOCK_METHOD(IKeyStateEvents &, forIKeyState, (), (override)); - MOCK_METHOD(IPrimaryScreenEvents &, forIPrimaryScreen, (), (override)); - MOCK_METHOD(IScreenEvents &, forIScreen, (), (override)); - MOCK_METHOD(ClipboardEvents &, forClipboard, (), (override)); - MOCK_METHOD(FileEvents &, forFile, (), (override)); - MOCK_METHOD(EiEvents &, forEi, (), (override)); MOCK_METHOD(void, waitForReady, (), (const, override)); }; diff --git a/src/test/mock/io/MockStream.h b/src/test/mock/io/MockStream.h index f66b06d94..68f05ab46 100644 --- a/src/test/mock/io/MockStream.h +++ b/src/test/mock/io/MockStream.h @@ -27,10 +27,10 @@ public: MOCK_METHOD(void, flush, (), (override)); MOCK_METHOD(void, shutdownInput, (), (override)); MOCK_METHOD(void, shutdownOutput, (), (override)); - MOCK_METHOD(Event::Type, getInputReadyEvent, ()); - MOCK_METHOD(Event::Type, getOutputErrorEvent, ()); - MOCK_METHOD(Event::Type, getInputShutdownEvent, ()); - MOCK_METHOD(Event::Type, getOutputShutdownEvent, ()); + MOCK_METHOD(EventTypes, getInputReadyEvent, ()); + MOCK_METHOD(EventTypes, getOutputErrorEvent, ()); + MOCK_METHOD(EventTypes, getInputShutdownEvent, ()); + MOCK_METHOD(EventTypes, getOutputShutdownEvent, ()); MOCK_METHOD(void *, getEventTarget, (), (const, override)); MOCK_METHOD(bool, isReady, (), (const, override)); MOCK_METHOD(uint32_t, getSize, (), (const, override)); diff --git a/src/test/shared/TestEventQueue.cpp b/src/test/shared/TestEventQueue.cpp index a20a9a044..25ef7a193 100644 --- a/src/test/shared/TestEventQueue.cpp +++ b/src/test/shared/TestEventQueue.cpp @@ -12,7 +12,7 @@ void TestEventQueue::raiseQuitEvent() { - addEvent(Event(Event::kQuit)); + addEvent(Event(EventTypes::Quit)); } void TestEventQueue::initQuitTimeout(double timeout) @@ -20,13 +20,14 @@ void TestEventQueue::initQuitTimeout(double timeout) assert(m_pQuitTimeoutTimer == nullptr); m_pQuitTimeoutTimer = newOneShotTimer(timeout, nullptr); adoptHandler( - Event::kTimer, m_pQuitTimeoutTimer, new TMethodEventJob(this, &TestEventQueue::handleQuitTimeout) + EventTypes::Timer, m_pQuitTimeoutTimer, + new TMethodEventJob(this, &TestEventQueue::handleQuitTimeout) ); } void TestEventQueue::cleanupQuitTimeout() { - removeHandler(Event::kTimer, m_pQuitTimeoutTimer); + removeHandler(EventTypes::Timer, m_pQuitTimeoutTimer); deleteTimer(m_pQuitTimeoutTimer); m_pQuitTimeoutTimer = nullptr; } diff --git a/src/test/unittests/deskflow/KeyStateTests.cpp b/src/test/unittests/deskflow/KeyStateTests.cpp index 8d7beec93..183a1ebbe 100644 --- a/src/test/unittests/deskflow/KeyStateTests.cpp +++ b/src/test/unittests/deskflow/KeyStateTests.cpp @@ -77,67 +77,6 @@ TEST(KeyStateTests, sendKeyEvent_halfDuplexAndRepeat_addEventNotCalled) keyState.sendKeyEvent(nullptr, false, true, kKeyCapsLock, 0, 0, 0); } -TEST(KeyStateTests, sendKeyEvent_halfDuplex_addEventCalledTwice) -{ - NiceMock keyMap; - NiceMock eventQueue; - KeyStateImpl keyState(eventQueue, keyMap); - IKeyStateEvents keyStateEvents; - keyStateEvents.setEvents(&eventQueue); - - ON_CALL(keyMap, isHalfDuplex(_, _)).WillByDefault(Return(true)); - ON_CALL(eventQueue, forIKeyState()).WillByDefault(ReturnRef(keyStateEvents)); - - EXPECT_CALL(eventQueue, addEvent(_)).Times(2); - - keyState.sendKeyEvent(nullptr, false, false, kKeyCapsLock, 0, 0, 0); -} - -TEST(KeyStateTests, sendKeyEvent_keyRepeat_addEventCalledOnce) -{ - NiceMock keyMap; - NiceMock eventQueue; - KeyStateImpl keyState(eventQueue, keyMap); - IKeyStateEvents keyStateEvents; - keyStateEvents.setEvents(&eventQueue); - - ON_CALL(eventQueue, forIKeyState()).WillByDefault(ReturnRef(keyStateEvents)); - - EXPECT_CALL(eventQueue, addEvent(_)).Times(1); - - keyState.sendKeyEvent(nullptr, false, true, 1, 0, 0, 0); -} - -TEST(KeyStateTests, sendKeyEvent_keyDown_addEventCalledOnce) -{ - NiceMock keyMap; - NiceMock eventQueue; - KeyStateImpl keyState(eventQueue, keyMap); - IKeyStateEvents keyStateEvents; - keyStateEvents.setEvents(&eventQueue); - - ON_CALL(eventQueue, forIKeyState()).WillByDefault(ReturnRef(keyStateEvents)); - - EXPECT_CALL(eventQueue, addEvent(_)).Times(1); - - keyState.sendKeyEvent(nullptr, true, false, 1, 0, 0, 0); -} - -TEST(KeyStateTests, sendKeyEvent_keyUp_addEventCalledOnce) -{ - NiceMock keyMap; - NiceMock eventQueue; - KeyStateImpl keyState(eventQueue, keyMap); - IKeyStateEvents keyStateEvents; - keyStateEvents.setEvents(&eventQueue); - - ON_CALL(eventQueue, forIKeyState()).WillByDefault(ReturnRef(keyStateEvents)); - - EXPECT_CALL(eventQueue, addEvent(_)).Times(1); - - keyState.sendKeyEvent(nullptr, false, false, 1, 0, 0, 0); -} - TEST(KeyStateTests, updateKeyMap_mockKeyMap_keyMapGotMock) { NiceMock keyMap; diff --git a/src/test/unittests/server/ConfigTests.cpp b/src/test/unittests/server/ConfigTests.cpp index d57b79e5b..97d395f21 100644 --- a/src/test/unittests/server/ConfigTests.cpp +++ b/src/test/unittests/server/ConfigTests.cpp @@ -18,7 +18,7 @@ public: std::string format() const override { return ""; } InputFilter::EFilterStatus match(const Event &ev) override { - return ev.getType() == Event::kSystem ? InputFilter::kActivate + return ev.getType() == EventTypes::System ? InputFilter::kActivate : InputFilter::kNoMatch; } };