diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-09 00:39:35 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-09 00:39:35 +0000 |
commit | 3a3cf4d1334d48a2668f544c8160736c323e430a (patch) | |
tree | 010ca1aefe8ba48c599cd4acde087f94d4b99518 /chrome/browser | |
parent | 45336e532867061a431a27df87b89555c396135f (diff) | |
download | chromium_src-3a3cf4d1334d48a2668f544c8160736c323e430a.zip chromium_src-3a3cf4d1334d48a2668f544c8160736c323e430a.tar.gz chromium_src-3a3cf4d1334d48a2668f544c8160736c323e430a.tar.bz2 |
Aura: Set focusable on textfield but not on location bar
Aura uses views textfield and needs to set focusable on omnibox instead of location bar.
I used "views::Widget::IsPureViews" instead of ifdef because
this allow us to provide a flag to enable views textfield on widnows.
BUG=106632
TEST=BrowserFocusTest pass
Review URL: http://codereview.chromium.org/8832002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113709 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
7 files changed, 54 insertions, 16 deletions
diff --git a/chrome/browser/browser_focus_uitest.cc b/chrome/browser/browser_focus_uitest.cc index f777b6f..629ca09 100644 --- a/chrome/browser/browser_focus_uitest.cc +++ b/chrome/browser/browser_focus_uitest.cc @@ -50,22 +50,20 @@ #include "base/string_util.h" #endif -#if defined(OS_LINUX) -#define MAYBE_FocusTraversal FocusTraversal -#define MAYBE_FocusTraversalOnInterstitial FocusTraversalOnInterstitial -// TODO(jcampan): http://crbug.com/23683 -#define MAYBE_TabsRememberFocusFindInPage FAILS_TabsRememberFocusFindInPage -#elif defined(OS_MACOSX) -// TODO(suzhe): http://crbug.com/60973 (following two tests) +#if defined(OS_MACOSX) +// TODO(suzhe): http://crbug.com/60973 #define MAYBE_FocusTraversal DISABLED_FocusTraversal #define MAYBE_FocusTraversalOnInterstitial DISABLED_FocusTraversalOnInterstitial -// TODO(suzhe): http://crbug.com/49737 -#define MAYBE_TabsRememberFocusFindInPage FAILS_TabsRememberFocusFindInPage -#elif defined(OS_WIN) -// Disabled, http://crbug.com/62543. +#else #define MAYBE_FocusTraversal FocusTraversal -// Disabled, http://crbug.com/62544. #define MAYBE_FocusTraversalOnInterstitial FocusTraversalOnInterstitial +#endif + +#if defined(OS_LINUX) || defined(OS_MACOSX) +// TODO(jcampan): http://crbug.com/23683 for linux. +// TODO(suzhe): http://crbug.com/49737 for mac. +#define MAYBE_TabsRememberFocusFindInPage FAILS_TabsRememberFocusFindInPage +#elif defined(OS_WIN) // Flaky, http://crbug.com/62537. #define MAYBE_TabsRememberFocusFindInPage FLAKY_TabsRememberFocusFindInPage #endif diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index f0363a9..5dae6d5 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -875,7 +875,7 @@ void BrowserView::SetFocusToLocationBar(bool select_all) { #endif LocationBarView* location_bar = GetLocationBarView(); - if (location_bar->IsFocusableInRootView()) { + if (location_bar->IsLocationEntryFocusableInRootView()) { // Location bar got focus. location_bar->FocusLocation(select_all); } else { diff --git a/chrome/browser/ui/views/frame/browser_view_layout.cc b/chrome/browser/ui/views/frame/browser_view_layout.cc index d9e2d2b..70478a2 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout.cc +++ b/chrome/browser/ui/views/frame/browser_view_layout.cc @@ -323,7 +323,7 @@ int BrowserViewLayout::LayoutTabStripRegion() { int BrowserViewLayout::LayoutToolbar(int top) { int browser_view_width = vertical_layout_rect_.width(); bool toolbar_visible = browser_view_->IsToolbarVisible(); - toolbar_->location_bar()->set_focusable(toolbar_visible); + toolbar_->location_bar()->SetLocationEntryFocusable(toolbar_visible); int y = top; y -= (toolbar_visible && browser_view_->IsTabStripVisible()) ? kToolbarTabStripVerticalOverlap : 0; diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc index 5ee8ed6..b495217 100644 --- a/chrome/browser/ui/views/location_bar/location_bar_view.cc +++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc @@ -57,7 +57,6 @@ #include "ui/gfx/image/image.h" #include "ui/gfx/skia_util.h" #include "ui/views/controls/label.h" -#include "ui/views/controls/textfield/native_textfield_views.h" #include "ui/views/drag_utils.h" #if !defined(OS_CHROMEOS) @@ -77,6 +76,12 @@ TabContents* GetTabContentsFromDelegate(LocationBarView::Delegate* delegate) { return wrapper ? wrapper->tab_contents() : NULL; } +// A utility function to cast OmniboxView to OmniboxViewViews. +OmniboxViewViews* AsViews(OmniboxView* view) { + DCHECK(views::Widget::IsPureViews()); + return static_cast<OmniboxViewViews*>(view); +} + } // namespace // static @@ -134,7 +139,6 @@ LocationBarView::LocationBarView(Browser* browser, template_url_service_(NULL), animation_offset_(0) { set_id(VIEW_ID_LOCATION_BAR); - set_focusable(true); if (mode_ == NORMAL) { painter_.reset( @@ -193,6 +197,7 @@ void LocationBarView::Init() { browser_->command_updater(), mode_ == POPUP, this)); + SetLocationEntryFocusable(true); location_entry_view_ = location_entry_->AddToView(this); location_entry_view_->set_id(VIEW_ID_AUTOCOMPLETE); @@ -444,6 +449,19 @@ string16 LocationBarView::GetInstantSuggestion() const { } #endif +void LocationBarView::SetLocationEntryFocusable(bool focusable) { + if (views::Widget::IsPureViews()) + AsViews(location_entry_.get())->SetLocationEntryFocusable(focusable); + else + set_focusable(focusable); +} + +bool LocationBarView::IsLocationEntryFocusableInRootView() const { + return views::Widget::IsPureViews() ? + AsViews(location_entry_.get())->IsLocationEntryFocusableInRootView() : + views::View::IsFocusableInRootView(); +} + gfx::Size LocationBarView::GetPreferredSize() { return gfx::Size(0, GetThemeProvider()->GetBitmapNamed(mode_ == POPUP ? IDR_LOCATIONBG_POPUPMODE_CENTER : IDR_LOCATIONBG_C)->height()); diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h index 6578725..8d00e17 100644 --- a/chrome/browser/ui/views/location_bar/location_bar_view.h +++ b/chrome/browser/ui/views/location_bar/location_bar_view.h @@ -168,6 +168,13 @@ class LocationBarView : public LocationBar, string16 GetInstantSuggestion() const; #endif + // Sets whether the location entry can accept focus. + void SetLocationEntryFocusable(bool focusable); + + // Returns true if the location entry is focusable and visible in + // the root view. + bool IsLocationEntryFocusableInRootView() const; + // Sizing functions virtual gfx::Size GetPreferredSize() OVERRIDE; diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc index eb71f3b..808241c 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc @@ -293,6 +293,14 @@ void OmniboxViewViews::HandleFocusOut() { controller_->OnKillFocus(); } +void OmniboxViewViews::SetLocationEntryFocusable(bool focusable) { + textfield_->set_focusable(focusable); +} + +bool OmniboxViewViews::IsLocationEntryFocusableInRootView() const { + return textfield_->IsFocusableInRootView(); +} + //////////////////////////////////////////////////////////////////////////////// // OmniboxViewViews, views::View implementation: void OmniboxViewViews::Layout() { diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.h b/chrome/browser/ui/views/omnibox/omnibox_view_views.h index f9c165d..1ef4931 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.h +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.h @@ -68,6 +68,13 @@ class OmniboxViewViews : public views::View, void HandleFocusIn(); void HandleFocusOut(); + // Sets whether the location entry can accept focus. + void SetLocationEntryFocusable(bool focusable); + + // Returns true if the location entry is focusable and visible in + // the root view. + bool IsLocationEntryFocusableInRootView() const; + // Implements views::View virtual void Layout() OVERRIDE; virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; |