2
* Copyright © 2016 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Alan Griffiths <alan@octopull.co.uk>
19
#include "test_window_manager_tools.h"
20
#include <mir/event_printer.h>
22
using namespace miral;
23
using namespace testing;
24
namespace mt = mir::test;
25
using mir::operator<<;
29
X const display_left{0};
30
Y const display_top{0};
31
Width const display_width{640};
32
Height const display_height{480};
34
Rectangle const display_area{{display_left, display_top},
35
{display_width, display_height}};
37
auto const null_window = Window{};
39
struct DisplayConfiguration : TestWindowManagerTools
41
Size const initial_window_size{600, 400};
47
basic_window_manager.add_display(display_area);
48
basic_window_manager.add_session(session);
51
void create_fullscreen_window()
53
mir::scene::SurfaceCreationParameters creation_parameters;
54
creation_parameters.type = mir_surface_type_normal;
55
creation_parameters.size = initial_window_size;
56
creation_parameters.state = mir_surface_state_fullscreen;
57
creation_parameters.output_id = mir::graphics::DisplayConfigurationOutputId{0};
59
EXPECT_CALL(*window_manager_policy, advise_new_window(_))
62
[this](WindowInfo const& window_info)
63
{ window = window_info.window(); }));
65
basic_window_manager.add_surface(session, creation_parameters, &create_surface);
66
basic_window_manager.select_active_window(window);
68
// Clear the expectations used to capture parent & child
69
Mock::VerifyAndClearExpectations(window_manager_policy);
74
// This is the scenario behind lp:1640557
75
TEST_F(DisplayConfiguration, given_fullscreen_windows_reconfiguring_displays_doesnt_crash)
77
create_fullscreen_window();
79
WindowSpecification mods;
80
mods.state() = mir_surface_state_hidden;
81
window_manager_tools.modify_window(window, mods);
82
mods.state() = mir_surface_state_fullscreen;
83
window_manager_tools.modify_window(window, mods);
85
Rectangle const new_display{display_area.top_left+as_displacement({display_width, Height{0}}), display_area.size};
87
basic_window_manager.add_display(new_display);
88
basic_window_manager.remove_display(new_display);