summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/dialog_darwin.go19
-rw-r--r--redo/dialog_darwin.m29
-rw-r--r--redo/dialog_unix.go2
-rw-r--r--redo/objc_darwin.h3
4 files changed, 53 insertions, 0 deletions
diff --git a/redo/dialog_darwin.go b/redo/dialog_darwin.go
new file mode 100644
index 0000000..9e65714
--- /dev/null
+++ b/redo/dialog_darwin.go
@@ -0,0 +1,19 @@
+// 19 august 2014
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "objc_darwin.h"
+import "C"
+
+func openFile() string {
+ fname := C.openFile()
+ if fname == nil {
+ return ""
+ }
+ defer C.free(unsafe.Pointer(fname))
+ return C.GoString(fname)
+}
diff --git a/redo/dialog_darwin.m b/redo/dialog_darwin.m
new file mode 100644
index 0000000..98b2ae8
--- /dev/null
+++ b/redo/dialog_darwin.m
@@ -0,0 +1,29 @@
+// 19 august 2014
+
+#import "objc_darwin.h"
+#import <Cocoa/Cocoa.h>
+
+char *openFile(void)
+{
+ NSOpenPanel *op;
+ NSInteger ret;
+
+ op = [NSOpenPanel openPanel];
+ [op setCanChooseFiles:YES];
+ [op setCanChooseDirectories:NO];
+ [op setResolvesAliases:NO];
+ [op setAllowsMultipleSelection:NO];
+ [op setShowsHiddenFiles:YES];
+ [op setCanSelectHiddenExtension:NO];
+ [op setExtensionHidden:NO];
+ [op setAllowsOtherFileTypes:YES];
+ [op setTreatsFilePackagesAsDirectories:YES];
+ // disable custom events
+ // TODO doesn't seem to work
+ dispatch_suspend(dispatch_get_main_queue());
+ ret = [op runModal];
+ dispatch_resume(dispatch_get_main_queue());
+ if (ret != NSFileHandlingPanelOKButton)
+ return NULL;
+ return strdup([[[op URL] path] UTF8String]);
+}
diff --git a/redo/dialog_unix.go b/redo/dialog_unix.go
index 552f485..6a16ac6 100644
--- a/redo/dialog_unix.go
+++ b/redo/dialog_unix.go
@@ -1,3 +1,5 @@
+// +build !windows,!darwin
+
// 19 august 2014
package ui
diff --git a/redo/objc_darwin.h b/redo/objc_darwin.h
index f828445..53cb65d 100644
--- a/redo/objc_darwin.h
+++ b/redo/objc_darwin.h
@@ -128,4 +128,7 @@ extern void disableAutocorrect(id);
/* imagerep_darwin.m */
extern id toImageListImage(void *, intptr_t, intptr_t, intptr_t);
+/* dialog_darwin.m */
+extern char *openFile(void);
+
#endif