diff --git a/ui/app/os_macos.go b/ui/app/os_macos.go index 9233a22b..c9d4b398 100644 --- a/ui/app/os_macos.go +++ b/ui/app/os_macos.go @@ -130,6 +130,12 @@ func gio_onDraw(view C.CFTypeRef) { w.draw(true) } +//export gio_onFocus +func gio_onFocus(view C.CFTypeRef, focus C.BOOL) { + w := views[view] + w.w.event(key.Focus{Focus: focus == C.YES}) +} + func (w *window) draw(sync bool) { width, height := int(C.gio_viewWidth(w.view)+.5), int(C.gio_viewHeight(w.view)+.5) if width == 0 || height == 0 { diff --git a/ui/app/os_macos.m b/ui/app/os_macos.m index d5ddba6b..452d1afc 100644 --- a/ui/app/os_macos.m +++ b/ui/app/os_macos.m @@ -33,6 +33,12 @@ CGDirectDisplayID dispID = [[[self.window screen] deviceDescription][@"NSScreenNumber"] unsignedIntValue]; gio_updateDisplayLink((__bridge CFTypeRef)self.window.contentView, dispID); } +- (void)windowDidBecomeKey:(NSNotification *)notification { + gio_onFocus((__bridge CFTypeRef)self.window.contentView, YES); +} +- (void)windowDidResignKey:(NSNotification *)notification { + gio_onFocus((__bridge CFTypeRef)self.window.contentView, NO); +} - (void)windowWillClose:(NSNotification *)notification { gio_onTerminate((__bridge CFTypeRef)self.window.contentView); self.window.delegate = nil; @@ -106,14 +112,14 @@ void gio_main(CFTypeRef viewRef, const char *title, CGFloat width, CGFloat heigh [window cascadeTopLeftFromPoint:NSMakePoint(20,20)]; [window setAcceptsMouseMovedEvents:YES]; - [window setContentView:view]; - [window makeFirstResponder:view]; - + gio_onCreate((__bridge CFTypeRef)view); GioDelegate *del = [[GioDelegate alloc] init]; del.window = window; [window setDelegate:del]; [NSApp setDelegate:del]; - gio_onCreate((__bridge CFTypeRef)view); + [window setContentView:view]; + [window makeFirstResponder:view]; + [NSApp run]; }