From 24304d3c0deb677fb66e69c8c3acbe6d318c4b3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 07:05:50 +0000 Subject: [PATCH] Go Dependency: Bump fyne.io/fyne/v2 from 2.4.4 to 2.4.5 Bumps [fyne.io/fyne/v2](https://github.com/fyne-io/fyne) from 2.4.4 to 2.4.5. - [Release notes](https://github.com/fyne-io/fyne/releases) - [Changelog](https://github.com/fyne-io/fyne/blob/master/CHANGELOG.md) - [Commits](https://github.com/fyne-io/fyne/compare/v2.4.4...v2.4.5) --- updated-dependencies: - dependency-name: fyne.io/fyne/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 +-- vendor/fyne.io/fyne/v2/CHANGELOG.md | 22 +++++++++++++- .../fyne/v2/internal/driver/glfw/driver.go | 1 + .../v2/internal/driver/glfw/driver_desktop.go | 9 +++++- .../fyne/v2/internal/driver/glfw/loop.go | 2 +- .../v2/internal/driver/glfw/loop_desktop.go | 10 +------ .../v2/internal/driver/glfw/loop_goxjs.go | 14 ++------- .../v2/internal/driver/glfw/window_desktop.go | 4 --- .../v2/internal/driver/glfw/window_goxjs.go | 4 --- .../fyne/v2/internal/driver/mobile/android.c | 26 +++++++++++++++- .../internal/driver/mobile/app/darwin_ios.m | 14 ++++----- .../v2/internal/driver/mobile/clipboard_ios.m | 2 +- .../v2/internal/driver/mobile/file_android.go | 17 +++++++++++ .../v2/internal/driver/mobile/file_desktop.go | 5 ++++ .../v2/internal/driver/mobile/file_ios.go | 30 +++++++++++++++---- .../fyne/v2/internal/driver/mobile/file_ios.m | 28 +++++++++++++---- .../v2/internal/driver/mobile/folder_ios.m | 4 +-- .../v2/internal/driver/mobile/repository.go | 3 +- vendor/fyne.io/fyne/v2/layout/formlayout.go | 9 ++++-- vendor/fyne.io/fyne/v2/widget/richtext.go | 27 +++++++++++++++++ vendor/fyne.io/fyne/v2/widget/select.go | 17 ++++++----- vendor/fyne.io/fyne/v2/widget/slider.go | 22 +++++++++++--- vendor/modules.txt | 2 +- 24 files changed, 206 insertions(+), 72 deletions(-) diff --git a/go.mod b/go.mod index 75307cd..e38e56b 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/atc0005/safelinks go 1.20 require ( - fyne.io/fyne/v2 v2.4.4 + fyne.io/fyne/v2 v2.4.5 github.com/google/go-cmp v0.6.0 ) diff --git a/go.sum b/go.sum index 9c6550f..9fa510d 100644 --- a/go.sum +++ b/go.sum @@ -37,8 +37,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -fyne.io/fyne/v2 v2.4.4 h1:4efSRpoikcGbqQN83yzC9WmF8UNq9olsaJQ/Ejme6Z8= -fyne.io/fyne/v2 v2.4.4/go.mod h1:VyrxAOZ3NRZRWBvNIJbfqoKOG4DdbewoPk7ozqJKNPY= +fyne.io/fyne/v2 v2.4.5 h1:W6jpAEmLoBbKyBB+EXqI7GMJ7kLgHQWCa0wZHUV2VfQ= +fyne.io/fyne/v2 v2.4.5/go.mod h1:SlOgbca0y80cRObu/JOhxIJdIgtoW7aCyqUVlTMgs0Y= fyne.io/systray v1.10.1-0.20231115130155-104f5ef7839e h1:Hvs+kW2VwCzNToF3FmnIAzmivNgrclwPgoUdVSrjkP8= fyne.io/systray v1.10.1-0.20231115130155-104f5ef7839e/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= diff --git a/vendor/fyne.io/fyne/v2/CHANGELOG.md b/vendor/fyne.io/fyne/v2/CHANGELOG.md index 99b420c..cf82428 100644 --- a/vendor/fyne.io/fyne/v2/CHANGELOG.md +++ b/vendor/fyne.io/fyne/v2/CHANGELOG.md @@ -3,6 +3,26 @@ This file lists the main changes with each version of the Fyne toolkit. More detailed release notes can be found on the [releases page](https://github.com/fyne-io/fyne/releases). +## 2.4.5 - 15 April 2024 + +### Fixed + +* iOS files write would fail when over 16KB +* storage.Delete not supported on Android/iOS (#2120) +* layout.formLayout do not handle canvas.Text well in second column (#4665) +* Fix building with ios17.4 (#4741) +* Support template icon for system tray menu icons +* Fix recognition of missing XDG user directories (#4650) +* FileDialog.SetOnClosed not always working (#4651) +* Upgrade GLFW for performance improvements and bug fixes +* Multiple select popups can crash during background operations (#4730) +* Controlling a negative slider with the left arrow key blocks after 8 steps (#4736) +* cmd/fyne: command "get" is broken with Go 1.22 (#4684) +* Race condition during system tray menu refresh (#4697) +* Fyne release on Linux does not set Metadata().Release to true (#4711) +* RichText leaks memory when replacing segments (#4723) + + ## 2.4.4 - 13 February 2024 ### Fixed @@ -37,7 +57,7 @@ More detailed release notes can be found on the [releases page](https://github.c * Reduce calls to C and repeated size checks in painter and driver code -## 2.4.2 - 22 November 2023 +## 2.4.2 - 21 November 2023 ### Fixed diff --git a/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver.go b/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver.go index 0b81826..b6a7335 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver.go @@ -48,6 +48,7 @@ type gLDriver struct { trayStart, trayStop func() // shut down the system tray, if used systrayMenu *fyne.Menu // cache the menu set so we know when to refresh + systrayLock sync.Mutex } func toOSIcon(icon []byte) ([]byte, error) { diff --git a/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver_desktop.go b/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver_desktop.go index b317bc3..86a918c 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver_desktop.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/glfw/driver_desktop.go @@ -121,13 +121,20 @@ func itemForMenuItem(i *fyne.MenuItem, parent *systray.MenuItem) *systray.MenuIt if err != nil { fyne.LogError("Failed to convert systray icon", err) } else { - item.SetIcon(img) + if _, ok := i.Icon.(*theme.ThemedResource); ok { + item.SetTemplateIcon(img, img) + } else { + item.SetIcon(img) + } } } return item } func (d *gLDriver) refreshSystray(m *fyne.Menu) { + d.systrayLock.Lock() + defer d.systrayLock.Unlock() + d.systrayMenu = m systray.ResetMenu() d.refreshSystrayMenu(m, nil) diff --git a/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop.go b/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop.go index d7049ba..fb52d8a 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop.go @@ -138,7 +138,7 @@ func (d *gLDriver) runGL() { f.done <- struct{}{} } case <-eventTick.C: - d.tryPollEvents() + d.pollEvents() windowsToRemove := 0 for _, win := range d.windowList() { w := win.(*window) diff --git a/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_desktop.go b/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_desktop.go index 652e6cf..33622fc 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_desktop.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_desktop.go @@ -4,8 +4,6 @@ package glfw import ( - "fmt" - "fyne.io/fyne/v2" "github.com/go-gl/glfw/v3.3/glfw" @@ -24,13 +22,7 @@ func (d *gLDriver) initGLFW() { }) } -func (d *gLDriver) tryPollEvents() { - defer func() { - if r := recover(); r != nil { - fyne.LogError(fmt.Sprint("GLFW poll event error: ", r), nil) - } - }() - +func (d *gLDriver) pollEvents() { glfw.PollEvents() // This call blocks while window is being resized, which prevents freeDirtyTextures from being called } diff --git a/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_goxjs.go b/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_goxjs.go index e508280..88f26c4 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_goxjs.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/glfw/loop_goxjs.go @@ -4,12 +4,10 @@ package glfw import ( - "fmt" - "fyne.io/fyne/v2" - gl "github.com/fyne-io/gl-js" - glfw "github.com/fyne-io/glfw-js" + "github.com/fyne-io/gl-js" + "github.com/fyne-io/glfw-js" ) func (d *gLDriver) initGLFW() { @@ -24,13 +22,7 @@ func (d *gLDriver) initGLFW() { }) } -func (d *gLDriver) tryPollEvents() { - defer func() { - if r := recover(); r != nil { - fyne.LogError(fmt.Sprint("GLFW poll event error: ", r), nil) - } - }() - +func (d *gLDriver) pollEvents() { glfw.PollEvents() // This call blocks while window is being resized, which prevents freeDirtyTextures from being called } diff --git a/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_desktop.go b/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_desktop.go index ae4dc2b..b3cba79 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_desktop.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_desktop.go @@ -583,10 +583,6 @@ func keyCodeToKeyName(code string) fyne.KeyName { } func keyToName(code glfw.Key, scancode int) fyne.KeyName { - if runtime.GOOS == "darwin" && scancode == 0x69 { // TODO remove once fixed upstream glfw/glfw#1786 - code = glfw.KeyPrintScreen - } - ret := glfwKeyToKeyName(code) if ret != fyne.KeyUnknown { return ret diff --git a/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_goxjs.go b/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_goxjs.go index a10d6be..ebb8de7 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_goxjs.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/glfw/window_goxjs.go @@ -394,10 +394,6 @@ func keyCodeToKeyName(code string) fyne.KeyName { } func keyToName(code glfw.Key, scancode int) fyne.KeyName { - if runtime.GOOS == "darwin" && scancode == 0x69 { // TODO remove once fixed upstream glfw/glfw#1786 - code = glfw.KeyPrintScreen - } - ret := glfwKeyToKeyName(code) if ret != fyne.KeyUnknown { return ret diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/android.c b/vendor/fyne.io/fyne/v2/internal/driver/mobile/android.c index f1c5bcc..41a4055 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/android.c +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/android.c @@ -329,13 +329,37 @@ const char* contentURIGetFileName(uintptr_t jni_env, uintptr_t ctx, char* uriCst return NULL; } -bool existsFileURI(char* uriCstr) { +char *filePath(char *uriCstr) { // Get file path from URI size_t length = strlen(uriCstr)-7;// -7 for 'file://' char* path = malloc(sizeof(char)*(length+1));// +1 for '\0' memcpy(path, &uriCstr[7], length); path[length] = '\0'; + return path; +} + +bool deleteFileURI(char *uriCstr) { + char* path = filePath(uriCstr); + int result = remove(path); + + free(path); + + return result == 0; +} + +bool deleteURI(uintptr_t jni_env, uintptr_t ctx, char* uriCstr) { + if (!hasPrefix(uriCstr, "file://")) { + LOG_FATAL("Cannot delete for scheme: %s", uriCstr); + return false; + } + + return deleteFileURI(uriCstr); +} + +bool existsFileURI(char* uriCstr) { + char* path = filePath(uriCstr); + // Stat path to determine if it points to an existing file struct stat statbuf; int result = stat(path, &statbuf); diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/app/darwin_ios.m b/vendor/fyne.io/fyne/v2/internal/driver/mobile/app/darwin_ios.m index 62d1374..fe42db3 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/app/darwin_ios.m +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/app/darwin_ios.m @@ -48,7 +48,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( updateConfig((int)size.width, (int)size.height, orientation); UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; - center.delegate = self; + center.delegate = (id) self; return YES; } @@ -210,7 +210,7 @@ - (void)deleteBackward { } -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { - keyboardTyped([string UTF8String]); + keyboardTyped((char *)[string UTF8String]); return NO; } @@ -326,12 +326,12 @@ void hideKeyboard() { NSString *mimeList = [NSString stringWithUTF8String:mimes]; if ([mimeList isEqualToString:@"application/x-directory"]) { - [docTypes addObject:kUTTypeFolder]; + [docTypes addObject:(NSString*)kUTTypeFolder]; } else { NSArray *mimeItems = [mimeList componentsSeparatedByString:@"|"]; for (NSString *mime in mimeItems) { - CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mime, NULL); + NSString *UTI = (NSString *) UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (CFStringRef)mime, NULL); [docTypes addObject:UTI]; } @@ -341,7 +341,7 @@ void hideKeyboard() { NSArray *extItems = [extList componentsSeparatedByString:@"|"]; for (NSString *ext in extItems) { - CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, ext, NULL); + NSString *UTI = (NSString *) UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)ext, NULL); [docTypes addObject:UTI]; } @@ -359,7 +359,7 @@ void showFileOpenPicker(char* mimes, char *exts) { UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:docTypes inMode:UIDocumentPickerModeOpen]; - documentPicker.delegate = appDelegate; + documentPicker.delegate = (id) appDelegate; dispatch_async(dispatch_get_main_queue(), ^{ [appDelegate.controller presentViewController:documentPicker animated:YES completion:nil]; @@ -380,7 +380,7 @@ void showFileSavePicker(char* mimes, char *exts) { UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithURL:temporaryFileURL inMode:UIDocumentPickerModeMoveToService]; - documentPicker.delegate = appDelegate; + documentPicker.delegate = (id) appDelegate; dispatch_async(dispatch_get_main_queue(), ^{ [appDelegate.controller presentViewController:documentPicker animated:YES completion:nil]; diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/clipboard_ios.m b/vendor/fyne.io/fyne/v2/internal/driver/mobile/clipboard_ios.m index c6c0758..4931572 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/clipboard_ios.m +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/clipboard_ios.m @@ -12,5 +12,5 @@ void setClipboardContent(char *content) { char *getClipboardContent() { NSString *str = [[UIPasteboard generalPasteboard] string]; - return [str UTF8String]; + return (char *) [str UTF8String]; } diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_android.go b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_android.go index 32e37ae..2292ef6 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_android.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_android.go @@ -9,6 +9,7 @@ package mobile #include #include +bool deleteURI(uintptr_t jni_env, uintptr_t ctx, char* uriCstr); bool existsURI(uintptr_t jni_env, uintptr_t ctx, char* uriCstr); void* openStream(uintptr_t jni_env, uintptr_t ctx, char* uriCstr); char* readStream(uintptr_t jni_env, uintptr_t ctx, void* stream, int len, int* total); @@ -142,6 +143,22 @@ func (s *javaStream) Write(p []byte) (int, error) { return len(p), err } +func deleteURI(u fyne.URI) error { + uriStr := C.CString(u.String()) + defer C.free(unsafe.Pointer(uriStr)) + + ok := false + app.RunOnJVM(func(_, env, ctx uintptr) error { + ok = bool(C.deleteURI(C.uintptr_t(env), C.uintptr_t(ctx), uriStr)) + return nil + }) + + if !ok { + return errors.New("failed to delete file " + u.String()) + } + return nil +} + func existsURI(uri fyne.URI) (bool, error) { uriStr := C.CString(uri.String()) defer C.free(unsafe.Pointer(uriStr)) diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_desktop.go b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_desktop.go index f5a0607..40aa673 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_desktop.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_desktop.go @@ -11,6 +11,11 @@ import ( "fyne.io/fyne/v2/storage/repository" ) +func deleteURI(u fyne.URI) error { + // no-op as we use the internal FileRepository + return nil +} + func existsURI(fyne.URI) (bool, error) { // no-op as we use the internal FileRepository return false, nil diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.go b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.go index 02de4cf..1a3c6ce 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.go @@ -10,10 +10,14 @@ package mobile #import #import +void iosDeletePath(const char* path); bool iosExistsPath(const char* path); void* iosParseUrl(const char* url); const void* iosReadFromURL(void* url, int* len); -const int iosWriteToURL(void* url, const void* bytes, int len); + +const void* iosOpenFileWriter(void* url); +void iosCloseFileWriter(void* handle); +const int iosWriteToFile(void* handle, const void* bytes, int len); */ import "C" import ( @@ -70,7 +74,7 @@ func (s *secureReadCloser) Close() error { } type secureWriteCloser struct { - url unsafe.Pointer + handle unsafe.Pointer closer func() offset int @@ -80,7 +84,7 @@ type secureWriteCloser struct { var _ io.WriteCloser = (*secureWriteCloser)(nil) func (s *secureWriteCloser) Write(p []byte) (int, error) { - count := int(C.iosWriteToURL(s.url, C.CBytes(p), C.int(len(p)))) + count := int(C.iosWriteToFile(s.handle, C.CBytes(p), C.int(len(p)))) s.offset += count return count, nil @@ -90,13 +94,26 @@ func (s *secureWriteCloser) Close() error { if s.closer != nil { s.closer() } - s.url = nil + C.iosCloseFileWriter(s.handle) + s.handle = nil + return nil +} + +func deleteURI(u fyne.URI) error { + if u.Scheme() != "file" { + return errors.New("cannot delete from " + u.Scheme() + " scheme on iOS") + } + + cStr := C.CString(u.Path()) + defer C.free(unsafe.Pointer(cStr)) + + C.iosDeletePath(cStr) return nil } func existsURI(u fyne.URI) (bool, error) { if u.Scheme() != "file" { - return true, errors.New("cannot check existence of " + u.Scheme() + " on iOS") + return true, errors.New("cannot check existence of " + u.Scheme() + " scheme on iOS") } cStr := C.CString(u.Path()) @@ -130,7 +147,8 @@ func nativeFileSave(f *fileSave) (io.WriteCloser, error) { url := C.iosParseUrl(cStr) - fileStruct := &secureWriteCloser{url: url, closer: f.done} + handle := C.iosOpenFileWriter(url) + fileStruct := &secureWriteCloser{handle: handle, closer: f.done} return fileStruct, nil } diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.m b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.m index e7474d2..d7062fe 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.m +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/file_ios.m @@ -5,6 +5,11 @@ #import +void iosDeletePath(const char* path) { + NSString *pathStr = [NSString stringWithUTF8String:path]; + [[NSFileManager defaultManager] removeItemAtPath:pathStr error:nil]; +} + bool iosExistsPath(const char* path) { NSString *pathStr = [NSString stringWithUTF8String:path]; return [[NSFileManager defaultManager] fileExistsAtPath:pathStr]; @@ -23,13 +28,26 @@ bool iosExistsPath(const char* path) { return data.bytes; } -const int iosWriteToURL(void* urlPtr, const void* bytes, int len) { +const void* iosOpenFileWriter(void* urlPtr) { NSURL* url = (NSURL*)urlPtr; + [[NSFileManager defaultManager] createFileAtPath:url.path contents:nil attributes:nil]; + + NSError *err = nil; + // TODO handle error + return [NSFileHandle fileHandleForWritingToURL:url error:&err]; +} + +void iosCloseFileWriter(void* handlePtr) { + NSFileHandle* handle = (NSFileHandle*)handlePtr; + + [handle closeFile]; +} + + +const int iosWriteToFile(void* handlePtr, const void* bytes, int len) { + NSFileHandle* handle = (NSFileHandle*)handlePtr; NSData *data = [NSData dataWithBytes:bytes length:len]; - BOOL ok = [data writeToURL:url atomically:YES]; - if (!ok) { - return 0; - } + [handle writeData:data]; return data.length; } diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/folder_ios.m b/vendor/fyne.io/fyne/v2/internal/driver/mobile/folder_ios.m index f895dad..da60cc0 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/folder_ios.m +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/folder_ios.m @@ -9,7 +9,7 @@ NSString *urlStr = [NSString stringWithUTF8String:urlCstr]; NSURL *url = [NSURL URLWithString:urlStr]; - return [[NSFileManager defaultManager] contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:nil error:nil]; + return [[NSFileManager defaultManager] contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:0 error:nil]; } bool iosCanList(const char* url) { @@ -26,5 +26,5 @@ bool iosCreateListable(const char* urlCstr) { char* iosList(const char* url) { NSArray *children = listForURL(url); - return [[children componentsJoinedByString:@"|"] UTF8String]; + return (char *) [[children componentsJoinedByString:@"|"] UTF8String]; } diff --git a/vendor/fyne.io/fyne/v2/internal/driver/mobile/repository.go b/vendor/fyne.io/fyne/v2/internal/driver/mobile/repository.go index d719f77..1e52f89 100644 --- a/vendor/fyne.io/fyne/v2/internal/driver/mobile/repository.go +++ b/vendor/fyne.io/fyne/v2/internal/driver/mobile/repository.go @@ -40,8 +40,7 @@ func (m *mobileFileRepo) CreateListable(u fyne.URI) error { } func (m *mobileFileRepo) Delete(u fyne.URI) error { - // TODO: implement this - return repository.ErrOperationNotSupported + return deleteURI(u) } func (m *mobileFileRepo) Destroy(string) { diff --git a/vendor/fyne.io/fyne/v2/layout/formlayout.go b/vendor/fyne.io/fyne/v2/layout/formlayout.go index 553b116..4edab50 100644 --- a/vendor/fyne.io/fyne/v2/layout/formlayout.go +++ b/vendor/fyne.io/fyne/v2/layout/formlayout.go @@ -109,8 +109,13 @@ func (f *formLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { } if i+1 < len(objects) { - objects[i+1].Move(fyne.NewPos(padding+tableRow[0].Width, y)) - objects[i+1].Resize(fyne.NewSize(tableRow[1].Width, tableRow[0].Height)) + if _, ok := objects[i+1].(*canvas.Text); ok { + objects[i+1].Move(fyne.NewPos(padding+tableRow[0].Width+innerPadding, y+innerPadding)) + objects[i+1].Resize(fyne.NewSize(tableRow[1].Width-innerPadding*2, objects[i+1].MinSize().Height)) + } else { + objects[i+1].Move(fyne.NewPos(padding+tableRow[0].Width, y)) + objects[i+1].Resize(fyne.NewSize(tableRow[1].Width, tableRow[0].Height)) + } } row++ } diff --git a/vendor/fyne.io/fyne/v2/widget/richtext.go b/vendor/fyne.io/fyne/v2/widget/richtext.go index 1937594..049c023 100644 --- a/vendor/fyne.io/fyne/v2/widget/richtext.go +++ b/vendor/fyne.io/fyne/v2/widget/richtext.go @@ -219,6 +219,31 @@ func (t *RichText) cachedSegmentVisual(seg RichTextSegment, offset int) fyne.Can return vis } +func (t *RichText) cleanVisualCache() { + t.cacheLock.Lock() + defer t.cacheLock.Unlock() + if len(t.visualCache) <= len(t.Segments) { + return + } + var deletingSegs []RichTextSegment + for seg1 := range t.visualCache { + found := false + for _, seg2 := range t.Segments { + if seg1 == seg2 { + found = true + break + } + } + if !found { + // cached segment is not currently in t.Segments, clear it + deletingSegs = append(deletingSegs, seg1) + } + } + for _, seg := range deletingSegs { + delete(t.visualCache, seg) + } +} + // insertAt inserts the text at the specified position func (t *RichText) insertAt(pos int, runes string) { index := 0 @@ -712,6 +737,8 @@ func (r *textRenderer) Refresh() { r.Layout(r.obj.Size()) canvas.Refresh(r.obj.super()) + + r.obj.cleanVisualCache() } func (r *textRenderer) layoutRow(texts []fyne.CanvasObject, align fyne.TextAlign, xPos, yPos, lineWidth float32) (float32, float32) { diff --git a/vendor/fyne.io/fyne/v2/widget/select.go b/vendor/fyne.io/fyne/v2/widget/select.go index d268eb2..5aaed0b 100644 --- a/vendor/fyne.io/fyne/v2/widget/select.go +++ b/vendor/fyne.io/fyne/v2/widget/select.go @@ -248,14 +248,17 @@ func (s *Select) showPopUp() { } c := fyne.CurrentApp().Driver().CanvasForObject(s.super()) - s.popUp = NewPopUpMenu(fyne.NewMenu("", items...), c) - s.popUp.alignment = s.Alignment - s.popUp.ShowAtPosition(s.popUpPos()) - s.popUp.Resize(fyne.NewSize(s.Size().Width, s.popUp.MinSize().Height)) - s.popUp.OnDismiss = func() { - s.popUp.Hide() - s.popUp = nil + pop := NewPopUpMenu(fyne.NewMenu("", items...), c) + pop.alignment = s.Alignment + pop.ShowAtPosition(s.popUpPos()) + pop.Resize(fyne.NewSize(s.Size().Width, pop.MinSize().Height)) + pop.OnDismiss = func() { + pop.Hide() + if s.popUp == pop { + s.popUp = nil + } } + s.popUp = pop } func (s *Select) tapAnimation() { diff --git a/vendor/fyne.io/fyne/v2/widget/slider.go b/vendor/fyne.io/fyne/v2/widget/slider.go index 9a2de69..3a0467f 100644 --- a/vendor/fyne.io/fyne/v2/widget/slider.go +++ b/vendor/fyne.io/fyne/v2/widget/slider.go @@ -256,15 +256,29 @@ func (s *Slider) clampValueToRange() { return } - rem := math.Mod(s.Value, s.Step) + // only work with positive mods so the maths holds up + value := s.Value + step := s.Step + invert := false + if s.Value < 0 { + invert = true + value = -value + } + + rem := math.Mod(value, step) if rem == 0 { return } - min := s.Value - rem - if rem > s.Step/2 { + min := value - rem + if rem > step/2 { min += s.Step } - s.Value = min + + if invert { + s.Value = -min + } else { + s.Value = min + } } func (s *Slider) updateValue(ratio float64) { diff --git a/vendor/modules.txt b/vendor/modules.txt index 5fedab9..60cbca4 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,4 +1,4 @@ -# fyne.io/fyne/v2 v2.4.4 +# fyne.io/fyne/v2 v2.4.5 ## explicit; go 1.17 fyne.io/fyne/v2 fyne.io/fyne/v2/app