Skip to content

Commit

Permalink
Fix ColorPicker virtual keyboard popup on mobile
Browse files Browse the repository at this point in the history
  • Loading branch information
syntaxerror247 committed Oct 4, 2024
1 parent 3576e84 commit abbf90a
Showing 1 changed file with 4 additions and 16 deletions.
20 changes: 4 additions & 16 deletions scene/gui/color_picker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,21 +245,7 @@ void ColorPicker::finish_shaders() {
}

void ColorPicker::set_focus_on_line_edit() {
bool has_hardware_keyboard = true;
#if defined(ANDROID_ENABLED) || defined(IOS_ENABLED)
has_hardware_keyboard = DisplayServer::get_singleton()->has_hardware_keyboard();
#endif // ANDROID_ENABLED || IOS_ENABLED
if (has_hardware_keyboard) {
callable_mp((Control *)c_text, &Control::grab_focus).call_deferred();
} else {
// A hack to avoid showing the virtual keyboard when the ColorPicker window popups and
// no hardware keyboard is detected on Android and IOS.
// This will only focus the LineEdit without editing, the virtual keyboard will only be visible when
// we touch the LineEdit to enter edit mode.
callable_mp(c_text, &LineEdit::set_editable).call_deferred(false);
callable_mp((Control *)c_text, &Control::grab_focus).call_deferred();
callable_mp(c_text, &LineEdit::set_editable).call_deferred(true);
}
callable_mp((Control *)c_text, &Control::grab_focus).call_deferred();
}

void ColorPicker::_update_controls() {
Expand Down Expand Up @@ -2103,7 +2089,9 @@ void ColorPickerButton::pressed() {
float v_offset = show_above ? -minsize.y : get_size().y;
popup->set_position(get_screen_position() + Vector2(h_offset, v_offset));
popup->popup();
picker->set_focus_on_line_edit();
if (DisplayServer::get_singleton()->has_hardware_keyboard()) {
picker->set_focus_on_line_edit();
}
}

void ColorPickerButton::_notification(int p_what) {
Expand Down

0 comments on commit abbf90a

Please sign in to comment.