core: Add UiBackend::close_virtual_keyboard

This method may be used by backends that require explicit virtual
keyboard closing.
This commit is contained in:
Kamil Jarosz 2024-07-17 16:33:01 +02:00
parent e18ae830c1
commit 53d2d16162
5 changed files with 16 additions and 1 deletions

View File

@ -91,9 +91,10 @@ pub trait UiBackend: Downcast {
// Unused, but kept in case we need it later. // Unused, but kept in case we need it later.
fn message(&self, message: &str); fn message(&self, message: &str);
// Only used on web.
fn open_virtual_keyboard(&self); fn open_virtual_keyboard(&self);
fn close_virtual_keyboard(&self);
fn language(&self) -> LanguageIdentifier; fn language(&self) -> LanguageIdentifier;
fn display_unsupported_video(&self, url: Url); fn display_unsupported_video(&self, url: Url);
@ -360,6 +361,8 @@ impl UiBackend for NullUiBackend {
fn open_virtual_keyboard(&self) {} fn open_virtual_keyboard(&self) {}
fn close_virtual_keyboard(&self) {}
fn language(&self) -> LanguageIdentifier { fn language(&self) -> LanguageIdentifier {
US_ENGLISH.clone() US_ENGLISH.clone()
} }

View File

@ -197,12 +197,18 @@ impl<'gc> FocusTracker<'gc> {
if let Some(text_field) = self.get_as_edit_text() { if let Some(text_field) = self.get_as_edit_text() {
if text_field.is_editable() { if text_field.is_editable() {
if !text_field.movie().is_action_script_3() { if !text_field.movie().is_action_script_3() {
// TODO This logic is inaccurate and addresses
// only setting the focus programmatically.
let length = text_field.text_length(); let length = text_field.text_length();
text_field text_field
.set_selection(Some(TextSelection::for_range(0, length)), context.gc()); .set_selection(Some(TextSelection::for_range(0, length)), context.gc());
} }
context.ui.open_virtual_keyboard(); context.ui.open_virtual_keyboard();
} else {
context.ui.close_virtual_keyboard();
} }
} else {
context.ui.close_virtual_keyboard();
} }
} }

View File

@ -310,6 +310,8 @@ impl UiBackend for DesktopUiBackend {
// Unused on desktop // Unused on desktop
fn open_virtual_keyboard(&self) {} fn open_virtual_keyboard(&self) {}
fn close_virtual_keyboard(&self) {}
fn language(&self) -> LanguageIdentifier { fn language(&self) -> LanguageIdentifier {
self.preferences.language().clone() self.preferences.language().clone()
} }

View File

@ -117,6 +117,8 @@ impl UiBackend for TestUiBackend {
fn open_virtual_keyboard(&self) {} fn open_virtual_keyboard(&self) {}
fn close_virtual_keyboard(&self) {}
fn language(&self) -> LanguageIdentifier { fn language(&self) -> LanguageIdentifier {
US_ENGLISH.clone() US_ENGLISH.clone()
} }

View File

@ -292,6 +292,8 @@ impl UiBackend for WebUiBackend {
self.js_player.open_virtual_keyboard() self.js_player.open_virtual_keyboard()
} }
fn close_virtual_keyboard(&self) {}
fn language(&self) -> LanguageIdentifier { fn language(&self) -> LanguageIdentifier {
self.language.clone() self.language.clone()
} }