diff --git a/libcef/browser/osr/render_widget_host_view_osr.cc b/libcef/browser/osr/render_widget_host_view_osr.cc index ffab039afcc9f77801dc478645fabf3869fbbde2..3f7e122df0c290e3996d720b2acee725c269fb36 100644 --- a/libcef/browser/osr/render_widget_host_view_osr.cc +++ b/libcef/browser/osr/render_widget_host_view_osr.cc @@ -1942,19 +1942,6 @@ bool CefRenderWidgetHostViewOSR::InstallTransparency() { } void CefRenderWidgetHostViewOSR::WasResized() { -#if defined(OHOS_INPUT_EVENTS) - UpdateEditBounds(); - if (is_select_text_) { - auto processedOffset = HandleCursorOffset(); - CefRefPtr handler = - browser_impl_->GetClient()->GetRenderHandler(); - CHECK(handler); - handler->OnCursorUpdate( - browser_impl_->GetBrowser(), - CefRect(processedOffset.first, processedOffset.second, - focus_rect_width_, focus_rect_height_)); - } -#endif // defined(OHOS_INPUT_EVENTS) // Only one resize will be in-flight at a time. if (hold_resize_) { #if defined(OHOS_COMPOSITE_RENDER) @@ -1979,17 +1966,6 @@ void CefRenderWidgetHostViewOSR::SetShouldFrameSubmissionBeforeDraw( } void CefRenderWidgetHostViewOSR::WasKeyboardResized() { - UpdateEditBounds(); - if (is_select_text_) { - auto processedOffset = HandleCursorOffset(); - CefRefPtr handler = - browser_impl_->GetClient()->GetRenderHandler(); - CHECK(handler); - handler->OnCursorUpdate( - browser_impl_->GetBrowser(), - CefRect(processedOffset.first, processedOffset.second, - focus_rect_width_, focus_rect_height_)); - } // Only one resize will be in-flight at a time. if (hold_resize_) { isKeyboardResized_ = true; @@ -2671,6 +2647,14 @@ void CefRenderWidgetHostViewOSR::OnUpdateTextInputStateCalled( CefRefPtr handler = browser_impl_->GetClient()->GetRenderHandler(); CHECK(handler); + + if (UpdateEditBounds()) { + auto processedOffset = HandleCursorOffset(); + handler->OnCursorUpdate(browser_impl_->GetBrowser(), + CefRect(processedOffset.first, processedOffset.second, + focus_rect_width_, focus_rect_height_)); + } + bool is_need_reset_ime_listener = false; if (state) { int32_t current_node_id = state->node_id; @@ -3567,7 +3551,6 @@ void CefRenderWidgetHostViewOSR::SelectionBoundsChanged( CefRefPtr handler = browser_impl_->GetClient()->GetRenderHandler(); CHECK(handler); - UpdateEditBounds(); if (!is_select_text_) { handler->OnCursorUpdate(browser_impl_->GetBrowser(), @@ -3575,23 +3558,28 @@ void CefRenderWidgetHostViewOSR::SelectionBoundsChanged( focus_rect_width_, focus_rect_height_)); return; } - - auto processedOffset = HandleCursorOffset(); - handler->OnCursorUpdate(browser_impl_->GetBrowser(), - CefRect(processedOffset.first, processedOffset.second, - focus_rect_width_, focus_rect_height_)); + + if (UpdateEditBounds()) { + auto processedOffset = HandleCursorOffset(); + handler->OnCursorUpdate(browser_impl_->GetBrowser(), + CefRect(processedOffset.first, processedOffset.second, + focus_rect_width_, focus_rect_height_)); + } } -void CefRenderWidgetHostViewOSR::UpdateEditBounds() { +bool CefRenderWidgetHostViewOSR::UpdateEditBounds() { if (text_input_manager_ && text_input_manager_->GetTextInputState()) { auto state = text_input_manager_->GetTextInputState(); - CHECK(state); - CHECK(state->edit_context_control_bounds); + if (!state || !state->edit_context_control_bounds) { + return false; + } edit_bounds_x_ = state->edit_context_control_bounds->x(); edit_bounds_y_ = state->edit_context_control_bounds->y(); edit_bounds_width_ = state->edit_context_control_bounds->width(); edit_bounds_height_ = state->edit_context_control_bounds->height(); + return true; } + return false; } void CefRenderWidgetHostViewOSR::FocusedNodeChanged( diff --git a/libcef/browser/osr/render_widget_host_view_osr.h b/libcef/browser/osr/render_widget_host_view_osr.h index 5671b5e5ceaf815458ed00a58bcb33788b06caf1..f694e1021283ecfb643602d733996dfb0032721e 100644 --- a/libcef/browser/osr/render_widget_host_view_osr.h +++ b/libcef/browser/osr/render_widget_host_view_osr.h @@ -536,7 +536,7 @@ class CefRenderWidgetHostViewOSR void OnScrollOffsetChanged(); #if defined(OHOS_INPUT_EVENTS) - void UpdateEditBounds(); + bool UpdateEditBounds(); std::pair HandleCursorOffset(); void FilterScrollEventImpl(const ui::GestureEventData& gesture); #endif // defined(OHOS_INPUT_EVENTS)