diff --git a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h index 030084cfb1..397d815edb 100644 --- a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h +++ b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h @@ -142,7 +142,9 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) NSString * _Nullable initialPrimaryLanguage; +- (void)resetInitialPrimaryLanguage; - (void)dropAutocorrection; +- (bool)isCurrentlyEmoji; @end diff --git a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm index c1f4cd93ea..ea0a6613c7 100644 --- a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm +++ b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm @@ -83,7 +83,6 @@ @interface ASPanningOverriddenUITextView : ASTextKitComponentsTextView { BOOL _shouldBlockPanGesture; - BOOL _initializedPrimaryInputLanguage; } @property (nonatomic, copy) bool (^shouldCopy)(); @@ -93,6 +92,7 @@ @property (nonatomic, copy) void (^backspaceWhileEmpty)(); @property (nonatomic, strong) NSString * _Nullable initialPrimaryLanguage; +@property (nonatomic) bool initializedPrimaryInputLanguage; @end @@ -200,6 +200,10 @@ } } +- (UIKeyboardAppearance)keyboardAppearance { + return [super keyboardAppearance]; +} + - (UITextInputMode *)textInputMode { if (!_initializedPrimaryInputLanguage) { _initializedPrimaryInputLanguage = true; @@ -642,6 +646,14 @@ } } +- (void)setInitialPrimaryLanguage:(NSString *)initialPrimaryLanguage { + ((ASPanningOverriddenUITextView *)_textKitComponents.textView).initialPrimaryLanguage = initialPrimaryLanguage; +} + +- (void)resetInitialPrimaryLanguage { + ((ASPanningOverriddenUITextView *)_textKitComponents.textView).initializedPrimaryInputLanguage = false; +} + - (void)dropAutocorrection { _isPreservingSelection = YES; // Used in -textViewDidChangeSelection: to avoid informing our delegate about our preservation. _isPreservingText = YES; @@ -664,6 +676,15 @@ _isPreservingText = NO; } +- (bool)isCurrentlyEmoji { + NSString *value = [[UITextInputMode currentInputMode] primaryLanguage]; + if ([value isEqualToString:@"emoji"]) { + return true; + } else { + return false; + } +} + #pragma mark - Core - (void)_updateDisplayingPlaceholder { diff --git a/submodules/Display/Display/EditableTextNode.swift b/submodules/Display/Display/EditableTextNode.swift index aa1f1add3c..aaba8b9ac2 100644 --- a/submodules/Display/Display/EditableTextNode.swift +++ b/submodules/Display/Display/EditableTextNode.swift @@ -11,14 +11,8 @@ public class EditableTextNode: ASEditableTextNode { guard newValue != self.keyboardAppearance else { return } - let resigning = self.isFirstResponder() - if resigning { - self.resignFirstResponder() - } super.keyboardAppearance = newValue - if resigning { - self.becomeFirstResponder() - } + self.textView.reloadInputViews() } } } diff --git a/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift b/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift index 97668b0b1c..78c4725b98 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift @@ -645,8 +645,10 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { let keyboardAppearance = interfaceState.theme.chat.inputPanel.keyboardColor.keyboardAppearance if let textInputNode = self.textInputNode, textInputNode.keyboardAppearance != keyboardAppearance, textInputNode.isFirstResponder() { - textInputNode.resignFirstResponder() - textInputNode.becomeFirstResponder() + if textInputNode.isCurrentlyEmoji() { + textInputNode.initialPrimaryLanguage = "emoji" + textInputNode.resetInitialPrimaryLanguage() + } textInputNode.keyboardAppearance = keyboardAppearance }