M ui/app/os_macos.go => ui/app/os_macos.go +6 -0
@@ 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 {
M ui/app/os_macos.m => ui/app/os_macos.m +10 -4
@@ 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];
}