summaryrefslogtreecommitdiff
path: root/lockscreen
diff options
Diffstat (limited to 'lockscreen')
-rw-r--r--lockscreen/LockScreenController.cpp51
-rw-r--r--lockscreen/LockScreenController.h1
2 files changed, 26 insertions, 26 deletions
diff --git a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
index 095eb78fe..d8c7ecb3a 100644
--- a/lockscreen/LockScreenController.cpp
+++ b/lockscreen/LockScreenController.cpp
@@ -28,6 +28,7 @@
#include "LockScreenShield.h"
#include "LockScreenSettings.h"
#include "unity-shared/AnimationUtils.h"
+#include "unity-shared/InputMonitor.h"
#include "unity-shared/UnitySettings.h"
#include "unity-shared/UScreen.h"
#include "unity-shared/WindowManager.h"
@@ -318,10 +319,19 @@ void Controller::HideBlankWindow()
blank_window_->ShowWindow(false);
animation::SetValue(blank_window_animator_, animation::Direction::BACKWARD);
+ if (prompt_activation_)
+ BlankWindowGrabEnable(false);
+
blank_window_.Release();
lockscreen_delay_timeout_.reset();
}
+void Controller::OnBlankWindowInputEvent(XEvent const&)
+{
+ if (!lockscreen_timeout_)
+ HideBlankWindow();
+}
+
void Controller::BlankWindowGrabEnable(bool grab)
{
if (!blank_window_)
@@ -329,41 +339,29 @@ void Controller::BlankWindowGrabEnable(bool grab)
if (grab)
{
- for (auto const& shield : shields_)
+ if (!primary_shield_.IsValid())
{
- shield->UnGrabPointer();
- shield->UnGrabKeyboard();
+ blank_window_->EnableInputWindow(true);
+ blank_window_->GrabPointer();
+ blank_window_->GrabKeyboard();
}
- blank_window_->EnableInputWindow(true);
- blank_window_->GrabPointer();
- blank_window_->GrabKeyboard();
+ input::Monitor::Get().RegisterClient(input::Events::INPUT, sigc::mem_fun(this, &Controller::OnBlankWindowInputEvent));
nux::GetWindowCompositor().SetAlwaysOnFrontWindow(blank_window_.GetPointer());
-
- blank_window_->mouse_move.connect([this](int, int, int dx, int dy, unsigned long, unsigned long) {
- if ((dx || dy) && !lockscreen_timeout_) HideBlankWindow();
- });
- blank_window_->key_down.connect([this] (unsigned long et, unsigned long k, unsigned long s, const char* c, unsigned short kc) {
- if (prompt_view_.GetPointer() && prompt_view_->focus_view())
- prompt_view_->focus_view()->key_down.emit(et, k, s, c, kc);
- if (!lockscreen_timeout_) HideBlankWindow();
- });
- blank_window_->mouse_down.connect([this] (int, int, unsigned long, unsigned long) {
- if (!lockscreen_timeout_) HideBlankWindow();
- });
}
else
{
- blank_window_->UnGrabPointer();
- blank_window_->UnGrabKeyboard();
+ input::Monitor::Get().UnregisterClient(sigc::mem_fun(this, &Controller::OnBlankWindowInputEvent));
- for (auto const& shield : shields_)
+ if (primary_shield_.IsValid())
{
- if (!shield->primary())
- continue;
-
- shield->GrabPointer();
- shield->GrabKeyboard();
+ primary_shield_->GrabPointer();
+ primary_shield_->GrabKeyboard();
+ }
+ else
+ {
+ blank_window_->UnGrabPointer();
+ blank_window_->UnGrabKeyboard();
}
}
}
@@ -386,6 +384,7 @@ void Controller::OnLockRequested(bool prompt)
if (prompt)
{
EnsureBlankWindow();
+ BlankWindowGrabEnable(true);
blank_window_->SetOpacity(1.0);
}
diff --git a/lockscreen/LockScreenController.h b/lockscreen/LockScreenController.h
index 552dba0ed..f3d3e2c55 100644
--- a/lockscreen/LockScreenController.h
+++ b/lockscreen/LockScreenController.h
@@ -78,6 +78,7 @@ private:
void OnPresenceStatusChanged(bool idle);
void OnScreenSaverActivationRequest(bool activate);
void OnPrimaryShieldMotion(int x, int y);
+ void OnBlankWindowInputEvent(XEvent const&);
std::vector<nux::ObjectPtr<BaseShield>> shields_;
nux::ObjectWeakPtr<BaseShield> primary_shield_;