summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2012-04-25 20:43:01 (GMT)
committerRemko Tronçon <git@el-tramo.be>2012-04-25 20:43:01 (GMT)
commitc9d0c35dfb20ccac038954a8ad51690eda919fba (patch)
tree7d1ec4bb942322663315f55c0cb1cc5e091a1c4b /Swift/QtUI/CocoaApplicationActivateHelper.mm
parent67c0420a2798ddb2c64fec01c1d37f038ad39262 (diff)
downloadswift-c9d0c35dfb20ccac038954a8ad51690eda919fba.zip
swift-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.mm54
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