summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
Diffstat (limited to 'ash')
-rw-r--r--ash/frame/caption_buttons/frame_caption_button_container_view.cc5
-rw-r--r--ash/frame/caption_buttons/frame_caption_button_container_view.h12
-rw-r--r--ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc42
-rw-r--r--ash/frame/caption_buttons/frame_size_button_unittest.cc4
-rw-r--r--ash/frame/custom_frame_view_ash.cc7
-rw-r--r--ash/frame/default_header_painter_unittest.cc3
-rw-r--r--ash/test/ash_test_base.cc1
-rw-r--r--ash/wm/panels/panel_frame_view.cc3
-rw-r--r--ash/wm/system_gesture_event_filter_unittest.cc7
-rw-r--r--ash/wm/toplevel_window_event_handler_unittest.cc17
-rw-r--r--ash/wm/window_state.cc10
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 {