Implement a fallback for Qt4
authorJanne Koschinski <janne@kuschku.de>
Mon, 28 Aug 2017 02:47:29 +0000 (04:47 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 19 Dec 2017 22:25:24 +0000 (23:25 +0100)
src/common/signalproxy.cpp
src/common/signalproxy.h
src/core/coresession.cpp

index c656e9c..8499e1a 100644 (file)
@@ -838,12 +838,12 @@ Peer *SignalProxy::peerById(int peerId) {
     return _peerMap[peerId];
 }
 
     return _peerMap[peerId];
 }
 
-void SignalProxy::restrictTargetPeers(std::initializer_list<Peer *> peers, std::function<void()> closure)
+void SignalProxy::restrictTargetPeers(QSet<Peer*> peers, std::function<void()> closure)
 {
     auto previousRestrictMessageTarget = _restrictMessageTarget;
     auto previousRestrictedTargets = _restrictedTargets;
     _restrictMessageTarget = true;
 {
     auto previousRestrictMessageTarget = _restrictMessageTarget;
     auto previousRestrictedTargets = _restrictedTargets;
     _restrictMessageTarget = true;
-    _restrictedTargets = QSet<Peer*>(peers);
+    _restrictedTargets = peers;
 
     closure();
 
 
     closure();
 
index a985d0d..e98f6bf 100644 (file)
@@ -83,7 +83,21 @@ public:
      * @param peerIds A list of peers that should receive it
      * @param closure Code you want to execute within of that restricted environment
      */
      * @param peerIds A list of peers that should receive it
      * @param closure Code you want to execute within of that restricted environment
      */
-    void restrictTargetPeers(std::initializer_list<Peer *> peerIds, std::function<void()> closure);
+    void restrictTargetPeers(QSet<Peer*> peers, std::function<void()> closure);
+    void restrictTargetPeers(Peer *peer, std::function<void()> closure) {
+        QSet<Peer*> set;
+        set.insert(peer);
+        restrictTargetPeers(set, std::move(closure));
+    }
+
+    //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<Peer*> peers, std::function<void()> closure) {
+        restrictTargetPeers(QSet(peers), std::move(closure));
+    }
+#endif
+#endif
 
     inline int peerCount() const { return _peers.size(); }
     QVariantList peerData();
 
     inline int peerCount() const { return _peers.size(); }
     QVariantList peerData();
index 518246a..6ae077f 100644 (file)
@@ -718,7 +718,7 @@ void CoreSession::changePassword(PeerPtr peer, const QString &userName, const QS
     if (uid.isValid() && uid == user())
         success = Core::changeUserPassword(uid, newPassword);
 
     if (uid.isValid() && uid == user())
         success = Core::changeUserPassword(uid, newPassword);
 
-    signalProxy()->restrictTargetPeers({signalProxy()->sourcePeer()}, [&]{
+    signalProxy()->restrictTargetPeers(signalProxy()->sourcePeer(), [&]{
         emit passwordChanged(nullptr, success);
     });
 }
         emit passwordChanged(nullptr, success);
     });
 }
@@ -729,7 +729,7 @@ void CoreSession::kickClient(int peerId) {
         qWarning() << "Invalid peer Id: " << peerId;
         return;
     }
         qWarning() << "Invalid peer Id: " << peerId;
         return;
     }
-    signalProxy()->restrictTargetPeers({peer}, [&]{
+    signalProxy()->restrictTargetPeers(peer, [&]{
         emit disconnectFromCore();
     });
 }
         emit disconnectFromCore();
     });
 }