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

Side by Side Diff: chrome/browser/ui/gtk/download/download_shelf_gtk.cc

Issue 11673004: No need to pass DownloadItemModel ownership. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DownloadShelfContextMenu class cleanup and require GetMenuModel() to return non-NULL Created 7 years, 11 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 | Annotate | Revision Log
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 "chrome/browser/ui/gtk/download/download_shelf_gtk.h" 5 #include "chrome/browser/ui/gtk/download/download_shelf_gtk.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "chrome/browser/download/download_item_model.h" 10 #include "chrome/browser/download/download_item_model.h"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 items_hbox_.Destroy(); 172 items_hbox_.Destroy();
173 173
174 // Make sure we're no longer an observer of the message loop. 174 // Make sure we're no longer an observer of the message loop.
175 SetCloseOnMouseOut(false); 175 SetCloseOnMouseOut(false);
176 } 176 }
177 177
178 content::PageNavigator* DownloadShelfGtk::GetNavigator() { 178 content::PageNavigator* DownloadShelfGtk::GetNavigator() {
179 return browser_; 179 return browser_;
180 } 180 }
181 181
182 void DownloadShelfGtk::DoAddDownload(DownloadItemModel* download_model) { 182 void DownloadShelfGtk::DoAddDownload(DownloadItem* download) {
183 download_items_.push_back(new DownloadItemGtk(this, download_model)); 183 download_items_.push_back(new DownloadItemGtk(this, download));
184 } 184 }
185 185
186 bool DownloadShelfGtk::IsShowing() const { 186 bool DownloadShelfGtk::IsShowing() const {
187 return slide_widget_->IsShowing(); 187 return slide_widget_->IsShowing();
188 } 188 }
189 189
190 bool DownloadShelfGtk::IsClosing() const { 190 bool DownloadShelfGtk::IsClosing() const {
191 return slide_widget_->IsClosing(); 191 return slide_widget_->IsClosing();
192 } 192 }
193 193
194 void DownloadShelfGtk::DoShow() { 194 void DownloadShelfGtk::DoShow() {
195 slide_widget_->Open(); 195 slide_widget_->Open();
196 browser_->UpdateDownloadShelfVisibility(true); 196 browser_->UpdateDownloadShelfVisibility(true);
197 CancelAutoClose(); 197 CancelAutoClose();
198 } 198 }
199 199
200 void DownloadShelfGtk::DoClose() { 200 void DownloadShelfGtk::DoClose() {
201 // When we are closing, we can vertically overlap the render view. Make sure 201 // When we are closing, we can vertically overlap the render view. Make sure
202 // we are on top. 202 // we are on top.
203 gdk_window_raise(gtk_widget_get_window(shelf_.get())); 203 gdk_window_raise(gtk_widget_get_window(shelf_.get()));
204 slide_widget_->Close(); 204 slide_widget_->Close();
205 browser_->UpdateDownloadShelfVisibility(false); 205 browser_->UpdateDownloadShelfVisibility(false);
206 int num_in_progress = 0; 206 int num_in_progress = 0;
207 for (size_t i = 0; i < download_items_.size(); ++i) { 207 for (size_t i = 0; i < download_items_.size(); ++i) {
208 if (download_items_[i]->get_download()->IsInProgress()) 208 if (download_items_[i]->download()->IsInProgress())
209 ++num_in_progress; 209 ++num_in_progress;
210 } 210 }
211 download_util::RecordShelfClose( 211 download_util::RecordShelfClose(
212 download_items_.size(), num_in_progress, close_on_mouse_out_); 212 download_items_.size(), num_in_progress, close_on_mouse_out_);
213 SetCloseOnMouseOut(false); 213 SetCloseOnMouseOut(false);
214 } 214 }
215 215
216 Browser* DownloadShelfGtk::browser() const { 216 Browser* DownloadShelfGtk::browser() const {
217 return browser_; 217 return browser_;
218 } 218 }
219 219
220 void DownloadShelfGtk::Closed() { 220 void DownloadShelfGtk::Closed() {
221 // Don't remove completed downloads if the shelf is just being auto-hidden 221 // Don't remove completed downloads if the shelf is just being auto-hidden
222 // rather than explicitly closed by the user. 222 // rather than explicitly closed by the user.
223 if (is_hidden()) 223 if (is_hidden())
224 return; 224 return;
225 // When the close animation is complete, remove all completed downloads. 225 // When the close animation is complete, remove all completed downloads.
226 size_t i = 0; 226 size_t i = 0;
227 while (i < download_items_.size()) { 227 while (i < download_items_.size()) {
228 DownloadItem* download = download_items_[i]->get_download(); 228 DownloadItem* download = download_items_[i]->download();
229 bool is_transfer_done = download->IsComplete() || 229 bool is_transfer_done = download->IsComplete() ||
230 download->IsCancelled() || 230 download->IsCancelled() ||
231 download->IsInterrupted(); 231 download->IsInterrupted();
232 if (is_transfer_done && 232 if (is_transfer_done &&
233 download->GetSafetyState() != DownloadItem::DANGEROUS) { 233 download->GetSafetyState() != DownloadItem::DANGEROUS) {
234 RemoveDownloadItem(download_items_[i]); 234 RemoveDownloadItem(download_items_[i]);
235 } else { 235 } else {
236 // We set all remaining items as "opened", so that the shelf will auto- 236 // We set all remaining items as "opened", so that the shelf will auto-
237 // close in the future without the user clicking on them. 237 // close in the future without the user clicking on them.
238 download->SetOpened(true); 238 download->SetOpened(true);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 Close(); 309 Close();
310 } else { 310 } else {
311 // The link button was clicked. 311 // The link button was clicked.
312 chrome::ShowDownloads(browser_); 312 chrome::ShowDownloads(browser_);
313 } 313 }
314 } 314 }
315 315
316 void DownloadShelfGtk::AutoCloseIfPossible() { 316 void DownloadShelfGtk::AutoCloseIfPossible() {
317 for (std::vector<DownloadItemGtk*>::iterator iter = download_items_.begin(); 317 for (std::vector<DownloadItemGtk*>::iterator iter = download_items_.begin();
318 iter != download_items_.end(); ++iter) { 318 iter != download_items_.end(); ++iter) {
319 if (!(*iter)->get_download()->GetOpened()) 319 if (!(*iter)->download()->GetOpened())
320 return; 320 return;
321 } 321 }
322 322
323 SetCloseOnMouseOut(true); 323 SetCloseOnMouseOut(true);
324 } 324 }
325 325
326 void DownloadShelfGtk::CancelAutoClose() { 326 void DownloadShelfGtk::CancelAutoClose() {
327 SetCloseOnMouseOut(false); 327 SetCloseOnMouseOut(false);
328 weak_factory_.InvalidateWeakPtrs(); 328 weak_factory_.InvalidateWeakPtrs();
329 } 329 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 396
397 MessageLoop::current()->PostDelayedTask( 397 MessageLoop::current()->PostDelayedTask(
398 FROM_HERE, 398 FROM_HERE,
399 base::Bind(&DownloadShelfGtk::Close, weak_factory_.GetWeakPtr()), 399 base::Bind(&DownloadShelfGtk::Close, weak_factory_.GetWeakPtr()),
400 base::TimeDelta::FromMilliseconds(kAutoCloseDelayMs)); 400 base::TimeDelta::FromMilliseconds(kAutoCloseDelayMs));
401 } 401 }
402 402
403 void DownloadShelfGtk::MouseEnteredShelf() { 403 void DownloadShelfGtk::MouseEnteredShelf() {
404 weak_factory_.InvalidateWeakPtrs(); 404 weak_factory_.InvalidateWeakPtrs();
405 } 405 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/download/download_shelf_gtk.h ('k') | chrome/browser/ui/views/download/download_item_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698