| Index: chrome/browser/ui/views/tabs/tab_strip.cc
|
| diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
|
| index 42835490b6401cedfaf0876b52a6c1977048510f..c25080761d57a07734094cd71270c39451ef618f 100644
|
| --- a/chrome/browser/ui/views/tabs/tab_strip.cc
|
| +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
|
| @@ -52,6 +52,7 @@
|
| #include "ui/views/mouse_watcher_view_host.h"
|
| #include "ui/views/rect_based_targeting_utils.h"
|
| #include "ui/views/view_model_utils.h"
|
| +#include "ui/views/view_targeter.h"
|
| #include "ui/views/widget/root_view.h"
|
| #include "ui/views/widget/widget.h"
|
| #include "ui/views/window/non_client_view.h"
|
| @@ -537,6 +538,8 @@ TabStrip::TabStrip(TabStripController* controller)
|
| mouse_move_count_(0),
|
| immersive_style_(false) {
|
| Init();
|
| + SetEventTargeter(
|
| + scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this)));
|
| }
|
|
|
| TabStrip::~TabStrip() {
|
| @@ -1412,35 +1415,6 @@ void TabStrip::GetAccessibleState(ui::AXViewState* state) {
|
| state->role = ui::AX_ROLE_TAB_LIST;
|
| }
|
|
|
| -views::View* TabStrip::GetEventHandlerForRect(const gfx::Rect& rect) {
|
| - if (!views::UsePointBasedTargeting(rect))
|
| - return View::GetEventHandlerForRect(rect);
|
| - const gfx::Point point(rect.CenterPoint());
|
| -
|
| - if (!touch_layout_) {
|
| - // Return any view that isn't a Tab or this TabStrip immediately. We don't
|
| - // want to interfere.
|
| - views::View* v = View::GetEventHandlerForRect(rect);
|
| - if (v && v != this && strcmp(v->GetClassName(), Tab::kViewClassName))
|
| - return v;
|
| -
|
| - views::View* tab = FindTabHitByPoint(point);
|
| - if (tab)
|
| - return tab;
|
| - } else {
|
| - if (newtab_button_->visible()) {
|
| - views::View* view =
|
| - ConvertPointToViewAndGetEventHandler(this, newtab_button_, point);
|
| - if (view)
|
| - return view;
|
| - }
|
| - Tab* tab = FindTabForEvent(point);
|
| - if (tab)
|
| - return ConvertPointToViewAndGetEventHandler(this, tab, point);
|
| - }
|
| - return this;
|
| -}
|
| -
|
| views::View* TabStrip::GetTooltipHandlerForPoint(const gfx::Point& point) {
|
| if (!HitTestPoint(point))
|
| return NULL;
|
| @@ -2720,3 +2694,34 @@ void TabStrip::OnGestureEvent(ui::GestureEvent* event) {
|
| }
|
| event->SetHandled();
|
| }
|
| +
|
| +views::View* TabStrip::TargetForRect(views::View* root, const gfx::Rect& rect) {
|
| + CHECK_EQ(root, this);
|
| +
|
| + if (!views::UsePointBasedTargeting(rect))
|
| + return views::ViewTargeterDelegate::TargetForRect(root, rect);
|
| + const gfx::Point point(rect.CenterPoint());
|
| +
|
| + if (!touch_layout_) {
|
| + // Return any view that isn't a Tab or this TabStrip immediately. We don't
|
| + // want to interfere.
|
| + views::View* v = views::ViewTargeterDelegate::TargetForRect(root, rect);
|
| + if (v && v != this && strcmp(v->GetClassName(), Tab::kViewClassName))
|
| + return v;
|
| +
|
| + views::View* tab = FindTabHitByPoint(point);
|
| + if (tab)
|
| + return tab;
|
| + } else {
|
| + if (newtab_button_->visible()) {
|
| + views::View* view =
|
| + ConvertPointToViewAndGetEventHandler(this, newtab_button_, point);
|
| + if (view)
|
| + return view;
|
| + }
|
| + Tab* tab = FindTabForEvent(point);
|
| + if (tab)
|
| + return ConvertPointToViewAndGetEventHandler(this, tab, point);
|
| + }
|
| + return this;
|
| +}
|
|
|