| Index: ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
|
| diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc b/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
|
| index d0c0a8631c7c6dc6fa50dd90671a5881725ce74a..ed7b485e5c06d88ff0e6188c25fc561ba2979504 100644
|
| --- a/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
|
| +++ b/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
|
| @@ -8,9 +8,12 @@
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/aura/client/aura_constants.cc"
|
| +#include "ui/aura/test/event_generator.h"
|
| #include "ui/aura/window.h"
|
| #include "ui/aura/window_event_dispatcher.h"
|
| #include "ui/aura/window_tree_host.h"
|
| +#include "ui/base/hit_test.h"
|
| #include "ui/base/x/x11_util.h"
|
| #include "ui/events/platform/platform_event_dispatcher.h"
|
| #include "ui/events/platform/platform_event_source.h"
|
| @@ -21,6 +24,34 @@
|
| #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
|
| #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
|
|
|
| +namespace {
|
| +
|
| +// Class which allows for the designation of non-client component targets of
|
| +// hit tests.
|
| +class TestDesktopNativeWidgetAura : public views::DesktopNativeWidgetAura {
|
| + public:
|
| + explicit TestDesktopNativeWidgetAura(
|
| + views::internal::NativeWidgetDelegate* delegate)
|
| + : views::DesktopNativeWidgetAura(delegate) {}
|
| + virtual ~TestDesktopNativeWidgetAura() {}
|
| +
|
| + void set_window_component(int window_component) {
|
| + window_component_ = window_component;
|
| + }
|
| +
|
| + // DesktopNativeWidgetAura:
|
| + virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE {
|
| + return window_component_;
|
| + }
|
| +
|
| + private:
|
| + int window_component_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestDesktopNativeWidgetAura);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| namespace views {
|
|
|
| const int64 kFirstDisplay = 5321829;
|
| @@ -125,12 +156,18 @@ class DesktopScreenX11Test : public views::ViewsTestBase,
|
| removed_display_.clear();
|
| }
|
|
|
| - Widget* BuildTopLevelDesktopWidget(const gfx::Rect& bounds) {
|
| + Widget* BuildTopLevelDesktopWidget(const gfx::Rect& bounds,
|
| + bool use_test_native_widget) {
|
| Widget* toplevel = new Widget;
|
| Widget::InitParams toplevel_params =
|
| CreateParams(Widget::InitParams::TYPE_WINDOW);
|
| - toplevel_params.native_widget =
|
| - new views::DesktopNativeWidgetAura(toplevel);
|
| + if (use_test_native_widget) {
|
| + toplevel_params.native_widget =
|
| + new TestDesktopNativeWidgetAura(toplevel);
|
| + } else {
|
| + toplevel_params.native_widget =
|
| + new views::DesktopNativeWidgetAura(toplevel);
|
| + }
|
| toplevel_params.bounds = bounds;
|
| toplevel_params.remove_standard_frame = true;
|
| toplevel->Init(toplevel_params);
|
| @@ -275,10 +312,12 @@ TEST_F(DesktopScreenX11Test, GetPrimaryDisplay) {
|
| }
|
|
|
| TEST_F(DesktopScreenX11Test, GetWindowAtScreenPoint) {
|
| - Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(110, 110, 10, 10));
|
| - Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(150, 150, 10, 10));
|
| + Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(110, 110, 10, 10),
|
| + false);
|
| + Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(150, 150, 10, 10),
|
| + false);
|
| Widget* window_three =
|
| - BuildTopLevelDesktopWidget(gfx::Rect(115, 115, 20, 20));
|
| + BuildTopLevelDesktopWidget(gfx::Rect(115, 115, 20, 20), false);
|
|
|
| window_three->Show();
|
| window_two->Show();
|
| @@ -317,8 +356,10 @@ TEST_F(DesktopScreenX11Test, GetDisplayNearestWindow) {
|
| gfx::Rect(640, 0, 1024, 768)));
|
| screen()->ProcessDisplayChange(displays);
|
|
|
| - Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(10, 10, 10, 10));
|
| - Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(650, 50, 10, 10));
|
| + Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(10, 10, 10, 10),
|
| + false);
|
| + Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(650, 50, 10, 10),
|
| + false);
|
|
|
| EXPECT_EQ(
|
| kFirstDisplay,
|
| @@ -331,4 +372,87 @@ TEST_F(DesktopScreenX11Test, GetDisplayNearestWindow) {
|
| window_two->CloseNow();
|
| }
|
|
|
| +// Tests that the window is maximized in response to a double click event.
|
| +TEST_F(DesktopScreenX11Test, DoubleClickHeaderMaximizes) {
|
| + Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
|
| + widget->Show();
|
| + TestDesktopNativeWidgetAura* native_widget =
|
| + static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
|
| + native_widget->set_window_component(HTCAPTION);
|
| +
|
| + aura::Window* window = widget->GetNativeWindow();
|
| + window->SetProperty(aura::client::kCanMaximizeKey, true);
|
| +
|
| + // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
|
| + DesktopWindowTreeHost* rwh = static_cast<DesktopWindowTreeHost*>(
|
| + DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
|
| + GetAcceleratedWidget()));
|
| +
|
| + aura::test::EventGenerator generator(window);
|
| + generator.ClickLeftButton();
|
| + generator.DoubleClickLeftButton();
|
| + RunPendingMessages();
|
| + EXPECT_TRUE(rwh->IsMaximized());
|
| +
|
| + widget->CloseNow();
|
| +}
|
| +
|
| +// Tests that the window does not maximize in response to a double click event,
|
| +// if the first click was to a different target component than that of the
|
| +// second click.
|
| +TEST_F(DesktopScreenX11Test, DoubleClickTwoDifferentTargetsDoesntMaximizes) {
|
| + Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
|
| + widget->Show();
|
| + TestDesktopNativeWidgetAura* native_widget =
|
| + static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
|
| +
|
| + aura::Window* window = widget->GetNativeWindow();
|
| + window->SetProperty(aura::client::kCanMaximizeKey, true);
|
| +
|
| + // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
|
| + DesktopWindowTreeHost* rwh = static_cast<DesktopWindowTreeHost*>(
|
| + DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
|
| + GetAcceleratedWidget()));
|
| +
|
| + aura::test::EventGenerator generator(window);
|
| + native_widget->set_window_component(HTCLIENT);
|
| + generator.ClickLeftButton();
|
| + native_widget->set_window_component(HTCAPTION);
|
| + generator.DoubleClickLeftButton();
|
| + RunPendingMessages();
|
| + EXPECT_FALSE(rwh->IsMaximized());
|
| +
|
| + widget->CloseNow();
|
| +}
|
| +
|
| +// Tests that the window does not maximize in response to a double click event,
|
| +// if the double click was interrupted by a right click.
|
| +TEST_F(DesktopScreenX11Test, RightClickDuringDoubleClickDoesntMaximize) {
|
| + Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
|
| + widget->Show();
|
| + TestDesktopNativeWidgetAura* native_widget =
|
| + static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
|
| +
|
| + aura::Window* window = widget->GetNativeWindow();
|
| + window->SetProperty(aura::client::kCanMaximizeKey, true);
|
| +
|
| + // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
|
| + DesktopWindowTreeHost* rwh = static_cast<DesktopWindowTreeHost*>(
|
| + DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
|
| + GetAcceleratedWidget()));
|
| +
|
| + aura::test::EventGenerator generator(window);
|
| + native_widget->set_window_component(HTCLIENT);
|
| + generator.ClickLeftButton();
|
| + native_widget->set_window_component(HTCAPTION);
|
| + generator.PressRightButton();
|
| + generator.ReleaseRightButton();
|
| + EXPECT_FALSE(rwh->IsMaximized());
|
| + generator.DoubleClickLeftButton();
|
| + RunPendingMessages();
|
| + EXPECT_FALSE(rwh->IsMaximized());
|
| +
|
| + widget->CloseNow();
|
| +}
|
| +
|
| } // namespace views
|
|
|