Merge lp:~3v1n0/unity/lockscreen-disable-with-osk into lp:unity

Proposed by Marco Trevisan (Treviño)
Status: Merged
Merged at revision: 3765
Proposed branch: lp:~3v1n0/unity/lockscreen-disable-with-osk
Merge into: lp:unity
Prerequisite: lp:~unity-team/unity/gs-dbus-interface
Diff against target: 322 lines (+93/-16)
11 files modified
UnityCore/GLibDBusServer.cpp (+4/-4)
UnityCore/GLibDBusServer.h (+1/-1)
debian/rules (+2/-0)
lockscreen/LockScreenController.cpp (+18/-5)
lockscreen/LockScreenController.h (+2/-1)
lockscreen/LockScreenSettings.cpp (+17/-0)
lockscreen/LockScreenSettings.h (+1/-0)
lockscreen/ScreenSaverDBusManager.cpp (+27/-3)
lockscreen/ScreenSaverDBusManager.h (+3/-2)
plugins/unityshell/src/unityshell.cpp (+3/-0)
tests/data/external.gschema.xml (+15/-0)
To merge this branch: bzr merge lp:~3v1n0/unity/lockscreen-disable-with-osk
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Unity Team Pending
Review via email: mp+214653@code.launchpad.net

Commit message

ScreenSaverDBusManager: start/stop gnome-screensaver if we don't/do handle the locking

This allows to just use the fallback gnome-screensaver lockscreen if we need to use it.

Description of the change

In order to work properly in fallback mode it needs lp:~3v1n0/gnome-screensaver/not-autostart-in-unity

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
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
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'UnityCore/GLibDBusServer.cpp'
2--- UnityCore/GLibDBusServer.cpp 2013-11-14 01:51:24 +0000
3+++ UnityCore/GLibDBusServer.cpp 2014-04-09 13:25:46 +0000
4@@ -501,10 +501,10 @@
5 , owner_name_(0)
6 {}
7
8- Impl(DBusServer* server, std::string const& name, GBusType bus_type)
9+ Impl(DBusServer* server, std::string const& name, GBusType bus_type, GBusNameOwnerFlags flags)
10 : Impl(server, name)
11 {
12- owner_name_ = g_bus_own_name(bus_type, name.c_str(), G_BUS_NAME_OWNER_FLAGS_NONE,
13+ owner_name_ = g_bus_own_name(bus_type, name.c_str(), flags,
14 [] (GDBusConnection* conn, const gchar* name, gpointer data)
15 {
16 auto self = static_cast<DBusServer::Impl*>(data);
17@@ -665,8 +665,8 @@
18 std::vector<std::pair<DBusObject::Ptr, std::string>> pending_objects_;
19 };
20
21-DBusServer::DBusServer(std::string const& name, GBusType bus_type)
22- : impl_(new DBusServer::Impl(this, name, bus_type))
23+DBusServer::DBusServer(std::string const& name, GBusType bus_type, GBusNameOwnerFlags flags)
24+ : impl_(new DBusServer::Impl(this, name, bus_type, flags))
25 {}
26
27 DBusServer::DBusServer(GBusType bus_type)
28
29=== modified file 'UnityCore/GLibDBusServer.h'
30--- UnityCore/GLibDBusServer.h 2013-03-02 12:55:59 +0000
31+++ UnityCore/GLibDBusServer.h 2014-04-09 13:25:46 +0000
32@@ -81,7 +81,7 @@
33 typedef std::shared_ptr<DBusServer> Ptr;
34
35 DBusServer(GBusType bus_type = G_BUS_TYPE_SESSION);
36- DBusServer(std::string const& name, GBusType bus_type = G_BUS_TYPE_SESSION);
37+ DBusServer(std::string const& name, GBusType bus_type = G_BUS_TYPE_SESSION, GBusNameOwnerFlags flags = G_BUS_NAME_OWNER_FLAGS_NONE);
38 virtual ~DBusServer();
39
40 void AddObjects(std::string const& introspection_xml, std::string const& path);
41
42=== modified file 'debian/rules'
43--- debian/rules 2014-02-28 19:41:19 +0000
44+++ debian/rules 2014-04-09 13:25:46 +0000
45@@ -56,7 +56,9 @@
46 dh_shlibdeps -l$(LIBUNITY_PRIVATE) -O--parallel
47
48 override_dh_auto_test:
49+ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
50 make -C obj-$(DEB_HOST_GNU_TYPE) check-headless
51+endif
52
53 %:
54 dh $@ --with translations,quilt,python2,migrations --parallel
55
56=== modified file 'lockscreen/LockScreenController.cpp'
57--- lockscreen/LockScreenController.cpp 2014-04-09 13:25:46 +0000
58+++ lockscreen/LockScreenController.cpp 2014-04-09 13:25:46 +0000
59@@ -258,6 +258,12 @@
60 skip_animation_ = false;
61 }
62
63+void Controller::ShowBlankWindow()
64+{
65+ EnsureBlankWindow();
66+ animation::StartOrReverse(blank_window_animator_, animation::Direction::FORWARD);
67+}
68+
69 void Controller::HideBlankWindow()
70 {
71 if (!blank_window_)
72@@ -270,6 +276,15 @@
73
74 void Controller::OnLockRequested()
75 {
76+ if (Settings::Instance().use_legacy())
77+ {
78+ auto proxy = std::make_shared<glib::DBusProxy>("org.gnome.ScreenSaver", "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver");
79+ // By passing the proxy to the lambda we ensure that it will stay alive
80+ // until we get the last callback.
81+ proxy->CallBegin("Lock", nullptr, [proxy] (GVariant*, glib::Error const&) {});
82+ return;
83+ }
84+
85 if (IsLocked())
86 {
87 LOG_DEBUG(logger) << "Failed to lock screen: the screen is already locked.";
88@@ -311,8 +326,7 @@
89 {
90 if (is_idle)
91 {
92- EnsureBlankWindow();
93- animation::StartOrReverse(blank_window_animator_, animation::Direction::FORWARD);
94+ ShowBlankWindow();
95 }
96 else
97 {
98@@ -328,8 +342,7 @@
99
100 if (activate)
101 {
102- EnsureBlankWindow();
103- animation::StartOrReverse(blank_window_animator_, animation::Direction::FORWARD);
104+ ShowBlankWindow();
105 animation::Skip(blank_window_animator_);
106 }
107 else
108@@ -376,11 +389,11 @@
109 void Controller::OnUnlockRequested()
110 {
111 lockscreen_timeout_.reset();
112+ screensaver_post_lock_timeout_.reset();
113
114 if (!IsLocked())
115 return;
116
117- screensaver_post_lock_timeout_.reset();
118 HideShields();
119 }
120
121
122=== modified file 'lockscreen/LockScreenController.h'
123--- lockscreen/LockScreenController.h 2014-04-09 13:25:46 +0000
124+++ lockscreen/LockScreenController.h 2014-04-09 13:25:46 +0000
125@@ -52,10 +52,11 @@
126
127 void EnsureShields(std::vector<nux::Geometry> const& monitors);
128 void EnsureBlankWindow();
129- void HideBlankWindow();
130 void LockScreen();
131 void ShowShields();
132 void HideShields();
133+ void ShowBlankWindow();
134+ void HideBlankWindow();
135 void RequestPromptScreenLock();
136 void SimulateActivity();
137 void ResetPostLockScreenSaver();
138
139=== modified file 'lockscreen/LockScreenSettings.cpp'
140--- lockscreen/LockScreenSettings.cpp 2014-04-09 13:25:46 +0000
141+++ lockscreen/LockScreenSettings.cpp 2014-04-09 13:25:46 +0000
142@@ -49,6 +49,10 @@
143 const std::string LOCK_DELAY = "lock-delay";
144 const std::string LOCK_ENABLED = "lock-enabled";
145 const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
146+
147+const std::string A11Y_SETTINGS = "org.gnome.desktop.a11y.applications";
148+const std::string USE_SCREEN_READER = "screen-reader-enabled";
149+const std::string USE_OSK = "screen-keyboard-enabled";
150 }
151
152 struct Settings::Impl
153@@ -56,11 +60,14 @@
154 Impl()
155 : greeter_settings_(g_settings_new(GREETER_SETTINGS.c_str()))
156 , gs_settings_(g_settings_new(GS_SETTINGS.c_str()))
157+ , a11y_settings_(g_settings_new(A11Y_SETTINGS.c_str()))
158 , greeter_signal_(greeter_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateGreeterSettings))))
159 , gs_signal_(gs_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateGSSettings))))
160+ , osk_signal_(a11y_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateA11YSettings))))
161 {
162 UpdateGreeterSettings();
163 UpdateGSSettings();
164+ UpdateA11YSettings();
165 }
166
167 void UpdateGreeterSettings()
168@@ -83,11 +90,21 @@
169 s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
170 }
171
172+ void UpdateA11YSettings()
173+ {
174+ bool legacy = false;
175+ legacy = g_settings_get_boolean(a11y_settings_, USE_SCREEN_READER.c_str()) != FALSE;
176+ legacy = legacy || g_settings_get_boolean(a11y_settings_, USE_OSK.c_str()) != FALSE;
177+ settings_instance->use_legacy = legacy;
178+ }
179+
180 glib::Object<GSettings> greeter_settings_;
181 glib::Object<GSettings> gs_settings_;
182+ glib::Object<GSettings> a11y_settings_;
183
184 glib::Signal<void, GSettings*, const gchar*> greeter_signal_;
185 glib::Signal<void, GSettings*, const gchar*> gs_signal_;
186+ glib::Signal<void, GSettings*, const gchar*> osk_signal_;
187 };
188
189 Settings::Settings()
190
191=== modified file 'lockscreen/LockScreenSettings.h'
192--- lockscreen/LockScreenSettings.h 2014-04-09 13:25:46 +0000
193+++ lockscreen/LockScreenSettings.h 2014-04-09 13:25:46 +0000
194@@ -46,6 +46,7 @@
195 nux::Property<int> lock_delay;
196 nux::Property<bool> lock_on_blank;
197 nux::Property<bool> lock_on_suspend;
198+ nux::Property<bool> use_legacy;
199
200 static const int GRID_SIZE = 40;
201
202
203=== modified file 'lockscreen/ScreenSaverDBusManager.cpp'
204--- lockscreen/ScreenSaverDBusManager.cpp 2014-04-09 13:25:46 +0000
205+++ lockscreen/ScreenSaverDBusManager.cpp 2014-04-09 13:25:46 +0000
206@@ -20,6 +20,7 @@
207 #include "ScreenSaverDBusManager.h"
208
209 #include "LockScreenSettings.h"
210+#include "GLibDBusProxy.h"
211 #include "Variant.h"
212
213 namespace unity
214@@ -55,12 +56,13 @@
215 DBusManager::DBusManager(session::Manager::Ptr const& session)
216 : active(false)
217 , session_(session)
218- , server_(dbus::NAME)
219+ , object_(std::make_shared<glib::DBusObject>(dbus::INTROSPECTION_XML, dbus::INTERFACE))
220 , time_(0)
221 {
222 active.changed.connect(sigc::mem_fun(this, &DBusManager::SetActive));
223- server_.AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);
224- object_ = server_.GetObject(dbus::INTERFACE);
225+
226+ // This is a workaround we use to fallback to use gnome-screensaver if the screen reader is enabled
227+ Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &DBusManager::EnsureService)));
228
229 object_->SetMethodsCallsHandler([this] (std::string const& method, GVariant* variant) -> GVariant* {
230 if (method == "Lock")
231@@ -89,6 +91,28 @@
232
233 return nullptr;
234 });
235+
236+ EnsureService();
237+}
238+
239+void DBusManager::EnsureService()
240+{
241+ if (!Settings::Instance().use_legacy())
242+ {
243+ if (!server_)
244+ {
245+ server_ = std::make_shared<glib::DBusServer>(dbus::NAME, G_BUS_TYPE_SESSION, G_BUS_NAME_OWNER_FLAGS_REPLACE);
246+ server_->AddObject(object_, dbus::OBJECT_PATH);
247+ }
248+ }
249+ else
250+ {
251+ server_.reset();
252+
253+ // Let's make GS to restart...
254+ auto proxy = std::make_shared<glib::DBusProxy>("org.gnome.ScreenSaver", "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver");
255+ proxy->CallBegin("SimulateUserActivity", nullptr, [proxy] (GVariant*, glib::Error const&) {});
256+ }
257 }
258
259 void DBusManager::SetActive(bool active)
260
261=== modified file 'lockscreen/ScreenSaverDBusManager.h'
262--- lockscreen/ScreenSaverDBusManager.h 2014-04-09 13:25:46 +0000
263+++ lockscreen/ScreenSaverDBusManager.h 2014-04-09 13:25:46 +0000
264@@ -29,7 +29,7 @@
265 namespace lockscreen
266 {
267
268-class DBusManager
269+class DBusManager : public sigc::trackable
270 {
271 public:
272 typedef std::shared_ptr<DBusManager> Ptr;
273@@ -43,9 +43,10 @@
274
275 private:
276 void SetActive(bool active);
277+ void EnsureService();
278
279 session::Manager::Ptr session_;
280- glib::DBusServer server_;
281+ glib::DBusServer::Ptr server_;
282 glib::DBusObject::Ptr object_;
283
284 bool active_;
285
286=== modified file 'plugins/unityshell/src/unityshell.cpp'
287--- plugins/unityshell/src/unityshell.cpp 2014-04-09 13:25:46 +0000
288+++ plugins/unityshell/src/unityshell.cpp 2014-04-09 13:25:46 +0000
289@@ -1984,6 +1984,9 @@
290 ubus_manager_.SendMessage(UBUS_OVERLAY_CLOSE_REQUEST);
291 }
292
293+ if (g_strcmp0(plugin, "scale") == 0)
294+ g_print("Scale event %s\n",event);
295+
296 if (adapter.IsScaleActive() && g_strcmp0(plugin, "scale") == 0 &&
297 super_keypressed_)
298 {
299
300=== modified file 'tests/data/external.gschema.xml'
301--- tests/data/external.gschema.xml 2014-04-09 13:25:46 +0000
302+++ tests/data/external.gschema.xml 2014-04-09 13:25:46 +0000
303@@ -106,4 +106,19 @@
304 <default>true</default>
305 </key>
306 </schema>
307+
308+ <schema path="/org/gnome/desktop/lockdown/" id="org.gnome.desktop.lockdown">
309+ <key type="b" name="disable-lock-screen">
310+ <default>false</default>
311+ </key>
312+ </schema>
313+
314+ <schema path="/org/gnome/desktop/a11y/applications/" id="org.gnome.desktop.a11y.applications">
315+ <key type="b" name="screen-keyboard-enabled">
316+ <default>false</default>
317+ </key>
318+ <key type="b" name="screen-reader-enabled">
319+ <default>false</default>
320+ </key>
321+ </schema>
322 </schemalist>