summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-03-01 20:31:17 -0500
committerPietro Gagliardi <[email protected]>2014-03-01 20:31:17 -0500
commit0709351fed0b5fb5871853505e969bf0ccf17495 (patch)
tree46190bc1228441fe77afaf1ccac6003aed87bcd4
parent10e9f6b927c5208fce290fea346a8a2ad7ac3fa3 (diff)
Attempted to fix the lack of resizable window borders by setting the NSApplication activation policy. This fixed it, and also fixed a bunch of other things, such as the application being seen as part of Terminal, lack of dock icon, lack of application menu, etc.
-rw-r--r--bleh_darwin.m9
-rw-r--r--objc_darwin.h1
-rw-r--r--uitask_darwin.go8
3 files changed, 18 insertions, 0 deletions
diff --git a/bleh_darwin.m b/bleh_darwin.m
index 04f8930..1c42cca 100644
--- a/bleh_darwin.m
+++ b/bleh_darwin.m
@@ -28,6 +28,15 @@ id _objc_msgSend_uint(id obj, SEL sel, uintptr_t a)
}
/*
+same as above, but for NSInteger
+*/
+
+id objc_msgSend_int(id obj, SEL sel, intptr_t a)
+{
+ return objc_msgSend(obj, sel, (NSInteger) a);
+}
+
+/*
These are the objc_msgSend() wrappers around NSRect. The problem is that while on 32-bit systems, NSRect is a concrete structure, on 64-bit systems it's just a typedef to CGRect. While in practice just using CGRect everywhere seems to work, better to be safe than sorry.
I use int64_t for maximum safety, as my coordinates are stored as Go ints and Go int -> C int (which is what is documented as happening) isn't reliable.
diff --git a/objc_darwin.h b/objc_darwin.h
index 1c960d5..5d6bd41 100644
--- a/objc_darwin.h
+++ b/objc_darwin.h
@@ -75,6 +75,7 @@ m1(sel, SEL)
extern id _objc_msgSend_uint(id obj, SEL sel, uintptr_t a);
m1(ptr, void *)
m1(bool, BOOL)
+extern id objc_msgSend_int(id obj, SEL sel, intptr_t a);
m2(id_id, id, id)
extern id _objc_msgSend_rect_bool(id obj, SEL sel, int64_t x, int64_t y, int64_t w, int64_t h, BOOL b);
diff --git a/uitask_darwin.go b/uitask_darwin.go
index c77bb2f..c61ede0 100644
--- a/uitask_darwin.go
+++ b/uitask_darwin.go
@@ -2,6 +2,7 @@
package ui
import (
+ "fmt"
"runtime"
"unsafe"
)
@@ -66,10 +67,17 @@ var (
_NSApplication = objc_getClass("NSApplication")
_sharedApplication = sel_getUid("sharedApplication")
+ _setActivationPolicy = sel_getUid("setActivationPolicy:")
)
func initCocoa() (NSApp C.id, err error) {
NSApp = C.objc_msgSend_noargs(_NSApplication, _sharedApplication)
+ r := C.objc_msgSend_int(NSApp, _setActivationPolicy,
+ 0) // NSApplicationActivationPolicyRegular
+ if C.BOOL(uintptr(unsafe.Pointer(r))) != C.BOOL(C.YES) {
+ err = fmt.Errorf("error setting NSApplication activation policy (basically identifies our program as a separate program; needed for several things, such as Dock icon, menu, window resizing, etc.) (unknown reason)")
+ return
+ }
err = mkAppDelegate()
return
}