diff options
author | Gabriel de Dietrich <gabriel.dedietrich@qt.io> | 2017-08-09 11:10:40 +0700 |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dedietrich@qt.io> | 2017-08-15 01:21:37 +0000 |
commit | f27d1ccbb24ec2fd4098f2976503478831006cc8 (patch) | |
tree | d9eb9dbc784529ba46f91a7d51cb94805cdfc347 /src/plugins/platforms/cocoa/qcocoamenu.h | |
parent | c161c6db780b308a604875c3e0f7affb09e89fce (diff) |
QCocoaMenu: De-pessimize the number of calls to validateMenuItem:
Calling -[NSMenu update] every time we add a new item can result in
a quadratic behavior since the function itself will iterate over all
the items in the menu. We solve this by using a 0-timer which will
trigger the call to update the next time the event loop spins.
Menurama manual test updated.
Change-Id: Ic155d364515cc93eb81b1c8085c8e44c93799954
Task-number: QTBUG-62396
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoamenu.h')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.h b/src/plugins/platforms/cocoa/qcocoamenu.h index b77071536b..06688dbf3d 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.h +++ b/src/plugins/platforms/cocoa/qcocoamenu.h @@ -96,14 +96,18 @@ public: bool isOpen() const; void setIsOpen(bool isOpen); + void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE; + private: QCocoaMenuItem *itemOrNull(int index) const; void insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem); + void scheduleUpdate(); QList<QCocoaMenuItem *> m_menuItems; NSMenu *m_nativeMenu; NSMenuItem *m_attachedItem; quintptr m_tag; + int m_updateTimer; bool m_enabled:1; bool m_parentEnabled:1; bool m_visible:1; |