diff options
author | hbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-18 05:46:29 +0000 |
---|---|---|
committer | hbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-18 05:46:29 +0000 |
commit | 779aae5fa525671293b0db3ddad27cc3811a362a (patch) | |
tree | cc943534ce00344cfd998db989985de37a7e8927 /chrome/browser/renderer_host/render_widget_host.cc | |
parent | c285cf2c3dc3eb128541f07065974010dae1b408 (diff) | |
download | chromium_src-779aae5fa525671293b0db3ddad27cc3811a362a.zip chromium_src-779aae5fa525671293b0db3ddad27cc3811a362a.tar.gz chromium_src-779aae5fa525671293b0db3ddad27cc3811a362a.tar.bz2 |
A tricky fix for Issue 1845.
This change is a very tricky fix for Issue 1845 in chromium: cant alignt text to the right using right shift and right ctrl.This change consists of two parts listed below.
1. Emulating the implementation of Safari that changes the text-direction of an input element.
Safari uses context menus to change the text direction. This change adds an IPC message 'ViewMsg_SetTextDirection', which notifies the new text direction. Also, it adds two functions: RenderWidgetHost::UpdateTextDirection() and RenderWidgetHost::NotifyTextDirection(). They encapsulate the new IPC message so that we can use them both when we presses a set of keys and when we add context-menu items which change the text direction.
2. Calling the above interface when pressing right-shift and right-control keys, or when left-shift and left-control keys.
This modifies the RenderWidgetHostViewWin::OnKeyEvent() function and call the above text-direction interfaces when a user finishes pressing the keys. As you can imagine, if we send an IPC message every time when we receive a WM_KEYDOWN event, we continue sending IPC messages while a user is pressing the keys.
BUG=1845
Review URL: http://codereview.chromium.org/39252
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11953 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host/render_widget_host.cc')
-rw-r--r-- | chrome/browser/renderer_host/render_widget_host.cc | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc index 83d7bcf..f40fe08 100644 --- a/chrome/browser/renderer_host/render_widget_host.cc +++ b/chrome/browser/renderer_host/render_widget_host.cc @@ -53,7 +53,9 @@ RenderWidgetHost::RenderWidgetHost(RenderProcessHost* process, mouse_move_pending_(false), needs_repainting_on_restore_(false), is_unresponsive_(false), - view_being_painted_(false) { + view_being_painted_(false), + text_direction_updated_(false), + text_direction_(WEB_TEXT_DIRECTION_LTR) { if (routing_id_ == MSG_ROUTING_NONE) routing_id_ = process_->GetNextRoutingID(); @@ -356,6 +358,19 @@ gfx::Rect RenderWidgetHost::GetRootWindowResizerRect() const { return gfx::Rect(); } +void RenderWidgetHost::UpdateTextDirection(WebTextDirection direction) { + text_direction_updated_ = true; + text_direction_ = direction; +} + +void RenderWidgetHost::NotifyTextDirection() { + if (text_direction_updated_) { + text_direction_updated_ = false; + Send(new ViewMsg_SetTextDirection(routing_id(), + text_direction_)); + } +} + void RenderWidgetHost::Destroy() { NotificationService::current()->Notify( NotificationType::RENDER_WIDGET_HOST_DESTROYED, |