summaryrefslogtreecommitdiff
path: root/lockscreen
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2014-04-10 06:27:48 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2014-04-10 06:27:48 +0200
commitcdb3f29b171b901dbaee27575f8687cde8e8967b (patch)
tree9d6a501b541839e9e92278f7a719800b1a456b7a /lockscreen
parentcbcc807fb1275274afcd04e5e24e7741dc802a8d (diff)
LockScreenController: remove some racy code, avoid to emit multiple signals
And fix pre-lock blank window (bzr r3736.1.40)
Diffstat (limited to 'lockscreen')
-rw-r--r--lockscreen/LockScreenController.cpp31
1 files changed, 22 insertions, 9 deletions
diff --git a/lockscreen/LockScreenController.cpp b/lockscreen/LockScreenController.cpp
index d570a8c20..571bbdfa7 100644
--- a/lockscreen/LockScreenController.cpp
+++ b/lockscreen/LockScreenController.cpp
@@ -222,6 +222,9 @@ void Controller::EnsureBlankWindow()
void Controller::ShowBlankWindow()
{
+ if (blank_window_ && blank_window_->GetOpacity() == 1.0)
+ return;
+
EnsureBlankWindow();
animation::StartOrReverse(blank_window_animator_, animation::Direction::FORWARD);
}
@@ -255,14 +258,14 @@ void Controller::BlankWindowGrabEnable(bool grab)
blank_window_->GrabKeyboard();
blank_window_->PushToFront();
- blank_window_->mouse_move.connect([this](int, int, int, int, unsigned long, unsigned long) {
- HideBlankWindow();
+ 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, unsigned long e, unsigned long, const char*, unsigned short) {
- HideBlankWindow();
+ if (!lockscreen_timeout_) HideBlankWindow();
});
blank_window_->mouse_down.connect([this] (int, int, unsigned long, unsigned long) {
- HideBlankWindow();
+ if (!lockscreen_timeout_) HideBlankWindow();
});
}
else
@@ -286,8 +289,6 @@ void Controller::OnLockRequested(bool prompt)
if (Settings::Instance().use_legacy())
{
auto proxy = std::make_shared<glib::DBusProxy>("org.gnome.ScreenSaver", "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver");
- // By passing the proxy to the lambda we ensure that it will stay alive
- // until we get the last callback.
proxy->CallBegin("Lock", nullptr, [proxy] (GVariant*, glib::Error const&) {});
return;
}
@@ -322,8 +323,8 @@ void Controller::OnLockRequested(bool prompt)
if (prompt)
{
- HideBlankWindow();
animation::Skip(fade_animator_);
+ HideBlankWindow();
}
else
{
@@ -333,20 +334,32 @@ void Controller::OnLockRequested(bool prompt)
}));
}
+ lockscreen_timeout_.reset();
return false;
}));
}
void Controller::OnPresenceStatusChanged(bool is_idle)
{
- is_idle ? ShowBlankWindow() : HideBlankWindow();
+ if (Settings::Instance().use_legacy())
+ return;
+
+ if (is_idle)
+ {
+ ShowBlankWindow();
+ }
+ else if (!lockscreen_timeout_)
+ {
+ HideBlankWindow();
+ }
}
void Controller::OnScreenSaverActivationRequest(bool activate)
{
// It looks we need to do this after a small delay, not to get the screen back on
screensaver_activation_timeout_.reset(new glib::Timeout(100, [this, activate] {
- dbus_manager_->active = activate;
+ if (dbus_manager_->active() == activate)
+ return false;
if (activate)
{