| Index: chrome/browser/ui/panels/panel_browser_view.cc
|
| ===================================================================
|
| --- chrome/browser/ui/panels/panel_browser_view.cc (revision 90982)
|
| +++ chrome/browser/ui/panels/panel_browser_view.cc (working copy)
|
| @@ -8,6 +8,7 @@
|
| #include "chrome/browser/ui/panels/panel.h"
|
| #include "chrome/browser/ui/panels/panel_browser_frame_view.h"
|
| #include "chrome/browser/ui/panels/panel_manager.h"
|
| +#include "chrome/browser/ui/panels/panel_mouse_watcher_win.h"
|
| #include "chrome/browser/ui/views/frame/browser_frame.h"
|
| #include "grit/chromium_strings.h"
|
| #include "ui/base/animation/slide_animation.h"
|
| @@ -17,6 +18,9 @@
|
| namespace {
|
| // This value is experimental and subjective.
|
| const int kSetBoundsAnimationMs = 200;
|
| +
|
| +// The panel can be fully minimized to 3-pixel lines.
|
| +const int kFullyMinimizedHeight = 3;
|
| }
|
|
|
| NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel,
|
| @@ -32,7 +36,6 @@
|
| panel_(panel),
|
| bounds_(bounds),
|
| original_height_(bounds.height()),
|
| - minimized_(false),
|
| closed_(false),
|
| focused_(false),
|
| mouse_pressed_(false),
|
| @@ -58,6 +61,10 @@
|
| bounds_animator_.reset();
|
|
|
| ::BrowserView::Close();
|
| +
|
| + // Stop the global mouse watcher only if we do not have any panels up.
|
| + if (panel_->manager()->active_count() == 1)
|
| + StopMouseWatcher();
|
| }
|
|
|
| void PanelBrowserView::SetBounds(const gfx::Rect& bounds) {
|
| @@ -156,27 +163,36 @@
|
| SetBounds(bounds);
|
| }
|
|
|
| -void PanelBrowserView::MinimizePanel() {
|
| - if (minimized_)
|
| - return;
|
| +void PanelBrowserView::OnPanelExpansionStateChanged(
|
| + Panel::ExpansionState expansion_state) {
|
| + int height;
|
| + switch (expansion_state) {
|
| + case Panel::EXPANDED:
|
| + height = original_height_;
|
| + break;
|
| + case Panel::TITLE_ONLY:
|
| + height = GetFrameView()->NonClientTopBorderHeight();
|
| + break;
|
| + case Panel::MINIMIZED:
|
| + height = kFullyMinimizedHeight;
|
| + EnsureMouseWatcherStarted();
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + height = original_height_;
|
| + break;
|
| + }
|
|
|
| - minimized_ = true;
|
| - gfx::Rect bounds = GetPanelBounds();
|
| - original_height_ = bounds.height();
|
| - bounds.set_height(GetFrameView()->NonClientTopBorderHeight());
|
| - bounds.set_y(bounds.y() + original_height_ - bounds.height());
|
| - SetPanelBounds(bounds);
|
| + gfx::Rect bounds = bounds_;
|
| + bounds.set_y(bounds.y() + bounds.height() - height);
|
| + bounds.set_height(height);
|
| + SetBounds(bounds);
|
| }
|
|
|
| -void PanelBrowserView::RestorePanel() {
|
| - if (!minimized_)
|
| - return;
|
| -
|
| - minimized_ = false;
|
| - gfx::Rect bounds = GetPanelBounds();
|
| - bounds.set_y(bounds.y() - original_height_ + bounds.height());
|
| - bounds.set_height(original_height_);
|
| - SetPanelBounds(bounds);
|
| +bool PanelBrowserView::ShouldBringUpPanelTitleBar(int mouse_x,
|
| + int mouse_y) const {
|
| + return bounds_.x() <= mouse_x && mouse_x <= bounds_.right() &&
|
| + mouse_y >= bounds_.y();
|
| }
|
|
|
| void PanelBrowserView::ClosePanel() {
|
| @@ -251,7 +267,10 @@
|
| if (mouse_dragging_)
|
| return EndDragging(false);
|
|
|
| - MinimizeOrRestore();
|
| + Panel::ExpansionState new_expansion_state =
|
| + (panel_->expansion_state() != Panel::EXPANDED) ? Panel::EXPANDED
|
| + : Panel::MINIMIZED;
|
| + panel_->SetExpansionState(new_expansion_state);
|
| return true;
|
| }
|
|
|
| @@ -271,10 +290,3 @@
|
| panel_->manager()->EndDragging(cancelled);
|
| return true;
|
| }
|
| -
|
| -void PanelBrowserView::MinimizeOrRestore() {
|
| - if (minimized_)
|
| - panel_->Restore();
|
| - else
|
| - panel_->Minimize();
|
| -}
|
|
|