From 21f330ee958d89f0244b1be405dc554bb168d8e3 Mon Sep 17 00:00:00 2001 From: v-saha Date: Thu, 9 Feb 2023 21:30:12 +0530 Subject: [PATCH] [M108 Migration] Bring up Selection Controller 1. Adjusting selection handle's coordinates to current orientation for mouse move and other changes. 2. Selected Text shouldn't be removed when H/W back button is pressed. 3. Adding ewk_settings_extra_feature_(set|get). 4. Use LongPressStarted as a reason of selection change after long press. References: https://review.tizen.org/gerrit/281503 https://review.tizen.org/gerrit/283776 Change-Id: I865c46a8044cd430bd9d6a982f935e2724594da6 Signed-off-by: v-saha --- .../renderer_host/render_widget_host_view_aura.cc | 7 ++ .../common/web_preferences/web_preferences.cc | 10 ++ .../common/web_preferences/web_preferences.h | 3 + .../rwhv_aura_offscreen_helper_efl.cc | 135 ++++++++++++++++++++- .../renderer_host/rwhv_aura_offscreen_helper_efl.h | 8 ++ .../browser/selection/selection_controller_efl.cc | 101 ++++++++++----- .../browser/selection/selection_controller_efl.h | 12 +- .../browser/selection/selection_magnifier_efl.cc | 9 ++ .../browser/selection/selection_magnifier_efl.h | 1 + .../ui/ozone/platform/efl/im_context_efl.cc | 5 +- tizen_src/ewk/efl_integration/eweb_view.cc | 11 +- .../private/ewk_settings_private.cc | 7 ++ .../efl_integration/private/ewk_settings_private.h | 88 +++++--------- .../ewk/efl_integration/public/ewk_settings.cc | 70 +++++------ 14 files changed, 328 insertions(+), 139 deletions(-) diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index 80532e1..5f25eea 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -2148,6 +2148,13 @@ void RenderWidgetHostViewAura::OnTouchEvent(ui::TouchEvent* event) { void RenderWidgetHostViewAura::OnGestureEvent(ui::GestureEvent* event) { last_pointer_type_ = event->details().primary_pointer_type(); +#if BUILDFLAG(IS_EFL) + // Gesture event will be processed and forwarded via offscreen helper. + if (offscreen_helper_) { + offscreen_helper_->OnGestureEvent(event); + return; + } +#endif event_handler_->OnGestureEvent(event); } diff --git a/third_party/blink/common/web_preferences/web_preferences.cc b/third_party/blink/common/web_preferences/web_preferences.cc index f8dfa24..eeb09a4 100644 --- a/third_party/blink/common/web_preferences/web_preferences.cc +++ b/third_party/blink/common/web_preferences/web_preferences.cc @@ -14,6 +14,10 @@ #include "tizen_src/chromium_impl/tizen/system_info.h" #include "ui/base/ui_base_switches_util.h" +#if BUILDFLAG(IS_EFL) +#include "tizen/system_info.h" +#endif + namespace { bool IsTouchDragDropEnabled() { @@ -237,6 +241,12 @@ WebPreferences::WebPreferences() shrinks_viewport_contents_to_fit = true; link_effect_enabled = true; } + + if (IsMobileProfile() || IsDesktopProfile()) { + text_zoom_enabled = true; + selection_magnifier_enabled = true; + long_press_enabled = true; + } #endif } diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h index 52d345f..251183c 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences.h +++ b/third_party/blink/public/common/web_preferences/web_preferences.h @@ -215,6 +215,9 @@ struct BLINK_COMMON_EXPORT WebPreferences { bool link_effect_enabled = false; bool atk_enabled; bool force_enable_zoom = false; + bool text_zoom_enabled = false; + bool selection_magnifier_enabled = false; + bool long_press_enabled = false; #endif bool double_tap_to_zoom_enabled; diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc index 00af2e1..f0d6b3c 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc @@ -8,6 +8,7 @@ #include #include "base/base_switches.h" +#include "content/browser/renderer_host/edge_effect.h" #include "content/browser/renderer_host/render_widget_host_view_aura.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/browser/web_contents/web_contents_view_aura.h" @@ -45,6 +46,30 @@ namespace content { +namespace { + +blink::WebGestureEvent MakeWebGestureEventFromUIEvent( + const ui::GestureEvent& event) { + return ui::CreateWebGestureEvent( + event.details(), event.time_stamp(), event.location_f(), + event.root_location_f(), event.flags(), event.unique_touch_event_id()); +} + +ui::LatencyInfo CreateLatencyInfo(const blink::WebInputEvent& event) { + if (!event.TimeStamp().since_origin().InMicroseconds()) + return ui::LatencyInfo(); + + // The latency number should only be added if the timestamp is valid. + ui::LatencyInfo latency_info; + const int64_t time_micros = event.TimeStamp().since_origin().InMicroseconds(); + latency_info.AddLatencyNumberWithTimestamp( + ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, + base::TimeTicks() + base::Microseconds(time_micros)); + return latency_info; +} + +} // namespace + // If the first frame is not prepared after load is finished, // delay getting the snapshot by 100ms. static const int kSnapshotProcessDelay = 100; @@ -125,7 +150,13 @@ class RenderWidgetHostHelperAura : public RenderWidgetHostHelper { selection_start, selection_end); } - bool ExistsSelectedText() override { return false; } + bool ExistsSelectedText() override { + auto* controller = rwhv_helper_->GetSelectionController(); + if (!controller) + return false; + + return controller->ExistsSelectedText(); + } bool ImeHandleKeyEventEnabled() override { return true; } @@ -1234,4 +1265,106 @@ bool RWHVAuraOffscreenHelperEfl::TouchEventsEnabled() { return false; } +EdgeEffect& RWHVAuraOffscreenHelperEfl::EnsureEdgeEffect() { + if (!edge_effect_) + edge_effect_ = base::WrapUnique(new EdgeEffect(content_image_)); + return *edge_effect_.get(); +} + +void RWHVAuraOffscreenHelperEfl::HandleGestureBegin() { + EnsureEdgeEffect().Enable(); +} + +void RWHVAuraOffscreenHelperEfl::HandleGestureEnd() { + // Edge effect should be disabled upon scroll end/fling start. + // Gesture end comes just after those events, so it's disabled here. + EnsureEdgeEffect().Disable(); +} + +void RWHVAuraOffscreenHelperEfl::OnGestureEvent(ui::GestureEvent* event) { + if (event->type() == ui::ET_GESTURE_BEGIN) + HandleGestureBegin(); + else if (event->type() == ui::ET_GESTURE_END) + HandleGestureEnd(); + + blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUIEvent(*event); + gesture_event.SetPositionInWidget(event->location_f()); + gesture_event.SetPositionInScreen(event->root_location_f()); + SendGestureEvent(gesture_event); + + event->SetHandled(); +} + +void RWHVAuraOffscreenHelperEfl::SendGestureEvent( + blink::WebGestureEvent& event) { + HandleGesture(event); + blink::WebInputEvent::Type event_type = event.GetType(); + if (event_type == blink::WebInputEvent::Type::kGestureScrollUpdate) + return; + + if (event_type != blink::WebInputEvent::Type::kUndefined) { + rwhv_aura_->host()->ForwardGestureEventWithLatencyInfo( + event, CreateLatencyInfo(event)); + } +} + +void RWHVAuraOffscreenHelperEfl::HandleGesture(blink::WebGestureEvent& event) { + SelectionControllerEfl* controller = GetSelectionController(); + if (controller) + controller->HandleGesture(event); + + blink::WebInputEvent::Type event_type = event.GetType(); + RenderWidgetHostOwnerDelegate* owner_delegate = + rwhv_aura_->host()->owner_delegate(); + if (!owner_delegate) + return; + + if (!owner_delegate->GetWebkitPreferencesForWidget().text_zoom_enabled && + (event_type == blink::WebInputEvent::Type::kGesturePinchBegin || + event_type == blink::WebInputEvent::Type::kGesturePinchEnd)) { + return; + } + + if (!owner_delegate->GetWebkitPreferencesForWidget() + .double_tap_to_zoom_enabled && + event_type == blink::WebInputEvent::Type::kGestureDoubleTap) { + return; + } + + if (event_type == blink::WebInputEvent::Type::kGestureTap || + event_type == blink::WebInputEvent::Type::kGestureTapCancel) { + float size = 32.0f; // Default value + +#if BUILDFLAG(IS_TIZEN) + if (IsMobileProfile()) + size = elm_config_finger_size_get() / device_scale_factor_; +#endif + + event.data.tap.width = size; + event.data.tap.height = size; + } + + if (event_type == blink::WebInputEvent::Type::kGestureTapDown) { + // Webkit does not stop a fling-scroll on tap-down. So explicitly send an + // event to stop any in-progress flings. + blink::WebGestureEvent fling_cancel = event; + fling_cancel.SetType(blink::WebInputEvent::Type::kGestureFlingCancel); + fling_cancel.SetSourceDevice(blink::WebGestureDevice::kTouchscreen); + SendGestureEvent(fling_cancel); + } else if (event_type == blink::WebInputEvent::Type::kGestureScrollUpdate) { + if (event.data.scroll_update.delta_x < 0) + EnsureEdgeEffect().Hide("edge,left"); + else if (event.data.scroll_update.delta_x > 0) + EnsureEdgeEffect().Hide("edge,right"); + if (event.data.scroll_update.delta_y < 0) + EnsureEdgeEffect().Hide("edge,top"); + else if (event.data.scroll_update.delta_y > 0) + EnsureEdgeEffect().Hide("edge,bottom"); + } else if (event_type == blink::WebInputEvent::Type::kGesturePinchBegin) { + EnsureEdgeEffect().Disable(); + } else if (event_type == blink::WebInputEvent::Type::kGesturePinchEnd) { + EnsureEdgeEffect().Enable(); + } +} + } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h index 3d47eb6..8e6da42 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h @@ -49,6 +49,7 @@ class RenderWidgetHostViewAura; class ScreenshotCapturedCallback; class WebContents; class WebContentsDelegate; +class EdgeEffect; class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { public: @@ -119,6 +120,12 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { void DidGetContentSnapshot(const SkBitmap& bitmap, int request_id); RenderWidgetHostViewAura* rwhva() { return rwhv_aura_; } + void OnGestureEvent(ui::GestureEvent* event); + EdgeEffect& EnsureEdgeEffect(); + void HandleGestureBegin(); + void HandleGestureEnd(); + void SendGestureEvent(blink::WebGestureEvent& event); + void HandleGesture(blink::WebGestureEvent& event); void OnMouseOrTouchEvent(ui::Event* event); void DidHandleKeyEvent(blink::WebInputEvent::Type input_event_type, bool processed); @@ -232,6 +239,7 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { OnFocusCallback on_focus_out_callback_; bool is_content_editable_ = false; + std::unique_ptr edge_effect_; }; } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc index fd9168e..92651297 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc +++ b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc @@ -13,9 +13,9 @@ #include "content/browser/web_contents/web_contents_impl.h" #include "content/browser/web_contents/web_contents_impl_efl.h" #include "content/public/browser/context_menu_params.h" -#include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "ui/base/clipboard/clipboard_helper_efl.h" +#include "ui/display/device_display_info_efl.h" #include "ui/display/screen.h" #include "ui/gfx/geometry/dip_util.h" @@ -90,7 +90,7 @@ bool SelectionControllerEfl::GetSelectionStatus() const { #if BUILDFLAG(IS_TIZEN) void SelectionControllerEfl::PlatformLanguageChanged(keynode_t* keynode, void* data) { SelectionControllerEfl* selection_controller = static_cast(data); - if (!selection_controller) + if (!selection_controller || !selection_controller->rwhva_) return; if (selection_controller->GetSelectionStatus()) @@ -159,7 +159,7 @@ void SelectionControllerEfl::OnSelectionChanged( truncated_end = gfx::ToEnclosingRect( gfx::ConvertRectToPixels(truncated_end, device_scale_factor)); - if (handle_being_dragged_ && + if (handle_being_dragged_ && dragging_handle_ && dragging_handle_->Type() != SelectionHandleEfl::HANDLE_TYPE_INPUT) { dragging_handle_->MoveObject(selection_data_->GetIsAnchorFirst() ? truncated_end.bottom_right() @@ -322,8 +322,6 @@ void SelectionControllerEfl::ShowHandleAndContextMenuIfRequired( input_handle_->Move(left.bottom_right()); input_handle_->Show(); } - start_handle_->Hide(); - end_handle_->Hide(); bool show_context_menu = IsAnyHandleVisible() && @@ -427,17 +425,46 @@ Eina_Bool SelectionControllerEfl::EcoreEventFilterCallback(void* user_data, void* /*loop_data*/, int type, void* event_info) { - if (type == ECORE_EVENT_MOUSE_MOVE) { - auto controller = static_cast(user_data); - if (!controller || !controller->dragged_handle_) - return ECORE_CALLBACK_PASS_ON; - - auto event = static_cast(event_info); - controller->dragged_handle_->UpdatePosition(gfx::Point(event->x, event->y)); - return ECORE_CALLBACK_CANCEL; + if (type != ECORE_EVENT_MOUSE_MOVE) + return ECORE_CALLBACK_PASS_ON; + + auto controller = static_cast(user_data); + if (!controller || !controller->dragged_handle_) + return ECORE_CALLBACK_PASS_ON; + + // Point from Ecore_Event_Mouse_Move event is not rotation aware, so + // we have to rotate it manually. We use display dimensions here, + // because both point from the event, and selection handle's position + // are in display coordinates (not webview). + auto event = static_cast(event_info); + display::DeviceDisplayInfoEfl display_info; + int rotation = display_info.GetRotationDegrees(); + int display_width = display_info.GetDisplayWidth(); + int display_height = display_info.GetDisplayHeight(); + gfx::Point converted_point; + switch (rotation) { + case 0: + converted_point = gfx::Point(event->x, event->y); + break; + case 90: + converted_point = gfx::Point(display_height - event->y, event->x); + break; + case 180: + converted_point = + gfx::Point(display_width - event->x, display_height - event->y); + break; + case 270: + converted_point = gfx::Point(event->y, display_width - event->x); + break; + default: + LOG(ERROR) << "Unexpected rotation value: " << rotation; + converted_point = gfx::Point(event->x, event->y); } + controller->dragged_handle_->UpdatePosition(converted_point); - return ECORE_CALLBACK_PASS_ON; + LOG(INFO) << __PRETTY_FUNCTION__ + << " : ECORE_EVENT_MOUSE_MOVE has been captured."; + return ECORE_CALLBACK_CANCEL; } void SelectionControllerEfl::HandleDragBeginNotification( @@ -567,18 +594,32 @@ void SelectionControllerEfl::GetSelectionBounds(gfx::Rect* left, void SelectionControllerEfl::HandleGesture(blink::WebGestureEvent& event) { blink::WebInputEvent::Type event_type = event.GetType(); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - if (event_type == blink::WebInputEvent::kGestureTap) { - HandlePostponedGesture(event.x, event.y, ui::ET_GESTURE_TAP); - } else if (event_type == blink::WebInputEvent::kGestureShowPress) { - HandlePostponedGesture( - event.x, event.y, ui::ET_GESTURE_SHOW_PRESS); - } else if (event_type == blink::WebInputEvent::kGestureLongPress) { - HandlePostponedGesture( - event.x, event.y, ui::ET_GESTURE_LONG_PRESS); + if (event_type == blink::WebInputEvent::Type::kGestureTap) { + HandlePostponedGesture(event.PositionInWidget().x(), + event.PositionInWidget().y(), ui::ET_GESTURE_TAP); + } else if (event_type == blink::WebInputEvent::Type::kGestureShowPress) { + HandlePostponedGesture(event.PositionInWidget().x(), + event.PositionInWidget().y(), + ui::ET_GESTURE_SHOW_PRESS); + } else if (event_type == blink::WebInputEvent::Type::kGestureLongPress) { + selection_change_reason_ = Reason::LongPressStarted; + HandlePostponedGesture(event.PositionInWidget().x(), + event.PositionInWidget().y(), + ui::ET_GESTURE_LONG_PRESS); long_mouse_press_ = true; } -#endif + + RenderWidgetHostOwnerDelegate* owner_delegate = + rwhva_->host()->owner_delegate(); + if (!owner_delegate) + return; + + if (!owner_delegate->GetWebkitPreferencesForWidget().text_zoom_enabled && + (event_type == blink::WebInputEvent::Type::kGesturePinchBegin || + event_type == blink::WebInputEvent::Type::kGesturePinchEnd)) { + return; + } + if (event_type == blink::WebInputEvent::Type::kGestureScrollBegin || event_type == blink::WebInputEvent::Type::kGesturePinchBegin) { SetControlsTemporarilyHidden(true); @@ -626,16 +667,13 @@ bool SelectionControllerEfl::HandleLongPressEvent( if (params.is_editable) { // If one long press on an empty form, do not enter selection mode. // Instead, context menu will be shown if needed for clipboard actions. -#if !defined(USE_AURA) - RenderWidgetHostViewEfl* rwhv = - static_cast(web_contents_.GetRenderWidgetHostView()); if (params.selection_text.empty() && - !(rwhv && !rwhv->IsLastAvailableTextEmpty()) && + !(rwhva_ && !rwhva_->offscreen_helper()->HasSelectableText()) && !ClipboardHelperEfl::GetInstance()->CanPasteFromSystemClipboard()) { long_mouse_press_ = false; + selection_change_reason_ = Reason::Irrelevant; return false; } -#endif SetSelectionStatus(true); SetSelectionEditable(true); if (selection_mode_ == None) @@ -933,4 +971,9 @@ bool SelectionControllerEfl::TextSelectionUp(int /*x*/, int /*y*/) { return false; } +bool SelectionControllerEfl::ExistsSelectedText() { + // Is in edit field and text is selected. + return selection_data_->IsInEditField() && + (selection_data_->GetLeftRect() != selection_data_->GetRightRect()); +} } diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h index 7f34758..50a967f 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h +++ b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h @@ -109,9 +109,6 @@ class CONTENT_EXPORT SelectionControllerEfl { bool TextSelectionDown(int x, int y); bool TextSelectionUp(int x, int y); - bool GetIsSelectionVisible() const { return is_selection_visible_; } - void SetIsSelectionVisible(const bool isVisible) { is_selection_visible_ = isVisible; } - // 'Reason' enum class enumerates all reasons that can cause // text selection changes that require changes on the status // of selection controls (handles and context menu). @@ -119,6 +116,7 @@ class CONTENT_EXPORT SelectionControllerEfl { ScrollOrZoomGestureEnded = 0, HandleDragged, HandleReleased, + LongPressStarted, LongPressMoved, LongPressEnded, Tap, @@ -147,6 +145,8 @@ class CONTENT_EXPORT SelectionControllerEfl { RenderWidgetHostViewAura* rwhva() const { return rwhva_; } content::WebContents* web_contents() const; + bool ExistsSelectedText(); + private: enum SelectionMode { None = 0, @@ -219,15 +219,13 @@ class CONTENT_EXPORT SelectionControllerEfl { std::unique_ptr magnifier_; // Helper pointer to the handle being dragged. - SelectionHandleEfl* dragging_handle_; + SelectionHandleEfl* dragging_handle_ = nullptr; // Helper pointer to the stationary handle (during dragging). - SelectionHandleEfl* stationary_handle_; + SelectionHandleEfl* stationary_handle_ = nullptr; gfx::Rect custom_visible_view_rect_; - bool is_selection_visible_ = false; - bool handle_being_dragged_ = false; bool is_caret_mode_forced_ = false; diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc index 7574dda..388e19c 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc +++ b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc @@ -8,10 +8,12 @@ #include "base/files/file_path.h" #include "base/path_service.h" +#include "content/browser/renderer_host/render_widget_host_owner_delegate.h" #include "content/browser/renderer_host/render_widget_host_view_aura.h" #include "content/browser/selection/selection_controller_efl.h" #include "content/common/paths_efl.h" #include "content/public/browser/browser_thread.h" +#include "third_party/blink/public/common/web_preferences/web_preferences.h" namespace content { @@ -189,6 +191,13 @@ void SelectionMagnifierEfl::Move(const gfx::Point& location) { } void SelectionMagnifierEfl::Show() { + RenderWidgetHostOwnerDelegate* owner_delegate = + controller_->rwhva()->host()->owner_delegate(); + if (!owner_delegate || !owner_delegate->GetWebkitPreferencesForWidget() + .selection_magnifier_enabled) { + return; + } + shown_ = true; evas_object_show(container_); #if !defined(USE_AURA) diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h index b80129d..53cf98e 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h +++ b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h @@ -9,6 +9,7 @@ #include #include +#include "content/browser/renderer_host/render_widget_host_impl.h" #include "ui/gfx/image/image_skia.h" #include "ui/gfx/geometry/point.h" diff --git a/tizen_src/chromium_impl/ui/ozone/platform/efl/im_context_efl.cc b/tizen_src/chromium_impl/ui/ozone/platform/efl/im_context_efl.cc index e728f1d..1fb583b3 100644 --- a/tizen_src/chromium_impl/ui/ozone/platform/efl/im_context_efl.cc +++ b/tizen_src/chromium_impl/ui/ozone/platform/efl/im_context_efl.cc @@ -870,13 +870,10 @@ void IMContextEfl::ProcessNextPreeditText(bool processed) { // Do not request ImeSetComposition to prevent delivering empty string // if text is selected status. bool text_selected = composition_text.text.length() == 0; -#if !defined(EWK_BRINGUP) if (rwh_helper_) { text_selected = - text_selected && rwh_helper_->GetSelectionController() && - rwh_helper_->GetSelectionController()->ExistsSelectedText(); + text_selected && rwh_helper_ && rwh_helper_->ExistsSelectedText(); } -#endif if (!text_selected) { if (HasRenderWidgetHostImpl()) { const std::vector& underlines = diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index f5f3237..3f6d9c0 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -1137,6 +1137,9 @@ void EWebView::HandleLongPressGesture( // This menu is created in renderer process and it does not now anything about // view scaling factor and it has another calling sequence, so coordinates is // not updated. + if (settings_ && !settings_->getPreferences().long_press_enabled) + return; + content::ContextMenuParams convertedParams = params; gfx::Point convertedPoint = rwhva()->offscreen_helper()->ConvertPointInViewPix( @@ -1159,13 +1162,16 @@ void EWebView::HandleLongPressGesture( } void EWebView::ShowContextMenu(const content::ContextMenuParams& params) { -#if !defined(USE_AURA) + if (!rwhva()) + return; + // This menu is created in renderer process and it does not now anything about // view scaling factor and it has another calling sequence, so coordinates is // not updated. content::ContextMenuParams convertedParams = params; gfx::Point convertedPoint = - rwhv()->ConvertPointInViewPix(gfx::Point(params.x, params.y)); + rwhva()->offscreen_helper()->ConvertPointInViewPix( + gfx::Point(params.x, params.y)); convertedParams.x = convertedPoint.x(); convertedParams.y = convertedPoint.y(); @@ -1177,7 +1183,6 @@ void EWebView::ShowContextMenu(const content::ContextMenuParams& params) { context_menu_position_ = gfx::Point(convertedParams.x, convertedParams.y); ShowContextMenuInternal(convertedParams); -#endif } void EWebView::ShowContextMenuInternal( diff --git a/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc b/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc index 0bbdaa5..6112948 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc +++ b/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc @@ -6,6 +6,13 @@ #include "net/http/http_stream_factory.h" +Ewk_Settings::Ewk_Settings(Evas_Object* evas_object, + const WebPreferences& preferences) + : m_preferences(preferences), + m_currentLegacyFontSizeMode( + EWK_LEGACY_FONT_SIZE_MODE_ONLY_IF_PIXEL_VALUES_MATCH), + m_evas_object(evas_object) {} + void Ewk_Settings::setCurrentLegacyFontSizeMode(Ewk_Legacy_Font_Size_Mode mode) { m_currentLegacyFontSizeMode = mode; } diff --git a/tizen_src/ewk/efl_integration/private/ewk_settings_private.h b/tizen_src/ewk/efl_integration/private/ewk_settings_private.h index 863df9a..8e200ba 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_settings_private.h +++ b/tizen_src/ewk/efl_integration/private/ewk_settings_private.h @@ -16,35 +16,12 @@ using blink::web_pref::WebPreferences; class Ewk_Settings { public: - Ewk_Settings(Evas_Object* evas_object, WebPreferences preferences) - : m_preferences(preferences), - m_autofillPasswordForm(false), - m_formCandidateData(false), - m_autofillProfileForm(false), - m_textSelectionEnabled(true), - m_autoClearTextSelection(true), - m_autoSelectWord(false), - m_edgeEffectEnabled(true), - m_textZoomEnabled(true), - m_loadRemoteImages(true), - m_currentLegacyFontSizeMode( - EWK_LEGACY_FONT_SIZE_MODE_ONLY_IF_PIXEL_VALUES_MATCH), - m_pasteImageUriEnabled(true), - m_defaultKeypadEnabled(true), - m_useKeyPadWithoutUserAction(true), - m_textStyleState(true), - m_detectContentsAutomatically(true), - m_evas_object(evas_object), - m_cacheBuilderEnabled(false), - m_longPressEnabled(true), - m_linkMagnifierEnabled(false), - m_detectContentsEnabled(false), - m_webLoginEnabled(false), - m_doubleTapEnabled(true), - m_zoomEnabled(true), - m_openPanelEnabled(true), - m_allowRestrictedURL(true), - m_URLBarHide(false) {} + Ewk_Settings(Evas_Object* evas_object, const WebPreferences& preferences); + + ~Ewk_Settings() = default; + + Ewk_Settings(const Ewk_Settings&) = delete; + Ewk_Settings& operator=(const Ewk_Settings&) = delete; const char* defaultTextEncoding() const { return m_preferences.default_encoding.c_str(); @@ -64,8 +41,10 @@ class Ewk_Settings { void setAutoSelectWord(bool enable) { m_autoSelectWord = enable; } bool edgeEffectEnabled() const { return m_edgeEffectEnabled; } void setEdgeEffectEnabled(bool enable); - void setTextZoomEnabled(bool enable) { m_textZoomEnabled = enable; } - bool textZoomEnabled() const { return m_textZoomEnabled; } + void setTextZoomEnabled(bool enable) { + m_preferences.text_zoom_enabled = enable; + } + bool textZoomEnabled() const { return m_preferences.text_zoom_enabled; } void setLoadRemoteImages(bool loadRemoteImages) { m_loadRemoteImages = loadRemoteImages; } bool loadRemoteImages() const { return m_loadRemoteImages; } void setCurrentLegacyFontSizeMode(Ewk_Legacy_Font_Size_Mode mode); @@ -116,35 +95,34 @@ class Ewk_Settings { WebPreferences m_preferences; WebPreferencesEfl m_preferences_efl; - bool m_autofillPasswordForm; - bool m_formCandidateData; - bool m_autofillProfileForm; - bool m_textSelectionEnabled; - bool m_autoClearTextSelection; - bool m_autoSelectWord; - bool m_edgeEffectEnabled; - bool m_textZoomEnabled; - bool m_loadRemoteImages; + bool m_autofillPasswordForm = false; + bool m_formCandidateData = false; + bool m_autofillProfileForm = false; + bool m_textSelectionEnabled = true; + bool m_autoClearTextSelection = true; + bool m_autoSelectWord = false; + bool m_edgeEffectEnabled = true; + bool m_loadRemoteImages = true; Ewk_Legacy_Font_Size_Mode m_currentLegacyFontSizeMode; - bool m_pasteImageUriEnabled; - bool m_defaultKeypadEnabled; - bool m_useKeyPadWithoutUserAction; - bool m_textStyleState; - bool m_detectContentsAutomatically; + bool m_pasteImageUriEnabled = true; + bool m_defaultKeypadEnabled = true; + bool m_useKeyPadWithoutUserAction = true; + bool m_textStyleState = true; + bool m_detectContentsAutomatically = true; Evas_Object* m_evas_object; - bool m_cacheBuilderEnabled; + bool m_cacheBuilderEnabled = false; /* ewk_extra_features related */ - bool m_longPressEnabled; - bool m_linkMagnifierEnabled; - bool m_detectContentsEnabled; - bool m_webLoginEnabled; - bool m_doubleTapEnabled; - bool m_zoomEnabled; - bool m_openPanelEnabled; - bool m_allowRestrictedURL; - bool m_URLBarHide; + bool m_longPressEnabled = true; + bool m_linkMagnifierEnabled = false; + bool m_detectContentsEnabled = false; + bool m_webLoginEnabled = false; + bool m_doubleTapEnabled = true; + bool m_zoomEnabled = true; + bool m_openPanelEnabled = true; + bool m_allowRestrictedURL = true; + bool m_URLBarHide = false; }; #endif // ewk_settings_private_h diff --git a/tizen_src/ewk/efl_integration/public/ewk_settings.cc b/tizen_src/ewk/efl_integration/public/ewk_settings.cc index 321b23b..ba3bfe7 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_settings.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_settings.cc @@ -22,16 +22,16 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #include "ewk_settings_product.h" +#include "base/strings/string_util.h" #include "eweb_view.h" -#include "ui/events/gesture_detection/gesture_configuration.h" -#include "text_encoding_map_efl.h" #include "private/ewk_private.h" #include "private/ewk_settings_private.h" #include "private/ewk_view_private.h" +#include "text_encoding_map_efl.h" #include "tizen/system_info.h" +#include "ui/events/gesture_detection/gesture_configuration.h" namespace { @@ -714,55 +714,45 @@ namespace { return EINA_FALSE; #endif } - - typedef struct { - const char* name; - void (*set)(Ewk_Settings*, Eina_Bool enable); - Eina_Bool (*get)(const Ewk_Settings*); - } Ewk_Extra_Feature; - - static Ewk_Extra_Feature extra_features[] = { - EWK_EXTRA_FEATURE("longpress,enable", LongPress), - EWK_EXTRA_FEATURE("link,magnifier", LinkMagnifier), - EWK_EXTRA_FEATURE("detect,contents", DetectContents), - EWK_EXTRA_FEATURE("web,login", WebLogin), - EWK_EXTRA_FEATURE("doubletap,enable", DoubleTap), - EWK_EXTRA_FEATURE("zoom,enable", Zoom), - EWK_EXTRA_FEATURE("openpanel,enable", OpenPanel), - EWK_EXTRA_FEATURE("allow,restrictedurl", AllowRestrictedURL), - EWK_EXTRA_FEATURE("urlbar,hide", URLBarHide), - EWK_EXTRA_FEATURE("wrt,viewport,quirk", ViewportQuirk), - {NULL, NULL, NULL} - }; - - Ewk_Extra_Feature* find_extra_feature(const char*feature) - { - for(Ewk_Extra_Feature *feat = extra_features; feat->name != NULL; feat++) { - if (strcasecmp(feat->name, feature) == 0) { - return feat; - } - } - - return NULL; - } } Eina_Bool ewk_settings_extra_feature_get(const Ewk_Settings* settings, const char* feature) { EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(feature, EINA_FALSE); - Ewk_Extra_Feature *feat = find_extra_feature(feature); - EINA_SAFETY_ON_NULL_RETURN_VAL(feat, EINA_FALSE); - return feat->get(settings); + + std::string feature_name(feature); + if (base::EqualsCaseInsensitiveASCII(feature_name, "edge,enable")) + return settings->edgeEffectEnabled(); + else if (base::EqualsCaseInsensitiveASCII(feature_name, "zoom,enable")) + return settings->textZoomEnabled(); + else if (base::EqualsCaseInsensitiveASCII(feature_name, + "selection,magnifier")) + return settings->getPreferences().selection_magnifier_enabled; + else if (base::EqualsCaseInsensitiveASCII(feature_name, "longpress,enable")) + return settings->getPreferences().long_press_enabled; + else if (base::EqualsCaseInsensitiveASCII(feature_name, "doubletap,enable")) + return settings->getPreferences().double_tap_to_zoom_enabled; + return EINA_FALSE; } void ewk_settings_extra_feature_set(Ewk_Settings* settings, const char* feature, Eina_Bool enable) { EINA_SAFETY_ON_NULL_RETURN(settings); EINA_SAFETY_ON_NULL_RETURN(feature); - Ewk_Extra_Feature *feat = find_extra_feature(feature); - EINA_SAFETY_ON_NULL_RETURN(feat); - feat->set(settings, enable); + + std::string feature_name(feature); + if (base::EqualsCaseInsensitiveASCII(feature_name, "edge,enable")) + settings->setEdgeEffectEnabled(enable); + else if (base::EqualsCaseInsensitiveASCII(feature_name, "zoom,enable")) + settings->setTextZoomEnabled(enable); + else if (base::EqualsCaseInsensitiveASCII(feature_name, + "selection,magnifier")) + settings->getPreferences().selection_magnifier_enabled = enable; + else if (base::EqualsCaseInsensitiveASCII(feature_name, "longpress,enable")) + settings->getPreferences().long_press_enabled = enable; + else if (base::EqualsCaseInsensitiveASCII(feature_name, "doubletap,enable")) + settings->getPreferences().double_tap_to_zoom_enabled = enable; } Eina_Bool ewk_settings_tizen_compatibility_mode_set(Ewk_Settings* settings, unsigned major, unsigned minor, unsigned release) -- 2.7.4