Merge lp:~3v1n0/unity/input-monitor-lockscreen-blank-window 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: 4206
Proposed branch: lp:~3v1n0/unity/input-monitor-lockscreen-blank-window
Merge into: lp:unity
Prerequisite: lp:~3v1n0/unity/input-monitor-menus-scrubbing-triangolation
Diff against target: 138 lines (+31/-29)
3 files modified
lockscreen/LockScreenController.cpp (+27/-28)
lockscreen/LockScreenController.h (+1/-0)
tests/test_lockscreen_controller.cpp (+3/-1)
To merge this branch: bzr merge lp:~3v1n0/unity/input-monitor-lockscreen-blank-window
Reviewer Review Type Date Requested Status
Andrea Azzarone (community) Approve
Review via email: mp+304388@code.launchpad.net

Commit message

LockScreenController: use InputMonitor to get all the events and hide the Blank Window

When the blank window is shown now we use the XI2 events to figure out if we can hide it
in this way it will be possible to show the screensaver when something is grabbing the
screen and we don't need to grab the screen anymore to get the events.

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

There are several conflicts when merging this branch with unity trunk. Can you please fix them?

review: Needs Fixing
Revision history for this message
Andrea Azzarone (azzar1) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lockscreen/LockScreenController.cpp'
2--- lockscreen/LockScreenController.cpp 2016-11-04 00:51:52 +0000
3+++ lockscreen/LockScreenController.cpp 2016-11-11 15:56:00 +0000
4@@ -28,6 +28,7 @@
5 #include "LockScreenShield.h"
6 #include "LockScreenSettings.h"
7 #include "unity-shared/AnimationUtils.h"
8+#include "unity-shared/InputMonitor.h"
9 #include "unity-shared/UnitySettings.h"
10 #include "unity-shared/UScreen.h"
11 #include "unity-shared/WindowManager.h"
12@@ -318,10 +319,19 @@
13 blank_window_->ShowWindow(false);
14 animation::SetValue(blank_window_animator_, animation::Direction::BACKWARD);
15
16+ if (prompt_activation_)
17+ BlankWindowGrabEnable(false);
18+
19 blank_window_.Release();
20 lockscreen_delay_timeout_.reset();
21 }
22
23+void Controller::OnBlankWindowInputEvent(XEvent const&)
24+{
25+ if (!lockscreen_timeout_)
26+ HideBlankWindow();
27+}
28+
29 void Controller::BlankWindowGrabEnable(bool grab)
30 {
31 if (!blank_window_)
32@@ -329,41 +339,29 @@
33
34 if (grab)
35 {
36- for (auto const& shield : shields_)
37+ if (!primary_shield_.IsValid())
38 {
39- shield->UnGrabPointer();
40- shield->UnGrabKeyboard();
41+ blank_window_->EnableInputWindow(true);
42+ blank_window_->GrabPointer();
43+ blank_window_->GrabKeyboard();
44 }
45
46- blank_window_->EnableInputWindow(true);
47- blank_window_->GrabPointer();
48- blank_window_->GrabKeyboard();
49+ input::Monitor::Get().RegisterClient(input::Events::INPUT, sigc::mem_fun(this, &Controller::OnBlankWindowInputEvent));
50 nux::GetWindowCompositor().SetAlwaysOnFrontWindow(blank_window_.GetPointer());
51-
52- blank_window_->mouse_move.connect([this](int, int, int dx, int dy, unsigned long, unsigned long) {
53- if ((dx || dy) && !lockscreen_timeout_) HideBlankWindow();
54- });
55- blank_window_->key_down.connect([this] (unsigned long et, unsigned long k, unsigned long s, const char* c, unsigned short kc) {
56- if (prompt_view_.GetPointer() && prompt_view_->focus_view())
57- prompt_view_->focus_view()->key_down.emit(et, k, s, c, kc);
58- if (!lockscreen_timeout_) HideBlankWindow();
59- });
60- blank_window_->mouse_down.connect([this] (int, int, unsigned long, unsigned long) {
61- if (!lockscreen_timeout_) HideBlankWindow();
62- });
63 }
64 else
65 {
66- blank_window_->UnGrabPointer();
67- blank_window_->UnGrabKeyboard();
68-
69- for (auto const& shield : shields_)
70- {
71- if (!shield->primary())
72- continue;
73-
74- shield->GrabPointer();
75- shield->GrabKeyboard();
76+ input::Monitor::Get().UnregisterClient(sigc::mem_fun(this, &Controller::OnBlankWindowInputEvent));
77+
78+ if (primary_shield_.IsValid())
79+ {
80+ primary_shield_->GrabPointer();
81+ primary_shield_->GrabKeyboard();
82+ }
83+ else
84+ {
85+ blank_window_->UnGrabPointer();
86+ blank_window_->UnGrabKeyboard();
87 }
88 }
89 }
90@@ -386,6 +384,7 @@
91 if (prompt)
92 {
93 EnsureBlankWindow();
94+ BlankWindowGrabEnable(true);
95 blank_window_->SetOpacity(1.0);
96 }
97
98
99=== modified file 'lockscreen/LockScreenController.h'
100--- lockscreen/LockScreenController.h 2016-09-02 13:36:37 +0000
101+++ lockscreen/LockScreenController.h 2016-11-11 15:56:00 +0000
102@@ -78,6 +78,7 @@
103 void OnPresenceStatusChanged(bool idle);
104 void OnScreenSaverActivationRequest(bool activate);
105 void OnPrimaryShieldMotion(int x, int y);
106+ void OnBlankWindowInputEvent(XEvent const&);
107
108 std::vector<nux::ObjectPtr<BaseShield>> shields_;
109 nux::ObjectWeakPtr<BaseShield> primary_shield_;
110
111=== modified file 'tests/test_lockscreen_controller.cpp'
112--- tests/test_lockscreen_controller.cpp 2016-09-02 13:36:37 +0000
113+++ tests/test_lockscreen_controller.cpp 2016-11-11 15:56:00 +0000
114@@ -31,6 +31,7 @@
115 #include "lockscreen/LockScreenSettings.h"
116 #include "lockscreen/ScreenSaverDBusManager.h"
117 #include "unity-shared/DashStyle.h"
118+#include "unity-shared/InputMonitor.h"
119 #include "unity-shared/PanelStyle.h"
120 #include "unity-shared/UScreen.h"
121 #include "mock_key_grabber.h"
122@@ -108,6 +109,7 @@
123 nux::animation::AnimationController animation_controller;
124
125 MockUScreen uscreen;
126+ unity::input::Monitor im;
127 unity::dash::Style dash_style;
128 unity::panel::Style panel_style;
129 unity::lockscreen::Settings lockscreen_settings;
130@@ -258,7 +260,7 @@
131 tick_source.tick(BLANK_ANIMATION_DURATION);
132
133 ASSERT_TRUE(controller.blank_window_->GetOpacity() == 1.0);
134- ASSERT_TRUE(controller.blank_window_->OwnsPointerGrab());
135+ ASSERT_FALSE(controller.blank_window_->OwnsPointerGrab());
136
137 // Wake the screen
138 dbus_manager->simulate_activity.emit();