summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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