diff options
author | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2010-02-09 09:39:37 (GMT) |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2010-02-10 09:14:33 (GMT) |
commit | 8b112609b7d86572fbb41dc59354da1f958d1910 (patch) | |
tree | 4304da66aef9ab4245decf1009752cff6eac1b9b /src/gui/kernel/qcocoasharedwindowmethods_mac_p.h | |
parent | 2a1bf99770401576f451806b2e2a8c73853ca99b (diff) | |
download | Qt-8b112609b7d86572fbb41dc59354da1f958d1910.zip Qt-8b112609b7d86572fbb41dc59354da1f958d1910.tar.gz Qt-8b112609b7d86572fbb41dc59354da1f958d1910.tar.bz2 |
Cocoa: Menu in menubar stays highlighted
If you use the menu bar for a window to open up
another window woth no menu bar, the first menu bar
stays highlighted once it is set as current again.
The reason is that we remove the first menu bar before
cocoa gets a chance to update it correctly. This patch
implements a system for us to post a message/call to
cocoa, so we delay removing the toolbar until after
cocoa has finished closing it properly.
NB: Rather than posting the call to a window on screen, it
would have been better and safer to post it no window, and
then receive the event in the event handler of NSApplication.
But for the moment, we have decided not to subclass NSApplication...
Rev-By:prasanth
Diffstat (limited to 'src/gui/kernel/qcocoasharedwindowmethods_mac_p.h')
-rw-r--r-- | src/gui/kernel/qcocoasharedwindowmethods_mac_p.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h index d8bbcd4..3b92ce2 100644 --- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h +++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h @@ -178,8 +178,26 @@ QT_END_NAMESPACE [NSApp terminate:sender]; } +- (void)sendPostedMessage:(NSEvent *)event +{ + // WARNING: data1 and data2 is truncated to from 64-bit to 32-bit on OS 10.5! + // That is why we need to split the address in two parts: + quint64 lower = [event data1]; + quint64 upper = [event data2]; + QCocoaPostCallArgs *args = reinterpret_cast<QCocoaPostCallArgs *>(lower | (upper << 32)); + if (args != 0) { + [args->target performSelector:args->selector]; + delete args; + } +} + - (void)sendEvent:(NSEvent *)event { + if ([event type] == NSApplicationDefined) { + if ([event subtype] == QtCocoaEventSubTypePostMessage) + [self sendPostedMessage:event]; + return; + } QWidget *widget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self]; // Cocoa can hold onto the window after we've disavowed its knowledge. So, |