diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-08-05 12:56:05 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-08-06 11:42:13 +0000 |
commit | 09d21c1decfdd58eba6c1aefe459793c5255922e (patch) | |
tree | 385fcb64f7cdd9e4aa225a3769142d1eb34c4d83 | |
parent | 377bc2b2ae38deeb45f0c823254fbf8e070fb70a (diff) |
Add private helper class QMacScopedObserver
Change-Id: I993ce32c1f6a6eabdce8d5b2b52d8edb28ca2bfa
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r-- | src/corelib/kernel/qcore_mac_p.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h index 1161e363b7..a0802969dd 100644 --- a/src/corelib/kernel/qcore_mac_p.h +++ b/src/corelib/kernel/qcore_mac_p.h @@ -341,6 +341,50 @@ private: // ------------------------------------------------------------------------- +#if defined( __OBJC__) +class QMacScopedObserver +{ +public: + QMacScopedObserver() {} + + template<typename Functor> + QMacScopedObserver(id object, NSNotificationName name, Functor callback) { + observer = [[NSNotificationCenter defaultCenter] addObserverForName:name + object:object queue:nil usingBlock:^(NSNotification *) { + callback(); + } + ]; + } + + QMacScopedObserver(const QMacScopedObserver& other) = delete; + QMacScopedObserver(QMacScopedObserver&& other) : observer(other.observer) { + other.observer = nil; + } + + QMacScopedObserver &operator=(const QMacScopedObserver& other) = delete; + QMacScopedObserver &operator=(QMacScopedObserver&& other) { + if (this != &other) { + remove(); + observer = other.observer; + other.observer = nil; + } + return *this; + } + + void remove() { + if (observer) + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + observer = nil; + } + ~QMacScopedObserver() { remove(); } + +private: + id observer = nil; +}; +#endif + +// ------------------------------------------------------------------------- + QT_END_NAMESPACE #endif // QCORE_MAC_P_H |