diff options
Diffstat (limited to 'delegate_darwin.go')
| -rw-r--r-- | delegate_darwin.go | 38 |
1 files changed, 8 insertions, 30 deletions
diff --git a/delegate_darwin.go b/delegate_darwin.go index 4c40d39..be26a1e 100644 --- a/delegate_darwin.go +++ b/delegate_darwin.go @@ -18,10 +18,9 @@ This creates a class goAppDelegate that will be used as the delegate for /everyt // #cgo LDFLAGS: -lobjc -framework Foundation -framework AppKit // #include <stdlib.h> // #include "objc_darwin.h" -// extern void appDelegate_uitask(id, SEL, id); /* from uitask_darwin.go */ -// extern BOOL appDelegate_windowShouldClose(id, SEL, id); -// extern void appDelegate_windowDidResize(id, SEL, id); -// extern void appDelegate_buttonClicked(id, SEL, id); +// /* TODO this goes in objc_darwin.h once I take care of everything else */ +// extern id makeAppDelegate(void); +// extern id windowGetContentView(id); import "C" var ( @@ -37,34 +36,15 @@ var ( _buttonClicked = sel_getUid("buttonClicked:") // used by sysdata_darwin.go ) -var appDelegateSels = []selector{ - selector{"uitask:", uintptr(C.appDelegate_uitask), sel_void_id, - "performing/dispatching UI events"}, - selector{"windowShouldClose:", uintptr(C.appDelegate_windowShouldClose), sel_bool_id, - "handling window close button events"}, - selector{"windowDidResize:", uintptr(C.appDelegate_windowDidResize), sel_void_id, - "handling window resize events"}, - selector{"buttonClicked:", uintptr(C.appDelegate_buttonClicked), sel_bool_id, - "handling button clicks"}, - selector{"applicationShouldTerminate:", uintptr(C._appDelegate_applicationShouldTerminate), sel_terminatereply_id, - "handling Quit menu items (such as from the Dock)/the AppQuit channel"}, -} - func mkAppDelegate() error { - id, err := makeClass(_goAppDelegate, _NSObject, appDelegateSels, - "application delegate (handles events)") - if err != nil { - return err - } - appDelegate = C.objc_msgSend_noargs(id, _new) + appDelegate = C.makeAppDelegate() return nil } //export appDelegate_windowShouldClose -func appDelegate_windowShouldClose(self C.id, sel C.SEL, win C.id) C.BOOL { +func appDelegate_windowShouldClose(win C.id) { sysData := getSysData(win) sysData.signal() - return C.BOOL(C.NO) // don't close } var ( @@ -73,10 +53,9 @@ var ( ) //export appDelegate_windowDidResize -func appDelegate_windowDidResize(self C.id, sel C.SEL, notification C.id) { - win := C.objc_msgSend_noargs(notification, _object) +func appDelegate_windowDidResize(win C.id) { s := getSysData(win) - wincv := C.objc_msgSend_noargs(win, _contentView) // we want the content view's size, not the window's; selector defined in sysdata_darwin.go + wincv := C.windowGetContentView(win) // we want the content view's size, not the window's r := C.objc_msgSend_stret_rect_noargs(wincv, _frame) // winheight is used here because (0,0) is the bottom-left corner, not the top-left corner s.doResize(0, 0, int(r.width), int(r.height), int(r.height)) @@ -84,7 +63,7 @@ func appDelegate_windowDidResize(self C.id, sel C.SEL, notification C.id) { } //export appDelegate_buttonClicked -func appDelegate_buttonClicked(self C.id, sel C.SEL, button C.id) { +func appDelegate_buttonClicked(button C.id) { sysData := getSysData(button) sysData.signal() } @@ -95,5 +74,4 @@ func appDelegate_applicationShouldTerminate() { go func() { AppQuit <- struct{}{} }() - // xxx in bleh_darwin.m tells Cocoa not to quit } |
