summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/download_shelf_gtk.cc
diff options
context:
space:
mode:
authorthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-27 21:13:42 +0000
committerthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-27 21:13:42 +0000
commit848364347bff182dbf8a0c2f22ed3ed5d65bca4e (patch)
treee79de6d570b32c486996e580d49c1a63209338b0 /chrome/browser/gtk/download_shelf_gtk.cc
parent80b7f1a8bfd97d4d8b268329932efba1d4f49567 (diff)
downloadchromium_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.cc19
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) {