summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-08 20:33:45 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-08 20:33:45 +0000
commit25819c0ccc14c489eaa901c6bbaa4599fb1fee26 (patch)
treea2b41e9374b24af851b0f52df0706e24b81ae9ac
parentdff42017c2df3c0b51fc083cb1c9fe15a314374f (diff)
downloadchromium_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
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views.cc7
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views.h4
-rw-r--r--chrome/browser/ui/touch/frame/touch_browser_frame_view.cc33
-rw-r--r--chrome/browser/ui/touch/frame/touch_browser_frame_view.h1
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,