Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Unified Diff: ash/shelf/shelf_view.cc

Issue 2791463002: mash: Remove ShelfDelegate; move functions to ShelfModel. (Closed)
Patch Set: Address comment. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/shelf/shelf_view.h ('k') | ash/shelf/shelf_widget.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_view.cc
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index ed9850e7d232e0684877b1fa47a5eb6ede82b507..9be5a0857adf070f366d7f998055bac8d43d747c 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -18,7 +18,6 @@
#include "ash/shelf/shelf_application_menu_model.h"
#include "ash/shelf/shelf_button.h"
#include "ash/shelf/shelf_constants.h"
-#include "ash/shelf/shelf_delegate.h"
#include "ash/shelf/shelf_model.h"
#include "ash/shelf/shelf_widget.h"
#include "ash/shelf/wm_shelf.h"
@@ -239,11 +238,9 @@ class ShelfView::StartFadeAnimationDelegate : public gfx::AnimationDelegate {
const int ShelfView::kMinimumDragDistance = 8;
ShelfView::ShelfView(ShelfModel* model,
- ShelfDelegate* delegate,
WmShelf* wm_shelf,
ShelfWidget* shelf_widget)
: model_(model),
- delegate_(delegate),
wm_shelf_(wm_shelf),
shelf_widget_(shelf_widget),
view_model_(new views::ViewModel),
@@ -271,7 +268,6 @@ ShelfView::ShelfView(ShelfModel* model,
last_pressed_index_(-1),
weak_factory_(this) {
DCHECK(model_);
- DCHECK(delegate_);
DCHECK(wm_shelf_);
DCHECK(shelf_widget_);
bounds_animator_.reset(new views::BoundsAnimator(this));
@@ -560,18 +556,16 @@ bool ShelfView::StartDrag(const std::string& app_id,
CancelDrag(-1);
drag_and_drop_item_pinned_ = false;
drag_and_drop_app_id_ = app_id;
- drag_and_drop_shelf_id_ =
- delegate_->GetShelfIDForAppID(drag_and_drop_app_id_);
+ drag_and_drop_shelf_id_ = model_->GetShelfIDForAppID(drag_and_drop_app_id_);
// Check if the application is known and pinned - if not, we have to pin it so
// that we can re-arrange the shelf order accordingly. Note that items have
// to be pinned to give them the same (order) possibilities as a shortcut.
// When an item is dragged from overflow to shelf, IsShowingOverflowBubble()
// returns true. At this time, we don't need to pin the item.
if (!IsShowingOverflowBubble() &&
- (!drag_and_drop_shelf_id_ || !delegate_->IsAppPinned(app_id))) {
- delegate_->PinAppWithID(app_id);
- drag_and_drop_shelf_id_ =
- delegate_->GetShelfIDForAppID(drag_and_drop_app_id_);
+ (!drag_and_drop_shelf_id_ || !model_->IsAppPinned(app_id))) {
+ model_->PinAppWithID(app_id);
+ drag_and_drop_shelf_id_ = model_->GetShelfIDForAppID(drag_and_drop_app_id_);
if (!drag_and_drop_shelf_id_)
return false;
drag_and_drop_item_pinned_ = true;
@@ -629,7 +623,7 @@ void ShelfView::EndDrag(bool cancel) {
// Either destroy the temporarily created item - or - make the item visible.
if (drag_and_drop_item_pinned_ && cancel) {
- delegate_->UnpinAppWithID(drag_and_drop_app_id_);
+ model_->UnpinAppWithID(drag_and_drop_app_id_);
} else if (drag_and_drop_view) {
if (cancel) {
// When a hosted drag gets canceled, the item can remain in the same slot
@@ -1063,7 +1057,7 @@ bool ShelfView::HandleRipOffDrag(const ui::LocatedEvent& event) {
int current_index = view_model_->GetIndexOfView(drag_view_);
DCHECK_NE(-1, current_index);
std::string dragged_app_id =
- delegate_->GetAppIDForShelfID(model_->items()[current_index].id);
+ model_->GetAppIDForShelfID(model_->items()[current_index].id);
gfx::Point screen_location =
WmWindow::Get(GetWidget()->GetNativeWindow())
@@ -1186,8 +1180,8 @@ void ShelfView::FinalizeRipOffDrag(bool cancel) {
// Make sure the item stays invisible upon removal.
drag_view_->SetVisible(false);
std::string app_id =
- delegate_->GetAppIDForShelfID(model_->items()[current_index].id);
- delegate_->UnpinAppWithID(app_id);
+ model_->GetAppIDForShelfID(model_->items()[current_index].id);
+ model_->UnpinAppWithID(app_id);
}
}
if (cancel || snap_back) {
@@ -1229,10 +1223,9 @@ ShelfView::RemovableState ShelfView::RemovableByRipOff(int index) const {
return NOT_REMOVABLE;
// Note: Only pinned app shortcuts can be removed!
- std::string app_id = delegate_->GetAppIDForShelfID(model_->items()[index].id);
- return (type == TYPE_PINNED_APP && delegate_->IsAppPinned(app_id))
- ? REMOVABLE
- : DRAGGABLE;
+ std::string app_id = model_->GetAppIDForShelfID(model_->items()[index].id);
+ return (type == TYPE_PINNED_APP && model_->IsAppPinned(app_id)) ? REMOVABLE
+ : DRAGGABLE;
}
bool ShelfView::SameDragType(ShelfItemType typea, ShelfItemType typeb) const {
@@ -1281,8 +1274,7 @@ void ShelfView::ToggleOverflowBubble() {
if (!overflow_bubble_)
overflow_bubble_.reset(new OverflowBubble(wm_shelf_));
- ShelfView* overflow_view =
- new ShelfView(model_, delegate_, wm_shelf_, shelf_widget_);
+ ShelfView* overflow_view = new ShelfView(model_, wm_shelf_, shelf_widget_);
overflow_view->overflow_mode_ = true;
overflow_view->Init();
overflow_view->set_owner_overflow_bubble(overflow_bubble_.get());
@@ -1538,6 +1530,13 @@ void ShelfView::ShelfItemRemoved(int model_index, const ShelfItem& old_item) {
void ShelfView::ShelfItemChanged(int model_index, const ShelfItem& old_item) {
const ShelfItem& item(model_->items()[model_index]);
+
+ // Bail if the view and shelf sizes do not match. ShelfItemChanged may be
+ // called here before ShelfItemAdded, due to ChromeLauncherController's
+ // item initialization, which calls SetItem during ShelfItemAdded.
+ if (static_cast<int>(model_->items().size()) != view_model_->view_size())
+ return;
+
if (old_item.type != item.type) {
// Type changed, swap the views.
model_index = CancelDrag(model_index);
« no previous file with comments | « ash/shelf/shelf_view.h ('k') | ash/shelf/shelf_widget.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698