[tdebase/ksmserver] added UPower support

pull/2/head
Serghei Amelian 12 years ago
parent 39c1afd3f8
commit b5236f1d75

@ -77,6 +77,7 @@ option( WITH_XINERAMA "Enable xinerama extension support" ${WITH_ALL_OPTIONS} )
option( WITH_ARTS "Enable aRts support" ${WITH_ALL_OPTIONS} )
option( WITH_I8K "Enable Dell laptop support (ksysguard)" ${WITH_ALL_OPTIONS} )
option( WITH_HAL "Enable HAL support" ${WITH_ALL_OPTIONS} )
option( WITH_UPOWER "Enable UPOWER support" ${WITH_ALL_OPTIONS} )
option( WITH_GCC_VISIBILITY "Enable fvisibility and fvisibility-inlines-hidden" ${WITH_ALL_OPTIONS} )

@ -1,6 +1,6 @@
#################################################
#
# (C) 2010-2011 Serghei Amelian
# (C) 2010-2012 Serghei Amelian
# serghei (DOT) amelian (AT) gmail.com
#
# Improvements and feedback are welcome
@ -215,7 +215,7 @@ find_package( TQt )
find_package( TDE )
# dbus-tqt need Qt flags
# dbus (tdm, ksmserver)
if( BUILD_TDM OR BUILD_KSMSERVER )
@ -224,7 +224,20 @@ if( BUILD_TDM OR BUILD_KSMSERVER )
tde_message_fatal( "dbus-1 is required, but was not found on your system" )
endif( )
endif( )
# tqt-dbus (tdm, ksmserver)
if( BUILD_TDM OR BUILD_KSMSERVER )
if( BUILD_KSMSERVER AND WITH_UPOWER )
pkg_check_modules( DBUS_1_TQT dbus-1-tqt )
if( NOT DBUS_1_TQT_FOUND )
tde_message_fatal( "dbus-tqt-1 is required, but was not found on your system" )
endif( )
else( )
# check for dbus-tqt
# dbus-tqt need Qt flags
pkg_check_modules( DBUS_TQT REQUIRED dbus-tqt )
tde_save( CMAKE_REQUIRED_INCLUDES CMAKE_REQUIRED_LIBRARIES )
set( CMAKE_REQUIRED_INCLUDES ${DBUS_TQT_INCLUDE_DIRS} ${TQT_INCLUDE_DIRS} ${QT_INCLUDE_DIRS})
@ -238,5 +251,6 @@ if( BUILD_TDM OR BUILD_KSMSERVER )
if( NOT HAVE_DBUS_QT3_07 )
tde_message_fatal( "dbus-tqt is required, but was not found on your system" )
endif( )
endif( )
endif( )

@ -13,18 +13,24 @@ if( NOT DBUS_SYSTEM_BUS )
set( DBUS_SYSTEM_BUS "unix:path=/var/run/dbus/system_bus_socket" CACHE INTERNAL "" FORCE )
endif()
if( WITH_UPOWER )
add_definitions( -DWITH_UPOWER )
endif( )
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/tdmlib
${TDE_INCLUDE_DIR}
${TQT_INCLUDE_DIRS}
${DBUS_1_TQT_INCLUDE_DIRS}
${DBUS_TQT_INCLUDE_DIRS}
${HAL_INCLUDE_DIRS}
)
link_directories(
${TQT_LIBRARY_DIRS}
${DBUS_1_TQT_LIBRARY_DIRS}
${DBUS_TQT_LIBRARY_DIRS}
)
@ -43,5 +49,5 @@ tde_add_tdeinit_executable( ksmserver AUTOMOC
main.cpp server.cpp shutdowndlg.cpp startupdlg.cpp
legacy.cpp startup.cpp shutdown.cpp client.cpp
KSMServerInterface.skel server.skel timed.ui
LINK dmctl-static tdeui-shared krsync-shared ${HAL_LIBRARIES} ${DBUS_TQT_LIBRARIES}
LINK dmctl-static tdeui-shared krsync-shared ${HAL_LIBRARIES} ${DBUS_1_TQT_LIBRARIES} ${DBUS_TQT_LIBRARIES}
)

@ -1,11 +1,20 @@
/*****************************************************************
ksmserver - the KDE session management server
Copyright (C) 2012 Serghei Amelian <serghei.amelian@gmail.com>
Copyright (C) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net>
Copyright (C) 2000 Matthias Ettrich <ettrich@kde.org>
******************************************************************/
#include "shutdowndlg.h"
#ifdef WITH_UPOWER
#include <tqdbusdata.h>
#include <tqdbusmessage.h>
#include <tqdbusproxy.h>
#include <tqdbusvariant.h>
#endif
#include <tqapplication.h>
#include <tqlayout.h>
#include <tqgroupbox.h>
@ -727,10 +736,11 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent,
connect(btnLogout, TQT_SIGNAL(clicked()), TQT_SLOT(slotLogout()));
}
#ifndef WITH_UPOWER
#ifdef COMPILE_HALBACKEND
m_halCtx = NULL;
#endif
#endif // WITH_UPOWER
if (maysd) {
@ -744,6 +754,25 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent,
bool canSuspend = false;
bool canHibernate = false;
#ifdef WITH_UPOWER
m_dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", m_dbusConn);
// can suspend?
TQValueList<TQT_DBusData> params;
params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
if(reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1)
canSuspend = reply[0].toVariant().value.toBool();
// can hibernate?
params.clear();
params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
reply = upowerProperties.sendWithReply("Get", params);
if(reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1)
canHibernate = reply[0].toVariant().value.toBool();
#else
#ifdef COMPILE_HALBACKEND
// Query HAL for suspend/resume support
m_halCtx = libhal_ctx_new();
@ -800,6 +829,7 @@ KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent,
}
}
#endif
#endif // WITH_UPOWER
if(doUbuntuLogout) {
@ -1043,6 +1073,22 @@ void KSMShutdownDlg::slotHalt()
void KSMShutdownDlg::slotSuspend()
{
#ifdef WITH_UPOWER
if (m_lockOnResume) {
DCOPRef("kdesktop", "KScreensaverIface").send("lock");
}
if( m_dbusConn.isConnected() ) {
TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
"org.freedesktop.UPower",
"/org/freedesktop/UPower",
"org.freedesktop.UPower",
"Suspend");
m_dbusConn.sendWithReply(msg);
}
reject(); // continue on resume
#else
#ifdef COMPILE_HALBACKEND
if (m_lockOnResume) {
DCOPRef("kdesktop", "KScreensaverIface").send("lock");
@ -1066,10 +1112,27 @@ void KSMShutdownDlg::slotSuspend()
reject(); // continue on resume
#endif
#endif // WITH_UPOWER
}
void KSMShutdownDlg::slotHibernate()
{
#ifdef WITH_UPOWER
if (m_lockOnResume) {
DCOPRef("kdesktop", "KScreensaverIface").send("lock");
}
if( m_dbusConn.isConnected() ) {
TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
"org.freedesktop.UPower",
"/org/freedesktop/UPower",
"org.freedesktop.UPower",
"Hibernate");
m_dbusConn.sendWithReply(msg);
}
reject(); // continue on resume
#else
#ifdef COMPILE_HALBACKEND
if (m_lockOnResume) {
DCOPRef("kdesktop", "KScreensaverIface").send("lock");
@ -1090,6 +1153,7 @@ void KSMShutdownDlg::slotHibernate()
reject(); // continue on resume
#endif
#endif // WITH_UPOWER
}
bool KSMShutdownDlg::confirmShutdown( bool maysd, KApplication::ShutdownType& sdtype, TQString& bootOption )

@ -1,6 +1,7 @@
/*****************************************************************
ksmserver - the KDE session management server
Copyright (C) 2012 Serghei Amelian <serghei.amelian@gmail.com>
Copyright (C) 2000 Matthias Ettrich <ettrich@kde.org>
******************************************************************/
@ -32,15 +33,20 @@ class KAction;
#include <config.h>
#ifndef NO_QT3_DBUS_SUPPORT
/* We acknowledge the the dbus API is unstable */
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/connection.h>
#endif // NO_QT3_DBUS_SUPPORT
#ifdef COMPILE_HALBACKEND
#include <hal/libhal.h>
#endif
#ifdef WITH_UPOWER
#include <tqdbusconnection.h>
#else
#warning test
#ifndef NO_QT3_DBUS_SUPPORT
/* We acknowledge the the dbus API is unstable */
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/connection.h>
#endif // NO_QT3_DBUS_SUPPORT
#ifdef COMPILE_HALBACKEND
#include <hal/libhal.h>
#endif
#endif // WITH_UPOWER
// The (singleton) widget that makes/fades the desktop gray.
class KSMShutdownFeedback : public TQWidget
@ -135,10 +141,14 @@ private:
TQString m_bootOption;
TQPopupMenu *targets;
TQStringList rebootOptions;
#ifdef WITH_UPOWER
TQT_DBusConnection m_dbusConn;
#else
#ifdef COMPILE_HALBACKEND
LibHalContext* m_halCtx;
DBusConnection *m_dbusConn;
#endif
#endif // WITH_UPOWER
bool m_lockOnResume;
};

@ -30,17 +30,6 @@ class KAction;
#include <kapplication.h>
#include <kpixmapio.h>
#include <config.h>
#ifndef NO_QT3_DBUS_SUPPORT
/* We acknowledge the the dbus API is unstable */
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/connection.h>
#endif // NO_QT3_DBUS_SUPPORT
#ifdef COMPILE_HALBACKEND
#include <hal/libhal.h>
#endif
// The startup-in-progress dialog
class KSMStartupIPDlg : public KSMModalDialog

Loading…
Cancel
Save