| 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 #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 "base/mac/bundle_locations.h" | 7 #include "base/mac/bundle_locations.h" |
| 8 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
| 9 #include "chrome/browser/download/download_stats.h" | 9 #include "chrome/browser/download/download_stats.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 name:kWillEnterFullscreenNotification | 135 name:kWillEnterFullscreenNotification |
| 136 object:nil]; | 136 object:nil]; |
| 137 [defaultCenter addObserver:self | 137 [defaultCenter addObserver:self |
| 138 selector:@selector(willLeaveFullscreen) | 138 selector:@selector(willLeaveFullscreen) |
| 139 name:kWillLeaveFullscreenNotification | 139 name:kWillLeaveFullscreenNotification |
| 140 object:nil]; | 140 object:nil]; |
| 141 [self installTrackingArea]; | 141 [self installTrackingArea]; |
| 142 } | 142 } |
| 143 | 143 |
| 144 - (void)dealloc { | 144 - (void)dealloc { |
| 145 [[NSNotificationCenter defaultCenter] removeObserver:self]; | 145 [self browserWillBeDestroyed]; |
| 146 [self cancelAutoClose]; | |
| 147 [self removeTrackingArea]; | |
| 148 | |
| 149 // The controllers will unregister themselves as observers when they are | |
| 150 // deallocated. No need to do that here. | |
| 151 [super dealloc]; | 146 [super dealloc]; |
| 152 } | 147 } |
| 153 | 148 |
| 149 - (void)browserWillBeDestroyed { |
| 150 [[NSNotificationCenter defaultCenter] removeObserver:self]; |
| 151 |
| 152 // We need to explicitly release our download controllers here since they need |
| 153 // to remove themselves as observers before the remaining shutdown happens. |
| 154 [[self animatableView] stopAnimation]; |
| 155 [self removeTrackingArea]; |
| 156 [self cancelAutoClose]; |
| 157 while ([downloadItemControllers_ count] > 0) { |
| 158 [self removeDownload:[downloadItemControllers_ lastObject] |
| 159 isShelfClosing:YES]; |
| 160 } |
| 161 downloadItemControllers_.reset(); |
| 162 |
| 163 bridge_.reset(); |
| 164 navigator_ = nullptr; |
| 165 } |
| 166 |
| 154 // Called after the frame's rect has changed; usually when the height is | 167 // Called after the frame's rect has changed; usually when the height is |
| 155 // animated. | 168 // animated. |
| 156 - (void)viewFrameDidChange:(NSNotification*)notification { | 169 - (void)viewFrameDidChange:(NSNotification*)notification { |
| 157 // Anchor subviews at the top of |view|, so that it looks like the shelf | 170 // Anchor subviews at the top of |view|, so that it looks like the shelf |
| 158 // is sliding out. | 171 // is sliding out. |
| 159 CGFloat newShelfHeight = NSHeight([[self view] frame]); | 172 CGFloat newShelfHeight = NSHeight([[self view] frame]); |
| 160 if (newShelfHeight == currentShelfHeight_) | 173 if (newShelfHeight == currentShelfHeight_) |
| 161 return; | 174 return; |
| 162 | 175 |
| 163 for (NSView* view in [[self view] subviews]) { | 176 for (NSView* view in [[self view] subviews]) { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 [self maybeAutoCloseAfterDelay]; | 219 [self maybeAutoCloseAfterDelay]; |
| 207 } | 220 } |
| 208 } | 221 } |
| 209 | 222 |
| 210 - (void)downloadWasOpened:(DownloadItemController*)item_controller { | 223 - (void)downloadWasOpened:(DownloadItemController*)item_controller { |
| 211 // This should only be called on the main thead. | 224 // This should only be called on the main thead. |
| 212 DCHECK([NSThread isMainThread]); | 225 DCHECK([NSThread isMainThread]); |
| 213 [self maybeAutoCloseAfterDelay]; | 226 [self maybeAutoCloseAfterDelay]; |
| 214 } | 227 } |
| 215 | 228 |
| 216 // We need to explicitly release our download controllers here since they need | |
| 217 // to remove themselves as observers before the remaining shutdown happens. | |
| 218 - (void)exiting { | |
| 219 [[self animatableView] stopAnimation]; | |
| 220 [self removeTrackingArea]; | |
| 221 [self cancelAutoClose]; | |
| 222 while ([downloadItemControllers_ count] > 0) { | |
| 223 [self removeDownload:[downloadItemControllers_ lastObject] | |
| 224 isShelfClosing:YES]; | |
| 225 } | |
| 226 downloadItemControllers_.reset(); | |
| 227 } | |
| 228 | |
| 229 - (void)showDownloadShelf:(BOOL)show | 229 - (void)showDownloadShelf:(BOOL)show |
| 230 isUserAction:(BOOL)isUserAction { | 230 isUserAction:(BOOL)isUserAction { |
| 231 [self cancelAutoClose]; | 231 [self cancelAutoClose]; |
| 232 shouldCloseOnMouseExit_ = NO; | 232 shouldCloseOnMouseExit_ = NO; |
| 233 | 233 |
| 234 if ([self isVisible] == show) | 234 if ([self isVisible] == show) |
| 235 return; | 235 return; |
| 236 | 236 |
| 237 if (!show) { | 237 if (!show) { |
| 238 int numInProgress = 0; | 238 int numInProgress = 0; |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 } | 504 } |
| 505 | 505 |
| 506 // Set the tracking off to create a new tracking area for the control. | 506 // Set the tracking off to create a new tracking area for the control. |
| 507 // When changing the bounds/frame on a HoverButton, the tracking isn't updated | 507 // When changing the bounds/frame on a HoverButton, the tracking isn't updated |
| 508 // correctly, it needs to be turned off and back on. | 508 // correctly, it needs to be turned off and back on. |
| 509 [hoverCloseButton_ setTrackingEnabled:NO]; | 509 [hoverCloseButton_ setTrackingEnabled:NO]; |
| 510 [hoverCloseButton_ setFrame:bounds]; | 510 [hoverCloseButton_ setFrame:bounds]; |
| 511 [hoverCloseButton_ setTrackingEnabled:YES]; | 511 [hoverCloseButton_ setTrackingEnabled:YES]; |
| 512 } | 512 } |
| 513 @end | 513 @end |
| OLD | NEW |