Commit cb160a02 authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by Chromium LUCI CQ

Ensure menu surface size is not empty

Bug: 1157664
Test: Coverd by unittests
Change-Id: Id2c676779101f10e046ad4b8d168317316fd9db8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2587610
Commit-Queue: Mitsuru Oshima <oshima@chromium.org>
Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/master@{#836390}
parent d1ef9eed
......@@ -299,7 +299,7 @@ void WaylandPositioner::SetGravity(uint32_t gravity) {
gravity_y_ = decompose.second;
}
WaylandPositioner::Result WaylandPositioner::CalculatePosition(
WaylandPositioner::Result WaylandPositioner::CalculateBounds(
const gfx::Rect& work_area,
bool flip_x,
bool flip_y) const {
......@@ -359,9 +359,10 @@ WaylandPositioner::Result WaylandPositioner::CalculatePosition(
{work_area.y(), work_area.bottom()},
{anchor_rect_.y(), anchor_rect_.bottom()}, size_.height(), offset_y,
anchor_y, gravity_y, adjustments_y);
return {{x.first.start, y.first.start},
{x.first.end - x.first.start, y.first.end - y.first.start},
x.second.flip ? !flip_x : flip_x,
gfx::Point origin(x.first.start, y.first.start);
gfx::Size size(std::max(1, x.first.end - x.first.start),
std::max(1, y.first.end - y.first.start));
return {origin, size, x.second.flip ? !flip_x : flip_x,
y.second.flip ? !flip_y : flip_y};
}
......
......@@ -35,8 +35,8 @@ class WaylandPositioner {
WaylandPositioner(Version v) : version_(v) {}
// Calculate and return position from current state.
Result CalculatePosition(const gfx::Rect& work_area,
// Calculate and return bounds from current state.
Result CalculateBounds(const gfx::Rect& work_area,
bool flip_x,
bool flip_y) const;
......
......@@ -58,7 +58,7 @@ class WaylandPositionerTest : public testing::Test {
}
WaylandPositioner::Result Solve() const {
return positioner.CalculatePosition(work_area, flip_x, flip_y);
return positioner.CalculateBounds(work_area, flip_x, flip_y);
}
gfx::Rect SolveToRect() const {
......@@ -365,6 +365,27 @@ TEST_F(WaylandPositionerTest, PreventsSlidingThatOccludesAnchorRect) {
gfx::Rect(1, 1, 4, 4));
}
// Make sure that the size should never be an empty even if the constraints
// resulted in empty size.
TEST_F(WaylandPositionerTest, ResizableShouldNotBeEmpty) {
EXPECT_EQ(TestCaseBuilder(WaylandPositioner::Version::STABLE)
.SetSize(3, 3)
.SetGravity(XDG_POSITIONER_GRAVITY_BOTTOM)
.SetAnchor(XDG_POSITIONER_ANCHOR_BOTTOM)
.SetAdjustment(~XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE)
.SetAnchorRect(1, -10, 4, 4)
.SolveToRect(),
gfx::Rect(2, 0, 3, 1));
EXPECT_EQ(TestCaseBuilder(WaylandPositioner::Version::STABLE)
.SetSize(3, 3)
.SetGravity(XDG_POSITIONER_GRAVITY_RIGHT)
.SetAnchor(XDG_POSITIONER_ANCHOR_RIGHT)
.SetAdjustment(~XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE)
.SetAnchorRect(-10, 2, 4, 4)
.SolveToRect(),
gfx::Rect(0, 2, 1, 3));
}
} // namespace
} // namespace wayland
} // namespace exo
......@@ -586,7 +586,7 @@ void xdg_surface_get_popup(wl_client* client,
// Try layout using parent's flip state.
WaylandPositioner* positioner =
GetUserDataAs<WaylandPositioner>(positioner_resource);
WaylandPositioner::Result position = positioner->CalculatePosition(
WaylandPositioner::Result position = positioner->CalculateBounds(
work_area, parent_data->shell_surface->x_flipped(),
parent_data->shell_surface->y_flipped());
......
......@@ -557,7 +557,7 @@ void xdg_surface_v6_get_popup(wl_client* client,
// Try layout using parent's flip state.
WaylandPositioner* positioner =
GetUserDataAs<WaylandPositioner>(positioner_resource);
WaylandPositioner::Result position = positioner->CalculatePosition(
WaylandPositioner::Result position = positioner->CalculateBounds(
work_area, parent_data->shell_surface->x_flipped(),
parent_data->shell_surface->y_flipped());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment