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 #include "chrome/browser/ui/panels/panel.h" | 5 #include "chrome/browser/ui/panels/panel.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "chrome/browser/ui/panels/docked_panel_strip.h" | 9 #include "chrome/browser/ui/panels/docked_panel_strip.h" |
10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
(...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 content::Source<WebContents>(web_contents)); | 687 content::Source<WebContents>(web_contents)); |
688 } | 688 } |
689 | 689 |
690 void Panel::Observe(int type, | 690 void Panel::Observe(int type, |
691 const content::NotificationSource& source, | 691 const content::NotificationSource& source, |
692 const content::NotificationDetails& details) { | 692 const content::NotificationDetails& details) { |
693 DCHECK_EQ(content::NOTIFICATION_WEB_CONTENTS_SWAPPED, type); | 693 DCHECK_EQ(content::NOTIFICATION_WEB_CONTENTS_SWAPPED, type); |
694 ConfigureAutoResize(content::Source<WebContents>(source).ptr()); | 694 ConfigureAutoResize(content::Source<WebContents>(source).ptr()); |
695 } | 695 } |
696 | 696 |
697 void Panel::OnActiveStateChanged() { | 697 void Panel::OnActiveStateChanged(bool active) { |
| 698 // Clear attention state when an expanded panel becomes active. |
| 699 // On some systems (e.g. Win), mouse-down activates a panel regardless of |
| 700 // its expansion state. However, we don't want to clear draw attention if |
| 701 // contents are not visible. In that scenario, if the mouse-down results |
| 702 // in a mouse-click, draw attention will be cleared then. |
| 703 // See Panel::OnTitlebarClicked(). |
| 704 if (active && IsDrawingAttention() && !IsMinimized()) |
| 705 FlashFrame(false); |
| 706 |
698 if (panel_strip_) | 707 if (panel_strip_) |
699 panel_strip_->OnPanelActiveStateChanged(this); | 708 panel_strip_->OnPanelActiveStateChanged(this); |
| 709 |
| 710 content::NotificationService::current()->Notify( |
| 711 chrome::NOTIFICATION_PANEL_CHANGED_ACTIVE_STATUS, |
| 712 content::Source<Panel>(this), |
| 713 content::NotificationService::NoDetails()); |
700 } | 714 } |
701 | 715 |
702 void Panel::ConfigureAutoResize(WebContents* web_contents) { | 716 void Panel::ConfigureAutoResize(WebContents* web_contents) { |
703 if (!auto_resizable_ || !web_contents) | 717 if (!auto_resizable_ || !web_contents) |
704 return; | 718 return; |
705 | 719 |
706 // NULL might be returned if the tab has not been added. | 720 // NULL might be returned if the tab has not been added. |
707 RenderViewHost* render_view_host = web_contents->GetRenderViewHost(); | 721 RenderViewHost* render_view_host = web_contents->GetRenderViewHost(); |
708 if (!render_view_host) | 722 if (!render_view_host) |
709 return; | 723 return; |
710 | 724 |
711 render_view_host->EnableAutoResize( | 725 render_view_host->EnableAutoResize( |
712 min_size_, | 726 min_size_, |
713 native_panel_->ContentSizeFromWindowSize(max_size_)); | 727 native_panel_->ContentSizeFromWindowSize(max_size_)); |
714 } | 728 } |
715 | 729 |
716 void Panel::OnWindowSizeAvailable() { | 730 void Panel::OnWindowSizeAvailable() { |
717 ConfigureAutoResize(browser()->GetSelectedWebContents()); | 731 ConfigureAutoResize(browser()->GetSelectedWebContents()); |
718 } | 732 } |
719 | 733 |
720 void Panel::OnTitlebarClicked(panel::ClickModifier modifier) { | 734 void Panel::OnTitlebarClicked(panel::ClickModifier modifier) { |
721 if (panel_strip_) | 735 if (panel_strip_) |
722 panel_strip_->OnPanelTitlebarClicked(this, modifier); | 736 panel_strip_->OnPanelTitlebarClicked(this, modifier); |
| 737 |
| 738 // Normally the system activates a window when the titlebar is clicked. |
| 739 // However, we prevent system activation of minimized panels, thus the |
| 740 // activation may not have occurred. Also, some OSes (Windows) will |
| 741 // activate a minimized panel on mouse-down regardless of our attempts to |
| 742 // prevent system activation. Attention state is not cleared in that case. |
| 743 // See Panel::OnActiveStateChanged(). |
| 744 // Therefore, we ensure activation and clearing of attention state here. |
| 745 // These are no-ops if no changes are needed. |
| 746 Activate(); |
| 747 FlashFrame(false); |
723 } | 748 } |
724 | 749 |
725 void Panel::DestroyBrowser() { | 750 void Panel::DestroyBrowser() { |
726 native_panel_->DestroyPanelBrowser(); | 751 native_panel_->DestroyPanelBrowser(); |
727 } | 752 } |
OLD | NEW |