diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-27 21:13:42 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-27 21:13:42 +0000 |
commit | 848364347bff182dbf8a0c2f22ed3ed5d65bca4e (patch) | |
tree | e79de6d570b32c486996e580d49c1a63209338b0 /chrome/browser/gtk/download_shelf_gtk.cc | |
parent | 80b7f1a8bfd97d4d8b268329932efba1d4f49567 (diff) | |
download | chromium_src-848364347bff182dbf8a0c2f22ed3ed5d65bca4e.zip chromium_src-848364347bff182dbf8a0c2f22ed3ed5d65bca4e.tar.gz chromium_src-848364347bff182dbf8a0c2f22ed3ed5d65bca4e.tar.bz2 |
Remove completed downloads from shelf when the shelf closes.
BUG=15712
TEST=Download a few things, close shelf, download something else, note initial few things are no longer on the shelf.
Special cases:
* Dangerous downloads still awaiting affirmation should never be removed, no matter if they are completed or not.
* Cancelled downloads should be removed.
* In-progress downloads should not be removed.
Review URL: http://codereview.chromium.org/173186
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24663 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/download_shelf_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/download_shelf_gtk.cc | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/chrome/browser/gtk/download_shelf_gtk.cc b/chrome/browser/gtk/download_shelf_gtk.cc index 7917c21..6188b75 100644 --- a/chrome/browser/gtk/download_shelf_gtk.cc +++ b/chrome/browser/gtk/download_shelf_gtk.cc @@ -15,7 +15,6 @@ #include "chrome/browser/gtk/download_item_gtk.h" #include "chrome/browser/gtk/gtk_chrome_link_button.h" #include "chrome/browser/gtk/gtk_theme_provider.h" -#include "chrome/browser/gtk/slide_animator_gtk.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/common/gtk_util.h" #include "chrome/common/notification_service.h" @@ -120,7 +119,7 @@ DownloadShelfGtk::DownloadShelfGtk(Browser* browser, GtkWidget* parent) slide_widget_.reset(new SlideAnimatorGtk(shelf_.get(), SlideAnimatorGtk::UP, kShelfAnimationDurationMs, - false, true, NULL)); + false, true, this)); theme_provider_->InitThemesFor(this); registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, @@ -171,6 +170,22 @@ void DownloadShelfGtk::Close() { browser_->UpdateDownloadShelfVisibility(false); } +void DownloadShelfGtk::Closed() { + // When the close animation is complete, remove all completed downloads. + size_t i = 0; + while (i < download_items_.size()) { + DownloadItem* download = download_items_[i]->get_download(); + bool is_transfer_done = download->state() == DownloadItem::COMPLETE || + download->state() == DownloadItem::CANCELLED; + if (is_transfer_done && + download->safety_state() != DownloadItem::DANGEROUS) { + RemoveDownloadItem(download_items_[i]); + } else { + ++i; + } + } +} + void DownloadShelfGtk::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { |