19 #ifndef MIR_SHELL_MEDIATING_DISPLAY_CHANGER_H_
20 #define MIR_SHELL_MEDIATING_DISPLAY_CHANGER_H_
34 class DisplayConfigurationPolicy;
36 namespace compositor {
class Compositor; }
41 class SessionContainer;
42 class SessionEventHandlerRegister;
49 std::shared_ptr<graphics::Display>
const& display,
50 std::shared_ptr<compositor::Compositor>
const& compositor,
51 std::shared_ptr<graphics::DisplayConfigurationPolicy>
const& display_configuration_policy,
52 std::shared_ptr<SessionContainer>
const& session_container,
53 std::shared_ptr<SessionEventHandlerRegister>
const& session_event_handler_register);
57 void configure(std::shared_ptr<frontend::Session>
const& session,
58 std::shared_ptr<graphics::DisplayConfiguration>
const& conf);
64 std::shared_ptr<graphics::DisplayConfiguration>
const& conf,
68 void apply_config(std::shared_ptr<graphics::DisplayConfiguration>
const& conf,
71 void send_config_to_all_sessions(
72 std::shared_ptr<graphics::DisplayConfiguration>
const& conf);
74 std::shared_ptr<graphics::Display>
const display;
75 std::shared_ptr<compositor::Compositor>
const compositor;
76 std::shared_ptr<graphics::DisplayConfigurationPolicy>
const display_configuration_policy;
77 std::shared_ptr<shell::SessionContainer>
const session_container;
78 std::shared_ptr<SessionEventHandlerRegister>
const session_event_handler_register;
79 std::mutex configuration_mutex;
80 std::map<std::weak_ptr<frontend::Session>,
81 std::shared_ptr<graphics::DisplayConfiguration>,
82 std::owner_less<std::weak_ptr<frontend::Session>>> config_map;
83 std::weak_ptr<frontend::Session> focused_session;
84 std::shared_ptr<graphics::DisplayConfiguration> base_configuration;
85 bool base_configuration_applied;