summaryrefslogtreecommitdiffstats
path: root/kdesktop/screensaverInterfaceImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdesktop/screensaverInterfaceImpl.cpp')
-rw-r--r--kdesktop/screensaverInterfaceImpl.cpp185
1 files changed, 185 insertions, 0 deletions
diff --git a/kdesktop/screensaverInterfaceImpl.cpp b/kdesktop/screensaverInterfaceImpl.cpp
new file mode 100644
index 000000000..4f05a8391
--- /dev/null
+++ b/kdesktop/screensaverInterfaceImpl.cpp
@@ -0,0 +1,185 @@
+/*
+ * screensaverInterfaceImpl.cpp
+ *
+ *
+ * (C) 2024 Emanoil Kotsev
+ * deloptes (AT) gmail.com
+ *
+ * tdebase Copyright (C) 2009 tdebase development team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include "screensaverInterfaceImpl.h"
+
+ScreenSaverInterfaceImpl::ScreenSaverInterfaceImpl(TQT_DBusConnection &conn) :
+ m_connection(&conn),
+ m_ccount(1),
+ m_kdesktopdcoprefobj("kdesktop", "KScreensaverIface")
+{
+ isScreenSaverEnabled = screenSaverIsEnabled();
+ tqDebug(TQString("ScreenSaver isEnabled = %1").arg((isScreenSaverEnabled)?"yes":"no"));
+}
+
+ScreenSaverInterfaceImpl::~ScreenSaverInterfaceImpl()
+{
+}
+
+void ScreenSaverInterfaceImpl::restoreState()
+{
+ // restore the state
+ forceScreenSaver(isScreenSaverEnabled);
+}
+
+/*!
+ * Implement virtual methods
+ *
+ */
+void ScreenSaverInterfaceImpl::handleMethodReply(const TQT_DBusMessage& reply)
+{
+ m_connection->send(reply);
+}
+
+bool ScreenSaverInterfaceImpl::handleSignalSend(const TQT_DBusMessage& reply)
+{
+ return true;
+}
+
+TQString ScreenSaverInterfaceImpl::objectPath() const
+{
+ return TQString(DBUS_SCREENSAVER_SERVICE_PATH);
+}
+
+bool ScreenSaverInterfaceImpl::Lock(TQT_DBusError& dbuserror) {
+
+ DCOPReply reply = m_kdesktopdcoprefobj.call("lock");
+ if (!reply.isValid())
+ {
+ TQString e("ScreenSaverInterfaceImpl::Lock: there was some error using DCOP.");
+ tqDebug(e);
+ dbuserror = TQT_DBusError::stdFailed(e);
+ return false;
+ }
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::SimulateUserActivity(TQT_DBusError& dbuserror) {
+ tqDebug("SimulateUserActivity not implemented");
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::GetActive(bool& arg0, TQT_DBusError& dbuserror) {
+ tqDebug("GetActive not implemented");
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::GetActiveTime(TQ_UINT32& seconds, TQT_DBusError& dbuserror) {
+ tqDebug("GetActiveTime not implemented");
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::GetSessionIdleTime(TQ_UINT32& seconds, TQT_DBusError& dbuserror) {
+ tqDebug("GetSessionIdleTime not implemented");
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::SetActive(bool& arg0, bool e, TQT_DBusError& dbuserror) {
+ tqDebug("SetActive not implemented");
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::Inhibit(const TQString& application_name, const TQString& reason_for_inhibit, TQ_UINT32& cookie, TQT_DBusError& dbuserror) {
+
+ //this is to make sure we have the actual state - it could have been changed meanwhile
+ isScreenSaverEnabled = screenSaverIsEnabled();
+ if (isScreenSaverEnabled && m_cookies.isEmpty()) // disable only once
+ {
+ if (!forceScreenSaver(false))
+ {
+ dbuserror = TQT_DBusError::stdFailed(TQString("Failed to disable the screen saver"));
+ }
+ }
+
+ cookie=m_ccount++;
+ ScreenSaverInterfaceImpl::Pair v;
+ v.name = application_name;
+ v.value = reason_for_inhibit;
+ m_cookies[cookie] = v;
+ tqDebug(TQString("Inhibit: cookie(%1), application(%2), reason(%3)")
+ .arg(cookie)
+ .arg(m_cookies[cookie].name)
+ .arg(m_cookies[cookie].value).local8Bit());
+
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::UnInhibit(TQ_UINT32 cookie, TQT_DBusError& dbuserror) {
+ tqDebug(TQString("UnInhibit: cookie(%1), application(%2), reason(%3)")
+ .arg(cookie)
+ .arg(m_cookies[cookie].name)
+ .arg(m_cookies[cookie].value).local8Bit());
+
+ m_cookies.remove(cookie);
+ if (m_cookies.isEmpty())
+ {
+ // restore states when all applications finished
+ if (!forceScreenSaver(isScreenSaverEnabled))
+ {
+ dbuserror = TQT_DBusError::stdFailed(TQString("Failed to switch ScreenSaver %1!").arg(
+ (isScreenSaverEnabled) ? "on" : "off"));
+ }
+ }
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::Throttle(const TQString& application_name, const TQString& reason_for_inhibit, TQ_UINT32& cookie, TQT_DBusError& dbuserror) {
+ tqDebug("Throttle not implemented");
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::UnThrottle(TQ_UINT32 cookie, TQT_DBusError& dbuserror) {
+ tqDebug("UnThrottle not implemented");
+ return true;
+}
+
+bool ScreenSaverInterfaceImpl::screenSaverIsEnabled()
+{
+ DCOPReply reply = m_kdesktopdcoprefobj.call("isEnabled");
+ bool on = false;
+ if (!reply.isValid())
+ {
+ tqDebug("ScreenSaverInterfaceImpl::screenSaverIsEnabled(): there was some error using DCOP.");
+ }
+ else
+ {
+ if (!reply.get(on))
+ {
+ tqDebug("ScreenSaverInterfaceImpl::screenSaverIsEnabled(): there was some error getting the value from DCOPReply");
+ }
+ }
+ return on;
+}
+
+bool ScreenSaverInterfaceImpl::forceScreenSaver(bool on)
+{
+ DCOPReply reply = m_kdesktopdcoprefobj.call("enable", on);
+ if (!reply.isValid())
+ {
+ tqDebug(TQString("Failed to switch ScreenSaver %1!").arg((on) ? "on" : "off"));
+ return false;
+ }
+ return true;
+}
+// End of File