diff options
author | Gabriel de Dietrich <gabriel.dedietrich@qt.io> | 2018-04-19 14:39:54 -0700 |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dedietrich@qt.io> | 2018-04-20 17:45:23 +0000 |
commit | f35f282c4f0ef11dc35bc9120852ff9e77f85297 (patch) | |
tree | 6203befe295a22bb927c5526fcd0cf8dbba4b83f | |
parent | 2b40af71770e3c330cf5fd028c8c4fd2ec724eb2 (diff) |
Cocoa Helpers: Add qt_objc_cast() function
This generalizes what qnsview_cast() does to any Objective-C class.
Notice that this is a loose cast, using isKindOfClass: instead
of isMemberOfClass:.
Change-Id: I745f548e474f2f9eef89f370d7d45496f0c51434
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoahelpers.h | 10 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoahelpers.mm | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.h b/src/plugins/platforms/cocoa/qcocoahelpers.h index 1bead3304a..516eac0503 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.h +++ b/src/plugins/platforms/cocoa/qcocoahelpers.h @@ -78,6 +78,16 @@ NSDragOperation qt_mac_mapDropActions(Qt::DropActions actions); Qt::DropAction qt_mac_mapNSDragOperation(NSDragOperation nsActions); Qt::DropActions qt_mac_mapNSDragOperations(NSDragOperation nsActions); +template <typename T> +typename std::enable_if<std::is_pointer<T>::value, T>::type +qt_objc_cast(id object) +{ + if ([object isKindOfClass:[typename std::remove_pointer<T>::type class]]) + return static_cast<T>(object); + + return nil; +} + QT_MANGLE_NAMESPACE(QNSView) *qnsview_cast(NSView *view); // Misc diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm index d7b3936662..ee1b79b4cd 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.mm +++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm @@ -160,10 +160,7 @@ Qt::DropActions qt_mac_mapNSDragOperations(NSDragOperation nsActions) */ QNSView *qnsview_cast(NSView *view) { - if (![view isKindOfClass:[QNSView class]]) - return nil; - - return static_cast<QNSView *>(view); + return qt_objc_cast<QNSView *>(view); } // |