File tree 1 file changed +36
-0
lines changed
1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -2016,6 +2016,42 @@ auto miral::BasicWindowManager::place_new_surface(WindowSpecification parameters
2016
2016
2017
2017
if (parameters.top_left ().value ().y < display_area.top_left .y )
2018
2018
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
+ }
2019
2055
}
2020
2056
2021
2057
return parameters;
You can’t perform that action at this time.
0 commit comments