~eliasnaur/gio

b9205d9965523cc45bf1f6b23ecc68d53aae5a89 — Elias Naur 2 years ago a9199c6
uis/app: (macos) relay system focus events

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2 files changed, 16 insertions(+), 4 deletions(-)

M ui/app/os_macos.go
M ui/app/os_macos.m
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];
	}