Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/shelf/shelf_view.h" | 5 #include "ash/shelf/shelf_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "ash/ash_constants.h" | 9 #include "ash/ash_constants.h" |
| 10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 382 closing_event_time_(base::TimeDelta()), | 382 closing_event_time_(base::TimeDelta()), |
| 383 got_deleted_(NULL), | 383 got_deleted_(NULL), |
| 384 drag_and_drop_item_pinned_(false), | 384 drag_and_drop_item_pinned_(false), |
| 385 drag_and_drop_shelf_id_(0), | 385 drag_and_drop_shelf_id_(0), |
| 386 dragged_off_shelf_(false), | 386 dragged_off_shelf_(false), |
| 387 snap_back_from_rip_off_view_(NULL), | 387 snap_back_from_rip_off_view_(NULL), |
| 388 item_manager_(Shell::GetInstance()->shelf_item_delegate_manager()), | 388 item_manager_(Shell::GetInstance()->shelf_item_delegate_manager()), |
| 389 layout_manager_(manager), | 389 layout_manager_(manager), |
| 390 overflow_mode_(false), | 390 overflow_mode_(false), |
| 391 main_shelf_(NULL), | 391 main_shelf_(NULL), |
| 392 dragged_off_from_overflow_to_shelf_(false) { | 392 dragged_off_from_overflow_to_shelf_(false), |
| 393 pressed_on_same_position_(false) { | |
| 393 DCHECK(model_); | 394 DCHECK(model_); |
| 394 bounds_animator_.reset(new views::BoundsAnimator(this)); | 395 bounds_animator_.reset(new views::BoundsAnimator(this)); |
| 395 bounds_animator_->AddObserver(this); | 396 bounds_animator_->AddObserver(this); |
| 396 set_context_menu_controller(this); | 397 set_context_menu_controller(this); |
| 397 focus_search_.reset(new ShelfFocusSearch(view_model_.get())); | 398 focus_search_.reset(new ShelfFocusSearch(view_model_.get())); |
| 398 tooltip_.reset(new ShelfTooltipManager(manager, this)); | 399 tooltip_.reset(new ShelfTooltipManager(manager, this)); |
| 399 } | 400 } |
| 400 | 401 |
| 401 ShelfView::~ShelfView() { | 402 ShelfView::~ShelfView() { |
| 402 bounds_animator_->RemoveObserver(this); | 403 bounds_animator_->RemoveObserver(this); |
| (...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1552 AnimateToIdealBounds(); | 1553 AnimateToIdealBounds(); |
| 1553 } | 1554 } |
| 1554 | 1555 |
| 1555 void ShelfView::ShelfStatusChanged() { | 1556 void ShelfView::ShelfStatusChanged() { |
| 1556 // Nothing to do here. | 1557 // Nothing to do here. |
| 1557 } | 1558 } |
| 1558 | 1559 |
| 1559 void ShelfView::PointerPressedOnButton(views::View* view, | 1560 void ShelfView::PointerPressedOnButton(views::View* view, |
| 1560 Pointer pointer, | 1561 Pointer pointer, |
| 1561 const ui::LocatedEvent& event) { | 1562 const ui::LocatedEvent& event) { |
| 1563 // Compare the current position with the previous one. | |
| 1564 // If |pressed_on_same_position_| equals true, which means the previous | |
| 1565 // pointer press was ignored, reset it to false to make sure the current | |
| 1566 // press event won't be ignored in ShelfView::ButtonPressed(...). Otherwise | |
| 1567 // if the current press position is the same with the previous one, ignore | |
| 1568 // the current press event. | |
|
Mr4D (OOO till 08-26)
2014/12/02 21:40:12
You do not want to do this because of various reas
| |
| 1569 gfx::Point current_position = gfx::Point(event.x(), event.y()); | |
| 1570 if (pressed_on_same_position_) | |
| 1571 pressed_on_same_position_ = false; | |
| 1572 else if (pointer_pressed_position_ == current_position) | |
| 1573 pressed_on_same_position_ = true; | |
| 1574 pointer_pressed_position_ = current_position; | |
| 1575 | |
| 1562 if (drag_view_) | 1576 if (drag_view_) |
| 1563 return; | 1577 return; |
| 1564 | 1578 |
| 1565 int index = view_model_->GetIndexOfView(view); | 1579 int index = view_model_->GetIndexOfView(view); |
| 1566 if (index == -1) | 1580 if (index == -1) |
| 1567 return; | 1581 return; |
| 1568 | 1582 |
| 1569 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( | 1583 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( |
| 1570 model_->items()[index].id); | 1584 model_->items()[index].id); |
| 1571 if (view_model_->view_size() <= 1 || !item_delegate->IsDraggable()) | 1585 if (view_model_->view_size() <= 1 || !item_delegate->IsDraggable()) |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1661 int view_index = view_model_->GetIndexOfView(sender); | 1675 int view_index = view_model_->GetIndexOfView(sender); |
| 1662 // May be -1 while in the process of animating closed. | 1676 // May be -1 while in the process of animating closed. |
| 1663 if (view_index == -1) | 1677 if (view_index == -1) |
| 1664 return; | 1678 return; |
| 1665 | 1679 |
| 1666 // If the previous menu was closed by the same event as this one, we ignore | 1680 // If the previous menu was closed by the same event as this one, we ignore |
| 1667 // the call. | 1681 // the call. |
| 1668 if (!IsUsableEvent(event)) | 1682 if (!IsUsableEvent(event)) |
| 1669 return; | 1683 return; |
| 1670 | 1684 |
| 1685 // If the current press position is the same with the previous one, we ignore | |
| 1686 // this one. | |
| 1687 if (pressed_on_same_position_) | |
| 1688 return; | |
| 1689 | |
| 1671 // Don't activate the item twice on double-click. Otherwise the window starts | 1690 // Don't activate the item twice on double-click. Otherwise the window starts |
| 1672 // animating open due to the first click, then immediately minimizes due to | 1691 // animating open due to the first click, then immediately minimizes due to |
| 1673 // the second click. The user most likely intended to open or minimize the | 1692 // the second click. The user most likely intended to open or minimize the |
| 1674 // item once, not do both. | 1693 // item once, not do both. |
| 1675 if (event.flags() & ui::EF_IS_DOUBLE_CLICK) | 1694 if (event.flags() & ui::EF_IS_DOUBLE_CLICK) |
| 1676 return; | 1695 return; |
| 1677 | 1696 |
| 1678 { | 1697 { |
| 1679 ScopedTargetRootWindow scoped_target( | 1698 ScopedTargetRootWindow scoped_target( |
| 1680 sender->GetWidget()->GetNativeView()->GetRootWindow()); | 1699 sender->GetWidget()->GetNativeView()->GetRootWindow()); |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1925 distance = bounds.x() - coordinate.x(); | 1944 distance = bounds.x() - coordinate.x(); |
| 1926 break; | 1945 break; |
| 1927 case SHELF_ALIGNMENT_TOP: | 1946 case SHELF_ALIGNMENT_TOP: |
| 1928 distance = coordinate.y() - bounds.bottom(); | 1947 distance = coordinate.y() - bounds.bottom(); |
| 1929 break; | 1948 break; |
| 1930 } | 1949 } |
| 1931 return distance > 0 ? distance : 0; | 1950 return distance > 0 ? distance : 0; |
| 1932 } | 1951 } |
| 1933 | 1952 |
| 1934 } // namespace ash | 1953 } // namespace ash |
| OLD | NEW |