summaryrefslogtreecommitdiffstats
path: root/platform/ios
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios')
-rw-r--r--platform/ios/display_server_ios.mm9
-rw-r--r--platform/ios/keyboard_input_view.mm30
2 files changed, 26 insertions, 13 deletions
diff --git a/platform/ios/display_server_ios.mm b/platform/ios/display_server_ios.mm
index a454dd5ba0..802fbefc0d 100644
--- a/platform/ios/display_server_ios.mm
+++ b/platform/ios/display_server_ios.mm
@@ -91,6 +91,7 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode
ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver));
memdelete(rendering_context);
rendering_context = nullptr;
+ r_error = ERR_UNAVAILABLE;
return;
}
@@ -107,7 +108,13 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode
rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode);
rendering_device = memnew(RenderingDevice);
- rendering_device->initialize(rendering_context, MAIN_WINDOW_ID);
+ if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) {
+ rendering_device = nullptr;
+ memdelete(rendering_context);
+ rendering_context = nullptr;
+ r_error = ERR_UNAVAILABLE;
+ return;
+ }
rendering_device->screen_create(MAIN_WINDOW_ID);
RendererCompositorRD::make_current();
diff --git a/platform/ios/keyboard_input_view.mm b/platform/ios/keyboard_input_view.mm
index 8b614662b7..4067701a41 100644
--- a/platform/ios/keyboard_input_view.mm
+++ b/platform/ios/keyboard_input_view.mm
@@ -149,23 +149,18 @@
return;
}
+ NSString *substringToDelete = nil;
if (self.previousSelectedRange.length == 0) {
- // We are deleting all text before cursor if no range was selected.
- // This way any inserted or changed text will be updated.
- NSString *substringToDelete = [self.previousText substringToIndex:self.previousSelectedRange.location];
- [self deleteText:substringToDelete.length];
+ // Get previous text to delete.
+ substringToDelete = [self.previousText substringToIndex:self.previousSelectedRange.location];
} else {
- // If text was previously selected
- // we are sending only one `backspace`.
- // It will remove all text from text input.
+ // If text was previously selected we are sending only one `backspace`. It will remove all text from text input.
[self deleteText:1];
}
- NSString *substringToEnter;
-
+ NSString *substringToEnter = nil;
if (self.selectedRange.length == 0) {
- // If previous cursor had a selection
- // we have to calculate an inserted text.
+ // If previous cursor had a selection we have to calculate an inserted text.
if (self.previousSelectedRange.length != 0) {
NSInteger rangeEnd = self.selectedRange.location + self.selectedRange.length;
NSInteger rangeStart = MIN(self.previousSelectedRange.location, self.selectedRange.location);
@@ -187,7 +182,18 @@
substringToEnter = [self.text substringWithRange:self.selectedRange];
}
- [self enterText:substringToEnter];
+ NSInteger skip = 0;
+ if (substringToDelete != nil) {
+ for (NSInteger i = 0; i < MIN([substringToDelete length], [substringToEnter length]); i++) {
+ if ([substringToDelete characterAtIndex:i] == [substringToEnter characterAtIndex:i]) {
+ skip++;
+ } else {
+ break;
+ }
+ }
+ [self deleteText:[substringToDelete length] - skip]; // Delete changed part of previous text.
+ }
+ [self enterText:[substringToEnter substringFromIndex:skip]]; // Enter changed part of new text.
self.previousText = self.text;
self.previousSelectedRange = self.selectedRange;