Skip to content

Commit d685c47

Browse files
authored
Merge pull request #3187 from MirServer/new_window_placement
Change placement of new floating windows
2 parents a632621 + f4b238a commit d685c47

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/miral/basic_window_manager.cpp

+36
Original file line numberDiff line numberDiff line change
@@ -2016,6 +2016,42 @@ auto miral::BasicWindowManager::place_new_surface(WindowSpecification parameters
20162016

20172017
if (parameters.top_left().value().y < display_area.top_left.y)
20182018
parameters.top_left() = Point{parameters.top_left().value().x, display_area.top_left.y};
2019+
2020+
if (parameters.state() == mir_window_state_restored)
2021+
{
2022+
auto const offset{48};
2023+
std::array const positions {
2024+
parameters.top_left().value(),
2025+
parameters.top_left().value() + Displacement( offset, offset),
2026+
parameters.top_left().value() + Displacement(-offset, offset),
2027+
parameters.top_left().value() + Displacement( offset, -offset),
2028+
parameters.top_left().value() + Displacement(-offset, -offset)};
2029+
2030+
for (auto const& position : positions)
2031+
{
2032+
auto const window{window_at(position)};
2033+
2034+
static auto const ignored_state_or_type = [](WindowInfo const& info)
2035+
{
2036+
switch (info.type())
2037+
{
2038+
case mir_window_type_normal:
2039+
case mir_window_type_decoration:
2040+
case mir_window_type_freestyle:
2041+
return info.state() != mir_window_state_restored;
2042+
2043+
default:
2044+
return true;
2045+
}
2046+
};
2047+
2048+
if (!window || ignored_state_or_type(info_for(window)) || window.top_left() != position)
2049+
{
2050+
parameters.top_left().value() = position;
2051+
break;
2052+
}
2053+
}
2054+
}
20192055
}
20202056

20212057
return parameters;

0 commit comments

Comments
 (0)