diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2010-02-12 18:15:15 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2010-02-12 18:15:15 (GMT) |
commit | 15825196f5ba37f27c4a2e877e1c782407faece0 (patch) | |
tree | f75bfb5300503887437747287f38e643360ee0b6 /src/gui/kernel/qt_cocoa_helpers_mac.mm | |
parent | 7263810f4802a3a6755193f6f2692436600a5e53 (diff) | |
parent | c04fd421375562f2db8ab89d7bb9509d9b655dd2 (diff) | |
download | Qt-15825196f5ba37f27c4a2e877e1c782407faece0.zip Qt-15825196f5ba37f27c4a2e877e1c782407faece0.tar.gz Qt-15825196f5ba37f27c4a2e877e1c782407faece0.tar.bz2 |
Merge branch 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into master-integration
* 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-1: (27 commits)
Fix QRegion under Mac OS X.
update according to Thiago's comments.
Changes: add functionality for dbus auto start to qt
Add license header to this file
readdir64 is not available on HP-UX
Fix bug in QDirPrivate::setPath, affecting QDir::cd, cdUp and setPath
qdoc3: Completed handling of the new \pagekeywords command.
Wrong cursor shown by the parent window after setOverrideCursor().
Fixed Mac OS X compile time error by using GLint for temp.
qdoc3: Added curly braces in switch statement for braindead compiler.
qdoc: Added a build rule for the documentation - disabled by default.
Doc: Added the qdoc manual to the repository for future maintenance.
qdoc3: Fixed bug in creation of qt.pageindex.
qdoc3: Added capability to create qt.pageindex.
Incorrect property setter generated by dumpcpp for Microsoft Word 2007.
Cocoa: Implement our own NSApplication subclass
Cocoa: Menu in menubar stays highlighted
qdoc: Made a temporary fix for comment highlighting.
Doc: Tidied up the class layout and removed an unnecessary image.
Doc/qdoc: Use Chinese titles; canonicalize titles with non-ASCII chars.
...
Diffstat (limited to 'src/gui/kernel/qt_cocoa_helpers_mac.mm')
-rw-r--r-- | src/gui/kernel/qt_cocoa_helpers_mac.mm | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 4e51cf4..f2ec4af 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -83,6 +83,7 @@ #include <private/qt_cocoa_helpers_mac_p.h> #include <private/qt_mac_p.h> #include <private/qapplication_p.h> +#include <private/qcocoaapplication_mac_p.h> #include <private/qcocoawindow_mac_p.h> #include <private/qcocoaview_mac_p.h> #include <private/qkeymapper_p.h> @@ -1279,22 +1280,42 @@ void qt_cocoaChangeOverrideCursor(const QCursor &cursor) QMacCocoaAutoReleasePool pool; [static_cast<NSCursor *>(qt_mac_nsCursorForQCursor(cursor)) set]; } -#endif -@implementation DebugNSApplication { -} -- (void)sendEvent:(NSEvent *)event +// WARNING: If Qt did not create NSApplication (e.g. in case it is +// used as a plugin), and at the same time, there is no window on +// screen (or the window that the event is sendt to becomes hidden etc +// before the event gets delivered), the message will not be performed. +bool qt_cocoaPostMessage(id target, SEL selector) { - NSLog(@"NSAppDebug: sendEvent: %@", event); - return [super sendEvent:event]; -} + if (!target) + return false; -- (BOOL)sendAction:(SEL)anAction to:(id)aTarget from:(id)sender -{ - NSLog(@"NSAppDebug: sendAction: %s to %@ from %@", anAction, aTarget, sender); - return [super sendAction:anAction to:aTarget from:sender]; + NSInteger windowNumber = 0; + if (![NSApp isMemberOfClass:[QNSApplication class]]) { + // INVARIANT: Cocoa is not using our NSApplication subclass. That means + // we don't control the main event handler either. So target the event + // for one of the windows on screen: + NSWindow *nswin = [NSApp mainWindow]; + if (!nswin) { + nswin = [NSApp keyWindow]; + if (!nswin) + return false; + } + windowNumber = [nswin windowNumber]; + } + + // 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: + QCocoaPostMessageArgs *args = new QCocoaPostMessageArgs(target, selector); + quint32 lower = quintptr(args); + quint32 upper = quintptr(args) >> 32; + NSEvent *e = [NSEvent otherEventWithType:NSApplicationDefined + location:NSZeroPoint modifierFlags:0 timestamp:0 windowNumber:windowNumber + context:nil subtype:QtCocoaEventSubTypePostMessage data1:lower data2:upper]; + [NSApp postEvent:e atStart:NO]; + return true; } -@end +#endif QMacCocoaAutoReleasePool::QMacCocoaAutoReleasePool() { |