From fc0c046cab5ea41c3b58702dad74b749ef9af975 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sun, 17 May 2020 14:58:33 +0200 Subject: [PATCH] app/internal/window: [iOS] move main thread dispatch to Go Signed-off-by: Elias Naur --- app/internal/window/os_ios.go | 26 ++++++++++++++++++-------- app/internal/window/os_ios.m | 12 +++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/app/internal/window/os_ios.go b/app/internal/window/os_ios.go index bab5187e..959efdce 100644 --- a/app/internal/window/os_ios.go +++ b/app/internal/window/os_ios.go @@ -200,14 +200,19 @@ func onTouch(last C.int, view, touchRef C.CFTypeRef, phase C.NSInteger, x, y C.C } func (w *window) SetAnimating(anim bool) { - if w.view == 0 { + v := w.view + if v == 0 { return } var animi C.int if anim { animi = 1 } - C.gio_setAnimating(w.view, animi) + C.CFRetain(v) + runOnMain(func() { + defer C.CFRelease(v) + C.gio_setAnimating(v, animi) + }) } func (w *window) onKeyCommand(name string) { @@ -245,14 +250,19 @@ func (w *window) isVisible() bool { } func (w *window) ShowTextInput(show bool) { - if w.view == 0 { + v := w.view + if v == 0 { return } - if show { - C.gio_showTextInput(w.view) - } else { - C.gio_hideTextInput(w.view) - } + C.CFRetain(v) + runOnMain(func() { + defer C.CFRelease(v) + if show { + C.gio_showTextInput(w.view) + } else { + C.gio_hideTextInput(w.view) + } + }) } func NewWindow(win Callbacks, opts *Options) error { diff --git a/app/internal/window/os_ios.m b/app/internal/window/os_ios.m index 81b39652..ba4412a8 100644 --- a/app/internal/window/os_ios.m +++ b/app/internal/window/os_ios.m @@ -281,23 +281,17 @@ NSArray *_keyCommands; void gio_setAnimating(CFTypeRef viewRef, int anim) { GioView *view = (__bridge GioView *)viewRef; - dispatch_async(dispatch_get_main_queue(), ^{ - [view setAnimating:(anim ? YES : NO)]; - }); + [view setAnimating:(anim ? YES : NO)]; } void gio_showTextInput(CFTypeRef viewRef) { UIView *view = (__bridge UIView *)viewRef; - dispatch_async(dispatch_get_main_queue(), ^{ - [view becomeFirstResponder]; - }); + [view becomeFirstResponder]; } void gio_hideTextInput(CFTypeRef viewRef) { UIView *view = (__bridge UIView *)viewRef; - dispatch_async(dispatch_get_main_queue(), ^{ - [view resignFirstResponder]; - }); + [view resignFirstResponder]; } void gio_addLayerToView(CFTypeRef viewRef, CFTypeRef layerRef) {