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" |
11 #include "ash/drag_drop/drag_image_view.h" | 11 #include "ash/drag_drop/drag_image_view.h" |
12 #include "ash/launcher/launcher_delegate.h" | 12 #include "ash/launcher/launcher_delegate.h" |
13 #include "ash/launcher/launcher_item_delegate.h" | |
14 #include "ash/launcher/launcher_item_delegate_manager.h" | |
15 #include "ash/root_window_controller.h" | 13 #include "ash/root_window_controller.h" |
16 #include "ash/scoped_target_root_window.h" | 14 #include "ash/scoped_target_root_window.h" |
17 #include "ash/shelf/alternate_app_list_button.h" | 15 #include "ash/shelf/alternate_app_list_button.h" |
18 #include "ash/shelf/app_list_button.h" | 16 #include "ash/shelf/app_list_button.h" |
19 #include "ash/shelf/overflow_bubble.h" | 17 #include "ash/shelf/overflow_bubble.h" |
20 #include "ash/shelf/overflow_bubble_view.h" | 18 #include "ash/shelf/overflow_bubble_view.h" |
21 #include "ash/shelf/overflow_button.h" | 19 #include "ash/shelf/overflow_button.h" |
22 #include "ash/shelf/shelf_button.h" | 20 #include "ash/shelf/shelf_button.h" |
23 #include "ash/shelf/shelf_icon_observer.h" | 21 #include "ash/shelf/shelf_icon_observer.h" |
| 22 #include "ash/shelf/shelf_item_delegate.h" |
| 23 #include "ash/shelf/shelf_item_delegate_manager.h" |
24 #include "ash/shelf/shelf_layout_manager.h" | 24 #include "ash/shelf/shelf_layout_manager.h" |
| 25 #include "ash/shelf/shelf_menu_model.h" |
25 #include "ash/shelf/shelf_model.h" | 26 #include "ash/shelf/shelf_model.h" |
26 #include "ash/shelf/shelf_tooltip_manager.h" | 27 #include "ash/shelf/shelf_tooltip_manager.h" |
27 #include "ash/shelf/shelf_widget.h" | 28 #include "ash/shelf/shelf_widget.h" |
28 #include "ash/shell_delegate.h" | 29 #include "ash/shell_delegate.h" |
29 #include "ash/wm/coordinate_conversion.h" | 30 #include "ash/wm/coordinate_conversion.h" |
30 #include "base/auto_reset.h" | 31 #include "base/auto_reset.h" |
31 #include "base/memory/scoped_ptr.h" | 32 #include "base/memory/scoped_ptr.h" |
32 #include "base/metrics/histogram.h" | 33 #include "base/metrics/histogram.h" |
33 #include "grit/ash_resources.h" | 34 #include "grit/ash_resources.h" |
34 #include "grit/ash_strings.h" | 35 #include "grit/ash_strings.h" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 // separates. | 112 // separates. |
112 const int kRipOffDistance = 48; | 113 const int kRipOffDistance = 48; |
113 | 114 |
114 // The rip off drag and drop proxy image should get scaled by this factor. | 115 // The rip off drag and drop proxy image should get scaled by this factor. |
115 const float kDragAndDropProxyScale = 1.5f; | 116 const float kDragAndDropProxyScale = 1.5f; |
116 | 117 |
117 namespace { | 118 namespace { |
118 | 119 |
119 // The MenuModelAdapter gets slightly changed to adapt the menu appearance to | 120 // The MenuModelAdapter gets slightly changed to adapt the menu appearance to |
120 // our requirements. | 121 // our requirements. |
121 class LauncherMenuModelAdapter | 122 class ShelfMenuModelAdapter : public views::MenuModelAdapter { |
122 : public views::MenuModelAdapter { | |
123 public: | 123 public: |
124 explicit LauncherMenuModelAdapter(ash::LauncherMenuModel* menu_model); | 124 explicit ShelfMenuModelAdapter(ShelfMenuModel* menu_model); |
125 | 125 |
126 // Overriding MenuModelAdapter's MenuDelegate implementation. | 126 // views::MenuModelAdapter: |
127 virtual const gfx::Font* GetLabelFont(int command_id) const OVERRIDE; | 127 virtual const gfx::Font* GetLabelFont(int command_id) const OVERRIDE; |
128 virtual bool IsCommandEnabled(int id) const OVERRIDE; | 128 virtual bool IsCommandEnabled(int id) const OVERRIDE; |
129 virtual void GetHorizontalIconMargins(int id, | 129 virtual void GetHorizontalIconMargins(int id, |
130 int icon_size, | 130 int icon_size, |
131 int* left_margin, | 131 int* left_margin, |
132 int* right_margin) const OVERRIDE; | 132 int* right_margin) const OVERRIDE; |
133 virtual bool GetForegroundColor(int command_id, | 133 virtual bool GetForegroundColor(int command_id, |
134 bool is_hovered, | 134 bool is_hovered, |
135 SkColor* override_color) const OVERRIDE; | 135 SkColor* override_color) const OVERRIDE; |
136 virtual bool GetBackgroundColor(int command_id, | 136 virtual bool GetBackgroundColor(int command_id, |
137 bool is_hovered, | 137 bool is_hovered, |
138 SkColor* override_color) const OVERRIDE; | 138 SkColor* override_color) const OVERRIDE; |
139 virtual int GetMaxWidthForMenu(views::MenuItemView* menu) OVERRIDE; | 139 virtual int GetMaxWidthForMenu(views::MenuItemView* menu) OVERRIDE; |
140 virtual bool ShouldReserveSpaceForSubmenuIndicator() const OVERRIDE; | 140 virtual bool ShouldReserveSpaceForSubmenuIndicator() const OVERRIDE; |
141 | 141 |
142 private: | 142 private: |
143 ash::LauncherMenuModel* launcher_menu_model_; | 143 ShelfMenuModel* menu_model_; |
144 | 144 |
145 DISALLOW_COPY_AND_ASSIGN(LauncherMenuModelAdapter); | 145 DISALLOW_COPY_AND_ASSIGN(ShelfMenuModelAdapter); |
146 }; | 146 }; |
147 | 147 |
148 LauncherMenuModelAdapter::LauncherMenuModelAdapter( | 148 ShelfMenuModelAdapter::ShelfMenuModelAdapter(ShelfMenuModel* menu_model) |
149 ash::LauncherMenuModel* menu_model) | |
150 : MenuModelAdapter(menu_model), | 149 : MenuModelAdapter(menu_model), |
151 launcher_menu_model_(menu_model) {} | 150 menu_model_(menu_model) { |
| 151 } |
152 | 152 |
153 const gfx::Font* LauncherMenuModelAdapter::GetLabelFont( | 153 const gfx::Font* ShelfMenuModelAdapter::GetLabelFont(int command_id) const { |
154 int command_id) const { | |
155 if (command_id != kCommandIdOfMenuName) | 154 if (command_id != kCommandIdOfMenuName) |
156 return MenuModelAdapter::GetLabelFont(command_id); | 155 return MenuModelAdapter::GetLabelFont(command_id); |
157 | 156 |
158 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 157 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
159 return &rb.GetFont(ui::ResourceBundle::BoldFont); | 158 return &rb.GetFont(ui::ResourceBundle::BoldFont); |
160 } | 159 } |
161 | 160 |
162 bool LauncherMenuModelAdapter::IsCommandEnabled(int id) const { | 161 bool ShelfMenuModelAdapter::IsCommandEnabled(int id) const { |
163 return id != kCommandIdOfMenuName; | 162 return id != kCommandIdOfMenuName; |
164 } | 163 } |
165 | 164 |
166 bool LauncherMenuModelAdapter::GetForegroundColor( | 165 bool ShelfMenuModelAdapter::GetForegroundColor(int command_id, |
167 int command_id, | 166 bool is_hovered, |
168 bool is_hovered, | 167 SkColor* override_color) const { |
169 SkColor* override_color) const { | |
170 if (command_id != kCommandIdOfMenuName) | 168 if (command_id != kCommandIdOfMenuName) |
171 return false; | 169 return false; |
172 | 170 |
173 *override_color = kCaptionItemForegroundColor; | 171 *override_color = kCaptionItemForegroundColor; |
174 return true; | 172 return true; |
175 } | 173 } |
176 | 174 |
177 bool LauncherMenuModelAdapter::GetBackgroundColor( | 175 bool ShelfMenuModelAdapter::GetBackgroundColor(int command_id, |
178 int command_id, | 176 bool is_hovered, |
179 bool is_hovered, | 177 SkColor* override_color) const { |
180 SkColor* override_color) const { | 178 if (!menu_model_->IsCommandActive(command_id)) |
181 if (!launcher_menu_model_->IsCommandActive(command_id)) | |
182 return false; | 179 return false; |
183 | 180 |
184 *override_color = is_hovered ? kFocusedActiveListItemBackgroundColor : | 181 *override_color = is_hovered ? kFocusedActiveListItemBackgroundColor : |
185 kActiveListItemBackgroundColor; | 182 kActiveListItemBackgroundColor; |
186 return true; | 183 return true; |
187 } | 184 } |
188 | 185 |
189 void LauncherMenuModelAdapter::GetHorizontalIconMargins( | 186 void ShelfMenuModelAdapter::GetHorizontalIconMargins(int command_id, |
190 int command_id, | 187 int icon_size, |
191 int icon_size, | 188 int* left_margin, |
192 int* left_margin, | 189 int* right_margin) const { |
193 int* right_margin) const { | |
194 *left_margin = kHorizontalIconSpacing; | 190 *left_margin = kHorizontalIconSpacing; |
195 *right_margin = (command_id != kCommandIdOfMenuName) ? | 191 *right_margin = (command_id != kCommandIdOfMenuName) ? |
196 kHorizontalIconSpacing : -(icon_size + kHorizontalNoIconInsetSpacing); | 192 kHorizontalIconSpacing : -(icon_size + kHorizontalNoIconInsetSpacing); |
197 } | 193 } |
198 | 194 |
199 int LauncherMenuModelAdapter::GetMaxWidthForMenu(views::MenuItemView* menu) { | 195 int ShelfMenuModelAdapter::GetMaxWidthForMenu(views::MenuItemView* menu) { |
200 return kMaximumAppMenuItemLength; | 196 return kMaximumAppMenuItemLength; |
201 } | 197 } |
202 | 198 |
203 bool LauncherMenuModelAdapter::ShouldReserveSpaceForSubmenuIndicator() const { | 199 bool ShelfMenuModelAdapter::ShouldReserveSpaceForSubmenuIndicator() const { |
204 return false; | 200 return false; |
205 } | 201 } |
206 | 202 |
207 // Custom FocusSearch used to navigate the launcher in the order items are in | 203 // Custom FocusSearch used to navigate the launcher in the order items are in |
208 // the ViewModel. | 204 // the ViewModel. |
209 class LauncherFocusSearch : public views::FocusSearch { | 205 class LauncherFocusSearch : public views::FocusSearch { |
210 public: | 206 public: |
211 explicit LauncherFocusSearch(views::ViewModel* view_model) | 207 explicit LauncherFocusSearch(views::ViewModel* view_model) |
212 : FocusSearch(NULL, true, true), | 208 : FocusSearch(NULL, true, true), |
213 view_model_(view_model) {} | 209 view_model_(view_model) {} |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 context_menu_id_(0), | 366 context_menu_id_(0), |
371 leading_inset_(kDefaultLeadingInset), | 367 leading_inset_(kDefaultLeadingInset), |
372 cancelling_drag_model_changed_(false), | 368 cancelling_drag_model_changed_(false), |
373 last_hidden_index_(0), | 369 last_hidden_index_(0), |
374 closing_event_time_(base::TimeDelta()), | 370 closing_event_time_(base::TimeDelta()), |
375 got_deleted_(NULL), | 371 got_deleted_(NULL), |
376 drag_and_drop_item_pinned_(false), | 372 drag_and_drop_item_pinned_(false), |
377 drag_and_drop_launcher_id_(0), | 373 drag_and_drop_launcher_id_(0), |
378 dragged_off_shelf_(false), | 374 dragged_off_shelf_(false), |
379 snap_back_from_rip_off_view_(NULL), | 375 snap_back_from_rip_off_view_(NULL), |
380 item_manager_(Shell::GetInstance()->launcher_item_delegate_manager()), | 376 item_manager_(Shell::GetInstance()->shelf_item_delegate_manager()), |
381 layout_manager_(shelf_layout_manager), | 377 layout_manager_(shelf_layout_manager), |
382 overflow_mode_(false) { | 378 overflow_mode_(false) { |
383 DCHECK(model_); | 379 DCHECK(model_); |
384 bounds_animator_.reset(new views::BoundsAnimator(this)); | 380 bounds_animator_.reset(new views::BoundsAnimator(this)); |
385 bounds_animator_->AddObserver(this); | 381 bounds_animator_->AddObserver(this); |
386 set_context_menu_controller(this); | 382 set_context_menu_controller(this); |
387 focus_search_.reset(new LauncherFocusSearch(view_model_.get())); | 383 focus_search_.reset(new LauncherFocusSearch(view_model_.get())); |
388 tooltip_.reset(new ShelfTooltipManager(shelf_layout_manager, this)); | 384 tooltip_.reset(new ShelfTooltipManager(shelf_layout_manager, this)); |
389 } | 385 } |
390 | 386 |
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
958 DCHECK(drag_view_); | 954 DCHECK(drag_view_); |
959 drag_pointer_ = pointer; | 955 drag_pointer_ = pointer; |
960 start_drag_index_ = view_model_->GetIndexOfView(drag_view_); | 956 start_drag_index_ = view_model_->GetIndexOfView(drag_view_); |
961 | 957 |
962 if (start_drag_index_== -1) { | 958 if (start_drag_index_== -1) { |
963 CancelDrag(-1); | 959 CancelDrag(-1); |
964 return; | 960 return; |
965 } | 961 } |
966 | 962 |
967 // If the item is no longer draggable, bail out. | 963 // If the item is no longer draggable, bail out. |
968 LauncherItemDelegate* item_delegate = item_manager_->GetLauncherItemDelegate( | 964 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( |
969 model_->items()[start_drag_index_].id); | 965 model_->items()[start_drag_index_].id); |
970 if (!item_delegate->IsDraggable()) { | 966 if (!item_delegate->IsDraggable()) { |
971 CancelDrag(-1); | 967 CancelDrag(-1); |
972 return; | 968 return; |
973 } | 969 } |
974 | 970 |
975 // Move the view to the front so that it appears on top of other views. | 971 // Move the view to the front so that it appears on top of other views. |
976 ReorderChildView(drag_view_, -1); | 972 ReorderChildView(drag_view_, -1); |
977 bounds_animator_->StopAnimatingView(drag_view_); | 973 bounds_animator_->StopAnimatingView(drag_view_); |
978 } | 974 } |
979 | 975 |
980 void ShelfView::ContinueDrag(const ui::LocatedEvent& event) { | 976 void ShelfView::ContinueDrag(const ui::LocatedEvent& event) { |
981 // Due to a syncing operation the application might have been removed. | 977 // Due to a syncing operation the application might have been removed. |
982 // Bail if it is gone. | 978 // Bail if it is gone. |
983 int current_index = view_model_->GetIndexOfView(drag_view_); | 979 int current_index = view_model_->GetIndexOfView(drag_view_); |
984 DCHECK_NE(-1, current_index); | 980 DCHECK_NE(-1, current_index); |
985 | 981 |
986 LauncherItemDelegate* item_delegate = item_manager_->GetLauncherItemDelegate( | 982 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( |
987 model_->items()[current_index].id); | 983 model_->items()[current_index].id); |
988 if (!item_delegate->IsDraggable()) { | 984 if (!item_delegate->IsDraggable()) { |
989 CancelDrag(-1); | 985 CancelDrag(-1); |
990 return; | 986 return; |
991 } | 987 } |
992 | 988 |
993 // If this is not a drag and drop host operation and not the app list item, | 989 // If this is not a drag and drop host operation and not the app list item, |
994 // check if the item got ripped off the shelf - if it did we are done. | 990 // check if the item got ripped off the shelf - if it did we are done. |
995 if (!drag_and_drop_launcher_id_ && ash::switches::UseDragOffShelf() && | 991 if (!drag_and_drop_launcher_id_ && ash::switches::UseDragOffShelf() && |
996 RemovableByRipOff(current_index) != NOT_REMOVABLE) { | 992 RemovableByRipOff(current_index) != NOT_REMOVABLE) { |
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1593 void ShelfView::PointerPressedOnButton(views::View* view, | 1589 void ShelfView::PointerPressedOnButton(views::View* view, |
1594 Pointer pointer, | 1590 Pointer pointer, |
1595 const ui::LocatedEvent& event) { | 1591 const ui::LocatedEvent& event) { |
1596 if (drag_view_) | 1592 if (drag_view_) |
1597 return; | 1593 return; |
1598 | 1594 |
1599 int index = view_model_->GetIndexOfView(view); | 1595 int index = view_model_->GetIndexOfView(view); |
1600 if (index == -1) | 1596 if (index == -1) |
1601 return; | 1597 return; |
1602 | 1598 |
1603 LauncherItemDelegate* item_delegate = item_manager_->GetLauncherItemDelegate( | 1599 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( |
1604 model_->items()[index].id); | 1600 model_->items()[index].id); |
1605 if (view_model_->view_size() <= 1 || !item_delegate->IsDraggable()) | 1601 if (view_model_->view_size() <= 1 || !item_delegate->IsDraggable()) |
1606 return; // View is being deleted or not draggable, ignore request. | 1602 return; // View is being deleted or not draggable, ignore request. |
1607 | 1603 |
1608 drag_view_ = view; | 1604 drag_view_ = view; |
1609 drag_offset_ = layout_manager_->PrimaryAxisValue(event.x(), event.y()); | 1605 drag_offset_ = layout_manager_->PrimaryAxisValue(event.x(), event.y()); |
1610 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentUsage", | 1606 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentUsage", |
1611 layout_manager_->SelectValueForShelfAlignment( | 1607 layout_manager_->SelectValueForShelfAlignment( |
1612 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM, | 1608 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM, |
1613 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT, | 1609 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1669 if (!tooltip_->IsVisible()) | 1665 if (!tooltip_->IsVisible()) |
1670 tooltip_->StopTimer(); | 1666 tooltip_->StopTimer(); |
1671 } | 1667 } |
1672 | 1668 |
1673 base::string16 ShelfView::GetAccessibleName(const views::View* view) { | 1669 base::string16 ShelfView::GetAccessibleName(const views::View* view) { |
1674 int view_index = view_model_->GetIndexOfView(view); | 1670 int view_index = view_model_->GetIndexOfView(view); |
1675 // May be -1 while in the process of animating closed. | 1671 // May be -1 while in the process of animating closed. |
1676 if (view_index == -1) | 1672 if (view_index == -1) |
1677 return base::string16(); | 1673 return base::string16(); |
1678 | 1674 |
1679 LauncherItemDelegate* item_delegate = item_manager_->GetLauncherItemDelegate( | 1675 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( |
1680 model_->items()[view_index].id); | 1676 model_->items()[view_index].id); |
1681 return item_delegate->GetTitle(); | 1677 return item_delegate->GetTitle(); |
1682 } | 1678 } |
1683 | 1679 |
1684 void ShelfView::ButtonPressed(views::Button* sender, const ui::Event& event) { | 1680 void ShelfView::ButtonPressed(views::Button* sender, const ui::Event& event) { |
1685 // Do not handle mouse release during drag. | 1681 // Do not handle mouse release during drag. |
1686 if (dragging()) | 1682 if (dragging()) |
1687 return; | 1683 return; |
1688 | 1684 |
1689 if (sender == overflow_button_) { | 1685 if (sender == overflow_button_) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1727 break; | 1723 break; |
1728 | 1724 |
1729 case TYPE_APP_PANEL: | 1725 case TYPE_APP_PANEL: |
1730 break; | 1726 break; |
1731 | 1727 |
1732 case TYPE_UNDEFINED: | 1728 case TYPE_UNDEFINED: |
1733 NOTREACHED() << "LauncherItemType must be set."; | 1729 NOTREACHED() << "LauncherItemType must be set."; |
1734 break; | 1730 break; |
1735 } | 1731 } |
1736 | 1732 |
1737 LauncherItemDelegate* item_delegate = | 1733 ShelfItemDelegate* item_delegate = |
1738 item_manager_->GetLauncherItemDelegate( | 1734 item_manager_->GetShelfItemDelegate(model_->items()[view_index].id); |
1739 model_->items()[view_index].id); | |
1740 if (!item_delegate->ItemSelected(event)) | 1735 if (!item_delegate->ItemSelected(event)) |
1741 ShowListMenuForView(model_->items()[view_index], sender, event); | 1736 ShowListMenuForView(model_->items()[view_index], sender, event); |
1742 } | 1737 } |
1743 } | 1738 } |
1744 | 1739 |
1745 bool ShelfView::ShowListMenuForView(const LauncherItem& item, | 1740 bool ShelfView::ShowListMenuForView(const LauncherItem& item, |
1746 views::View* source, | 1741 views::View* source, |
1747 const ui::Event& event) { | 1742 const ui::Event& event) { |
1748 scoped_ptr<ash::LauncherMenuModel> menu_model; | 1743 scoped_ptr<ShelfMenuModel> menu_model; |
1749 LauncherItemDelegate* item_delegate = | 1744 ShelfItemDelegate* item_delegate = |
1750 item_manager_->GetLauncherItemDelegate(item.id); | 1745 item_manager_->GetShelfItemDelegate(item.id); |
1751 menu_model.reset(item_delegate->CreateApplicationMenu(event.flags())); | 1746 menu_model.reset(item_delegate->CreateApplicationMenu(event.flags())); |
1752 | 1747 |
1753 // Make sure we have a menu and it has at least two items in addition to the | 1748 // Make sure we have a menu and it has at least two items in addition to the |
1754 // application title and the 3 spacing separators. | 1749 // application title and the 3 spacing separators. |
1755 if (!menu_model.get() || menu_model->GetItemCount() <= 5) | 1750 if (!menu_model.get() || menu_model->GetItemCount() <= 5) |
1756 return false; | 1751 return false; |
1757 | 1752 |
1758 ShowMenu(scoped_ptr<views::MenuModelAdapter>( | 1753 ShowMenu(scoped_ptr<views::MenuModelAdapter>( |
1759 new LauncherMenuModelAdapter(menu_model.get())), | 1754 new ShelfMenuModelAdapter(menu_model.get())), |
1760 source, | 1755 source, |
1761 gfx::Point(), | 1756 gfx::Point(), |
1762 false, | 1757 false, |
1763 ui::GetMenuSourceTypeForEvent(event)); | 1758 ui::GetMenuSourceTypeForEvent(event)); |
1764 return true; | 1759 return true; |
1765 } | 1760 } |
1766 | 1761 |
1767 void ShelfView::ShowContextMenuForView(views::View* source, | 1762 void ShelfView::ShowContextMenuForView(views::View* source, |
1768 const gfx::Point& point, | 1763 const gfx::Point& point, |
1769 ui::MenuSourceType source_type) { | 1764 ui::MenuSourceType source_type) { |
1770 int view_index = view_model_->GetIndexOfView(source); | 1765 int view_index = view_model_->GetIndexOfView(source); |
1771 // TODO(simon.hong81): Create LauncherContextMenu for applist in its | 1766 // TODO(simon.hong81): Create LauncherContextMenu for applist in its |
1772 // LauncherItemDelegate. | 1767 // ShelfItemDelegate. |
1773 if (view_index != -1 && | 1768 if (view_index != -1 && model_->items()[view_index].type == TYPE_APP_LIST) { |
1774 model_->items()[view_index].type == TYPE_APP_LIST) { | |
1775 view_index = -1; | 1769 view_index = -1; |
1776 } | 1770 } |
1777 | 1771 |
1778 if (view_index == -1) { | 1772 if (view_index == -1) { |
1779 Shell::GetInstance()->ShowContextMenu(point, source_type); | 1773 Shell::GetInstance()->ShowContextMenu(point, source_type); |
1780 return; | 1774 return; |
1781 } | 1775 } |
1782 scoped_ptr<ui::MenuModel> menu_model; | 1776 scoped_ptr<ui::MenuModel> menu_model; |
1783 LauncherItemDelegate* item_delegate = item_manager_->GetLauncherItemDelegate( | 1777 ShelfItemDelegate* item_delegate = item_manager_->GetShelfItemDelegate( |
1784 model_->items()[view_index].id); | 1778 model_->items()[view_index].id); |
1785 menu_model.reset(item_delegate->CreateContextMenu( | 1779 menu_model.reset(item_delegate->CreateContextMenu( |
1786 source->GetWidget()->GetNativeView()->GetRootWindow())); | 1780 source->GetWidget()->GetNativeView()->GetRootWindow())); |
1787 if (!menu_model) | 1781 if (!menu_model) |
1788 return; | 1782 return; |
1789 | 1783 |
1790 base::AutoReset<LauncherID> reseter( | 1784 base::AutoReset<LauncherID> reseter( |
1791 &context_menu_id_, | 1785 &context_menu_id_, |
1792 view_index == -1 ? 0 : model_->items()[view_index].id); | 1786 view_index == -1 ? 0 : model_->items()[view_index].id); |
1793 | 1787 |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1934 return &(model_->items()[view_index]); | 1928 return &(model_->items()[view_index]); |
1935 } | 1929 } |
1936 | 1930 |
1937 bool ShelfView::ShouldShowTooltipForView(const views::View* view) const { | 1931 bool ShelfView::ShouldShowTooltipForView(const views::View* view) const { |
1938 if (view == GetAppListButtonView() && | 1932 if (view == GetAppListButtonView() && |
1939 Shell::GetInstance()->GetAppListWindow()) | 1933 Shell::GetInstance()->GetAppListWindow()) |
1940 return false; | 1934 return false; |
1941 const LauncherItem* item = LauncherItemForView(view); | 1935 const LauncherItem* item = LauncherItemForView(view); |
1942 if (!item) | 1936 if (!item) |
1943 return true; | 1937 return true; |
1944 LauncherItemDelegate* item_delegate = | 1938 ShelfItemDelegate* item_delegate = |
1945 item_manager_->GetLauncherItemDelegate(item->id); | 1939 item_manager_->GetShelfItemDelegate(item->id); |
1946 return item_delegate->ShouldShowTooltip(); | 1940 return item_delegate->ShouldShowTooltip(); |
1947 } | 1941 } |
1948 | 1942 |
1949 int ShelfView::CalculateShelfDistance(const gfx::Point& coordinate) const { | 1943 int ShelfView::CalculateShelfDistance(const gfx::Point& coordinate) const { |
1950 ShelfWidget* shelf = RootWindowController::ForLauncher( | 1944 ShelfWidget* shelf = RootWindowController::ForLauncher( |
1951 GetWidget()->GetNativeView())->shelf(); | 1945 GetWidget()->GetNativeView())->shelf(); |
1952 ash::ShelfAlignment align = shelf->GetAlignment(); | 1946 ash::ShelfAlignment align = shelf->GetAlignment(); |
1953 const gfx::Rect bounds = GetBoundsInScreen(); | 1947 const gfx::Rect bounds = GetBoundsInScreen(); |
1954 int distance = 0; | 1948 int distance = 0; |
1955 switch (align) { | 1949 switch (align) { |
1956 case ash::SHELF_ALIGNMENT_BOTTOM: | 1950 case ash::SHELF_ALIGNMENT_BOTTOM: |
1957 distance = bounds.y() - coordinate.y(); | 1951 distance = bounds.y() - coordinate.y(); |
1958 break; | 1952 break; |
1959 case ash::SHELF_ALIGNMENT_LEFT: | 1953 case ash::SHELF_ALIGNMENT_LEFT: |
1960 distance = coordinate.x() - bounds.right(); | 1954 distance = coordinate.x() - bounds.right(); |
1961 break; | 1955 break; |
1962 case ash::SHELF_ALIGNMENT_RIGHT: | 1956 case ash::SHELF_ALIGNMENT_RIGHT: |
1963 distance = bounds.x() - coordinate.x(); | 1957 distance = bounds.x() - coordinate.x(); |
1964 break; | 1958 break; |
1965 case ash::SHELF_ALIGNMENT_TOP: | 1959 case ash::SHELF_ALIGNMENT_TOP: |
1966 distance = coordinate.y() - bounds.bottom(); | 1960 distance = coordinate.y() - bounds.bottom(); |
1967 break; | 1961 break; |
1968 } | 1962 } |
1969 return distance > 0 ? distance : 0; | 1963 return distance > 0 ? distance : 0; |
1970 } | 1964 } |
1971 | 1965 |
1972 } // namespace internal | 1966 } // namespace internal |
1973 } // namespace ash | 1967 } // namespace ash |
OLD | NEW |