607
607
report->session_configure_display_called(session->name());
609
auto config = display_changer->base_configuration();
611
config->for_each_output([&](mg::UserDisplayConfigurationOutput& dest){
612
unsigned id = dest.id.as_value();
614
for (; n < request->display_output_size(); ++n)
616
if (request->display_output(n).output_id() == id)
619
if (n >= request->display_output_size())
622
auto& src = request->display_output(n);
623
dest.used = src.used();
624
dest.top_left = geom::Point{src.position_x(),
626
dest.current_mode_index = src.current_mode();
627
dest.current_format =
628
static_cast<MirPixelFormat>(src.current_format());
629
dest.power_mode = static_cast<MirPowerMode>(src.power_mode());
630
dest.orientation = static_cast<MirOrientation>(src.orientation());
609
auto const config = unpack_and_sanitize_display_configuration(request);
633
610
display_changer->configure(session, config);
634
612
auto display_config = display_changer->base_configuration();
635
613
mfd::pack_protobuf_display_configuration(*response, *display_config);
618
void mf::SessionMediator::set_base_display_configuration(
619
mir::protobuf::DisplayConfiguration const* request,
620
mir::protobuf::Void* /*response*/,
621
google::protobuf::Closure* done)
623
auto session = weak_session.lock();
625
if (session.get() == nullptr)
626
BOOST_THROW_EXCEPTION(std::logic_error("Invalid application session"));
628
report->session_set_base_display_configuration_called(session->name());
630
auto const config = unpack_and_sanitize_display_configuration(request);
631
display_changer->set_base_configuration(config);
640
636
void mf::SessionMediator::create_screencast(
641
637
const mir::protobuf::ScreencastParameters* parameters,
642
638
mir::protobuf::Screencast* protobuf_screencast,
1006
std::shared_ptr<mg::DisplayConfiguration>
1007
mf::SessionMediator::unpack_and_sanitize_display_configuration(
1008
mir::protobuf::DisplayConfiguration const* protobuf_config)
1010
auto config = display_changer->base_configuration();
1012
config->for_each_output([&](mg::UserDisplayConfigurationOutput& dest){
1013
unsigned id = dest.id.as_value();
1015
for (; n < protobuf_config->display_output_size(); ++n)
1017
if (protobuf_config->display_output(n).output_id() == id)
1020
if (n >= protobuf_config->display_output_size())
1023
auto& src = protobuf_config->display_output(n);
1024
dest.used = src.used();
1025
dest.top_left = geom::Point{src.position_x(),
1027
dest.current_mode_index = src.current_mode();
1028
dest.current_format =
1029
static_cast<MirPixelFormat>(src.current_format());
1030
dest.power_mode = static_cast<MirPowerMode>(src.power_mode());
1031
dest.orientation = static_cast<MirOrientation>(src.orientation());