summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Slimber/Cocoa')
-rw-r--r--Slimber/Cocoa/CocoaAction.h15
-rw-r--r--Slimber/Cocoa/CocoaAction.mm22
-rw-r--r--Slimber/Cocoa/CocoaMenulet.h4
-rw-r--r--Slimber/Cocoa/CocoaMenulet.mm13
-rw-r--r--Slimber/Cocoa/CocoaMenuletDelegate.h14
-rw-r--r--Slimber/Cocoa/CocoaMenuletDelegate.mm17
-rw-r--r--Slimber/Cocoa/Makefile.inc2
7 files changed, 48 insertions, 39 deletions
diff --git a/Slimber/Cocoa/CocoaAction.h b/Slimber/Cocoa/CocoaAction.h
new file mode 100644
index 0000000..13be6b9
--- /dev/null
+++ b/Slimber/Cocoa/CocoaAction.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#include <Cocoa/Cocoa.h>
+#include <boost/function.hpp>
+
+class CocoaMenulet;
+
+@interface CocoaAction : NSObject {
+ boost::function<void ()>* function;
+}
+
+- (id) initWithFunction: (boost::function<void()>*) f;
+- (void) doAction: (id) sender;
+
+@end
diff --git a/Slimber/Cocoa/CocoaAction.mm b/Slimber/Cocoa/CocoaAction.mm
new file mode 100644
index 0000000..15498a1
--- /dev/null
+++ b/Slimber/Cocoa/CocoaAction.mm
@@ -0,0 +1,22 @@
+#include "Slimber/Cocoa/CocoaAction.h"
+
+@implementation CocoaAction
+
+- (id) initWithFunction: (boost::function<void()>*) f {
+ if ([super init]) {
+ function = f;
+ }
+ return self;
+}
+
+- (void) dealloc {
+ delete function;
+ [super dealloc];
+}
+
+- (void) doAction: (id) sender {
+ (void) sender;
+ (*function)();
+}
+
+@end
diff --git a/Slimber/Cocoa/CocoaMenulet.h b/Slimber/Cocoa/CocoaMenulet.h
index 73f5c2b..913731f 100644
--- a/Slimber/Cocoa/CocoaMenulet.h
+++ b/Slimber/Cocoa/CocoaMenulet.h
@@ -3,7 +3,7 @@
#include <Cocoa/Cocoa.h>
#include "Slimber/Menulet.h"
-#include "Slimber/Cocoa/CocoaMenuletDelegate.h"
+#include "Slimber/Cocoa/CocoaAction.h"
class CocoaMenulet : public Menulet {
public:
@@ -22,5 +22,5 @@ class CocoaMenulet : public Menulet {
private:
NSStatusItem* statusItem;
NSMenu* menu;
- CocoaMenuletDelegate* delegate;
+ CocoaAction* restartAction;
};
diff --git a/Slimber/Cocoa/CocoaMenulet.mm b/Slimber/Cocoa/CocoaMenulet.mm
index f9981e0..72ab000 100644
--- a/Slimber/Cocoa/CocoaMenulet.mm
+++ b/Slimber/Cocoa/CocoaMenulet.mm
@@ -1,9 +1,12 @@
#include "Slimber/Cocoa/CocoaMenulet.h"
+#include <boost/function.hpp>
+
using namespace Swift;
CocoaMenulet::CocoaMenulet() {
- delegate = [[CocoaMenuletDelegate alloc] initWithMenulet: this];
+ restartAction = [[CocoaAction alloc] initWithFunction:
+ new boost::function<void()>(boost::ref(onRestartClicked))];
menu = [[NSMenu alloc] init];
statusItem = [[[NSStatusBar systemStatusBar]
@@ -15,10 +18,9 @@ CocoaMenulet::CocoaMenulet() {
}
CocoaMenulet::~CocoaMenulet() {
- [delegate release];
[statusItem release];
[menu release];
- [delegate release];
+ [restartAction release];
}
void CocoaMenulet::setIcon(const String& icon) {
@@ -58,8 +60,9 @@ void CocoaMenulet::addAboutItem() {
}
void CocoaMenulet::addRestartItem() {
- NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: @"Restart" action: @selector(handleRestartClicked:) keyEquivalent: @""];
- [item setTarget: delegate];
+ NSMenuItem* item = [[NSMenuItem alloc] initWithTitle:
+ @"Restart" action: @selector(doAction:) keyEquivalent: @""];
+ [item setTarget: restartAction];
[menu addItem: item];
[item release];
}
diff --git a/Slimber/Cocoa/CocoaMenuletDelegate.h b/Slimber/Cocoa/CocoaMenuletDelegate.h
deleted file mode 100644
index 5c28130..0000000
--- a/Slimber/Cocoa/CocoaMenuletDelegate.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#include <Cocoa/Cocoa.h>
-
-class CocoaMenulet;
-
-@interface CocoaMenuletDelegate : NSObject {
- CocoaMenulet* menulet;
-}
-
-- (id) initWithMenulet: (CocoaMenulet*) m;
-- (void) handleRestartClicked: (id) sender;
-
-@end
diff --git a/Slimber/Cocoa/CocoaMenuletDelegate.mm b/Slimber/Cocoa/CocoaMenuletDelegate.mm
deleted file mode 100644
index f4a7d7b..0000000
--- a/Slimber/Cocoa/CocoaMenuletDelegate.mm
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "Slimber/Cocoa/CocoaMenuletDelegate.h"
-#include "Slimber/Cocoa/CocoaMenulet.h"
-
-@implementation CocoaMenuletDelegate
-
-- (id) initWithMenulet: (CocoaMenulet*) m {
- if ([super init]) {
- menulet = m;
- }
- return self;
-}
-
-- (void) handleRestartClicked: (id) sender {
- menulet->onRestartClicked();
-}
-
-@end
diff --git a/Slimber/Cocoa/Makefile.inc b/Slimber/Cocoa/Makefile.inc
index 5ea1154..2c364b6 100644
--- a/Slimber/Cocoa/Makefile.inc
+++ b/Slimber/Cocoa/Makefile.inc
@@ -5,7 +5,7 @@ SLIMBER_COCOA_SOURCES = \
Slimber/Cocoa/main.mm \
Slimber/Cocoa/CocoaController.mm \
Slimber/Cocoa/CocoaMenulet.mm \
- Slimber/Cocoa/CocoaMenuletDelegate.mm
+ Slimber/Cocoa/CocoaAction.mm
SLIMBER_COCOA_XIBS = \
Slimber/Cocoa/MainMenu.xib
SLIMBER_COCOA_RESOURCES = \