Add private helper class QMacScopedObserver

Change-Id: I993ce32c1f6a6eabdce8d5b2b52d8edb28ca2bfa
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
bb10
Tor Arne Vestbø 2018-08-05 12:56:05 +02:00
parent 377bc2b2ae
commit 09d21c1dec
1 changed files with 44 additions and 0 deletions

View File

@ -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