Merge lp:~robert-ancell/unity-system-compositor/app-lifecycle into lp:unity-system-compositor

Proposed by Robert Ancell
Status: Merged
Approved by: Robert Ancell
Approved revision: 79
Merged at revision: 76
Proposed branch: lp:~robert-ancell/unity-system-compositor/app-lifecycle
Merge into: lp:unity-system-compositor
Diff against target: 139 lines (+63/-10)
2 files modified
src/system_compositor.cpp (+57/-8)
src/system_compositor.h (+6/-2)
To merge this branch: bzr merge lp:~robert-ancell/unity-system-compositor/app-lifecycle
Reviewer Review Type Date Requested Status
Chris Halse Rogers Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+186135@code.launchpad.net

Commit message

Set lifecycle state for clients when setting the active session

To post a comment you must log in.
Revision history for this message
Robert Ancell (robert-ancell) wrote :
Revision history for this message
Robert Ancell (robert-ancell) wrote :

A future improvement is to set the client to paused on startup - it might be in the background.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
78. By Robert Ancell

Merge with trunk

79. By Robert Ancell

Use new Mir interface name ServerStatus->PauseResumeListener

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/system_compositor.cpp'
--- src/system_compositor.cpp 2013-08-21 14:57:43 +0000
+++ src/system_compositor.cpp 2013-09-19 13:14:57 +0000
@@ -19,6 +19,8 @@
19#include "system_compositor.h"19#include "system_compositor.h"
2020
21#include <mir/run_mir.h>21#include <mir/run_mir.h>
22#include <mir/pause_resume_listener.h>
23#include <mir/shell/application_session.h>
22#include <mir/shell/session.h>24#include <mir/shell/session.h>
23#include <mir/shell/session_container.h>25#include <mir/shell/session_container.h>
24#include <mir/shell/focus_setter.h>26#include <mir/shell/focus_setter.h>
@@ -33,8 +35,8 @@
33class SystemCompositorServerConfiguration : public mir::DefaultServerConfiguration35class SystemCompositorServerConfiguration : public mir::DefaultServerConfiguration
34{36{
35public:37public:
36 SystemCompositorServerConfiguration(int argc, char const** argv)38 SystemCompositorServerConfiguration(SystemCompositor *compositor, int argc, char const** argv)
37 : mir::DefaultServerConfiguration(argc, argv)39 : mir::DefaultServerConfiguration(argc, argv), compositor{compositor}
38 {40 {
39 namespace po = boost::program_options;41 namespace po = boost::program_options;
4042
@@ -70,11 +72,35 @@
70 };72 };
71 return std::make_shared<NullCursorListener>();73 return std::make_shared<NullCursorListener>();
72 }74 }
75
76 std::shared_ptr<mir::PauseResumeListener> the_pause_resume_listener() override
77 {
78 struct PauseResumeListener : public mir::PauseResumeListener
79 {
80 PauseResumeListener (SystemCompositor *compositor) : compositor{compositor} {}
81
82 void paused() override
83 {
84 compositor->pause();
85 }
86
87 void resumed() override
88 {
89 compositor->resume();
90 }
91
92 SystemCompositor *compositor;
93 };
94 return std::make_shared<PauseResumeListener>(compositor);
95 }
96
97private:
98 SystemCompositor *compositor;
73};99};
74100
75void SystemCompositor::run(int argc, char const** argv)101void SystemCompositor::run(int argc, char const** argv)
76{102{
77 auto c = std::make_shared<SystemCompositorServerConfiguration>(argc, argv);103 auto c = std::make_shared<SystemCompositorServerConfiguration>(this, argc, argv);
78 config = c;104 config = c;
79 105
80 if (c->show_version())106 if (c->show_version())
@@ -100,19 +126,42 @@
100 });126 });
101}127}
102128
129void SystemCompositor::pause()
130{
131 std::cerr << "pause" << std::endl;
132
133 if (active_session)
134 active_session->set_lifecycle_state(mir_lifecycle_state_will_suspend);
135}
136
137void SystemCompositor::resume()
138{
139 std::cerr << "resume" << std::endl;
140
141 if (active_session)
142 active_session->set_lifecycle_state(mir_lifecycle_state_resumed);
143}
144
103void SystemCompositor::set_active_session(std::string client_name)145void SystemCompositor::set_active_session(std::string client_name)
104{146{
105 std::cerr << "set_active_session" << std::endl;147 std::cerr << "set_active_session" << std::endl;
106148
107 std::shared_ptr<msh::Session> session;149 active_session.reset();
108 config->the_shell_session_container()->for_each([&client_name, &session](std::shared_ptr<msh::Session> const& s)150 config->the_shell_session_container()->for_each([&](std::shared_ptr<msh::Session> const& s)
109 {151 {
152 auto app_session(std::static_pointer_cast<msh::ApplicationSession>(s));
153
110 if (s->name() == client_name)154 if (s->name() == client_name)
111 session = s;155 {
156 app_session->set_lifecycle_state(mir_lifecycle_state_resumed);
157 active_session = app_session;
158 }
159 else
160 app_session->set_lifecycle_state(mir_lifecycle_state_will_suspend);
112 });161 });
113162
114 if (session)163 if (active_session)
115 config->the_shell_focus_setter()->set_focus_to(session);164 config->the_shell_focus_setter()->set_focus_to(active_session);
116 else165 else
117 std::cerr << "Unable to set active session, unknown client name " << client_name << std::endl;166 std::cerr << "Unable to set active session, unknown client name " << client_name << std::endl;
118}167}
119168
=== modified file 'src/system_compositor.h'
--- src/system_compositor.h 2013-07-09 19:18:59 +0000
+++ src/system_compositor.h 2013-09-19 13:14:57 +0000
@@ -22,6 +22,7 @@
22#include "dm_connection.h"22#include "dm_connection.h"
2323
24#include <mir/default_server_configuration.h>24#include <mir/default_server_configuration.h>
25#include <mir/shell/application_session.h>
2526
26class Configuration;27class Configuration;
2728
@@ -29,14 +30,17 @@
29{30{
30public:31public:
31 void run(int argc, char const** argv);32 void run(int argc, char const** argv);
33 void pause();
34 void resume();
3235
33private:36private:
34 std::shared_ptr<mir::DefaultServerConfiguration> config;37 std::shared_ptr<mir::DefaultServerConfiguration> config;
35 boost::asio::io_service io_service;38 boost::asio::io_service io_service;
36 std::shared_ptr<DMConnection> dm_connection;39 std::shared_ptr<DMConnection> dm_connection;
40 std::shared_ptr<mir::shell::ApplicationSession> active_session;
3741
38 virtual void set_active_session(std::string client_name);42 void set_active_session(std::string client_name);
39 virtual void set_next_session(std::string client_name);43 void set_next_session(std::string client_name);
40 void main();44 void main();
41};45};
4246

Subscribers

People subscribed via source and target branches