OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/gtk/download_item_gtk.h" | 5 #include "chrome/browser/gtk/download_item_gtk.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/gfx/canvas.h" | 8 #include "app/gfx/canvas.h" |
9 #include "app/gfx/font.h" | 9 #include "app/gfx/font.h" |
10 #include "app/gfx/text_elider.h" | 10 #include "app/gfx/text_elider.h" |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 reinterpret_cast<void*>(true)); | 243 reinterpret_cast<void*>(true)); |
244 gtk_widget_set_size_request(menu_button_, kMenuButtonWidth, 0); | 244 gtk_widget_set_size_request(menu_button_, kMenuButtonWidth, 0); |
245 | 245 |
246 GtkWidget* shelf_hbox = parent_shelf->GetHBox(); | 246 GtkWidget* shelf_hbox = parent_shelf->GetHBox(); |
247 hbox_.Own(gtk_hbox_new(FALSE, 0)); | 247 hbox_.Own(gtk_hbox_new(FALSE, 0)); |
248 gtk_box_pack_start(GTK_BOX(hbox_.get()), body_.get(), FALSE, FALSE, 0); | 248 gtk_box_pack_start(GTK_BOX(hbox_.get()), body_.get(), FALSE, FALSE, 0); |
249 gtk_box_pack_start(GTK_BOX(hbox_.get()), menu_button_, FALSE, FALSE, 0); | 249 gtk_box_pack_start(GTK_BOX(hbox_.get()), menu_button_, FALSE, FALSE, 0); |
250 gtk_box_pack_start(GTK_BOX(shelf_hbox), hbox_.get(), FALSE, FALSE, 0); | 250 gtk_box_pack_start(GTK_BOX(shelf_hbox), hbox_.get(), FALSE, FALSE, 0); |
251 // Insert as the leftmost item. | 251 // Insert as the leftmost item. |
252 gtk_box_reorder_child(GTK_BOX(shelf_hbox), hbox_.get(), 1); | 252 gtk_box_reorder_child(GTK_BOX(shelf_hbox), hbox_.get(), 1); |
253 | 253 g_signal_connect(G_OBJECT(shelf_hbox), "size-allocate", |
254 resize_handler_id_ = g_signal_connect(G_OBJECT(shelf_hbox), "size-allocate", | 254 G_CALLBACK(OnShelfResized), this); |
255 G_CALLBACK(OnShelfResized), this); | |
256 | 255 |
257 get_download()->AddObserver(this); | 256 get_download()->AddObserver(this); |
258 | 257 |
259 new_item_animation_.reset(new SlideAnimation(this)); | 258 new_item_animation_.reset(new SlideAnimation(this)); |
260 new_item_animation_->SetSlideDuration(kNewItemAnimationDurationMs); | 259 new_item_animation_->SetSlideDuration(kNewItemAnimationDurationMs); |
261 gtk_widget_show_all(hbox_.get()); | 260 gtk_widget_show_all(hbox_.get()); |
262 | 261 |
263 if (IsDangerous()) { | 262 if (IsDangerous()) { |
264 // Hide the download item components for now. | 263 // Hide the download item components for now. |
265 gtk_widget_hide(body_.get()); | 264 gtk_widget_hide(body_.get()); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 gtk_widget_size_request(dangerous_label, &req); | 338 gtk_widget_size_request(dangerous_label, &req); |
340 dangerous_hbox_start_width_ = dangerous_hbox_full_width_ - req.width; | 339 dangerous_hbox_start_width_ = dangerous_hbox_full_width_ - req.width; |
341 } | 340 } |
342 | 341 |
343 new_item_animation_->Show(); | 342 new_item_animation_->Show(); |
344 } | 343 } |
345 | 344 |
346 DownloadItemGtk::~DownloadItemGtk() { | 345 DownloadItemGtk::~DownloadItemGtk() { |
347 StopDownloadProgress(); | 346 StopDownloadProgress(); |
348 get_download()->RemoveObserver(this); | 347 get_download()->RemoveObserver(this); |
| 348 g_signal_handlers_disconnect_by_func(parent_shelf_->GetHBox(), |
| 349 reinterpret_cast<gpointer>(OnShelfResized), this); |
349 | 350 |
350 hbox_.Destroy(); | 351 hbox_.Destroy(); |
351 progress_area_.Destroy(); | 352 progress_area_.Destroy(); |
352 body_.Destroy(); | 353 body_.Destroy(); |
353 } | 354 } |
354 | 355 |
355 void DownloadItemGtk::OnDownloadUpdated(DownloadItem* download) { | 356 void DownloadItemGtk::OnDownloadUpdated(DownloadItem* download) { |
356 DCHECK_EQ(download, get_download()); | 357 DCHECK_EQ(download, get_download()); |
357 | 358 |
358 if (dangerous_prompt_ != NULL && | 359 if (dangerous_prompt_ != NULL && |
359 download->safety_state() == DownloadItem::DANGEROUS_BUT_VALIDATED) { | 360 download->safety_state() == DownloadItem::DANGEROUS_BUT_VALIDATED) { |
360 // We have been approved. | 361 // We have been approved. |
361 gtk_widget_show_all(hbox_.get()); | 362 gtk_widget_show_all(hbox_.get()); |
362 gtk_widget_destroy(dangerous_prompt_); | 363 gtk_widget_destroy(dangerous_prompt_); |
363 dangerous_prompt_ = NULL; | 364 dangerous_prompt_ = NULL; |
364 } | 365 } |
365 | 366 |
366 switch (download->state()) { | 367 switch (download->state()) { |
367 case DownloadItem::REMOVING: | 368 case DownloadItem::REMOVING: |
368 // We disconnect here rather than the d'tor because we don't want to | |
369 // explicitly disconnect if |parent_shelf_| has been destroyed. | |
370 g_signal_handler_disconnect(parent_shelf_->GetHBox(), resize_handler_id_); | |
371 parent_shelf_->RemoveDownloadItem(this); // This will delete us! | 369 parent_shelf_->RemoveDownloadItem(this); // This will delete us! |
372 return; | 370 return; |
373 case DownloadItem::CANCELLED: | 371 case DownloadItem::CANCELLED: |
374 StopDownloadProgress(); | 372 StopDownloadProgress(); |
375 break; | 373 break; |
376 case DownloadItem::COMPLETE: | 374 case DownloadItem::COMPLETE: |
377 StopDownloadProgress(); | 375 StopDownloadProgress(); |
378 complete_animation_.reset(new SlideAnimation(this)); | 376 complete_animation_.reset(new SlideAnimation(this)); |
379 complete_animation_->SetSlideDuration(kCompleteAnimationDurationMs); | 377 complete_animation_->SetSlideDuration(kCompleteAnimationDurationMs); |
380 complete_animation_->SetTweenType(SlideAnimation::NONE); | 378 complete_animation_->SetTweenType(SlideAnimation::NONE); |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 item->get_download()); | 664 item->get_download()); |
667 } | 665 } |
668 | 666 |
669 // static | 667 // static |
670 void DownloadItemGtk::OnDangerousDecline(GtkWidget* button, | 668 void DownloadItemGtk::OnDangerousDecline(GtkWidget* button, |
671 DownloadItemGtk* item) { | 669 DownloadItemGtk* item) { |
672 if (item->get_download()->state() == DownloadItem::IN_PROGRESS) | 670 if (item->get_download()->state() == DownloadItem::IN_PROGRESS) |
673 item->get_download()->Cancel(true); | 671 item->get_download()->Cancel(true); |
674 item->get_download()->Remove(true); | 672 item->get_download()->Remove(true); |
675 } | 673 } |
OLD | NEW |