diff options
Diffstat (limited to 'Swift/QtUI/CocoaApplicationActivateHelper.mm')
-rw-r--r-- | Swift/QtUI/CocoaApplicationActivateHelper.mm | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Swift/QtUI/CocoaApplicationActivateHelper.mm b/Swift/QtUI/CocoaApplicationActivateHelper.mm new file mode 100644 index 0000000..7c42380 --- /dev/null +++ b/Swift/QtUI/CocoaApplicationActivateHelper.mm @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "CocoaApplicationActivateHelper.h" + +#include <boost/function.hpp> +#include <Cocoa/Cocoa.h> +#include <QApplication> + +@interface CocoaApplicationActivateHelperDelegate : NSObject { +} +- (void) handleActivate: (NSAppleEventDescriptor*) event withReply: (NSAppleEventDescriptor*) reply; +@end + +@implementation CocoaApplicationActivateHelperDelegate +- (void) handleActivate: (NSAppleEventDescriptor*) event withReply: (NSAppleEventDescriptor*) reply { + (void) event; (void) reply; + QApplication::postEvent(qApp, new QEvent(QEvent::ApplicationActivate)); +} +@end + +namespace Swift { + +struct CocoaApplicationActivateHelper::Private { + CocoaApplicationActivateHelperDelegate* delegate; + bool initialized; +}; + +CocoaApplicationActivateHelper::CocoaApplicationActivateHelper() { + p = new Private(); + p->delegate = [[CocoaApplicationActivateHelperDelegate alloc] init]; + p->initialized = false; + qApp->installEventFilter(this); +} + +CocoaApplicationActivateHelper::~CocoaApplicationActivateHelper() { + [[NSAppleEventManager sharedAppleEventManager] removeEventHandlerForEventClass:kCoreEventClass andEventID:kAEReopenApplication]; + [p->delegate release]; + delete p; +} + +bool CocoaApplicationActivateHelper::eventFilter(QObject* object, QEvent* event) { + if (object == qApp && event->type() == QEvent::ApplicationActivate && !p->initialized) { + [[NSAppleEventManager sharedAppleEventManager] setEventHandler:p->delegate andSelector:@selector(handleActivate:withReply:) forEventClass:kCoreEventClass andEventID:kAEReopenApplication]; + p->initialized = true; + } + return QObject::eventFilter(object, event); +} + + +}
\ No newline at end of file |