Merge lp:~3v1n0/unity/lockscreen-media-accelerators into lp:unity

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Andrea Azzarone
Approved revision: no longer in the source branch.
Merged at revision: 4131
Proposed branch: lp:~3v1n0/unity/lockscreen-media-accelerators
Merge into: lp:unity
Diff against target: 657 lines (+196/-175)
11 files modified
lockscreen/LockScreenAcceleratorController.cpp (+143/-148)
lockscreen/LockScreenAcceleratorController.h (+8/-3)
lockscreen/LockScreenAccelerators.cpp (+5/-0)
lockscreen/LockScreenAccelerators.h (+3/-1)
lockscreen/LockScreenController.cpp (+3/-1)
lockscreen/LockScreenController.h (+3/-1)
plugins/unityshell/src/unityshell.cpp (+10/-10)
tests/test_lockscreen_controller.cpp (+8/-4)
unity-shared/GnomeKeyGrabber.cpp (+7/-5)
unity-shared/GnomeKeyGrabberImpl.h (+2/-2)
unity-shared/KeyGrabber.h (+4/-0)
To merge this branch: bzr merge lp:~3v1n0/unity/lockscreen-media-accelerators
Reviewer Review Type Date Requested Status
Andrea Azzarone (community) Approve
PS Jenkins bot continuous-integration Pending
Review via email: mp+297978@code.launchpad.net

Commit message

LockScreenAcceleratorController: use key::Grabber to handle allowed bindings

This makes U-S-D to handle key events, without having to add some extra
custom code inside the lockscreen. It's all just about whitelisting the
wanted values.

To post a comment you must log in.
Revision history for this message
Andrea Azzarone (azzar1) wrote :

LGTM.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lockscreen/LockScreenAcceleratorController.cpp'
--- lockscreen/LockScreenAcceleratorController.cpp 2014-05-16 04:51:34 +0000
+++ lockscreen/LockScreenAcceleratorController.cpp 2016-06-21 14:42:21 +0000
@@ -1,6 +1,6 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*2/*
3 * Copyright (C) 2014 Canonical Ltd3 * Copyright (C) 2014-2016 Canonical Ltd
4 *4 *
5 * This program is free software: you can redistribute it and/or modify5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as6 * it under the terms of the GNU General Public License version 3 as
@@ -15,10 +15,12 @@
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 *16 *
17 * Authored by: William Hua <william.hua@canonical.com>17 * Authored by: William Hua <william.hua@canonical.com>
18 * Marco Trevisan <marco.trevisan@canonical.com>
18 */19 */
1920
20#include "LockScreenAcceleratorController.h"21#include "LockScreenAcceleratorController.h"
2122
23#include <NuxCore/Logger.h>
22#include <UnityCore/GLibDBusProxy.h>24#include <UnityCore/GLibDBusProxy.h>
2325
24namespace unity26namespace unity
@@ -28,157 +30,150 @@
2830
29namespace31namespace
30{32{
31const char* const MEDIA_KEYS_SCHEMA = "org.gnome.settings-daemon.plugins.media-keys";33DECLARE_LOGGER(logger, "unity.lockscreen.accelerator.controller");
32const char* const MEDIA_KEYS_KEY_VOLUME_MUTE = "volume-mute";34
33const char* const MEDIA_KEYS_KEY_VOLUME_DOWN = "volume-down";35const std::string MEDIA_KEYS_SCHEMA = "org.gnome.settings-daemon.plugins.media-keys";
34const char* const MEDIA_KEYS_KEY_VOLUME_UP = "volume-up";36const std::vector<std::string> ALLOWED_MEDIA_KEYS = {
3537 "logout",
36const char* const POWER_SCHEMA = "org.gnome.settings-daemon.plugins.power";38 "magnifier",
37const char* const SUSPEND_BUTTON_ACTION_KEY = "button-suspend";39 "on-screen-keyboard",
38const char* const SLEEP_BUTTON_ACTION_KEY = "button-sleep";40 "magnifier-zoom-in",
39const char* const HIBERNATE_BUTTON_ACTION_KEY = "button-hibernate";41 "screenreader",
40const char* const POWER_BUTTON_ACTION_KEY = "button-power";42 "pause",
41const char* const POWER_KEY_SUSPEND = "XF86Suspend";43 "stop",
42const char* const POWER_KEY_SLEEP = "XF86Sleep";44 "toggle-contrast",
43const char* const POWER_KEY_HIBERNATE = "XF86Hibernate";45 "video-out",
44const char* const POWER_KEY_POWEROFF = "XF86PowerOff";46 "volume-down",
4547 "volume-mute",
46const char* const INPUT_SWITCH_SCHEMA = "org.gnome.desktop.wm.keybindings";48 "volume-up",
47const char* const INPUT_SWITCH_KEY_PREVIOUS_SOURCE = "switch-input-source-backward";49};
48const char* const INPUT_SWITCH_KEY_NEXT_SOURCE = "switch-input-source";50
4951const std::string WM_KEYS_SCHEMA = "org.gnome.desktop.wm.keybindings";
50const char* const INDICATOR_INTERFACE_ACTIONS = "org.gtk.Actions";52const std::vector<std::string> ALLOWED_WM_KEYS = {
51const char* const INDICATOR_METHOD_ACTIVATE = "Activate";53 "switch-input-source",
52const char* const INDICATOR_SOUND_BUS_NAME = "com.canonical.indicator.sound";54 "switch-input-source-backward",
53const char* const INDICATOR_SOUND_OBJECT_PATH = "/com/canonical/indicator/sound";55};
54const char* const INDICATOR_SOUND_ACTION_MUTE = "mute";56
55const char* const INDICATOR_SOUND_ACTION_SCROLL = "scroll";57const std::vector<std::string> ALLOWED_XF86_KEYS = {
56const char* const INDICATOR_KEYBOARD_BUS_NAME = "com.canonical.indicator.keyboard";58 "XF86ScreenSaver",
57const char* const INDICATOR_KEYBOARD_OBJECT_PATH = "/com/canonical/indicator/keyboard";59 "XF86Sleep",
58const char* const INDICATOR_KEYBOARD_ACTION_SCROLL = "locked_scroll";60 "XF86Standby",
5961 "XF86Suspend",
60void ActivateIndicator(std::string const& bus_name,62 "XF86Hibernate",
61 std::string const& object_path,63 "XF86PowerOff",
62 std::string const& action_name,64 "XF86MonBrightnessUp",
63 glib::Variant const& parameters = glib::Variant())65 "XF86MonBrightnessDown",
64{66 "XF86KbdBrightnessUp",
65 GVariantBuilder builder;67 "XF86KbdBrightnessDown",
6668 "XF86KbdLightOnOff",
67 g_variant_builder_init(&builder, G_VARIANT_TYPE("(sava{sv})"));69 "XF86AudioMicMute",
68 g_variant_builder_add(&builder, "s", action_name.c_str());70 "XF86Touchpad",
6971};
70 if (parameters)72
71 g_variant_builder_add_parsed(&builder, "[%v]", static_cast<GVariant*>(parameters));73bool IsKeyBindingAllowed(std::string const& key)
72 else74{
73 g_variant_builder_add_parsed(&builder, "@av []");75 if (std::find(begin(ALLOWED_XF86_KEYS), end(ALLOWED_XF86_KEYS), key) != end(ALLOWED_XF86_KEYS))
7476 return true;
75 g_variant_builder_add_parsed(&builder, "@a{sv} []");77
7678 glib::Object<GSettings> media_settings(g_settings_new(MEDIA_KEYS_SCHEMA.c_str()));
77 auto proxy = std::make_shared<glib::DBusProxy>(bus_name, object_path, INDICATOR_INTERFACE_ACTIONS);79 Accelerator key_accelerator(key);
78 proxy->CallBegin(INDICATOR_METHOD_ACTIVATE, g_variant_builder_end(&builder), [proxy] (GVariant*, glib::Error const&) {});80
79}81 for (auto const& setting : ALLOWED_MEDIA_KEYS)
8082 {
81void MuteIndicatorSound()83 Accelerator media_key(glib::String(g_settings_get_string(media_settings, setting.c_str())).Str());
82{84 if (media_key == key_accelerator)
83 ActivateIndicator(INDICATOR_SOUND_BUS_NAME,85 return true;
84 INDICATOR_SOUND_OBJECT_PATH,86 }
85 INDICATOR_SOUND_ACTION_MUTE);87
86}88 glib::Object<GSettings> wm_settings(g_settings_new(WM_KEYS_SCHEMA.c_str()));
8789
88void ScrollIndicatorSound(int offset)90 for (auto const& setting : ALLOWED_WM_KEYS)
89{91 {
90 ActivateIndicator(INDICATOR_SOUND_BUS_NAME,92 glib::Variant accels(g_settings_get_value(wm_settings, setting.c_str()), glib::StealRef());
91 INDICATOR_SOUND_OBJECT_PATH,93 auto children = g_variant_n_children(accels);
92 INDICATOR_SOUND_ACTION_SCROLL,94
93 g_variant_new_int32(offset));95 if (children > 0)
94}96 {
9597 glib::String value;
96void ScrollIndicatorKeyboard(int offset)98
97{99 for (auto i = 0u; i < children; ++i)
98 ActivateIndicator(INDICATOR_KEYBOARD_BUS_NAME,100 {
99 INDICATOR_KEYBOARD_OBJECT_PATH,101 g_variant_get_child(accels, 0, "s", &value);
100 INDICATOR_KEYBOARD_ACTION_SCROLL,102
101 g_variant_new_int32(-offset));103 if (Accelerator(value.Str()) == key_accelerator)
102}104 return true;
103105 }
104void PowerAction(session::Manager::Ptr const& session, const char *action_key)106 }
105{107 }
106 glib::Object<GSettings> settings(g_settings_new(POWER_SCHEMA));108
107 auto const& action = glib::String(g_settings_get_string(settings, action_key)).Str();109 return false;
108110}
109 if (action == "interactive")111
110 session->shutdown_requested.emit(session->HasInhibitors());
111 else if (action == "shutdown")
112 session->reboot_requested.emit(session->HasInhibitors());
113 else if (action == "suspend")
114 session->Suspend();
115 else if (action == "hibernate")
116 session->Hibernate();
117 else if (action == "blank")
118 session->ScreenSaverActivate();
119}
120} // namespace112} // namespace
121113
122AcceleratorController::AcceleratorController(session::Manager::Ptr const& session)114AcceleratorController::AcceleratorController(key::Grabber::Ptr const& key_grabber)
123 : accelerators_(new Accelerators)115 : accelerators_(new Accelerators)
124{116{
125 auto settings = glib::Object<GSettings>(g_settings_new(MEDIA_KEYS_SCHEMA));117 for (auto const& action : key_grabber->GetActions())
126118 AddAction(action);
127 auto accelerator = std::make_shared<Accelerator>(glib::String(g_settings_get_string(settings, MEDIA_KEYS_KEY_VOLUME_MUTE)));119
128 accelerator->activated.connect(std::function<void()>(MuteIndicatorSound));120 key_grabber->action_added.connect(sigc::mem_fun(this, &AcceleratorController::AddAction));
129 accelerators_->Add(accelerator);121 key_grabber->action_removed.connect(sigc::mem_fun(this, &AcceleratorController::RemoveAction));
130122}
131 accelerator = std::make_shared<Accelerator>(glib::String(g_settings_get_string(settings, MEDIA_KEYS_KEY_VOLUME_DOWN)));123
132 accelerator->activated.connect(std::bind(ScrollIndicatorSound, -1));124void AcceleratorController::AddAction(CompAction const& action)
133 accelerators_->Add(accelerator);125{
134126 if (action.type() != CompAction::BindingTypeKey)
135 accelerator = std::make_shared<Accelerator>(glib::String(g_settings_get_string(settings, MEDIA_KEYS_KEY_VOLUME_UP)));127 return;
136 accelerator->activated.connect(std::bind(ScrollIndicatorSound, +1));128
137 accelerators_->Add(accelerator);129 auto const& key = action.keyToString();
138130
139 accelerator = std::make_shared<Accelerator>(POWER_KEY_SUSPEND);131 if (!IsKeyBindingAllowed(key))
140 accelerator->activated.connect(std::bind(PowerAction, session, SUSPEND_BUTTON_ACTION_KEY));132 {
141 accelerators_->Add(accelerator);133 LOG_DEBUG(logger) << "Action not allowed " << key;
142134 return;
143 accelerator = std::make_shared<Accelerator>(POWER_KEY_SLEEP);135 }
144 accelerator->activated.connect(std::bind(PowerAction, session, SLEEP_BUTTON_ACTION_KEY));136
145 accelerators_->Add(accelerator);137 auto accelerator = std::make_shared<Accelerator>(key);
146138 accelerator->activated.connect(sigc::bind(sigc::mem_fun(this, &AcceleratorController::OnActionActivated), action));
147 accelerator = std::make_shared<Accelerator>(POWER_KEY_HIBERNATE);139 accelerators_->Add(accelerator);
148 accelerator->activated.connect(std::bind(PowerAction, session, HIBERNATE_BUTTON_ACTION_KEY));140 actions_accelerators_.push_back({action, accelerator});
149 accelerators_->Add(accelerator);141
150142 LOG_DEBUG(logger) << "Action added " << key;
151 accelerator = std::make_shared<Accelerator>(POWER_KEY_POWEROFF);143}
152 accelerator->activated.connect(std::bind(PowerAction, session, POWER_BUTTON_ACTION_KEY));144
153 accelerators_->Add(accelerator);145void AcceleratorController::RemoveAction(CompAction const& action)
154146{
155 settings = glib::Object<GSettings>(g_settings_new(INPUT_SWITCH_SCHEMA));147 if (action.type() != CompAction::BindingTypeKey)
156148 return;
157 auto variant = glib::Variant(g_settings_get_value(settings, INPUT_SWITCH_KEY_PREVIOUS_SOURCE), glib::StealRef());149
158150 LOG_DEBUG(logger) << "Removing action " << action.keyToString();
159 if (g_variant_n_children(variant) > 0)151
160 {152 for (auto it = begin(actions_accelerators_); it != end(actions_accelerators_);)
161 const gchar* string;153 {
162154 if (it->first == action)
163 g_variant_get_child(variant, 0, "&s", &string);155 {
164156 accelerators_->Remove(it->second);
165 accelerator = std::make_shared<Accelerator>(string);157 it = actions_accelerators_.erase(it);
166 accelerator->activated.connect(std::bind(ScrollIndicatorKeyboard, -1));158 }
167 accelerators_->Add(accelerator);159 else
168 }160 {
169161 ++it;
170 variant = glib::Variant(g_settings_get_value(settings, INPUT_SWITCH_KEY_NEXT_SOURCE), glib::StealRef());162 }
171163 }
172 if (g_variant_n_children(variant) > 0)164}
173 {165
174 const gchar* string;166void AcceleratorController::OnActionActivated(CompAction& action)
175167{
176 g_variant_get_child(variant, 0, "&s", &string);168 LOG_DEBUG(logger) << "Activating action " << action.keyToString();
177169
178 accelerator = std::make_shared<Accelerator>(string);170 CompOption::Vector options;
179 accelerator->activated.connect(std::bind(ScrollIndicatorKeyboard, +1));171
180 accelerators_->Add(accelerator);172 if (action.state() & CompAction::StateInitKey)
181 }173 action.initiate()(&action, 0, options);
174
175 if (action.state() & CompAction::StateTermKey)
176 action.terminate()(&action, CompAction::StateTermTapped, options);
182}177}
183178
184Accelerators::Ptr const& AcceleratorController::GetAccelerators() const179Accelerators::Ptr const& AcceleratorController::GetAccelerators() const
185180
=== modified file 'lockscreen/LockScreenAcceleratorController.h'
--- lockscreen/LockScreenAcceleratorController.h 2016-03-31 09:51:33 +0000
+++ lockscreen/LockScreenAcceleratorController.h 2016-06-21 14:42:21 +0000
@@ -20,7 +20,7 @@
20#ifndef UNITY_LOCKSCREEN_ACCELERATOR_CONTROLLER20#ifndef UNITY_LOCKSCREEN_ACCELERATOR_CONTROLLER
21#define UNITY_LOCKSCREEN_ACCELERATOR_CONTROLLER21#define UNITY_LOCKSCREEN_ACCELERATOR_CONTROLLER
2222
23#include "UnityCore/SessionManager.h"23#include "unity-shared/KeyGrabber.h"
24#include "LockScreenAccelerators.h"24#include "LockScreenAccelerators.h"
2525
26namespace unity26namespace unity
@@ -28,16 +28,21 @@
28namespace lockscreen28namespace lockscreen
29{29{
3030
31class AcceleratorController31class AcceleratorController : public sigc::trackable
32{32{
33public:33public:
34 typedef std::shared_ptr<AcceleratorController> Ptr;34 typedef std::shared_ptr<AcceleratorController> Ptr;
3535
36 AcceleratorController(session::Manager::Ptr const&);36 AcceleratorController(key::Grabber::Ptr const&);
3737
38 Accelerators::Ptr const& GetAccelerators() const;38 Accelerators::Ptr const& GetAccelerators() const;
3939
40private:40private:
41 void AddAction(CompAction const&);
42 void RemoveAction(CompAction const&);
43 void OnActionActivated(CompAction&);
44
45 std::vector<std::pair<CompAction, Accelerator::Ptr>> actions_accelerators_;
41 Accelerators::Ptr accelerators_;46 Accelerators::Ptr accelerators_;
42};47};
4348
4449
=== modified file 'lockscreen/LockScreenAccelerators.cpp'
--- lockscreen/LockScreenAccelerators.cpp 2014-04-30 04:34:40 +0000
+++ lockscreen/LockScreenAccelerators.cpp 2016-06-21 14:42:21 +0000
@@ -417,6 +417,11 @@
417{417{
418}418}
419419
420Accelerators::Vector Accelerators::GetAccelerators() const
421{
422 return accelerators_;
423}
424
420void Accelerators::Clear()425void Accelerators::Clear()
421{426{
422 accelerators_.clear();427 accelerators_.clear();
423428
=== modified file 'lockscreen/LockScreenAccelerators.h'
--- lockscreen/LockScreenAccelerators.h 2014-05-12 19:28:48 +0000
+++ lockscreen/LockScreenAccelerators.h 2016-06-21 14:42:21 +0000
@@ -69,9 +69,11 @@
69{69{
70public:70public:
71 typedef std::shared_ptr<Accelerators> Ptr;71 typedef std::shared_ptr<Accelerators> Ptr;
72 typedef std::vector<Accelerator::Ptr> Vector;
7273
73 Accelerators();74 Accelerators();
7475
76 Accelerators::Vector GetAccelerators() const;
75 void Clear();77 void Clear();
7678
77 void Add(Accelerator::Ptr const& accelerator);79 void Add(Accelerator::Ptr const& accelerator);
@@ -83,7 +85,7 @@
83 unsigned int modifiers);85 unsigned int modifiers);
8486
85private:87private:
86 std::vector<Accelerator::Ptr> accelerators_;88 Accelerators::Vector accelerators_;
8789
88 PressedState pressed_state_;90 PressedState pressed_state_;
89};91};
9092
=== modified file 'lockscreen/LockScreenController.cpp'
--- lockscreen/LockScreenController.cpp 2016-04-15 05:32:41 +0000
+++ lockscreen/LockScreenController.cpp 2016-06-21 14:42:21 +0000
@@ -54,12 +54,14 @@
5454
55Controller::Controller(DBusManager::Ptr const& dbus_manager,55Controller::Controller(DBusManager::Ptr const& dbus_manager,
56 session::Manager::Ptr const& session_manager,56 session::Manager::Ptr const& session_manager,
57 key::Grabber::Ptr const& key_grabber,
57 UpstartWrapper::Ptr const& upstart_wrapper,58 UpstartWrapper::Ptr const& upstart_wrapper,
58 ShieldFactoryInterface::Ptr const& shield_factory,59 ShieldFactoryInterface::Ptr const& shield_factory,
59 bool test_mode)60 bool test_mode)
60 : opacity([this] { return fade_animator_.GetCurrentValue(); })61 : opacity([this] { return fade_animator_.GetCurrentValue(); })
61 , dbus_manager_(dbus_manager)62 , dbus_manager_(dbus_manager)
62 , session_manager_(session_manager)63 , session_manager_(session_manager)
64 , key_grabber_(key_grabber)
63 , upstart_wrapper_(upstart_wrapper)65 , upstart_wrapper_(upstart_wrapper)
64 , shield_factory_(shield_factory)66 , shield_factory_(shield_factory)
65 , suspend_inhibitor_manager_(std::make_shared<SuspendInhibitorManager>())67 , suspend_inhibitor_manager_(std::make_shared<SuspendInhibitorManager>())
@@ -459,7 +461,7 @@
459 indicators_ = std::make_shared<indicator::LockScreenDBusIndicators>();461 indicators_ = std::make_shared<indicator::LockScreenDBusIndicators>();
460 upstart_wrapper_->Emit("desktop-lock");462 upstart_wrapper_->Emit("desktop-lock");
461463
462 accelerator_controller_ = std::make_shared<AcceleratorController>(session_manager_);464 accelerator_controller_ = std::make_shared<AcceleratorController>(key_grabber_);
463 auto activate_key = WindowManager::Default().activate_indicators_key();465 auto activate_key = WindowManager::Default().activate_indicators_key();
464 auto accelerator = std::make_shared<Accelerator>(activate_key.second, 0, activate_key.first);466 auto accelerator = std::make_shared<Accelerator>(activate_key.second, 0, activate_key.first);
465 accelerator->activated.connect(std::bind(std::mem_fn(&Controller::ActivatePanel), this));467 accelerator->activated.connect(std::bind(std::mem_fn(&Controller::ActivatePanel), this));
466468
=== modified file 'lockscreen/LockScreenController.h'
--- lockscreen/LockScreenController.h 2016-03-31 09:59:30 +0000
+++ lockscreen/LockScreenController.h 2016-06-21 14:42:21 +0000
@@ -30,6 +30,7 @@
30#include "SuspendInhibitorManager.h"30#include "SuspendInhibitorManager.h"
31#include "ScreenSaverDBusManager.h"31#include "ScreenSaverDBusManager.h"
32#include "unity-shared/BackgroundEffectHelper.h"32#include "unity-shared/BackgroundEffectHelper.h"
33#include "unity-shared/KeyGrabber.h"
33#include "unity-shared/UpstartWrapper.h"34#include "unity-shared/UpstartWrapper.h"
3435
35namespace unity36namespace unity
@@ -44,7 +45,7 @@
44public:45public:
45 typedef std::shared_ptr<Controller> Ptr;46 typedef std::shared_ptr<Controller> Ptr;
4647
47 Controller(DBusManager::Ptr const&, session::Manager::Ptr const&,48 Controller(DBusManager::Ptr const&, session::Manager::Ptr const&, key::Grabber::Ptr const&,
48 UpstartWrapper::Ptr const& upstart_wrapper = std::make_shared<UpstartWrapper>(),49 UpstartWrapper::Ptr const& upstart_wrapper = std::make_shared<UpstartWrapper>(),
49 ShieldFactoryInterface::Ptr const& shield_factory = std::make_shared<ShieldFactory>(),50 ShieldFactoryInterface::Ptr const& shield_factory = std::make_shared<ShieldFactory>(),
50 bool test_mode = false);51 bool test_mode = false);
@@ -84,6 +85,7 @@
8485
85 DBusManager::Ptr dbus_manager_;86 DBusManager::Ptr dbus_manager_;
86 session::Manager::Ptr session_manager_;87 session::Manager::Ptr session_manager_;
88 key::Grabber::Ptr key_grabber_;
87 indicator::Indicators::Ptr indicators_;89 indicator::Indicators::Ptr indicators_;
88 AcceleratorController::Ptr accelerator_controller_;90 AcceleratorController::Ptr accelerator_controller_;
89 UpstartWrapper::Ptr upstart_wrapper_;91 UpstartWrapper::Ptr upstart_wrapper_;
9092
=== modified file 'plugins/unityshell/src/unityshell.cpp'
--- plugins/unityshell/src/unityshell.cpp 2016-06-06 14:28:29 +0000
+++ plugins/unityshell/src/unityshell.cpp 2016-06-21 14:42:21 +0000
@@ -4081,24 +4081,24 @@
4081 ShowFirstRunHints();4081 ShowFirstRunHints();
40824082
4083 // Setup Session Controller4083 // Setup Session Controller
4084 auto manager = std::make_shared<session::GnomeManager>();4084 auto session = std::make_shared<session::GnomeManager>();
4085 manager->lock_requested.connect(sigc::mem_fun(this, &UnityScreen::OnLockScreenRequested));4085 session->lock_requested.connect(sigc::mem_fun(this, &UnityScreen::OnLockScreenRequested));
4086 manager->prompt_lock_requested.connect(sigc::mem_fun(this, &UnityScreen::OnLockScreenRequested));4086 session->prompt_lock_requested.connect(sigc::mem_fun(this, &UnityScreen::OnLockScreenRequested));
4087 manager->locked.connect(sigc::mem_fun(this, &UnityScreen::OnScreenLocked));4087 session->locked.connect(sigc::mem_fun(this, &UnityScreen::OnScreenLocked));
4088 manager->unlocked.connect(sigc::mem_fun(this, &UnityScreen::OnScreenUnlocked));4088 session->unlocked.connect(sigc::mem_fun(this, &UnityScreen::OnScreenUnlocked));
4089 session_dbus_manager_ = std::make_shared<session::DBusManager>(manager);4089 session_dbus_manager_ = std::make_shared<session::DBusManager>(session);
4090 session_controller_ = std::make_shared<session::Controller>(manager);4090 session_controller_ = std::make_shared<session::Controller>(session);
4091 LOG_INFO(logger) << "InitUnityComponents-Session " << timer.ElapsedSeconds() << "s";4091 LOG_INFO(logger) << "InitUnityComponents-Session " << timer.ElapsedSeconds() << "s";
4092 Introspectable::AddChild(session_controller_.get());4092 Introspectable::AddChild(session_controller_.get());
40934093
4094 // Setup Lockscreen Controller4094 // Setup Lockscreen Controller
4095 screensaver_dbus_manager_ = std::make_shared<lockscreen::DBusManager>(manager);4095 screensaver_dbus_manager_ = std::make_shared<lockscreen::DBusManager>(session);
4096 lockscreen_controller_ = std::make_shared<lockscreen::Controller>(screensaver_dbus_manager_, manager);4096 lockscreen_controller_ = std::make_shared<lockscreen::Controller>(screensaver_dbus_manager_, session, menus_->KeyGrabber());
4097 UpdateActivateIndicatorsKey();4097 UpdateActivateIndicatorsKey();
4098 LOG_INFO(logger) << "InitUnityComponents-Lockscreen " << timer.ElapsedSeconds() << "s";4098 LOG_INFO(logger) << "InitUnityComponents-Lockscreen " << timer.ElapsedSeconds() << "s";
40994099
4100 if (g_file_test((DesktopUtilities::GetUserRuntimeDirectory()+local::LOCKED_STAMP).c_str(), G_FILE_TEST_EXISTS))4100 if (g_file_test((DesktopUtilities::GetUserRuntimeDirectory()+local::LOCKED_STAMP).c_str(), G_FILE_TEST_EXISTS))
4101 manager->PromptLockScreen();4101 session->PromptLockScreen();
41024102
4103 auto on_launcher_size_changed = [this] (nux::Area* area, int w, int h) {4103 auto on_launcher_size_changed = [this] (nux::Area* area, int w, int h) {
4104 /* The launcher geometry includes 1px used to draw the right/top margin4104 /* The launcher geometry includes 1px used to draw the right/top margin
41054105
=== modified file 'tests/test_lockscreen_controller.cpp'
--- tests/test_lockscreen_controller.cpp 2015-12-05 07:03:25 +0000
+++ tests/test_lockscreen_controller.cpp 2016-06-21 14:42:21 +0000
@@ -33,6 +33,7 @@
33#include "unity-shared/DashStyle.h"33#include "unity-shared/DashStyle.h"
34#include "unity-shared/PanelStyle.h"34#include "unity-shared/PanelStyle.h"
35#include "unity-shared/UScreen.h"35#include "unity-shared/UScreen.h"
36#include "mock_key_grabber.h"
36#include "test_mock_session_manager.h"37#include "test_mock_session_manager.h"
37#include "test_uscreen_mock.h"38#include "test_uscreen_mock.h"
38#include "test_utils.h"39#include "test_utils.h"
@@ -80,19 +81,21 @@
80 TestLockScreenController()81 TestLockScreenController()
81 : animation_controller(tick_source)82 : animation_controller(tick_source)
82 , session_manager(std::make_shared<NiceMock<session::MockManager>>())83 , session_manager(std::make_shared<NiceMock<session::MockManager>>())
84 , key_grabber(std::make_shared<key::MockGrabber::Nice>())
83 , dbus_manager(std::make_shared<DBusManager>(session_manager))85 , dbus_manager(std::make_shared<DBusManager>(session_manager))
84 , upstart_wrapper(std::make_shared<UpstartWrapper>())86 , upstart_wrapper(std::make_shared<UpstartWrapper>())
85 , shield_factory(std::make_shared<ShieldFactoryMock>())87 , shield_factory(std::make_shared<ShieldFactoryMock>())
86 , controller(dbus_manager, session_manager, upstart_wrapper, shield_factory)88 , controller(dbus_manager, session_manager, key_grabber, upstart_wrapper, shield_factory)
87 {}89 {}
8890
89 struct ControllerWrap : Controller91 struct ControllerWrap : Controller
90 {92 {
91 ControllerWrap(DBusManager::Ptr const& dbus_manager,93 ControllerWrap(DBusManager::Ptr const& dbus_manager,
92 session::Manager::Ptr const& session_manager,94 session::Manager::Ptr const& session_manager,
95 key::Grabber::Ptr const& key_grabber,
93 UpstartWrapper::Ptr const& upstart_wrapper,96 UpstartWrapper::Ptr const& upstart_wrapper,
94 ShieldFactoryInterface::Ptr const& shield_factory)97 ShieldFactoryInterface::Ptr const& shield_factory)
95 : Controller(dbus_manager, session_manager, upstart_wrapper, shield_factory, /* test_mode */ true)98 : Controller(dbus_manager, session_manager, key_grabber, upstart_wrapper, shield_factory, /* test_mode */ true)
96 {}99 {}
97100
98 using Controller::shields_;101 using Controller::shields_;
@@ -107,6 +110,7 @@
107 unity::panel::Style panel_style;110 unity::panel::Style panel_style;
108 unity::lockscreen::Settings lockscreen_settings;111 unity::lockscreen::Settings lockscreen_settings;
109 session::MockManager::Ptr session_manager;112 session::MockManager::Ptr session_manager;
113 key::MockGrabber::Ptr key_grabber;
110 DBusManager::Ptr dbus_manager;114 DBusManager::Ptr dbus_manager;
111 unity::UpstartWrapper::Ptr upstart_wrapper;115 unity::UpstartWrapper::Ptr upstart_wrapper;
112116
@@ -123,7 +127,7 @@
123{127{
124 size_t before = uscreen.changed.size();128 size_t before = uscreen.changed.size();
125 {129 {
126 Controller dummy(dbus_manager, session_manager);130 Controller dummy(dbus_manager, session_manager, key_grabber);
127 }131 }
128 ASSERT_EQ(before, uscreen.changed.size());132 ASSERT_EQ(before, uscreen.changed.size());
129133
@@ -135,7 +139,7 @@
135{139{
136 size_t before = session_manager->unlock_requested.size();140 size_t before = session_manager->unlock_requested.size();
137 {141 {
138 Controller dummy(dbus_manager, session_manager);142 Controller dummy(dbus_manager, session_manager, key_grabber);
139 }143 }
140 ASSERT_EQ(before, session_manager->unlock_requested.size());144 ASSERT_EQ(before, session_manager->unlock_requested.size());
141145
142146
=== modified file 'unity-shared/GnomeKeyGrabber.cpp'
--- unity-shared/GnomeKeyGrabber.cpp 2016-05-30 16:10:12 +0000
+++ unity-shared/GnomeKeyGrabber.cpp 2016-06-21 14:42:21 +0000
@@ -70,8 +70,9 @@
70std::string const DBUS_NAME = "com.canonical.Unity.Test.GnomeKeyGrabber";70std::string const DBUS_NAME = "com.canonical.Unity.Test.GnomeKeyGrabber";
71}71}
7272
73GnomeGrabber::Impl::Impl(bool test_mode)73GnomeGrabber::Impl::Impl(Grabber* parent, bool test_mode)
74 : screen_(screen)74 : parent_(parent)
75 , screen_(screen)
75 , shell_server_(test_mode ? testing::DBUS_NAME : shell::DBUS_NAME)76 , shell_server_(test_mode ? testing::DBUS_NAME : shell::DBUS_NAME)
76 , settings_(g_settings_new(SETTINGS_NAME.c_str()))77 , settings_(g_settings_new(SETTINGS_NAME.c_str()))
77 , current_action_id_(0)78 , current_action_id_(0)
@@ -123,6 +124,7 @@
123 actions_ids_.push_back(action_id);124 actions_ids_.push_back(action_id);
124 actions_.push_back(action);125 actions_.push_back(action);
125 actions_customers_.push_back(1);126 actions_customers_.push_back(1);
127 parent_->action_added.emit(action);
126 return true;128 return true;
127 }129 }
128130
@@ -178,6 +180,7 @@
178 LOG_DEBUG(logger) << "RemoveAction (\"" << action->keyToString() << "\")";180 LOG_DEBUG(logger) << "RemoveAction (\"" << action->keyToString() << "\")";
179181
180 screen_->removeAction(action);182 screen_->removeAction(action);
183 parent_->action_removed.emit(*action);
181 actions_.erase(actions_.begin() + index);184 actions_.erase(actions_.begin() + index);
182 actions_ids_.erase(actions_ids_.begin() + index);185 actions_ids_.erase(actions_ids_.begin() + index);
183 actions_customers_.erase(actions_customers_.begin() + index);186 actions_customers_.erase(actions_customers_.begin() + index);
@@ -259,7 +262,6 @@
259 action.setState(CompAction::StateInitKey | CompAction::StateTermKey);262 action.setState(CompAction::StateInitKey | CompAction::StateTermKey);
260 action.setTerminate([this, action_id](CompAction* action, CompAction::State state, CompOption::Vector& options) {263 action.setTerminate([this, action_id](CompAction* action, CompAction::State state, CompOption::Vector& options) {
261 auto key = action->keyToString();264 auto key = action->keyToString();
262
263 LOG_DEBUG(logger) << "released \"" << key << "\"";265 LOG_DEBUG(logger) << "released \"" << key << "\"";
264266
265 if (state & CompAction::StateTermTapped)267 if (state & CompAction::StateTermTapped)
@@ -353,11 +355,11 @@
353// Public implementation355// Public implementation
354356
355GnomeGrabber::GnomeGrabber()357GnomeGrabber::GnomeGrabber()
356 : impl_(new Impl())358 : impl_(new Impl(this))
357{}359{}
358360
359GnomeGrabber::GnomeGrabber(TestMode const& dummy)361GnomeGrabber::GnomeGrabber(TestMode const& dummy)
360 : impl_(new Impl(true))362 : impl_(new Impl(this, true))
361{}363{}
362364
363GnomeGrabber::~GnomeGrabber()365GnomeGrabber::~GnomeGrabber()
364366
=== modified file 'unity-shared/GnomeKeyGrabberImpl.h'
--- unity-shared/GnomeKeyGrabberImpl.h 2016-05-30 15:54:34 +0000
+++ unity-shared/GnomeKeyGrabberImpl.h 2016-06-21 14:42:21 +0000
@@ -37,7 +37,7 @@
3737
38struct GnomeGrabber::Impl38struct GnomeGrabber::Impl
39{39{
40 Impl(bool test_mode = false);40 Impl(Grabber*, bool test_mode = false);
41 ~Impl();41 ~Impl();
4242
43 uint32_t NextActionID();43 uint32_t NextActionID();
@@ -55,9 +55,9 @@
55 void ActivateDBusAction(CompAction const& action, uint32_t id, uint32_t device, uint32_t timestamp) const;55 void ActivateDBusAction(CompAction const& action, uint32_t id, uint32_t device, uint32_t timestamp) const;
5656
57 bool IsActionPostponed(CompAction const& action) const;57 bool IsActionPostponed(CompAction const& action) const;
58
59 void UpdateWhitelist();58 void UpdateWhitelist();
6059
60 Grabber* parent_;
61 CompScreen* screen_;61 CompScreen* screen_;
6262
63 glib::DBusServer shell_server_;63 glib::DBusServer shell_server_;
6464
=== modified file 'unity-shared/KeyGrabber.h'
--- unity-shared/KeyGrabber.h 2015-09-29 13:06:46 +0000
+++ unity-shared/KeyGrabber.h 2016-06-21 14:42:21 +0000
@@ -21,6 +21,7 @@
21#define __UNITY_KEY_GRABBER__21#define __UNITY_KEY_GRABBER__
2222
23#include <core/core.h>23#include <core/core.h>
24#include <sigc++/signal.h>
2425
25namespace unity26namespace unity
26{27{
@@ -36,6 +37,9 @@
36 virtual bool RemoveAction(CompAction const&) = 0;37 virtual bool RemoveAction(CompAction const&) = 0;
37 virtual bool RemoveAction(uint32_t id) = 0;38 virtual bool RemoveAction(uint32_t id) = 0;
3839
40 sigc::signal<void, CompAction const&> action_added;
41 sigc::signal<void, CompAction const&> action_removed;
42
39 virtual CompAction::Vector& GetActions() = 0;43 virtual CompAction::Vector& GetActions() = 0;
40};44};
4145