diff options
author | Remko Tronçon <git@el-tramo.be> | 2012-04-25 20:43:01 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2012-04-25 20:43:01 (GMT) |
commit | c9d0c35dfb20ccac038954a8ad51690eda919fba (patch) | |
tree | 7d1ec4bb942322663315f55c0cb1cc5e091a1c4b /Swift/QtUI/CocoaApplicationActivateHelper.mm | |
parent | 67c0420a2798ddb2c64fec01c1d37f038ad39262 (diff) | |
download | swift-contrib-c9d0c35dfb20ccac038954a8ad51690eda919fba.zip swift-contrib-c9d0c35dfb20ccac038954a8ad51690eda919fba.tar.bz2 |
Clicking the OS X dock brings the app to the front.
Resolves: #501
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 |