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

Side by Side Diff: ui/app_list/views/apps_grid_view.cc

Issue 2143893002: Purge the App Launcher code from Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 unified diff | Download patch
OLDNEW
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 "ui/app_list/views/apps_grid_view.h" 5 #include "ui/app_list/views/apps_grid_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 10
(...skipping 17 matching lines...) Expand all
28 #include "ui/gfx/animation/animation.h" 28 #include "ui/gfx/animation/animation.h"
29 #include "ui/gfx/geometry/vector2d.h" 29 #include "ui/gfx/geometry/vector2d.h"
30 #include "ui/gfx/geometry/vector2d_conversions.h" 30 #include "ui/gfx/geometry/vector2d_conversions.h"
31 #include "ui/views/border.h" 31 #include "ui/views/border.h"
32 #include "ui/views/view_model_utils.h" 32 #include "ui/views/view_model_utils.h"
33 #include "ui/views/widget/widget.h" 33 #include "ui/views/widget/widget.h"
34 34
35 #if defined(USE_AURA) 35 #if defined(USE_AURA)
36 #include "ui/aura/window.h" 36 #include "ui/aura/window.h"
37 #include "ui/aura/window_event_dispatcher.h" 37 #include "ui/aura/window_event_dispatcher.h"
38 #if defined(OS_WIN)
39 #include "ui/views/win/hwnd_util.h"
40 #endif // defined(OS_WIN)
41 #endif // defined(USE_AURA) 38 #endif // defined(USE_AURA)
42 39
43 #if defined(OS_WIN)
44 #include "base/command_line.h"
45 #include "base/files/file_path.h"
46 #include "base/win/shortcut.h"
47 #include "ui/base/dragdrop/drag_utils.h"
48 #include "ui/base/dragdrop/drop_target_win.h"
49 #include "ui/base/dragdrop/os_exchange_data.h"
50 #include "ui/base/dragdrop/os_exchange_data_provider_win.h"
51 #include "ui/display/win/screen_win.h"
52 #endif
53
54 namespace app_list { 40 namespace app_list {
55 41
56 namespace { 42 namespace {
57 43
58 // Distance a drag needs to be from the app grid to be considered 'outside', at 44 // Distance a drag needs to be from the app grid to be considered 'outside', at
59 // which point we rearrange the apps to their pre-drag configuration, as a drop 45 // which point we rearrange the apps to their pre-drag configuration, as a drop
60 // then would be canceled. We have a buffer to make it easier to drag apps to 46 // then would be canceled. We have a buffer to make it easier to drag apps to
61 // other pages. 47 // other pages.
62 const int kDragBufferPx = 20; 48 const int kDragBufferPx = 20;
63 49
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 (static_cast<AppListFolderItem*>(item))->folder_type() == 212 (static_cast<AppListFolderItem*>(item))->folder_type() ==
227 AppListFolderItem::FOLDER_TYPE_OEM; 213 AppListFolderItem::FOLDER_TYPE_OEM;
228 } 214 }
229 215
230 int ClampToRange(int value, int min, int max) { 216 int ClampToRange(int value, int min, int max) {
231 return std::min(std::max(value, min), max); 217 return std::min(std::max(value, min), max);
232 } 218 }
233 219
234 } // namespace 220 } // namespace
235 221
236 #if defined(OS_WIN)
237 // Interprets drag events sent from Windows via the drag/drop API and forwards
238 // them to AppsGridView.
239 // On Windows, in order to have the OS perform the drag properly we need to
240 // provide it with a shortcut file which may or may not exist at the time the
241 // drag is started. Therefore while waiting for that shortcut to be located we
242 // just do a regular "internal" drag and transition into the synchronous drag
243 // when the shortcut is found/created. Hence a synchronous drag is an optional
244 // phase of a regular drag and non-Windows platforms drags are equivalent to a
245 // Windows drag that never enters the synchronous drag phase.
246 class SynchronousDrag : public ui::DragSourceWin {
247 public:
248 SynchronousDrag(AppsGridView* grid_view,
249 AppListItemView* drag_view,
250 const gfx::Point& drag_view_offset)
251 : grid_view_(grid_view),
252 drag_view_(drag_view),
253 drag_view_offset_(drag_view_offset),
254 has_shortcut_path_(false),
255 running_(false),
256 canceled_(false) {}
257
258 void set_shortcut_path(const base::FilePath& shortcut_path) {
259 has_shortcut_path_ = true;
260 shortcut_path_ = shortcut_path;
261 }
262
263 bool running() { return running_; }
264
265 bool CanRun() {
266 return has_shortcut_path_ && !running_;
267 }
268
269 void Run() {
270 DCHECK(CanRun());
271
272 // Prevent the synchronous dragger being destroyed while the drag is
273 // running.
274 Microsoft::WRL::ComPtr<SynchronousDrag> this_ref = this;
275 running_ = true;
276
277 ui::OSExchangeData data;
278 SetupExchangeData(&data);
279
280 // Hide the dragged view because the OS is going to create its own.
281 drag_view_->SetVisible(false);
282
283 // Blocks until the drag is finished. Calls into the ui::DragSourceWin
284 // methods.
285 DWORD effects;
286 DoDragDrop(ui::OSExchangeDataProviderWin::GetIDataObject(data),
287 this, DROPEFFECT_MOVE | DROPEFFECT_LINK, &effects);
288
289 // If |drag_view_| is NULL the drag was ended by some reentrant code.
290 if (drag_view_) {
291 // Make the drag view visible again.
292 drag_view_->SetVisible(true);
293 drag_view_->OnSyncDragEnd();
294
295 grid_view_->EndDrag(canceled_ || !IsCursorWithinGridView());
296 }
297 }
298
299 void EndDragExternally() {
300 CancelDrag();
301 DCHECK(drag_view_);
302 drag_view_->SetVisible(true);
303 drag_view_ = NULL;
304 }
305
306 private:
307 // Overridden from ui::DragSourceWin.
308 void OnDragSourceCancel() override { canceled_ = true; }
309
310 void OnDragSourceDrop() override {}
311
312 void OnDragSourceMove() override {
313 grid_view_->UpdateDrag(AppsGridView::MOUSE, GetCursorInGridViewCoords());
314 }
315
316 void SetupExchangeData(ui::OSExchangeData* data) {
317 data->SetFilename(shortcut_path_);
318 drag_utils::SetDragImageOnDataObject(
319 drag_view_->GetDragImage(),
320 drag_view_offset_ - drag_view_->GetDragImageOffset(), data);
321 }
322
323 HWND GetGridViewHWND() {
324 return views::HWNDForView(grid_view_);
325 }
326
327 bool IsCursorWithinGridView() {
328 POINT p;
329 GetCursorPos(&p);
330 return GetGridViewHWND() == WindowFromPoint(p);
331 }
332
333 gfx::Point GetCursorInGridViewCoords() {
334 POINT p;
335 GetCursorPos(&p);
336 ScreenToClient(GetGridViewHWND(), &p);
337 gfx::Point grid_view_pt(p.x, p.y);
338 grid_view_pt =
339 display::win::ScreenWin::ClientToDIPPoint(GetGridViewHWND(),
340 grid_view_pt);
341 views::View::ConvertPointFromWidget(grid_view_, &grid_view_pt);
342 return grid_view_pt;
343 }
344
345 AppsGridView* grid_view_;
346 AppListItemView* drag_view_;
347 gfx::Point drag_view_offset_;
348 bool has_shortcut_path_;
349 base::FilePath shortcut_path_;
350 bool running_;
351 bool canceled_;
352
353 DISALLOW_COPY_AND_ASSIGN(SynchronousDrag);
354 };
355 #endif // defined(OS_WIN)
356
357 AppsGridView::AppsGridView(AppsGridViewDelegate* delegate) 222 AppsGridView::AppsGridView(AppsGridViewDelegate* delegate)
358 : model_(NULL), 223 : model_(NULL),
359 item_list_(NULL), 224 item_list_(NULL),
360 delegate_(delegate), 225 delegate_(delegate),
361 folder_delegate_(NULL), 226 folder_delegate_(NULL),
362 page_switcher_view_(NULL), 227 page_switcher_view_(NULL),
363 cols_(0), 228 cols_(0),
364 rows_per_page_(0), 229 rows_per_page_(0),
365 selected_view_(NULL), 230 selected_view_(NULL),
366 drag_view_(NULL), 231 drag_view_(NULL),
367 drag_start_page_(-1), 232 drag_start_page_(-1),
368 #if defined(OS_WIN)
369 use_synchronous_drag_(true),
370 #endif
371 drag_pointer_(NONE), 233 drag_pointer_(NONE),
372 drop_attempt_(DROP_FOR_NONE), 234 drop_attempt_(DROP_FOR_NONE),
373 drag_and_drop_host_(NULL), 235 drag_and_drop_host_(NULL),
374 forward_events_to_drag_and_drop_host_(false), 236 forward_events_to_drag_and_drop_host_(false),
375 page_flip_target_(-1), 237 page_flip_target_(-1),
376 page_flip_delay_in_ms_(kPageFlipDelayInMs), 238 page_flip_delay_in_ms_(kPageFlipDelayInMs),
377 bounds_animator_(this), 239 bounds_animator_(this),
378 activated_folder_item_view_(NULL), 240 activated_folder_item_view_(NULL),
379 dragging_for_reparent_item_(false) { 241 dragging_for_reparent_item_(false) {
380 SetPaintToLayer(true); 242 SetPaintToLayer(true);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 365
504 drag_view_ = view; 366 drag_view_ = view;
505 drag_view_init_index_ = GetIndexOfView(drag_view_); 367 drag_view_init_index_ = GetIndexOfView(drag_view_);
506 drag_view_offset_ = event.location(); 368 drag_view_offset_ = event.location();
507 drag_start_page_ = pagination_model_.selected_page(); 369 drag_start_page_ = pagination_model_.selected_page();
508 reorder_placeholder_ = drag_view_init_index_; 370 reorder_placeholder_ = drag_view_init_index_;
509 ExtractDragLocation(event, &drag_start_grid_view_); 371 ExtractDragLocation(event, &drag_start_grid_view_);
510 drag_view_start_ = gfx::Point(drag_view_->x(), drag_view_->y()); 372 drag_view_start_ = gfx::Point(drag_view_->x(), drag_view_->y());
511 } 373 }
512 374
513 void AppsGridView::StartSettingUpSynchronousDrag() {
514 #if defined(OS_WIN)
515 if (!delegate_ || !use_synchronous_drag_)
516 return;
517
518 // Folders and downloading items can't be integrated with the OS.
519 if (IsFolderItem(drag_view_->item()) || drag_view_->item()->is_installing())
520 return;
521
522 // Favor the drag and drop host over native win32 drag. For the Win8/ash
523 // launcher we want to have ashes drag and drop over win32's.
524 if (drag_and_drop_host_)
525 return;
526
527 // Never create a second synchronous drag if the drag started in a folder.
528 if (IsDraggingForReparentInRootLevelGridView())
529 return;
530
531 synchronous_drag_ = Microsoft::WRL::Make<SynchronousDrag>(this, drag_view_,
532 drag_view_offset_);
533 delegate_->GetShortcutPathForApp(drag_view_->item()->id(),
534 base::Bind(&AppsGridView::OnGotShortcutPath,
535 base::Unretained(this),
536 synchronous_drag_));
537 #endif
538 }
539
540 bool AppsGridView::RunSynchronousDrag() {
541 #if defined(OS_WIN)
542 if (!synchronous_drag_.Get())
543 return false;
544
545 if (synchronous_drag_->CanRun()) {
546 if (IsDraggingForReparentInHiddenGridView())
547 folder_delegate_->SetRootLevelDragViewVisible(false);
548 synchronous_drag_->Run();
549 synchronous_drag_ = nullptr;
550 return true;
551 } else if (!synchronous_drag_->running()) {
552 // The OS drag is not ready yet. If the root grid has a drag view because
553 // a reparent has started, ensure it is visible.
554 if (IsDraggingForReparentInHiddenGridView())
555 folder_delegate_->SetRootLevelDragViewVisible(true);
556 }
557 #endif
558 return false;
559 }
560
561 void AppsGridView::CleanUpSynchronousDrag() {
562 #if defined(OS_WIN)
563 if (synchronous_drag_.Get())
564 synchronous_drag_->EndDragExternally();
565
566 synchronous_drag_ = nullptr;
567 #endif
568 }
569
570 #if defined(OS_WIN)
571 void AppsGridView::OnGotShortcutPath(
572 Microsoft::WRL::ComPtr<SynchronousDrag> synchronous_drag,
573 const base::FilePath& path) {
574 // Drag may have ended before we get the shortcut path or a new drag may have
575 // begun.
576 if (synchronous_drag_ != synchronous_drag)
577 return;
578 // Setting the shortcut path here means the next time we hit UpdateDrag()
579 // we'll enter the synchronous drag.
580 // NOTE we don't Run() the drag here because that causes animations not to
581 // update for some reason.
582 synchronous_drag_->set_shortcut_path(path);
583 DCHECK(synchronous_drag_->CanRun());
584 }
585 #endif
586
587 bool AppsGridView::UpdateDragFromItem(Pointer pointer, 375 bool AppsGridView::UpdateDragFromItem(Pointer pointer,
588 const ui::LocatedEvent& event) { 376 const ui::LocatedEvent& event) {
589 if (!drag_view_) 377 if (!drag_view_)
590 return false; // Drag canceled. 378 return false; // Drag canceled.
591 379
592 gfx::Point drag_point_in_grid_view; 380 gfx::Point drag_point_in_grid_view;
593 ExtractDragLocation(event, &drag_point_in_grid_view); 381 ExtractDragLocation(event, &drag_point_in_grid_view);
594 UpdateDrag(pointer, drag_point_in_grid_view); 382 UpdateDrag(pointer, drag_point_in_grid_view);
595 if (!dragging()) 383 if (!dragging())
596 return false; 384 return false;
597 385
598 // If a drag and drop host is provided, see if the drag operation needs to be 386 // If a drag and drop host is provided, see if the drag operation needs to be
599 // forwarded. 387 // forwarded.
600 gfx::Point location_in_screen = drag_point_in_grid_view; 388 gfx::Point location_in_screen = drag_point_in_grid_view;
601 views::View::ConvertPointToScreen(this, &location_in_screen); 389 views::View::ConvertPointToScreen(this, &location_in_screen);
602 DispatchDragEventToDragAndDropHost(location_in_screen); 390 DispatchDragEventToDragAndDropHost(location_in_screen);
603 if (drag_and_drop_host_) 391 if (drag_and_drop_host_)
604 drag_and_drop_host_->UpdateDragIconProxy(location_in_screen); 392 drag_and_drop_host_->UpdateDragIconProxy(location_in_screen);
605 return true; 393 return true;
606 } 394 }
607 395
608 void AppsGridView::UpdateDrag(Pointer pointer, const gfx::Point& point) { 396 void AppsGridView::UpdateDrag(Pointer pointer, const gfx::Point& point) {
609 if (folder_delegate_) 397 if (folder_delegate_)
610 UpdateDragStateInsideFolder(pointer, point); 398 UpdateDragStateInsideFolder(pointer, point);
611 399
612 if (!drag_view_) 400 if (!drag_view_)
613 return; // Drag canceled. 401 return; // Drag canceled.
614 402
615 if (RunSynchronousDrag())
616 return;
617
618 gfx::Vector2d drag_vector(point - drag_start_grid_view_); 403 gfx::Vector2d drag_vector(point - drag_start_grid_view_);
619 if (!dragging() && ExceededDragThreshold(drag_vector)) { 404 if (!dragging() && ExceededDragThreshold(drag_vector)) {
620 drag_pointer_ = pointer; 405 drag_pointer_ = pointer;
621 // Move the view to the front so that it appears on top of other views. 406 // Move the view to the front so that it appears on top of other views.
622 ReorderChildView(drag_view_, -1); 407 ReorderChildView(drag_view_, -1);
623 bounds_animator_.StopAnimatingView(drag_view_); 408 bounds_animator_.StopAnimatingView(drag_view_);
624 // Stopping the animation may have invalidated our drag view due to the 409 // Stopping the animation may have invalidated our drag view due to the
625 // view hierarchy changing. 410 // view hierarchy changing.
626 if (!drag_view_) 411 if (!drag_view_)
627 return; 412 return;
628 413
629 StartSettingUpSynchronousDrag();
630 if (!dragging_for_reparent_item_) 414 if (!dragging_for_reparent_item_)
631 StartDragAndDropHostDrag(point); 415 StartDragAndDropHostDrag(point);
632 } 416 }
633 417
634 if (drag_pointer_ != pointer) 418 if (drag_pointer_ != pointer)
635 return; 419 return;
636 420
637 drag_view_->SetPosition(drag_view_start_ + drag_vector); 421 drag_view_->SetPosition(drag_view_start_ + drag_vector);
638 422
639 last_drag_point_ = point; 423 last_drag_point_ = point;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 int i = reorder_drop_target_.slot; 511 int i = reorder_drop_target_.slot;
728 gfx::Rect bounds = view_model_.ideal_bounds(i); 512 gfx::Rect bounds = view_model_.ideal_bounds(i);
729 drag_view_->SetBoundsRect(bounds); 513 drag_view_->SetBoundsRect(bounds);
730 } 514 }
731 // Fade in slowly if it landed in the shelf. 515 // Fade in slowly if it landed in the shelf.
732 SetViewHidden(drag_view_, false /* show */, 516 SetViewHidden(drag_view_, false /* show */,
733 !landed_in_drag_and_drop_host /* animate */); 517 !landed_in_drag_and_drop_host /* animate */);
734 } 518 }
735 } 519 }
736 520
737 // The drag can be ended after the synchronous drag is created but before it
738 // is Run().
739 CleanUpSynchronousDrag();
740
741 SetAsFolderDroppingTarget(folder_drop_target_, false); 521 SetAsFolderDroppingTarget(folder_drop_target_, false);
742 ClearDragState(); 522 ClearDragState();
743 AnimateToIdealBounds(); 523 AnimateToIdealBounds();
744 524
745 StopPageFlipTimer(); 525 StopPageFlipTimer();
746 526
747 // If user releases mouse inside a folder's grid view, burst the folder 527 // If user releases mouse inside a folder's grid view, burst the folder
748 // container ink bubble. 528 // container ink bubble.
749 if (folder_delegate_ && !IsDraggingForReparentInHiddenGridView()) 529 if (folder_delegate_ && !IsDraggingForReparentInHiddenGridView())
750 folder_delegate_->UpdateFolderViewBackground(false); 530 folder_delegate_->UpdateFolderViewBackground(false);
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after
1468 if (drop_attempt_ == DROP_FOR_REORDER) { 1248 if (drop_attempt_ == DROP_FOR_REORDER) {
1469 reorder_placeholder_ = reorder_drop_target_; 1249 reorder_placeholder_ = reorder_drop_target_;
1470 AnimateToIdealBounds(); 1250 AnimateToIdealBounds();
1471 } 1251 }
1472 } 1252 }
1473 1253
1474 void AppsGridView::OnFolderItemReparentTimer() { 1254 void AppsGridView::OnFolderItemReparentTimer() {
1475 DCHECK(folder_delegate_); 1255 DCHECK(folder_delegate_);
1476 if (drag_out_of_folder_container_ && drag_view_) { 1256 if (drag_out_of_folder_container_ && drag_view_) {
1477 bool has_native_drag = drag_and_drop_host_ != nullptr; 1257 bool has_native_drag = drag_and_drop_host_ != nullptr;
1478 #if defined(OS_WIN)
1479 has_native_drag = has_native_drag || synchronous_drag_.Get();
1480 #endif
1481 folder_delegate_->ReparentItem( 1258 folder_delegate_->ReparentItem(
1482 drag_view_, last_drag_point_, has_native_drag); 1259 drag_view_, last_drag_point_, has_native_drag);
1483 1260
1484 // Set the flag in the folder's grid view. 1261 // Set the flag in the folder's grid view.
1485 dragging_for_reparent_item_ = true; 1262 dragging_for_reparent_item_ = true;
1486 1263
1487 // Do not observe any data change since it is going to be hidden. 1264 // Do not observe any data change since it is going to be hidden.
1488 item_list_->RemoveObserver(this); 1265 item_list_->RemoveObserver(this);
1489 item_list_ = NULL; 1266 item_list_ = NULL;
1490 } 1267 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1581 } else if (drop_attempt_ == DROP_FOR_FOLDER && 1358 } else if (drop_attempt_ == DROP_FOR_FOLDER &&
1582 IsValidIndex(folder_drop_target_)) { 1359 IsValidIndex(folder_drop_target_)) {
1583 cancel_reparent = 1360 cancel_reparent =
1584 !ReparentItemToAnotherFolder(drag_view_, folder_drop_target_); 1361 !ReparentItemToAnotherFolder(drag_view_, folder_drop_target_);
1585 } else { 1362 } else {
1586 NOTREACHED(); 1363 NOTREACHED();
1587 } 1364 }
1588 SetViewHidden(drag_view_, false /* show */, true /* no animate */); 1365 SetViewHidden(drag_view_, false /* show */, true /* no animate */);
1589 } 1366 }
1590 1367
1591 // The drag can be ended after the synchronous drag is created but before it
1592 // is Run().
1593 CleanUpSynchronousDrag();
1594
1595 SetAsFolderDroppingTarget(folder_drop_target_, false); 1368 SetAsFolderDroppingTarget(folder_drop_target_, false);
1596 if (cancel_reparent) { 1369 if (cancel_reparent) {
1597 CancelFolderItemReparent(drag_view_); 1370 CancelFolderItemReparent(drag_view_);
1598 } else { 1371 } else {
1599 // By setting |drag_view_| to NULL here, we prevent ClearDragState() from 1372 // By setting |drag_view_| to NULL here, we prevent ClearDragState() from
1600 // cleaning up the newly created AppListItemView, effectively claiming 1373 // cleaning up the newly created AppListItemView, effectively claiming
1601 // ownership of the newly created drag view. 1374 // ownership of the newly created drag view.
1602 drag_view_->OnDragEnded(); 1375 drag_view_->OnDragEnded();
1603 drag_view_ = NULL; 1376 drag_view_ = NULL;
1604 } 1377 }
1605 ClearDragState(); 1378 ClearDragState();
1606 AnimateToIdealBounds(); 1379 AnimateToIdealBounds();
1607 1380
1608 StopPageFlipTimer(); 1381 StopPageFlipTimer();
1609 } 1382 }
1610 1383
1611 void AppsGridView::EndDragForReparentInHiddenFolderGridView() { 1384 void AppsGridView::EndDragForReparentInHiddenFolderGridView() {
1612 if (drag_and_drop_host_) { 1385 if (drag_and_drop_host_) {
1613 // If we had a drag and drop proxy icon, we delete it and make the real 1386 // If we had a drag and drop proxy icon, we delete it and make the real
1614 // item visible again. 1387 // item visible again.
1615 drag_and_drop_host_->DestroyDragIconProxy(); 1388 drag_and_drop_host_->DestroyDragIconProxy();
1616 } 1389 }
1617 1390
1618 // The drag can be ended after the synchronous drag is created but before it
1619 // is Run().
1620 CleanUpSynchronousDrag();
1621
1622 SetAsFolderDroppingTarget(folder_drop_target_, false); 1391 SetAsFolderDroppingTarget(folder_drop_target_, false);
1623 ClearDragState(); 1392 ClearDragState();
1624 } 1393 }
1625 1394
1626 void AppsGridView::OnFolderItemRemoved() { 1395 void AppsGridView::OnFolderItemRemoved() {
1627 DCHECK(folder_delegate_); 1396 DCHECK(folder_delegate_);
1628 if (item_list_) 1397 if (item_list_)
1629 item_list_->RemoveObserver(this); 1398 item_list_->RemoveObserver(this);
1630 item_list_ = nullptr; 1399 item_list_ = nullptr;
1631 } 1400 }
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 1948
2180 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, 1949 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index,
2181 bool is_target_folder) { 1950 bool is_target_folder) {
2182 AppListItemView* target_view = 1951 AppListItemView* target_view =
2183 GetViewDisplayedAtSlotOnCurrentPage(target_index.slot); 1952 GetViewDisplayedAtSlotOnCurrentPage(target_index.slot);
2184 if (target_view) 1953 if (target_view)
2185 target_view->SetAsAttemptedFolderTarget(is_target_folder); 1954 target_view->SetAsAttemptedFolderTarget(is_target_folder);
2186 } 1955 }
2187 1956
2188 } // namespace app_list 1957 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698