diff options
author | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2009-12-04 09:53:51 (GMT) |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2009-12-04 10:06:05 (GMT) |
commit | 067cab5af9172335c07b48c42e6a665d5da9b54d (patch) | |
tree | 064f03066bc2e5740adda826c2db6b9d1eedeb4d /src/gui/kernel/qwidget_mac.mm | |
parent | 7c5d48e84159abd0a72eadb2e14e4c3b1441fdfb (diff) | |
download | Qt-067cab5af9172335c07b48c42e6a665d5da9b54d.zip Qt-067cab5af9172335c07b48c42e6a665d5da9b54d.tar.gz Qt-067cab5af9172335c07b48c42e6a665d5da9b54d.tar.bz2 |
Cocoa: impl. performance boost for dnd
It turns out that registering drag types for each NSView that can
receive drop events is _really_ slow. And many widget in Qt
subscribe for DnD (QTextEdit, QScrollArea, etc), so the result is
an application that will spend startup time preparing for DnD. For
some edge cases, we're talking several seconds!
This patch removes this overhead by moving drag type registering
out of NSView, and into NSWindow (that is, QCocoaWindow and
QCocoaPanel).
Task-number: QT-1586
Reviewed-by: Prasanth
Diffstat (limited to 'src/gui/kernel/qwidget_mac.mm')
-rw-r--r-- | src/gui/kernel/qwidget_mac.mm | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 1907cca..c75358d 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -4554,9 +4554,12 @@ void QWidgetPrivate::registerDropSite(bool on) #ifndef QT_MAC_USE_COCOA SetControlDragTrackingEnabled(qt_mac_nativeview_for(q), on); #else - NSView *view = qt_mac_nativeview_for(q); - if (on && [view isKindOfClass:[QT_MANGLE_NAMESPACE(QCocoaView) class]]) { - [static_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(view) registerDragTypes]; + NSWindow *win = qt_mac_window_for(q); + if (on) { + if ([win isKindOfClass:[QT_MANGLE_NAMESPACE(QCocoaWindow) class]]) + [static_cast<QT_MANGLE_NAMESPACE(QCocoaWindow) *>(win) registerDragTypes]; + else if ([win isKindOfClass:[QT_MANGLE_NAMESPACE(QCocoaPanel) class]]) + [static_cast<QT_MANGLE_NAMESPACE(QCocoaPanel) *>(win) registerDragTypes]; } #endif } |