Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
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 4477c564e870c21b0fc43c7cc8fc4b7459dca608..c9b1b06caf20e742a4d66c7a022492c72e24f180 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -28,6 +28,7 @@ |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/user_metrics.h" |
#include "content/public/common/content_switches.h" |
+#include "grit/ui_strings.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositionUnderline.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" |
@@ -948,6 +949,21 @@ void RenderWidgetHostViewAura::SelectionBoundsChanged( |
if (GetInputMethod()) |
GetInputMethod()->OnCaretBoundsChanged(this); |
+ if (touch_selection_controller_.get()) |
+ touch_selection_controller_->SelectionChanged(); |
+} |
+ |
+void RenderWidgetHostViewAura::TouchEditingHandlesVisibilityChanged( |
+ bool visible) { |
+ if (visible && !touch_selection_controller_.get()) { |
+ touch_selection_controller_.reset( |
+ ui::TouchSelectionController::create(this)); |
+ } |
+ if (!visible) |
+ touch_selection_controller_.reset(); |
+ |
+ if (touch_selection_controller_.get()) |
+ touch_selection_controller_->SelectionChanged(); |
} |
void RenderWidgetHostViewAura::ScrollOffsetChanged() { |
@@ -1649,6 +1665,9 @@ void RenderWidgetHostViewAura::OnBoundsChanged(const gfx::Rect& old_bounds, |
// WebContentsViewAura in other cases. |
if (is_fullscreen_) |
SetSize(new_bounds.size()); |
+ |
+ if (touch_selection_controller_.get()) |
+ touch_selection_controller_->SelectionChanged(); |
} |
gfx::NativeCursor RenderWidgetHostViewAura::GetCursor(const gfx::Point& point) { |
@@ -2149,6 +2168,125 @@ void RenderWidgetHostViewAura::OnLostResources() { |
} |
//////////////////////////////////////////////////////////////////////////////// |
+// RenderWidgetHostViewAura, ui::TouchEditable implementation: |
+ |
+void RenderWidgetHostViewAura::SelectRect(const gfx::Point& start, |
+ const gfx::Point& end) { |
+ // Since we draw selection handles in WebKit, we should never get here. |
+ NOTREACHED(); |
+} |
+ |
+void RenderWidgetHostViewAura::GetSelectionEndPoints(gfx::Rect* p1, |
+ gfx::Rect* p2) { |
+ *p1 = selection_anchor_rect_; |
+ *p2 = selection_focus_rect_; |
+} |
+ |
+gfx::Rect RenderWidgetHostViewAura::GetBounds() { |
+ gfx::Rect bounds = GetViewBounds(); |
+ // We are supposed to return bounds in local coordinates, but GetViewBounds() |
+ // gives bounds in screen space. So we convert. |
piman
2013/02/22 02:43:04
Can't we just return window_->bounds() ?
varunjain
2013/02/28 20:28:19
Done.
|
+ gfx::Point origin = bounds.origin(); |
+ ConvertPointFromScreen(&origin); |
+ bounds.set_origin(origin); |
+ return bounds; |
+} |
+ |
+gfx::NativeView RenderWidgetHostViewAura::GetNativeView() { |
+ return window_->GetRootWindow(); |
piman
2013/02/22 02:43:04
There is already a GetNativeView() in this class.
varunjain
2013/02/28 20:28:19
Done.
|
+} |
+ |
+void RenderWidgetHostViewAura::ConvertPointToScreen(gfx::Point* point) { |
+ aura::client::ScreenPositionClient* screen_position_client = |
+ aura::client::GetScreenPositionClient(window_->GetRootWindow()); |
+ if (screen_position_client) |
+ screen_position_client->ConvertPointToScreen(window_, point); |
+} |
+ |
+void RenderWidgetHostViewAura::ConvertPointFromScreen(gfx::Point* point) { |
+ aura::client::ScreenPositionClient* screen_position_client = |
+ aura::client::GetScreenPositionClient(window_->GetRootWindow()); |
+ if (screen_position_client) |
+ screen_position_client->ConvertPointFromScreen(window_, point); |
+} |
+ |
+bool RenderWidgetHostViewAura::DrawsHandles() { |
+ return true; |
+} |
+ |
+void RenderWidgetHostViewAura::OpenContextMenu(const gfx::Point anchor) { |
+ WebKit::WebMouseEvent mouse_event; |
+ mouse_event.button = WebKit::WebMouseEvent::ButtonRight; |
+ mouse_event.type = WebKit::WebInputEvent::MouseDown; |
+ gfx::Point local_anchor = anchor; |
+ ConvertPointFromScreen(&local_anchor); |
+ |
+ mouse_event.windowX = mouse_event.x = local_anchor.x(); |
+ mouse_event.windowY = mouse_event.y = local_anchor.y(); |
+ mouse_event.globalX = anchor.x(); |
+ mouse_event.globalY = anchor.y(); |
+ host_->ForwardMouseEvent(mouse_event); |
piman
2013/02/22 02:43:04
This doesn't look reasonable - what are we trying
varunjain
2013/02/28 20:28:19
Removed. I have added proper API to webkit.
|
+ touch_selection_controller_.reset(); |
+} |
+ |
+bool RenderWidgetHostViewAura::IsCommandIdChecked(int command_id) const { |
+ NOTREACHED(); |
+ return false; |
+} |
+ |
+bool RenderWidgetHostViewAura::IsCommandIdEnabled(int command_id) const { |
+ bool editable = text_input_type_ != ui::TEXT_INPUT_TYPE_NONE; |
+ bool has_selection = !selection_range_.is_empty(); |
+ string16 result; |
piman
2013/02/22 02:43:04
nit: move to IDS_APP_PASTE case (add brackets ther
varunjain
2013/02/28 20:28:19
Done.
|
+ switch (command_id) { |
+ case IDS_APP_CUT: |
piman
2013/02/22 02:43:04
nit: rather than importing UI symbols here, it see
varunjain
2013/02/28 20:28:19
What would be the advantage? the enum will have to
|
+ return editable && has_selection; |
+ case IDS_APP_COPY: |
+ return has_selection; |
+ case IDS_APP_PASTE: |
+ ui::Clipboard::GetForCurrentThread()->ReadText( |
+ ui::Clipboard::BUFFER_STANDARD, &result); |
+ return editable && !result.empty(); |
+ case IDS_APP_DELETE: |
+ return editable && has_selection; |
+ case IDS_APP_SELECT_ALL: |
+ return true; |
+ default: |
+ return false; |
+ } |
+} |
+ |
+bool RenderWidgetHostViewAura::GetAcceleratorForCommandId( |
+ int command_id, |
+ ui::Accelerator* accelerator) { |
+ return false; |
+} |
+ |
+void RenderWidgetHostViewAura::ExecuteCommand(int command_id) { |
+ switch (command_id) { |
+ case IDS_APP_CUT: |
+ host_->Cut(); |
+ break; |
+ case IDS_APP_COPY: |
+ host_->Copy(); |
+ break; |
+ case IDS_APP_PASTE: |
+ host_->Paste(); |
+ break; |
+ case IDS_APP_DELETE: |
+ host_->Delete(); |
+ break; |
+ case IDS_APP_SELECT_ALL: |
+ host_->SelectAll(); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
+ touch_selection_controller_.reset(); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
// RenderWidgetHostViewAura, private: |
RenderWidgetHostViewAura::~RenderWidgetHostViewAura() { |