OSX: emit aboutToShow signal for top-level dock menu.

Qt sets a QCocoaMenuDelegate on every menu it creates in order to emit
the (OSX specific) aboutToShow signal. However, there are a few cases
where OSX will copy a menu without copying the delegate. One of those
cases is the dock: the result of -[NSApplication applicationDockMenu:]
is used to create a new menu, to which a few more items are copied.
This copy is then send back to the dock.

This patch invokes the delegate's -menuWillOpen: method when
-[NSApplication applicationDockMenu:] is called. Note that sub-menus
won't receive the call-back, because the dock doesn't tell the
application what happens after returning from applicationDockMenu:.

Task-number: QTBUG-39604
Change-Id: I0e06df371a3d77342ae4b7148041214e5c4579d7
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
This commit is contained in:
Erik Verbruggen 2014-09-16 16:37:32 +02:00 committed by Tony Sarajärvi
parent bb3d2ca9f1
commit e409eafe23

View File

@ -163,6 +163,9 @@ static void cleanupCocoaApplicationDelegate()
- (NSMenu *)applicationDockMenu:(NSApplication *)sender - (NSMenu *)applicationDockMenu:(NSApplication *)sender
{ {
Q_UNUSED(sender); Q_UNUSED(sender);
// Manually invoke the delegate's -menuWillOpen: method.
// See QTBUG-39604 (and its fix) for details.
[[dockMenu delegate] menuWillOpen:dockMenu];
return [[dockMenu retain] autorelease]; return [[dockMenu retain] autorelease];
} }