X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.h;h=f3ea4c526861a33fd4496e92a949ed5f3d898724;hb=6718d7a1ccd42d7aae75e57d6974e0b1e0384044;hp=63d3438a98b896ecf9dfc490b1a0853a504d3026;hpb=28cee4568aeb1ce3014d11234e40f19e7aeae5bd;p=quassel.git diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index 63d3438a..f3ea4c52 100644 --- a/src/common/signalproxy.h +++ b/src/common/signalproxy.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,13 +18,13 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef SIGNALPROXY_H -#define SIGNALPROXY_H +#pragma once #include #include #include +#include #include "protocol.h" @@ -80,6 +80,10 @@ public: void dumpProxyStats(); void dumpSyncMap(SyncableObject *object); + static SignalProxy *current() { + return _current; + } + /**@{*/ /** * This method allows to send a signal only to a limited set of peers @@ -94,12 +98,10 @@ public: } //A better version, but only implemented on Qt5 if Initializer Lists exist -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #ifdef Q_COMPILER_INITIALIZER_LISTS void restrictTargetPeers(std::initializer_list peers, std::function closure) { restrictTargetPeers(QSet(peers), std::move(closure)); } -#endif #endif /**}@*/ @@ -111,7 +113,14 @@ public: /** * @return If handling a signal, the Peer from which the current signal originates */ - Peer *sourcePeer() { return _sourcePeer; } + Peer *sourcePeer(); + void setSourcePeer(Peer *sourcePeer); + + /** + * @return If sending a signal, the Peer to which the current signal is directed + */ + Peer *targetPeer(); + void setTargetPeer(Peer *targetPeer); public slots: void detachObject(QObject *obj); @@ -206,6 +215,9 @@ private: bool _restrictMessageTarget = false; Peer *_sourcePeer = nullptr; + Peer *_targetPeer = nullptr; + + thread_local static SignalProxy *_current; friend class SignalRelay; friend class SyncableObject; @@ -270,5 +282,3 @@ private: QHash _methodIds; QHash _receiveMap; // if slot x is called then hand over the result to slot y }; - -#endif