diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-08 20:33:45 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-08 20:33:45 +0000 |
commit | 25819c0ccc14c489eaa901c6bbaa4599fb1fee26 (patch) | |
tree | a2b41e9374b24af851b0f52df0706e24b81ae9ac | |
parent | dff42017c2df3c0b51fc083cb1c9fe15a314374f (diff) | |
download | chromium_src-25819c0ccc14c489eaa901c6bbaa4599fb1fee26.zip chromium_src-25819c0ccc14c489eaa901c6bbaa4599fb1fee26.tar.gz chromium_src-25819c0ccc14c489eaa901c6bbaa4599fb1fee26.tar.bz2 |
touch: Fix showing keyboard when tabbing focus from omnibox to RWHVV.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/6246164
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@74164 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 35 insertions, 10 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.cc b/chrome/browser/renderer_host/render_widget_host_view_views.cc index 0b0b986..bd6f204 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_views.cc +++ b/chrome/browser/renderer_host/render_widget_host_view_views.cc @@ -37,6 +37,9 @@ using WebKit::WebInputEventFactory; using WebKit::WebMouseWheelEvent; using WebKit::WebTouchEvent; +const char RenderWidgetHostViewViews::kViewClassName[] = + "browser/renderer_host/RenderWidgetHostViewViews"; + namespace { int WebInputEventFlagsFromViewsEvent(const views::Event& event) { @@ -767,6 +770,10 @@ views::View::TouchStatus RenderWidgetHostViewViews::OnTouchEvent( return status; } +std::string RenderWidgetHostViewViews::GetClassName() const { + return kViewClassName; +} + // static RenderWidgetHostView* RenderWidgetHostView::GetRenderWidgetHostViewFromNativeView( diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.h b/chrome/browser/renderer_host/render_widget_host_view_views.h index f2451bc..fb1b33f 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_views.h +++ b/chrome/browser/renderer_host/render_widget_host_view_views.h @@ -29,6 +29,9 @@ struct NativeWebKeyboardEvent; class RenderWidgetHostViewViews : public RenderWidgetHostView, public views::View { public: + // Internal class name. + static const char kViewClassName[]; + explicit RenderWidgetHostViewViews(RenderWidgetHost* widget); virtual ~RenderWidgetHostViewViews(); @@ -84,6 +87,7 @@ class RenderWidgetHostViewViews : public RenderWidgetHostView, virtual void Paint(gfx::Canvas* canvas); // Overridden from views::View. + virtual std::string GetClassName() const; gfx::NativeCursor GetCursorForPoint(views::Event::EventType type, const gfx::Point& point); diff --git a/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc b/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc index ff7fd56..9510d17 100644 --- a/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc +++ b/chrome/browser/ui/touch/frame/touch_browser_frame_view.cc @@ -6,6 +6,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/renderer_host/render_view_host.h" +#include "chrome/browser/renderer_host/render_widget_host_view_views.h" #include "chrome/browser/tab_contents/navigation_controller.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/browser/tabs/tab_strip_model.h" @@ -22,12 +23,6 @@ namespace { const int kKeyboardHeight = 300; -TouchBrowserFrameView::VirtualKeyboardType GetKeyboardType(views::View* view) { - if (view->GetClassName().compare(views::Textfield::kViewClassName) == 0) - return TouchBrowserFrameView::GENERIC; - return TouchBrowserFrameView::NONE; -} - PropertyAccessor<bool>* GetFocusedStateAccessor() { static PropertyAccessor<bool> state; return &state; @@ -73,11 +68,11 @@ void TouchBrowserFrameView::Layout() { void TouchBrowserFrameView::FocusWillChange(views::View* focused_before, views::View* focused_now) { - if (!focused_before || - (focused_now && GetKeyboardType(focused_now) - != GetKeyboardType(focused_before))) { + VirtualKeyboardType before = DecideKeyboardStateForView(focused_before); + VirtualKeyboardType now = DecideKeyboardStateForView(focused_now); + if (before != now) { // TODO(varunjain): support other types of keyboard. - UpdateKeyboardAndLayout(GetKeyboardType(focused_now) == GENERIC); + UpdateKeyboardAndLayout(now == GENERIC); } } @@ -147,6 +142,24 @@ void TouchBrowserFrameView::UpdateKeyboardAndLayout(bool should_show_keyboard) { } } +TouchBrowserFrameView::VirtualKeyboardType + TouchBrowserFrameView::DecideKeyboardStateForView(views::View* view) { + if (!view) + return NONE; + + std::string cname = view->GetClassName(); + if (cname == views::Textfield::kViewClassName) { + return GENERIC; + } else if (cname == RenderWidgetHostViewViews::kViewClassName) { + TabContents* contents = browser_view()->browser()->GetSelectedTabContents(); + bool* editable = contents ? GetFocusedStateAccessor()->GetProperty( + contents->property_bag()) : NULL; + if (editable && *editable) + return GENERIC; + } + return NONE; +} + void TouchBrowserFrameView::TabSelectedAt(TabContentsWrapper* old_contents, TabContentsWrapper* new_contents, int index, diff --git a/chrome/browser/ui/touch/frame/touch_browser_frame_view.h b/chrome/browser/ui/touch/frame/touch_browser_frame_view.h index fd443db..e5700f4 100644 --- a/chrome/browser/ui/touch/frame/touch_browser_frame_view.h +++ b/chrome/browser/ui/touch/frame/touch_browser_frame_view.h @@ -48,6 +48,7 @@ class TouchBrowserFrameView : public OpaqueBrowserFrameView, private: virtual void InitVirtualKeyboard(); virtual void UpdateKeyboardAndLayout(bool should_show_keyboard); + virtual VirtualKeyboardType DecideKeyboardStateForView(views::View* view); // Overrridden from TabStripModelObserver. virtual void TabSelectedAt(TabContentsWrapper* old_contents, |