18
18
#include " mir/input/scene.h"
19
19
#include " mir/time/alarm_factory.h"
20
20
#include " mir/time/clock.h"
21
+ #include " mir/executor.h"
21
22
#include < chrono>
22
23
23
24
namespace mg = mir::graphics;
24
25
25
26
mg::DefaultInitialRenderManager::DefaultInitialRenderManager (
27
+ std::shared_ptr<Executor> const & scene_executor,
26
28
std::shared_ptr<time::Clock>&clock,
27
29
time::AlarmFactory &alarm_factory,
28
30
std::shared_ptr<input::Scene>& scene)
29
- : clock{clock },
30
- scene{scene},
31
- alarm{alarm_factory.create_alarm ([&]{
31
+ : scene_executor{scene_executor},
32
+ clock{clock },
33
+ scene{scene},
34
+ alarm{alarm_factory.create_alarm ([&]{
32
35
remove_renderables ();
33
36
alarm ->cancel ();
34
- })}
37
+ })}
35
38
{
36
39
time ::Timestamp scheduled_time = clock ->now () + std::chrono::seconds {5 };
37
40
alarm ->reschedule_for (scheduled_time);
@@ -48,19 +51,22 @@ void mg::DefaultInitialRenderManager::add_initial_render(std::shared_ptr<Initial
48
51
49
52
for (auto const & renderable : initial_render->get_renderables ())
50
53
{
51
- scene->add_input_visualization (renderable);
54
+ scene_executor->spawn ([scene = scene, to_add = renderable]()
55
+ {
56
+ scene->add_input_visualization (to_add);
57
+ });
58
+ renderable_list.push_back (renderable);
52
59
}
53
- renderable_list.push_back (initial_render);
54
60
}
55
61
56
62
void mg::DefaultInitialRenderManager::remove_renderables ()
57
63
{
58
- for (auto inital_render : renderable_list)
64
+ for (auto const & renderable : renderable_list)
59
65
{
60
- for ( auto const & renderable : inital_render-> get_renderables () )
61
- {
62
- scene->remove_input_visualization (renderable );
63
- }
66
+ scene_executor-> spawn ([scene = scene, to_remove = renderable]( )
67
+ {
68
+ scene->remove_input_visualization (to_remove );
69
+ });
64
70
}
65
71
renderable_list.clear ();
66
72
}
0 commit comments