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

Side by Side Diff: chrome/browser/ui/cocoa/download/download_shelf_controller.mm

Issue 209613002: Download shelf autohides on showing in shell, just same as regular open Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added browser and unit tests. Renamed 'UserActed' to 'OpenedOrShown'. Created 4 years, 1 month 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 #import "chrome/browser/ui/cocoa/download/download_shelf_controller.h" 5 #import "chrome/browser/ui/cocoa/download/download_shelf_controller.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/mac/bundle_locations.h" 9 #include "base/mac/bundle_locations.h"
10 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
11 #include "chrome/browser/download/download_item_model.h"
11 #include "chrome/browser/download/download_stats.h" 12 #include "chrome/browser/download/download_stats.h"
12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/themes/theme_service.h" 14 #include "chrome/browser/themes/theme_service.h"
14 #include "chrome/browser/themes/theme_service_factory.h" 15 #include "chrome/browser/themes/theme_service_factory.h"
15 #include "chrome/browser/ui/browser.h" 16 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/chrome_pages.h" 17 #include "chrome/browser/ui/chrome_pages.h"
17 #import "chrome/browser/ui/cocoa/animatable_view.h" 18 #import "chrome/browser/ui/cocoa/animatable_view.h"
18 #include "chrome/browser/ui/cocoa/browser_window_cocoa.h" 19 #include "chrome/browser/ui/cocoa/browser_window_cocoa.h"
19 #import "chrome/browser/ui/cocoa/browser_window_controller.h" 20 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
20 #include "chrome/browser/ui/cocoa/download/download_item_controller.h" 21 #include "chrome/browser/ui/cocoa/download/download_item_controller.h"
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 214
214 if (!isShelfClosing) { 215 if (!isShelfClosing) {
215 [self layoutItems]; 216 [self layoutItems];
216 217
217 // If there are no more downloads or if all the remaining downloads have 218 // If there are no more downloads or if all the remaining downloads have
218 // been opened, we can close the shelf. 219 // been opened, we can close the shelf.
219 [self maybeAutoCloseAfterDelay]; 220 [self maybeAutoCloseAfterDelay];
220 } 221 }
221 } 222 }
222 223
223 - (void)downloadWasOpened:(DownloadItemController*)item_controller { 224 - (void)downloadWasOpenedOrShown:(DownloadItemController*)item_controller {
224 // This should only be called on the main thead. 225 // This should only be called on the main thead.
225 DCHECK([NSThread isMainThread]); 226 DCHECK([NSThread isMainThread]);
226 [self maybeAutoCloseAfterDelay]; 227 [self maybeAutoCloseAfterDelay];
227 } 228 }
228 229
229 - (void)showDownloadShelf:(BOOL)show 230 - (void)showDownloadShelf:(BOOL)show
230 isUserAction:(BOOL)isUserAction { 231 isUserAction:(BOOL)isUserAction {
231 [self cancelAutoClose]; 232 [self cancelAutoClose];
232 shouldCloseOnMouseExit_ = NO; 233 shouldCloseOnMouseExit_ = NO;
233 234
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 DownloadItem::DownloadState state = download->GetState(); 378 DownloadItem::DownloadState state = download->GetState();
378 bool isTransferDone = state == DownloadItem::COMPLETE || 379 bool isTransferDone = state == DownloadItem::COMPLETE ||
379 state == DownloadItem::CANCELLED || 380 state == DownloadItem::CANCELLED ||
380 state == DownloadItem::INTERRUPTED; 381 state == DownloadItem::INTERRUPTED;
381 if (isTransferDone && !download->IsDangerous()) { 382 if (isTransferDone && !download->IsDangerous()) {
382 [self removeDownload:itemController 383 [self removeDownload:itemController
383 isShelfClosing:YES]; 384 isShelfClosing:YES];
384 } else { 385 } else {
385 // Treat the item as opened when we close. This way if we get shown again 386 // Treat the item as opened when we close. This way if we get shown again
386 // the user need not open this item for the shelf to auto-close. 387 // the user need not open this item for the shelf to auto-close.
387 download->SetOpened(true); 388 DownloadItemModel(download).SetOpenedOrShown(true);
388 ++i; 389 ++i;
389 } 390 }
390 } 391 }
391 } 392 }
392 393
393 - (void)mouseEntered:(NSEvent*)event { 394 - (void)mouseEntered:(NSEvent*)event {
394 isMouseInsideView_ = YES; 395 isMouseInsideView_ = YES;
395 // If the mouse re-enters the download shelf, cancel the auto-close. Further 396 // If the mouse re-enters the download shelf, cancel the auto-close. Further
396 // mouse exits should not trigger autoclose. 397 // mouse exits should not trigger autoclose.
397 if (shouldCloseOnMouseExit_) { 398 if (shouldCloseOnMouseExit_) {
(...skipping 24 matching lines...) Expand all
422 selector:@selector(autoClose) 423 selector:@selector(autoClose)
423 object:nil]; 424 object:nil];
424 } 425 }
425 426
426 - (void)maybeAutoCloseAfterDelay { 427 - (void)maybeAutoCloseAfterDelay {
427 // We can close the shelf automatically if all the downloads on the shelf have 428 // We can close the shelf automatically if all the downloads on the shelf have
428 // been opened. 429 // been opened.
429 for (NSUInteger i = 0; i < [downloadItemControllers_ count]; ++i) { 430 for (NSUInteger i = 0; i < [downloadItemControllers_ count]; ++i) {
430 DownloadItemController* itemController = 431 DownloadItemController* itemController =
431 [downloadItemControllers_ objectAtIndex:i]; 432 [downloadItemControllers_ objectAtIndex:i];
432 if (![itemController download]->GetOpened()) 433 if (!DownloadItemModel([itemController download]).GetOpenedOrShown())
433 return; 434 return;
434 } 435 }
435 436
436 if ([self isVisible] && [downloadItemControllers_ count] > 0 && 437 if ([self isVisible] && [downloadItemControllers_ count] > 0 &&
437 isMouseInsideView_) { 438 isMouseInsideView_) {
438 // If there are download items on the shelf and the user is potentially stil 439 // If there are download items on the shelf and the user is potentially stil
439 // interacting with them, schedule an auto close after the user moves the 440 // interacting with them, schedule an auto close after the user moves the
440 // mouse off the shelf. 441 // mouse off the shelf.
441 shouldCloseOnMouseExit_ = YES; 442 shouldCloseOnMouseExit_ = YES;
442 } else { 443 } else {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 } 507 }
507 508
508 // Set the tracking off to create a new tracking area for the control. 509 // Set the tracking off to create a new tracking area for the control.
509 // When changing the bounds/frame on a HoverButton, the tracking isn't updated 510 // When changing the bounds/frame on a HoverButton, the tracking isn't updated
510 // correctly, it needs to be turned off and back on. 511 // correctly, it needs to be turned off and back on.
511 [hoverCloseButton_ setTrackingEnabled:NO]; 512 [hoverCloseButton_ setTrackingEnabled:NO];
512 [hoverCloseButton_ setFrame:bounds]; 513 [hoverCloseButton_ setFrame:bounds];
513 [hoverCloseButton_ setTrackingEnabled:YES]; 514 [hoverCloseButton_ setTrackingEnabled:YES];
514 } 515 }
515 @end 516 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698