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
=== modified file 'UnityCore/GLibDBusServer.cpp'
--- UnityCore/GLibDBusServer.cpp 2013-11-14 01:51:24 +0000
+++ UnityCore/GLibDBusServer.cpp 2014-04-09 13:25:46 +0000
@@ -501,10 +501,10 @@
501 , owner_name_(0)501 , owner_name_(0)
502 {}502 {}
503503
504 Impl(DBusServer* server, std::string const& name, GBusType bus_type)504 Impl(DBusServer* server, std::string const& name, GBusType bus_type, GBusNameOwnerFlags flags)
505 : Impl(server, name)505 : Impl(server, name)
506 {506 {
507 owner_name_ = g_bus_own_name(bus_type, name.c_str(), G_BUS_NAME_OWNER_FLAGS_NONE,507 owner_name_ = g_bus_own_name(bus_type, name.c_str(), flags,
508 [] (GDBusConnection* conn, const gchar* name, gpointer data)508 [] (GDBusConnection* conn, const gchar* name, gpointer data)
509 {509 {
510 auto self = static_cast<DBusServer::Impl*>(data);510 auto self = static_cast<DBusServer::Impl*>(data);
@@ -665,8 +665,8 @@
665 std::vector<std::pair<DBusObject::Ptr, std::string>> pending_objects_;665 std::vector<std::pair<DBusObject::Ptr, std::string>> pending_objects_;
666};666};
667667
668DBusServer::DBusServer(std::string const& name, GBusType bus_type)668DBusServer::DBusServer(std::string const& name, GBusType bus_type, GBusNameOwnerFlags flags)
669 : impl_(new DBusServer::Impl(this, name, bus_type))669 : impl_(new DBusServer::Impl(this, name, bus_type, flags))
670{}670{}
671671
672DBusServer::DBusServer(GBusType bus_type)672DBusServer::DBusServer(GBusType bus_type)
673673
=== modified file 'UnityCore/GLibDBusServer.h'
--- UnityCore/GLibDBusServer.h 2013-03-02 12:55:59 +0000
+++ UnityCore/GLibDBusServer.h 2014-04-09 13:25:46 +0000
@@ -81,7 +81,7 @@
81 typedef std::shared_ptr<DBusServer> Ptr;81 typedef std::shared_ptr<DBusServer> Ptr;
8282
83 DBusServer(GBusType bus_type = G_BUS_TYPE_SESSION);83 DBusServer(GBusType bus_type = G_BUS_TYPE_SESSION);
84 DBusServer(std::string const& name, GBusType bus_type = G_BUS_TYPE_SESSION);84 DBusServer(std::string const& name, GBusType bus_type = G_BUS_TYPE_SESSION, GBusNameOwnerFlags flags = G_BUS_NAME_OWNER_FLAGS_NONE);
85 virtual ~DBusServer();85 virtual ~DBusServer();
8686
87 void AddObjects(std::string const& introspection_xml, std::string const& path);87 void AddObjects(std::string const& introspection_xml, std::string const& path);
8888
=== modified file 'debian/rules'
--- debian/rules 2014-02-28 19:41:19 +0000
+++ debian/rules 2014-04-09 13:25:46 +0000
@@ -56,7 +56,9 @@
56 dh_shlibdeps -l$(LIBUNITY_PRIVATE) -O--parallel56 dh_shlibdeps -l$(LIBUNITY_PRIVATE) -O--parallel
5757
58override_dh_auto_test:58override_dh_auto_test:
59ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
59 make -C obj-$(DEB_HOST_GNU_TYPE) check-headless60 make -C obj-$(DEB_HOST_GNU_TYPE) check-headless
61endif
6062
61%:63%:
62 dh $@ --with translations,quilt,python2,migrations --parallel64 dh $@ --with translations,quilt,python2,migrations --parallel
6365
=== modified file 'lockscreen/LockScreenController.cpp'
--- lockscreen/LockScreenController.cpp 2014-04-09 13:25:46 +0000
+++ lockscreen/LockScreenController.cpp 2014-04-09 13:25:46 +0000
@@ -258,6 +258,12 @@
258 skip_animation_ = false;258 skip_animation_ = false;
259}259}
260260
261void Controller::ShowBlankWindow()
262{
263 EnsureBlankWindow();
264 animation::StartOrReverse(blank_window_animator_, animation::Direction::FORWARD);
265}
266
261void Controller::HideBlankWindow()267void Controller::HideBlankWindow()
262{268{
263 if (!blank_window_)269 if (!blank_window_)
@@ -270,6 +276,15 @@
270276
271void Controller::OnLockRequested()277void Controller::OnLockRequested()
272{278{
279 if (Settings::Instance().use_legacy())
280 {
281 auto proxy = std::make_shared<glib::DBusProxy>("org.gnome.ScreenSaver", "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver");
282 // By passing the proxy to the lambda we ensure that it will stay alive
283 // until we get the last callback.
284 proxy->CallBegin("Lock", nullptr, [proxy] (GVariant*, glib::Error const&) {});
285 return;
286 }
287
273 if (IsLocked())288 if (IsLocked())
274 {289 {
275 LOG_DEBUG(logger) << "Failed to lock screen: the screen is already locked.";290 LOG_DEBUG(logger) << "Failed to lock screen: the screen is already locked.";
@@ -311,8 +326,7 @@
311{326{
312 if (is_idle)327 if (is_idle)
313 {328 {
314 EnsureBlankWindow();329 ShowBlankWindow();
315 animation::StartOrReverse(blank_window_animator_, animation::Direction::FORWARD);
316 }330 }
317 else331 else
318 {332 {
@@ -328,8 +342,7 @@
328342
329 if (activate)343 if (activate)
330 {344 {
331 EnsureBlankWindow();345 ShowBlankWindow();
332 animation::StartOrReverse(blank_window_animator_, animation::Direction::FORWARD);
333 animation::Skip(blank_window_animator_);346 animation::Skip(blank_window_animator_);
334 }347 }
335 else348 else
@@ -376,11 +389,11 @@
376void Controller::OnUnlockRequested()389void Controller::OnUnlockRequested()
377{390{
378 lockscreen_timeout_.reset();391 lockscreen_timeout_.reset();
392 screensaver_post_lock_timeout_.reset();
379393
380 if (!IsLocked())394 if (!IsLocked())
381 return;395 return;
382396
383 screensaver_post_lock_timeout_.reset();
384 HideShields();397 HideShields();
385}398}
386399
387400
=== modified file 'lockscreen/LockScreenController.h'
--- lockscreen/LockScreenController.h 2014-04-09 13:25:46 +0000
+++ lockscreen/LockScreenController.h 2014-04-09 13:25:46 +0000
@@ -52,10 +52,11 @@
5252
53 void EnsureShields(std::vector<nux::Geometry> const& monitors);53 void EnsureShields(std::vector<nux::Geometry> const& monitors);
54 void EnsureBlankWindow();54 void EnsureBlankWindow();
55 void HideBlankWindow();
56 void LockScreen();55 void LockScreen();
57 void ShowShields();56 void ShowShields();
58 void HideShields();57 void HideShields();
58 void ShowBlankWindow();
59 void HideBlankWindow();
59 void RequestPromptScreenLock();60 void RequestPromptScreenLock();
60 void SimulateActivity();61 void SimulateActivity();
61 void ResetPostLockScreenSaver();62 void ResetPostLockScreenSaver();
6263
=== modified file 'lockscreen/LockScreenSettings.cpp'
--- lockscreen/LockScreenSettings.cpp 2014-04-09 13:25:46 +0000
+++ lockscreen/LockScreenSettings.cpp 2014-04-09 13:25:46 +0000
@@ -49,6 +49,10 @@
49const std::string LOCK_DELAY = "lock-delay";49const std::string LOCK_DELAY = "lock-delay";
50const std::string LOCK_ENABLED = "lock-enabled";50const std::string LOCK_ENABLED = "lock-enabled";
51const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";51const std::string LOCK_ON_SUSPEND = "ubuntu-lock-on-suspend";
52
53const std::string A11Y_SETTINGS = "org.gnome.desktop.a11y.applications";
54const std::string USE_SCREEN_READER = "screen-reader-enabled";
55const std::string USE_OSK = "screen-keyboard-enabled";
52}56}
5357
54struct Settings::Impl58struct Settings::Impl
@@ -56,11 +60,14 @@
56 Impl()60 Impl()
57 : greeter_settings_(g_settings_new(GREETER_SETTINGS.c_str()))61 : greeter_settings_(g_settings_new(GREETER_SETTINGS.c_str()))
58 , gs_settings_(g_settings_new(GS_SETTINGS.c_str()))62 , gs_settings_(g_settings_new(GS_SETTINGS.c_str()))
63 , a11y_settings_(g_settings_new(A11Y_SETTINGS.c_str()))
59 , greeter_signal_(greeter_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateGreeterSettings))))64 , greeter_signal_(greeter_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateGreeterSettings))))
60 , gs_signal_(gs_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateGSSettings))))65 , gs_signal_(gs_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateGSSettings))))
66 , osk_signal_(a11y_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateA11YSettings))))
61 {67 {
62 UpdateGreeterSettings();68 UpdateGreeterSettings();
63 UpdateGSSettings();69 UpdateGSSettings();
70 UpdateA11YSettings();
64 }71 }
6572
66 void UpdateGreeterSettings()73 void UpdateGreeterSettings()
@@ -83,11 +90,21 @@
83 s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());90 s->lock_delay = g_settings_get_uint(gs_settings_, LOCK_DELAY.c_str());
84 }91 }
8592
93 void UpdateA11YSettings()
94 {
95 bool legacy = false;
96 legacy = g_settings_get_boolean(a11y_settings_, USE_SCREEN_READER.c_str()) != FALSE;
97 legacy = legacy || g_settings_get_boolean(a11y_settings_, USE_OSK.c_str()) != FALSE;
98 settings_instance->use_legacy = legacy;
99 }
100
86 glib::Object<GSettings> greeter_settings_;101 glib::Object<GSettings> greeter_settings_;
87 glib::Object<GSettings> gs_settings_;102 glib::Object<GSettings> gs_settings_;
103 glib::Object<GSettings> a11y_settings_;
88104
89 glib::Signal<void, GSettings*, const gchar*> greeter_signal_;105 glib::Signal<void, GSettings*, const gchar*> greeter_signal_;
90 glib::Signal<void, GSettings*, const gchar*> gs_signal_;106 glib::Signal<void, GSettings*, const gchar*> gs_signal_;
107 glib::Signal<void, GSettings*, const gchar*> osk_signal_;
91};108};
92109
93Settings::Settings()110Settings::Settings()
94111
=== modified file 'lockscreen/LockScreenSettings.h'
--- lockscreen/LockScreenSettings.h 2014-04-09 13:25:46 +0000
+++ lockscreen/LockScreenSettings.h 2014-04-09 13:25:46 +0000
@@ -46,6 +46,7 @@
46 nux::Property<int> lock_delay;46 nux::Property<int> lock_delay;
47 nux::Property<bool> lock_on_blank;47 nux::Property<bool> lock_on_blank;
48 nux::Property<bool> lock_on_suspend;48 nux::Property<bool> lock_on_suspend;
49 nux::Property<bool> use_legacy;
4950
50 static const int GRID_SIZE = 40;51 static const int GRID_SIZE = 40;
5152
5253
=== modified file 'lockscreen/ScreenSaverDBusManager.cpp'
--- lockscreen/ScreenSaverDBusManager.cpp 2014-04-09 13:25:46 +0000
+++ lockscreen/ScreenSaverDBusManager.cpp 2014-04-09 13:25:46 +0000
@@ -20,6 +20,7 @@
20#include "ScreenSaverDBusManager.h"20#include "ScreenSaverDBusManager.h"
2121
22#include "LockScreenSettings.h"22#include "LockScreenSettings.h"
23#include "GLibDBusProxy.h"
23#include "Variant.h"24#include "Variant.h"
2425
25namespace unity26namespace unity
@@ -55,12 +56,13 @@
55DBusManager::DBusManager(session::Manager::Ptr const& session)56DBusManager::DBusManager(session::Manager::Ptr const& session)
56 : active(false)57 : active(false)
57 , session_(session)58 , session_(session)
58 , server_(dbus::NAME)59 , object_(std::make_shared<glib::DBusObject>(dbus::INTROSPECTION_XML, dbus::INTERFACE))
59 , time_(0)60 , time_(0)
60{61{
61 active.changed.connect(sigc::mem_fun(this, &DBusManager::SetActive));62 active.changed.connect(sigc::mem_fun(this, &DBusManager::SetActive));
62 server_.AddObjects(dbus::INTROSPECTION_XML, dbus::OBJECT_PATH);63
63 object_ = server_.GetObject(dbus::INTERFACE);64 // This is a workaround we use to fallback to use gnome-screensaver if the screen reader is enabled
65 Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &DBusManager::EnsureService)));
6466
65 object_->SetMethodsCallsHandler([this] (std::string const& method, GVariant* variant) -> GVariant* {67 object_->SetMethodsCallsHandler([this] (std::string const& method, GVariant* variant) -> GVariant* {
66 if (method == "Lock")68 if (method == "Lock")
@@ -89,6 +91,28 @@
8991
90 return nullptr;92 return nullptr;
91 });93 });
94
95 EnsureService();
96}
97
98void DBusManager::EnsureService()
99{
100 if (!Settings::Instance().use_legacy())
101 {
102 if (!server_)
103 {
104 server_ = std::make_shared<glib::DBusServer>(dbus::NAME, G_BUS_TYPE_SESSION, G_BUS_NAME_OWNER_FLAGS_REPLACE);
105 server_->AddObject(object_, dbus::OBJECT_PATH);
106 }
107 }
108 else
109 {
110 server_.reset();
111
112 // Let's make GS to restart...
113 auto proxy = std::make_shared<glib::DBusProxy>("org.gnome.ScreenSaver", "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver");
114 proxy->CallBegin("SimulateUserActivity", nullptr, [proxy] (GVariant*, glib::Error const&) {});
115 }
92}116}
93117
94void DBusManager::SetActive(bool active)118void DBusManager::SetActive(bool active)
95119
=== modified file 'lockscreen/ScreenSaverDBusManager.h'
--- lockscreen/ScreenSaverDBusManager.h 2014-04-09 13:25:46 +0000
+++ lockscreen/ScreenSaverDBusManager.h 2014-04-09 13:25:46 +0000
@@ -29,7 +29,7 @@
29namespace lockscreen29namespace lockscreen
30{30{
3131
32class DBusManager32class DBusManager : public sigc::trackable
33{33{
34public:34public:
35 typedef std::shared_ptr<DBusManager> Ptr;35 typedef std::shared_ptr<DBusManager> Ptr;
@@ -43,9 +43,10 @@
4343
44private:44private:
45 void SetActive(bool active);45 void SetActive(bool active);
46 void EnsureService();
4647
47 session::Manager::Ptr session_;48 session::Manager::Ptr session_;
48 glib::DBusServer server_;49 glib::DBusServer::Ptr server_;
49 glib::DBusObject::Ptr object_;50 glib::DBusObject::Ptr object_;
5051
51 bool active_;52 bool active_;
5253
=== modified file 'plugins/unityshell/src/unityshell.cpp'
--- plugins/unityshell/src/unityshell.cpp 2014-04-09 13:25:46 +0000
+++ plugins/unityshell/src/unityshell.cpp 2014-04-09 13:25:46 +0000
@@ -1984,6 +1984,9 @@
1984 ubus_manager_.SendMessage(UBUS_OVERLAY_CLOSE_REQUEST);1984 ubus_manager_.SendMessage(UBUS_OVERLAY_CLOSE_REQUEST);
1985 }1985 }
19861986
1987 if (g_strcmp0(plugin, "scale") == 0)
1988 g_print("Scale event %s\n",event);
1989
1987 if (adapter.IsScaleActive() && g_strcmp0(plugin, "scale") == 0 &&1990 if (adapter.IsScaleActive() && g_strcmp0(plugin, "scale") == 0 &&
1988 super_keypressed_)1991 super_keypressed_)
1989 {1992 {
19901993
=== modified file 'tests/data/external.gschema.xml'
--- tests/data/external.gschema.xml 2014-04-09 13:25:46 +0000
+++ tests/data/external.gschema.xml 2014-04-09 13:25:46 +0000
@@ -106,4 +106,19 @@
106 <default>true</default>106 <default>true</default>
107 </key>107 </key>
108 </schema>108 </schema>
109
110 <schema path="/org/gnome/desktop/lockdown/" id="org.gnome.desktop.lockdown">
111 <key type="b" name="disable-lock-screen">
112 <default>false</default>
113 </key>
114 </schema>
115
116 <schema path="/org/gnome/desktop/a11y/applications/" id="org.gnome.desktop.a11y.applications">
117 <key type="b" name="screen-keyboard-enabled">
118 <default>false</default>
119 </key>
120 <key type="b" name="screen-reader-enabled">
121 <default>false</default>
122 </key>
123 </schema>
109</schemalist>124</schemalist>