| Index: chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc
|
| ===================================================================
|
| --- chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc (revision 37237)
|
| +++ chrome/browser/views/autocomplete/autocomplete_popup_contents_view.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this
|
| // source code is governed by a BSD-style license that can be found in the
|
| // LICENSE file.
|
|
|
| @@ -124,12 +124,6 @@
|
| virtual void Paint(gfx::Canvas* canvas);
|
| virtual void Layout();
|
| virtual gfx::Size GetPreferredSize();
|
| - virtual void OnMouseEntered(const views::MouseEvent& event);
|
| - virtual void OnMouseMoved(const views::MouseEvent& event);
|
| - virtual void OnMouseExited(const views::MouseEvent& event);
|
| - virtual bool OnMousePressed(const views::MouseEvent& event);
|
| - virtual void OnMouseReleased(const views::MouseEvent& event, bool canceled);
|
| - virtual bool OnMouseDragged(const views::MouseEvent& event);
|
|
|
| private:
|
| ResultViewState GetState() const;
|
| @@ -386,45 +380,7 @@
|
| return gfx::Size(0, std::max(icon_height, text_height));
|
| }
|
|
|
| -void AutocompleteResultView::OnMouseEntered(const views::MouseEvent& event) {
|
| - model_->SetHoveredLine(model_index_);
|
| -}
|
|
|
| -void AutocompleteResultView::OnMouseMoved(const views::MouseEvent& event) {
|
| - model_->SetHoveredLine(model_index_);
|
| - if (event.IsLeftMouseButton())
|
| - model_->SetSelectedLine(model_index_, false);
|
| -}
|
| -
|
| -void AutocompleteResultView::OnMouseExited(const views::MouseEvent& event) {
|
| - model_->SetHoveredLine(AutocompletePopupModel::kNoMatch);
|
| -}
|
| -
|
| -bool AutocompleteResultView::OnMousePressed(const views::MouseEvent& event) {
|
| - if (event.IsLeftMouseButton() || event.IsMiddleMouseButton()) {
|
| - model_->SetHoveredLine(model_index_);
|
| - if (event.IsLeftMouseButton())
|
| - model_->SetSelectedLine(model_index_, false);
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void AutocompleteResultView::OnMouseReleased(const views::MouseEvent& event,
|
| - bool canceled) {
|
| - if (canceled)
|
| - return;
|
| - if (event.IsOnlyMiddleMouseButton())
|
| - model_->OpenIndex(model_index_, NEW_BACKGROUND_TAB);
|
| - else if (event.IsOnlyLeftMouseButton())
|
| - model_->OpenIndex(model_index_, CURRENT_TAB);
|
| -}
|
| -
|
| -bool AutocompleteResultView::OnMouseDragged(const views::MouseEvent& event) {
|
| - // TODO(beng): move all message handling into the contents view and override
|
| - // GetViewForPoint.
|
| - return false;
|
| -}
|
| -
|
| ResultViewState AutocompleteResultView::GetState() const {
|
| if (model_->IsSelectedIndex(model_index_))
|
| return SELECTED;
|
| @@ -718,34 +674,6 @@
|
| return HasMatchAt(index) ? index == model_->hovered_line() : false;
|
| }
|
|
|
| -void AutocompletePopupContentsView::OpenIndex(
|
| - size_t index,
|
| - WindowOpenDisposition disposition) {
|
| - if (!HasMatchAt(index))
|
| - return;
|
| -
|
| - const AutocompleteMatch& match = model_->result().match_at(index);
|
| - // OpenURL() may close the popup, which will clear the result set and, by
|
| - // extension, |match| and its contents. So copy the relevant strings out to
|
| - // make sure they stay alive until the call completes.
|
| - const GURL url(match.destination_url);
|
| - std::wstring keyword;
|
| - const bool is_keyword_hint = model_->GetKeywordForMatch(match, &keyword);
|
| - edit_view_->OpenURL(url, disposition, match.transition, GURL(), index,
|
| - is_keyword_hint ? std::wstring() : keyword);
|
| -}
|
| -
|
| -void AutocompletePopupContentsView::SetHoveredLine(size_t index) {
|
| - if (HasMatchAt(index))
|
| - model_->SetHoveredLine(index);
|
| -}
|
| -
|
| -void AutocompletePopupContentsView::SetSelectedLine(size_t index,
|
| - bool revert_to_default) {
|
| - if (HasMatchAt(index))
|
| - model_->SetSelectedLine(index, revert_to_default);
|
| -}
|
| -
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // AutocompletePopupContentsView, AnimationDelegate implementation:
|
|
|
| @@ -819,6 +747,66 @@
|
| SchedulePaint();
|
| }
|
|
|
| +
|
| +void AutocompletePopupContentsView::OnMouseEntered(
|
| + const views::MouseEvent& event) {
|
| + model_->SetHoveredLine(GetIndexForPoint(event.location()));
|
| +}
|
| +
|
| +void AutocompletePopupContentsView::OnMouseMoved(
|
| + const views::MouseEvent& event) {
|
| + model_->SetHoveredLine(GetIndexForPoint(event.location()));
|
| +}
|
| +
|
| +void AutocompletePopupContentsView::OnMouseExited(
|
| + const views::MouseEvent& event) {
|
| + model_->SetHoveredLine(AutocompletePopupModel::kNoMatch);
|
| +}
|
| +
|
| +bool AutocompletePopupContentsView::OnMousePressed(
|
| + const views::MouseEvent& event) {
|
| + if (event.IsLeftMouseButton() || event.IsMiddleMouseButton()) {
|
| + int index = GetIndexForPoint(event.location());
|
| + model_->SetHoveredLine(index);
|
| + if (HasMatchAt(index) && event.IsLeftMouseButton())
|
| + model_->SetSelectedLine(index, false);
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +void AutocompletePopupContentsView::OnMouseReleased(
|
| + const views::MouseEvent& event,
|
| + bool canceled) {
|
| + if (canceled)
|
| + return;
|
| + int index = GetIndexForPoint(event.location());
|
| + if (index == AutocompletePopupModel::kNoMatch)
|
| + return;
|
| + if (event.IsOnlyMiddleMouseButton())
|
| + OpenIndex(index, NEW_BACKGROUND_TAB);
|
| + else if (event.IsOnlyLeftMouseButton())
|
| + OpenIndex(index, CURRENT_TAB);
|
| +}
|
| +
|
| +bool AutocompletePopupContentsView::OnMouseDragged(
|
| + const views::MouseEvent& event) {
|
| + if (event.IsLeftMouseButton() || event.IsMiddleMouseButton()) {
|
| + int index = GetIndexForPoint(event.location());
|
| + model_->SetHoveredLine(index);
|
| + if (HasMatchAt(index) && event.IsLeftMouseButton())
|
| + model_->SetSelectedLine(index, false);
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +views::View* AutocompletePopupContentsView::GetViewForPoint(
|
| + const gfx::Point& /*point*/) {
|
| + // This View takes control of the mouse events, so it should be considered the
|
| + // active view for any point inside of it.
|
| + return this;
|
| +}
|
| +
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // AutocompletePopupContentsView, private:
|
|
|
| @@ -881,6 +869,39 @@
|
| SkXfermode::kDstIn_Mode);
|
| }
|
|
|
| +void AutocompletePopupContentsView::OpenIndex(
|
| + size_t index,
|
| + WindowOpenDisposition disposition) {
|
| + if (!HasMatchAt(index))
|
| + return;
|
| +
|
| + const AutocompleteMatch& match = model_->result().match_at(index);
|
| + // OpenURL() may close the popup, which will clear the result set and, by
|
| + // extension, |match| and its contents. So copy the relevant strings out to
|
| + // make sure they stay alive until the call completes.
|
| + const GURL url(match.destination_url);
|
| + std::wstring keyword;
|
| + const bool is_keyword_hint = model_->GetKeywordForMatch(match, &keyword);
|
| + edit_view_->OpenURL(url, disposition, match.transition, GURL(), index,
|
| + is_keyword_hint ? std::wstring() : keyword);
|
| +}
|
| +
|
| +int AutocompletePopupContentsView::GetIndexForPoint(const gfx::Point& point) {
|
| + if (!HitTest(point))
|
| + return AutocompletePopupModel::kNoMatch;
|
| +
|
| + int nb_match = model_->result().size();
|
| + DCHECK(nb_match <= GetChildViewCount());
|
| + for (int i = 0; i < nb_match; ++i) {
|
| + views::View* child = GetChildViewAt(i);
|
| + gfx::Point point_in_child_coords(point);
|
| + View::ConvertPointToView(this, child, &point_in_child_coords);
|
| + if (child->HitTest(point_in_child_coords))
|
| + return i;
|
| + }
|
| + return AutocompletePopupModel::kNoMatch;
|
| +}
|
| +
|
| // static
|
| AutocompletePopupView* AutocompletePopupView::CreatePopupView(
|
| const gfx::Font& font,
|
|
|