Browse Source

Fixed clipboard tests on iOS

Sam Lantinga 2 weeks ago
parent
commit
7563a3e17d
2 changed files with 16 additions and 4 deletions
  1. 14 4
      src/video/uikit/SDL_uikitclipboard.m
  2. 2 0
      src/video/uikit/SDL_uikitvideo.h

+ 14 - 4
src/video/uikit/SDL_uikitclipboard.m

@@ -33,7 +33,14 @@ bool UIKit_SetClipboardText(SDL_VideoDevice *_this, const char *text)
     return SDL_SetError("The clipboard is not available on tvOS");
 #else
     @autoreleasepool {
-        [UIPasteboard generalPasteboard].string = @(text);
+        SDL_UIKitVideoData *data = (__bridge SDL_UIKitVideoData *)_this->internal;
+        data.setting_clipboard = true;
+        if (text && *text) {
+            [UIPasteboard generalPasteboard].string = @(text);
+        } else {
+            [UIPasteboard generalPasteboard].items = nil;
+        }
+        data.setting_clipboard = false;
         return true;
     }
 #endif
@@ -61,7 +68,7 @@ bool UIKit_HasClipboardText(SDL_VideoDevice *_this)
 {
     @autoreleasepool {
 #ifndef SDL_PLATFORM_TVOS
-        if ([UIPasteboard generalPasteboard].string != nil) {
+        if ([UIPasteboard generalPasteboard].hasStrings) {
             return true;
         }
 #endif
@@ -80,11 +87,14 @@ void UIKit_InitClipboard(SDL_VideoDevice *_this)
                                           object:nil
                                            queue:nil
                                       usingBlock:^(NSNotification *note) {
-                                        // TODO: compute mime types
-                                        SDL_SendClipboardUpdate(false, NULL, 0);
+                                        if (!data.setting_clipboard) {
+                                            // TODO: compute mime types
+                                            SDL_SendClipboardUpdate(false, NULL, 0);
+                                        }
                                       }];
 
         data.pasteboardObserver = observer;
+        data.setting_clipboard = false;
     }
 #endif
 }

+ 2 - 0
src/video/uikit/SDL_uikitvideo.h

@@ -31,6 +31,8 @@
 
 @property(nonatomic, assign) id pasteboardObserver;
 
+@property(nonatomic, assign) bool setting_clipboard;
+
 @end
 
 #ifdef SDL_PLATFORM_VISIONOS