From e351e24f0bea83da05725b90df46537de90781c5 Mon Sep 17 00:00:00 2001 From: ia_oi Date: Tue, 31 Dec 2024 15:17:42 +0800 Subject: [PATCH 1/3] fic cursor location compute Signed-off-by: ia_oi --- libcef/browser/osr/render_widget_host_view_osr.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libcef/browser/osr/render_widget_host_view_osr.cc b/libcef/browser/osr/render_widget_host_view_osr.cc index ffab039af..eb982005e 100644 --- a/libcef/browser/osr/render_widget_host_view_osr.cc +++ b/libcef/browser/osr/render_widget_host_view_osr.cc @@ -1903,6 +1903,9 @@ void CefRenderWidgetHostViewOSR::OnRenderFrameMetadataChangedAfterActivation( } #ifdef OHOS_CLIPBOARD + if (metadata.selection.start == metadata.selection.end) { + is_select_text_ = false; + } if (clipped_selection_bounds_ != metadata.clipped_selection_bounds) { clipped_selection_bounds_ = metadata.clipped_selection_bounds; selection_controller_client_->UpdateClientClippedSelectionBounds(clipped_selection_bounds_); -- Gitee From 993bb49960008ee3553d5d7869b96ed6c617343b Mon Sep 17 00:00:00 2001 From: ia_oi Date: Sat, 4 Jan 2025 14:30:10 +0800 Subject: [PATCH 2/3] fix cursor location cpmpute Signed-off-by: ia_oi --- .../osr/render_widget_host_view_osr.cc | 57 +++++++------------ .../browser/osr/render_widget_host_view_osr.h | 2 +- 2 files changed, 22 insertions(+), 37 deletions(-) diff --git a/libcef/browser/osr/render_widget_host_view_osr.cc b/libcef/browser/osr/render_widget_host_view_osr.cc index eb982005e..7333c8656 100644 --- a/libcef/browser/osr/render_widget_host_view_osr.cc +++ b/libcef/browser/osr/render_widget_host_view_osr.cc @@ -1903,9 +1903,6 @@ void CefRenderWidgetHostViewOSR::OnRenderFrameMetadataChangedAfterActivation( } #ifdef OHOS_CLIPBOARD - if (metadata.selection.start == metadata.selection.end) { - is_select_text_ = false; - } if (clipped_selection_bounds_ != metadata.clipped_selection_bounds) { clipped_selection_bounds_ = metadata.clipped_selection_bounds; selection_controller_client_->UpdateClientClippedSelectionBounds(clipped_selection_bounds_); @@ -1945,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) @@ -1982,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; @@ -2674,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; @@ -3570,7 +3551,6 @@ void CefRenderWidgetHostViewOSR::SelectionBoundsChanged( CefRefPtr handler = browser_impl_->GetClient()->GetRenderHandler(); CHECK(handler); - UpdateEditBounds(); if (!is_select_text_) { handler->OnCursorUpdate(browser_impl_->GetBrowser(), @@ -3578,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 5671b5e5c..f694e1021 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) -- Gitee From 6877251d7b4c22ecf45bf03691e9d5fa028111dc Mon Sep 17 00:00:00 2001 From: ia_oi Date: Sat, 4 Jan 2025 14:36:58 +0800 Subject: [PATCH 3/3] fix cursor location cpmpute Signed-off-by: ia_oi --- libcef/browser/osr/render_widget_host_view_osr.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libcef/browser/osr/render_widget_host_view_osr.cc b/libcef/browser/osr/render_widget_host_view_osr.cc index 7333c8656..3f7e122df 100644 --- a/libcef/browser/osr/render_widget_host_view_osr.cc +++ b/libcef/browser/osr/render_widget_host_view_osr.cc @@ -2648,7 +2648,7 @@ void CefRenderWidgetHostViewOSR::OnUpdateTextInputStateCalled( browser_impl_->GetClient()->GetRenderHandler(); CHECK(handler); - if(UpdateEditBounds()) { + if (UpdateEditBounds()) { auto processedOffset = HandleCursorOffset(); handler->OnCursorUpdate(browser_impl_->GetBrowser(), CefRect(processedOffset.first, processedOffset.second, @@ -3559,7 +3559,7 @@ void CefRenderWidgetHostViewOSR::SelectionBoundsChanged( return; } - if(UpdateEditBounds()) { + if (UpdateEditBounds()) { auto processedOffset = HandleCursorOffset(); handler->OnCursorUpdate(browser_impl_->GetBrowser(), CefRect(processedOffset.first, processedOffset.second, @@ -3570,7 +3570,7 @@ void CefRenderWidgetHostViewOSR::SelectionBoundsChanged( bool CefRenderWidgetHostViewOSR::UpdateEditBounds() { if (text_input_manager_ && text_input_manager_->GetTextInputState()) { auto state = text_input_manager_->GetTextInputState(); - if(!state || !state->edit_context_control_bounds) { + if (!state || !state->edit_context_control_bounds) { return false; } edit_bounds_x_ = state->edit_context_control_bounds->x(); -- Gitee