diff options
Diffstat (limited to 'ash')
-rw-r--r-- | ash/frame/caption_buttons/frame_caption_button_container_view.cc | 5 | ||||
-rw-r--r-- | ash/frame/caption_buttons/frame_caption_button_container_view.h | 12 | ||||
-rw-r--r-- | ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc | 42 | ||||
-rw-r--r-- | ash/frame/caption_buttons/frame_size_button_unittest.cc | 4 | ||||
-rw-r--r-- | ash/frame/custom_frame_view_ash.cc | 7 | ||||
-rw-r--r-- | ash/frame/default_header_painter_unittest.cc | 3 | ||||
-rw-r--r-- | ash/test/ash_test_base.cc | 1 | ||||
-rw-r--r-- | ash/wm/panels/panel_frame_view.cc | 3 | ||||
-rw-r--r-- | ash/wm/system_gesture_event_filter_unittest.cc | 7 | ||||
-rw-r--r-- | ash/wm/toplevel_window_event_handler_unittest.cc | 17 | ||||
-rw-r--r-- | ash/wm/window_state.cc | 10 |
11 files changed, 71 insertions, 40 deletions
diff --git a/ash/frame/caption_buttons/frame_caption_button_container_view.cc b/ash/frame/caption_buttons/frame_caption_button_container_view.cc index e1672d3..dd9e3eb 100644 --- a/ash/frame/caption_buttons/frame_caption_button_container_view.cc +++ b/ash/frame/caption_buttons/frame_caption_button_container_view.cc @@ -109,7 +109,8 @@ const char FrameCaptionButtonContainerView::kViewClassName[] = "FrameCaptionButtonContainerView"; FrameCaptionButtonContainerView::FrameCaptionButtonContainerView( - views::Widget* frame) + views::Widget* frame, + MinimizeAllowed minimize_allowed) : frame_(frame), minimize_button_(NULL), size_button_(NULL), @@ -126,7 +127,7 @@ FrameCaptionButtonContainerView::FrameCaptionButtonContainerView( minimize_button_ = new FrameCaptionButton(this, CAPTION_BUTTON_ICON_MINIMIZE); minimize_button_->SetAccessibleName( l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MINIMIZE)); - minimize_button_->SetVisible(frame_->widget_delegate()->CanMinimize()); + minimize_button_->SetVisible(minimize_allowed == MINIMIZE_ALLOWED); AddChildView(minimize_button_); size_button_ = new FrameSizeButton(this, frame, this); diff --git a/ash/frame/caption_buttons/frame_caption_button_container_view.h b/ash/frame/caption_buttons/frame_caption_button_container_view.h index 818b8e3..3b70fcb 100644 --- a/ash/frame/caption_buttons/frame_caption_button_container_view.h +++ b/ash/frame/caption_buttons/frame_caption_button_container_view.h @@ -33,8 +33,18 @@ class ASH_EXPORT FrameCaptionButtonContainerView public: static const char kViewClassName[]; + // Whether the frame can be minimized (either via the maximize/restore button + // or via a dedicated button). + enum MinimizeAllowed { + MINIMIZE_ALLOWED, + MINIMIZE_DISALLOWED + }; + // |frame| is the views::Widget that the caption buttons act on. - explicit FrameCaptionButtonContainerView(views::Widget* frame); + // |minimize_allowed| indicates whether the frame can be minimized (either via + // the maximize/restore button or via a dedicated button). + FrameCaptionButtonContainerView(views::Widget* frame, + MinimizeAllowed minimize_allowed); virtual ~FrameCaptionButtonContainerView(); // For testing. diff --git a/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc b/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc index 1c1f721..04a1d09 100644 --- a/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc +++ b/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc @@ -19,8 +19,8 @@ namespace { class TestWidgetDelegate : public views::WidgetDelegateView { public: - TestWidgetDelegate(bool can_maximize, bool can_minimize) - : can_maximize_(can_maximize), can_minimize_(can_minimize) {} + explicit TestWidgetDelegate(bool can_maximize) : can_maximize_(can_maximize) { + } virtual ~TestWidgetDelegate() { } @@ -28,13 +28,12 @@ class TestWidgetDelegate : public views::WidgetDelegateView { return can_maximize_; } - virtual bool CanMinimize() const OVERRIDE { - return can_minimize_; + virtual bool CanMinimize() const override { + return can_maximize_; } private: bool can_maximize_; - bool can_minimize_; DISALLOW_COPY_AND_ASSIGN(TestWidgetDelegate); }; @@ -48,11 +47,6 @@ class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase { MAXIMIZE_DISALLOWED }; - enum MinimizeAllowed { - MINIMIZE_ALLOWED, - MINIMIZE_DISALLOWED - }; - FrameCaptionButtonContainerViewTest() { } @@ -62,13 +56,11 @@ class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase { // Creates a widget which allows maximizing based on |maximize_allowed|. // The caller takes ownership of the returned widget. views::Widget* CreateTestWidget( - MaximizeAllowed maximize_allowed, - MinimizeAllowed minimize_allowed) WARN_UNUSED_RESULT { + MaximizeAllowed maximize_allowed) WARN_UNUSED_RESULT { views::Widget* widget = new views::Widget; views::Widget::InitParams params; params.delegate = new TestWidgetDelegate( - maximize_allowed == MAXIMIZE_ALLOWED, - minimize_allowed == MINIMIZE_ALLOWED); + maximize_allowed == MAXIMIZE_ALLOWED); params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; params.context = CurrentContext(); widget->Init(params); @@ -118,8 +110,10 @@ class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase { TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) { // All the buttons should be visible when minimizing and maximizing are // allowed. - FrameCaptionButtonContainerView container1( - CreateTestWidget(MAXIMIZE_ALLOWED, MINIMIZE_ALLOWED)); + scoped_ptr<views::Widget> widget_can_maximize( + CreateTestWidget(MAXIMIZE_ALLOWED)); + FrameCaptionButtonContainerView container1(widget_can_maximize.get(), + FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); SetMockImages(&container1); container1.Layout(); FrameCaptionButtonContainerView::TestApi t1(&container1); @@ -131,8 +125,10 @@ TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) { // The minimize button should be visible when minimizing is allowed but // maximizing is disallowed. - FrameCaptionButtonContainerView container2( - CreateTestWidget(MAXIMIZE_DISALLOWED, MINIMIZE_ALLOWED)); + scoped_ptr<views::Widget> widget_cannot_maximize( + CreateTestWidget(MAXIMIZE_DISALLOWED)); + FrameCaptionButtonContainerView container2(widget_cannot_maximize.get(), + FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); SetMockImages(&container2); container2.Layout(); FrameCaptionButtonContainerView::TestApi t2(&container2); @@ -144,8 +140,8 @@ TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) { // Neither the minimize button nor the size button should be visible when // neither minimizing nor maximizing are allowed. - FrameCaptionButtonContainerView container3( - CreateTestWidget(MAXIMIZE_DISALLOWED, MINIMIZE_DISALLOWED)); + FrameCaptionButtonContainerView container3(widget_cannot_maximize.get(), + FrameCaptionButtonContainerView::MINIMIZE_DISALLOWED); SetMockImages(&container3); container3.Layout(); FrameCaptionButtonContainerView::TestApi t3(&container3); @@ -160,8 +156,10 @@ TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) { // correct placement of the buttons. TEST_F(FrameCaptionButtonContainerViewTest, TestUpdateSizeButtonVisibilityAnimation) { - FrameCaptionButtonContainerView container( - CreateTestWidget(MAXIMIZE_ALLOWED, MINIMIZE_ALLOWED)); + scoped_ptr<views::Widget> widget_can_maximize( + CreateTestWidget(MAXIMIZE_ALLOWED)); + FrameCaptionButtonContainerView container(widget_can_maximize.get(), + FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); SetMockImages(&container); container.SetBoundsRect(gfx::Rect(container.GetPreferredSize())); container.Layout(); diff --git a/ash/frame/caption_buttons/frame_size_button_unittest.cc b/ash/frame/caption_buttons/frame_size_button_unittest.cc index e08c1fd..0be0b38 100644 --- a/ash/frame/caption_buttons/frame_size_button_unittest.cc +++ b/ash/frame/caption_buttons/frame_size_button_unittest.cc @@ -62,8 +62,8 @@ class TestWidgetDelegate : public views::WidgetDelegateView { virtual void ViewHierarchyChanged( const ViewHierarchyChangedDetails& details) override { if (details.is_add && details.child == this) { - caption_button_container_ = - new FrameCaptionButtonContainerView(GetWidget()); + caption_button_container_ = new FrameCaptionButtonContainerView( + GetWidget(), FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); // Set arbitrary images for the container's buttons so that the buttons // have non-empty sizes. diff --git a/ash/frame/custom_frame_view_ash.cc b/ash/frame/custom_frame_view_ash.cc index e4211e6..8cdb026 100644 --- a/ash/frame/custom_frame_view_ash.cc +++ b/ash/frame/custom_frame_view_ash.cc @@ -202,7 +202,12 @@ CustomFrameViewAsh::HeaderView::HeaderView(views::Widget* frame) avatar_icon_(NULL), caption_button_container_(NULL), fullscreen_visible_fraction_(0) { - caption_button_container_ = new FrameCaptionButtonContainerView(frame_); + FrameCaptionButtonContainerView::MinimizeAllowed minimize_allowed = + frame_->widget_delegate()->CanMinimize() ? + FrameCaptionButtonContainerView::MINIMIZE_ALLOWED : + FrameCaptionButtonContainerView::MINIMIZE_DISALLOWED; + caption_button_container_ = new FrameCaptionButtonContainerView(frame_, + minimize_allowed); caption_button_container_->UpdateSizeButtonVisibility(); AddChildView(caption_button_container_); diff --git a/ash/frame/default_header_painter_unittest.cc b/ash/frame/default_header_painter_unittest.cc index c4e2106..41ec4ff 100644 --- a/ash/frame/default_header_painter_unittest.cc +++ b/ash/frame/default_header_painter_unittest.cc @@ -36,7 +36,8 @@ class DefaultHeaderPainterTest : public ash::test::AshTestBase { // Ensure the title text is vertically aligned with the window icon. TEST_F(DefaultHeaderPainterTest, TitleIconAlignment) { scoped_ptr<Widget> w(CreateTestWidget()); - ash::FrameCaptionButtonContainerView container(w.get()); + ash::FrameCaptionButtonContainerView container(w.get(), + ash::FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); views::StaticSizedView window_icon(gfx::Size(16, 16)); window_icon.SetBounds(0, 0, 16, 16); w->SetBounds(gfx::Rect(0, 0, 500, 500)); diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc index d31c5cf..50d18b7 100644 --- a/ash/test/ash_test_base.cc +++ b/ash/test/ash_test_base.cc @@ -261,7 +261,6 @@ aura::Window* AshTestBase::CreateTestWindowInShellWithDelegateAndType( aura::client::ParentWindowWithContext(window, root, bounds); } window->SetProperty(aura::client::kCanMaximizeKey, true); - window->SetProperty(aura::client::kCanMinimizeKey, true); return window; } diff --git a/ash/wm/panels/panel_frame_view.cc b/ash/wm/panels/panel_frame_view.cc index 733af9a..4f27091 100644 --- a/ash/wm/panels/panel_frame_view.cc +++ b/ash/wm/panels/panel_frame_view.cc @@ -39,7 +39,8 @@ const char* PanelFrameView::GetClassName() const { void PanelFrameView::InitHeaderPainter() { header_painter_.reset(new DefaultHeaderPainter); - caption_button_container_ = new FrameCaptionButtonContainerView(frame_); + caption_button_container_ = new FrameCaptionButtonContainerView(frame_, + FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); AddChildView(caption_button_container_); header_painter_->Init(frame_, this, caption_button_container_); diff --git a/ash/wm/system_gesture_event_filter_unittest.cc b/ash/wm/system_gesture_event_filter_unittest.cc index 89b56b2..e1bcbf0 100644 --- a/ash/wm/system_gesture_event_filter_unittest.cc +++ b/ash/wm/system_gesture_event_filter_unittest.cc @@ -98,10 +98,9 @@ class MaxSizeWidgetDelegate : public views::WidgetDelegateView { virtual ~MaxSizeWidgetDelegate() {} private: - virtual bool CanResize() const OVERRIDE { return true; } - virtual bool CanMaximize() const OVERRIDE { return false; } - virtual bool CanMinimize() const OVERRIDE { return true; } - virtual void DeleteDelegate() OVERRIDE { delete this; } + virtual bool CanResize() const override { return true; } + virtual bool CanMaximize() const override { return false; } + virtual void DeleteDelegate() override { delete this; } virtual views::NonClientFrameView* CreateNonClientFrameView( views::Widget* widget) override { return new MaxSizeNCFV; diff --git a/ash/wm/toplevel_window_event_handler_unittest.cc b/ash/wm/toplevel_window_event_handler_unittest.cc index db35b9a..ba1d912c 100644 --- a/ash/wm/toplevel_window_event_handler_unittest.cc +++ b/ash/wm/toplevel_window_event_handler_unittest.cc @@ -8,6 +8,7 @@ #include "ash/shell.h" #include "ash/shell_window_ids.h" #include "ash/test/ash_test_base.h" +#include "ash/wm/lock_state_controller.h" #include "ash/wm/resize_shadow.h" #include "ash/wm/resize_shadow_controller.h" #include "ash/wm/window_state.h" @@ -467,16 +468,24 @@ TEST_F(ToplevelWindowEventHandlerTest, GestureDrag) { window_state->GetRestoreBoundsInScreen().ToString()); } -// Tests that a gesture cannot minimize an unminimizeable window. -TEST_F(ToplevelWindowEventHandlerTest, - GestureAttemptMinimizeUnminimizeableWindow) { +// Tests that a gesture cannot minimize a window in login/lock screen. +TEST_F(ToplevelWindowEventHandlerTest, GestureDragMinimizeLoginScreen) { + LockStateController* state_controller = + Shell::GetInstance()->lock_state_controller(); + state_controller->OnLoginStateChanged(user::LOGGED_IN_NONE); + state_controller->OnLockStateChanged(false); + SetUserLoggedIn(false); + scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION)); + aura::Window* lock = + RootWindowController::ForWindow(target.get()) + ->GetContainer(kShellWindowId_LockSystemModalContainer); + lock->AddChild(target.get()); ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), target.get()); gfx::Rect old_bounds = target->bounds(); gfx::Point location(5, 5); target->SetProperty(aura::client::kCanMaximizeKey, true); - target->SetProperty(aura::client::kCanMinimizeKey, false); gfx::Point end = location; end.Offset(0, 100); diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc index 1b962d1..8cb25c4 100644 --- a/ash/wm/window_state.cc +++ b/ash/wm/window_state.cc @@ -154,7 +154,15 @@ bool WindowState::CanMaximize() const { } bool WindowState::CanMinimize() const { - return window()->GetProperty(aura::client::kCanMinimizeKey); + RootWindowController* controller = RootWindowController::ForWindow(window_); + if (!controller) + return false; + aura::Window* lockscreen = + controller->GetContainer(kShellWindowId_LockScreenContainersContainer); + if (lockscreen->Contains(window_)) + return false; + + return true; } bool WindowState::CanResize() const { |