Synergy no longer tries to suppress the screen saver once it starts.

It was doing that already if started through synergy but not if
started by something outside of synergy.  In particular, if you
use `xscreensaver-command --activate' synergy used to send fake
mouse motion events every 5 seconds to deactivate it.  That's
unlikely to be what the user wanted, especially if the locking is
enabled since it would force the password dialog to appear.

As before, it's recommended that client screens not use locking
because xscreensaver will not deactivate without getting a
password even if we make the request through a programmatic
interface.  Presumably that's for security reasons but it makes
life harder for synergy.
This commit is contained in:
crs
2003-01-11 15:16:41 +00:00
parent 1758ea6f9f
commit 4bf0836eae
2 changed files with 44 additions and 10 deletions

View File

@@ -35,7 +35,9 @@ CXWindowsScreenSaver::CXWindowsScreenSaver(
m_notify(None),
m_xscreensaver(None),
m_xscreensaverActive(false),
m_disabled(false)
m_disabled(false),
m_suppressDisable(false),
m_disableJobInstalled(false)
{
// screen saver disable callback
m_disableJob = new TMethodJob<CXWindowsScreenSaver>(this,
@@ -184,7 +186,7 @@ CXWindowsScreenSaver::enable()
{
// for xscreensaver
m_disabled = false;
m_screen->removeTimer(m_disableJob);
updateDisableJob();
// for built-in X screen saver
XSetScreenSaver(m_display, m_timeout, m_interval,
@@ -197,7 +199,7 @@ CXWindowsScreenSaver::disable()
// for xscreensaver. 5 seconds should be plenty often to
// suppress the screen saver.
m_disabled = true;
m_screen->addTimer(m_disableJob, 5.0);
updateDisableJob();
// use built-in X screen saver
XGetScreenSaver(m_display, &m_timeout, &m_interval,
@@ -211,9 +213,8 @@ void
CXWindowsScreenSaver::activate()
{
// remove disable job timer
if (m_disabled) {
m_screen->removeTimer(m_disableJob);
}
m_suppressDisable = true;
updateDisableJob();
// try xscreensaver
findXScreenSaver();
@@ -230,9 +231,8 @@ void
CXWindowsScreenSaver::deactivate()
{
// reinstall disable job timer
if (m_disabled) {
m_screen->addTimer(m_disableJob, 5.0);
}
m_suppressDisable = false;
updateDisableJob();
// try xscreensaver
findXScreenSaver();
@@ -346,6 +346,14 @@ CXWindowsScreenSaver::setXScreenSaverActive(bool activated)
if (m_xscreensaverActive != activated) {
LOG((CLOG_DEBUG "xscreensaver %s on window 0x%08x", activated ? "activated" : "deactivated", m_xscreensaver));
m_xscreensaverActive = activated;
// if screen saver was activated forcefully (i.e. against
// our will) then just accept it. don't try to keep it
// from activating since that'll just pop up the password
// dialog if locking is enabled.
m_suppressDisable = activated;
updateDisableJob();
sendNotify(activated);
}
}
@@ -433,6 +441,21 @@ CXWindowsScreenSaver::addWatchXScreenSaver(Window window)
}
}
void
CXWindowsScreenSaver::updateDisableJob()
{
assert(m_disableJob != NULL);
if (m_disabled && !m_suppressDisable && !m_disableJobInstalled) {
m_disableJobInstalled = true;
m_screen->addTimer(m_disableJob, 5.0);
}
else if ((!m_disabled || m_suppressDisable) && m_disableJobInstalled) {
m_disableJobInstalled = false;
m_screen->removeTimer(m_disableJob);
}
}
void
CXWindowsScreenSaver::disableCallback(void*)
{