00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "tderootsystemdevice.h"
00021 #include "tdestoragedevice.h"
00022
00023 #include <unistd.h>
00024
00025 #include <tqfile.h>
00026
00027 #include <dcopclient.h>
00028 #include "tdeglobal.h"
00029 #include "tdeconfig.h"
00030 #include "tdeapplication.h"
00031 #include "kstandarddirs.h"
00032
00033 #include "config.h"
00034
00035 #if defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_UPOWER) || defined(WITH_DEVKITPOWER) || defined(WITH_HAL) || defined(WITH_CONSOLEKIT)
00036 #include <tqdbusdata.h>
00037 #include <tqdbusmessage.h>
00038 #include <tqdbusproxy.h>
00039 #include <tqdbusvariant.h>
00040 #include <tqdbusconnection.h>
00041 #endif // defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_UPOWER) || defined(WITH_DEVKITPOWER) || defined(WITH_HAL) || defined(WITH_CONSOLEKIT)
00042
00043 TDERootSystemDevice::TDERootSystemDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) {
00044 m_hibernationSpace = -1;
00045 }
00046
00047 TDERootSystemDevice::~TDERootSystemDevice() {
00048 }
00049
00050 TDESystemFormFactor::TDESystemFormFactor TDERootSystemDevice::formFactor() {
00051 return m_formFactor;
00052 }
00053
00054 void TDERootSystemDevice::internalSetFormFactor(TDESystemFormFactor::TDESystemFormFactor ff) {
00055 m_formFactor = ff;
00056 }
00057
00058 TDESystemPowerStateList TDERootSystemDevice::powerStates() {
00059 return m_powerStates;
00060 }
00061
00062 void TDERootSystemDevice::internalSetPowerStates(TDESystemPowerStateList ps) {
00063 m_powerStates = ps;
00064 }
00065
00066 TDESystemHibernationMethodList TDERootSystemDevice::hibernationMethods() {
00067 return m_hibernationMethods;
00068 }
00069
00070 void TDERootSystemDevice::internalSetHibernationMethods(TDESystemHibernationMethodList hm) {
00071 m_hibernationMethods = hm;
00072 }
00073
00074 TDESystemHibernationMethod::TDESystemHibernationMethod TDERootSystemDevice::hibernationMethod() {
00075 return m_hibernationMethod;
00076 }
00077
00078 void TDERootSystemDevice::internalSetHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
00079 m_hibernationMethod = hm;
00080 }
00081
00082 unsigned long TDERootSystemDevice::diskSpaceNeededForHibernation() {
00083 return m_hibernationSpace;
00084 }
00085
00086 void TDERootSystemDevice::internalSetDiskSpaceNeededForHibernation(unsigned long sz) {
00087 m_hibernationSpace = sz;
00088 }
00089
00090 bool TDERootSystemDevice::canSetHibernationMethod() {
00091 TQString hibernationnode = "/sys/power/disk";
00092 int rval = access (hibernationnode.ascii(), W_OK);
00093 if (rval == 0) {
00094 return TRUE;
00095 }
00096
00097 #ifdef WITH_TDEHWLIB_DAEMONS
00098 {
00099 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00100 if (dbusConn.isConnected()) {
00101
00102 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00103 "org.trinitydesktop.hardwarecontrol",
00104 "/org/trinitydesktop/hardwarecontrol",
00105 "org.trinitydesktop.hardwarecontrol.Power",
00106 "CanSetHibernationMethod");
00107 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00108 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00109 return reply[0].toBool();
00110 }
00111 }
00112 }
00113 #endif // WITH_TDEHWLIB_DAEMONS
00114
00115 return FALSE;
00116 }
00117
00118 bool TDERootSystemDevice::canStandby() {
00119 TQString statenode = "/sys/power/state";
00120 int rval = access (statenode.ascii(), W_OK);
00121 if (rval == 0) {
00122 if (powerStates().contains(TDESystemPowerState::Standby)) {
00123 return TRUE;
00124 }
00125 else {
00126 return FALSE;
00127 }
00128 }
00129
00130 #ifdef WITH_TDEHWLIB_DAEMONS
00131 {
00132 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00133 if (dbusConn.isConnected()) {
00134
00135 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00136 "org.trinitydesktop.hardwarecontrol",
00137 "/org/trinitydesktop/hardwarecontrol",
00138 "org.trinitydesktop.hardwarecontrol.Power",
00139 "CanStandby");
00140 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00141 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00142 return reply[0].toBool();
00143 }
00144 }
00145 }
00146 #endif // WITH_TDEHWLIB_DAEMONS
00147
00148 return FALSE;
00149 }
00150
00151 bool TDERootSystemDevice::canFreeze() {
00152 TQString statenode = "/sys/power/state";
00153 int rval = access (statenode.ascii(), W_OK);
00154 if (rval == 0) {
00155 if (powerStates().contains(TDESystemPowerState::Freeze)) {
00156 return TRUE;
00157 }
00158 else {
00159 return FALSE;
00160 }
00161 }
00162
00163 #ifdef WITH_TDEHWLIB_DAEMONS
00164 {
00165 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00166 if (dbusConn.isConnected()) {
00167
00168 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00169 "org.trinitydesktop.hardwarecontrol",
00170 "/org/trinitydesktop/hardwarecontrol",
00171 "org.trinitydesktop.hardwarecontrol.Power",
00172 "CanFreeze");
00173 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00174 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00175 return reply[0].toBool();
00176 }
00177 }
00178 }
00179 #endif // WITH_TDEHWLIB_DAEMONS
00180
00181 return FALSE;
00182 }
00183
00184 bool TDERootSystemDevice::canSuspend() {
00185 TQString statenode = "/sys/power/state";
00186 int rval = access (statenode.ascii(), W_OK);
00187 if (rval == 0) {
00188 if (powerStates().contains(TDESystemPowerState::Suspend)) {
00189 return TRUE;
00190 }
00191 else {
00192 return FALSE;
00193 }
00194 }
00195
00196 #ifdef WITH_LOGINDPOWER
00197 {
00198 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00199 if (dbusConn.isConnected()) {
00200
00201 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00202 "org.freedesktop.login1",
00203 "/org/freedesktop/login1",
00204 "org.freedesktop.login1.Manager",
00205 "CanSuspend");
00206 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00207 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00208 return (reply[0].toString() == "yes");
00209 }
00210 }
00211 }
00212 #endif // WITH_LOGINDPOWER
00213
00214 #ifdef WITH_UPOWER
00215 {
00216 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00217 if (dbusConn.isConnected()) {
00218 TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
00219 if (upowerProperties.canSend()) {
00220
00221 TQValueList<TQT_DBusData> params;
00222 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
00223 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
00224 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00225 return reply[0].toVariant().value.toBool();
00226 }
00227 }
00228 }
00229 }
00230 #endif// WITH_UPOWER
00231
00232 #ifdef WITH_DEVKITPOWER
00233 {
00234 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00235 if (dbusConn.isConnected()) {
00236 TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
00237 if (devkitpowerProperties.canSend()) {
00238
00239 TQValueList<TQT_DBusData> params;
00240 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
00241 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
00242 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00243 return reply[0].toVariant().value.toBool();
00244 }
00245 }
00246 }
00247 }
00248 #endif// WITH_DEVKITPOWER
00249
00250 #ifdef WITH_HAL
00251 {
00252 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00253 if (dbusConn.isConnected()) {
00254 TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
00255 if (halProperties.canSend()) {
00256
00257 TQValueList<TQT_DBusData> params;
00258 TQT_DBusMessage reply;
00259 params.clear();
00260 params << TQT_DBusData::fromString("power_management.can_suspend");
00261 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00262 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00263 return reply[0].toBool();
00264 }
00265 params.clear();
00266 params << TQT_DBusData::fromString("power_management.can_suspend_to_ram");
00267 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00268 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00269 return reply[0].toBool();
00270 }
00271 }
00272 }
00273 }
00274 #endif // WITH_HAL
00275
00276 #ifdef WITH_TDEHWLIB_DAEMONS
00277 {
00278 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00279 if (dbusConn.isConnected()) {
00280
00281 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00282 "org.trinitydesktop.hardwarecontrol",
00283 "/org/trinitydesktop/hardwarecontrol",
00284 "org.trinitydesktop.hardwarecontrol.Power",
00285 "CanSuspend");
00286 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00287 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00288 return reply[0].toBool();
00289 }
00290 }
00291 }
00292 #endif // WITH_TDEHWLIB_DAEMONS
00293
00294 return FALSE;
00295 }
00296
00297 bool TDERootSystemDevice::canHibernate() {
00298 TQString statenode = "/sys/power/state";
00299 int rval = access (statenode.ascii(), W_OK);
00300 if (rval == 0) {
00301 if (powerStates().contains(TDESystemPowerState::Hibernate)) {
00302 return TRUE;
00303 }
00304 else {
00305 return FALSE;
00306 }
00307 }
00308
00309 #ifdef WITH_LOGINDPOWER
00310 {
00311 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00312 if (dbusConn.isConnected()) {
00313
00314 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00315 "org.freedesktop.login1",
00316 "/org/freedesktop/login1",
00317 "org.freedesktop.login1.Manager",
00318 "CanHibernate");
00319 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00320 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00321 return (reply[0].toString() == "yes");
00322 }
00323 }
00324 }
00325 #endif // WITH_LOGINDPOWER
00326
00327 #ifdef WITH_UPOWER
00328 {
00329 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00330 if (dbusConn.isConnected()) {
00331 TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
00332 if (upowerProperties.canSend()) {
00333
00334 TQValueList<TQT_DBusData> params;
00335 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
00336 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
00337 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00338 return reply[0].toVariant().value.toBool();
00339 }
00340 }
00341 }
00342 }
00343 #endif// WITH_UPOWER
00344
00345 #ifdef WITH_DEVKITPOWER
00346 {
00347 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00348 if (dbusConn.isConnected()) {
00349 TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
00350 if (devkitpowerProperties.canSend()) {
00351
00352 TQValueList<TQT_DBusData> params;
00353 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
00354 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
00355 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00356 return reply[0].toVariant().value.toBool();
00357 }
00358 }
00359 }
00360 }
00361 #endif// WITH_DEVKITPOWER
00362
00363 #ifdef WITH_HAL
00364 {
00365 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00366 if (dbusConn.isConnected()) {
00367 TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
00368 if (halProperties.canSend()) {
00369
00370 TQValueList<TQT_DBusData> params;
00371 TQT_DBusMessage reply;
00372 params.clear();
00373 params << TQT_DBusData::fromString("power_management.can_hibernate");
00374 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00375 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00376 return reply[0].toBool();
00377 }
00378 params.clear();
00379 params << TQT_DBusData::fromString("power_management.can_suspend_to_disk");
00380 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00381 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00382 return reply[0].toBool();
00383 }
00384 }
00385 }
00386 }
00387 #endif // WITH_HAL
00388
00389 #ifdef WITH_TDEHWLIB_DAEMONS
00390 {
00391 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00392 if (dbusConn.isConnected()) {
00393
00394 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00395 "org.trinitydesktop.hardwarecontrol",
00396 "/org/trinitydesktop/hardwarecontrol",
00397 "org.trinitydesktop.hardwarecontrol.Power",
00398 "CanHibernate");
00399 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00400 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00401 return reply[0].toBool();
00402 }
00403 }
00404 }
00405 #endif // WITH_TDEHWLIB_DAEMONS
00406
00407 return FALSE;
00408 }
00409
00410 bool TDERootSystemDevice::canPowerOff() {
00411 TDEConfig config("ksmserverrc", true);
00412 config.setGroup("General" );
00413 if (!config.readBoolEntry( "offerShutdown", true )) {
00414 return FALSE;
00415 }
00416
00417 #ifdef WITH_LOGINDPOWER
00418 {
00419 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00420 if (dbusConn.isConnected()) {
00421
00422 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00423 "org.freedesktop.login1",
00424 "/org/freedesktop/login1",
00425 "org.freedesktop.login1.Manager",
00426 "CanPowerOff");
00427 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00428 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00429 return (reply[0].toString() == "yes");
00430 }
00431 }
00432 }
00433 #endif // WITH_LOGINDPOWER
00434
00435 #ifdef WITH_CONSOLEKIT
00436 {
00437 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00438 if (dbusConn.isConnected()) {
00439
00440 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00441 "org.freedesktop.ConsoleKit",
00442 "/org/freedesktop/ConsoleKit/Manager",
00443 "org.freedesktop.ConsoleKit.Manager",
00444 "CanStop");
00445 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00446 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00447 return reply[0].toBool();
00448 }
00449 }
00450 }
00451 #endif // WITH_CONSOLEKIT
00452
00453
00454
00455
00456
00457
00458
00459 return TRUE;
00460 }
00461
00462 bool TDERootSystemDevice::canReboot() {
00463 TDEConfig config("ksmserverrc", true);
00464 config.setGroup("General" );
00465 if (!config.readBoolEntry( "offerShutdown", true )) {
00466 return FALSE;
00467 }
00468
00469 #ifdef WITH_LOGINDPOWER
00470 {
00471 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00472 if (dbusConn.isConnected()) {
00473
00474 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00475 "org.freedesktop.login1",
00476 "/org/freedesktop/login1",
00477 "org.freedesktop.login1.Manager",
00478 "CanReboot");
00479 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00480 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00481 return (reply[0].toString() == "yes");
00482 }
00483 }
00484 }
00485 #endif // WITH_LOGINDPOWER
00486
00487 #ifdef WITH_CONSOLEKIT
00488 {
00489 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00490 if (dbusConn.isConnected()) {
00491
00492 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00493 "org.freedesktop.ConsoleKit",
00494 "/org/freedesktop/ConsoleKit/Manager",
00495 "org.freedesktop.ConsoleKit.Manager",
00496 "CanRestart");
00497 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00498 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00499 return reply[0].toBool();
00500 }
00501 }
00502 }
00503 #endif // WITH_CONSOLEKIT
00504
00505
00506
00507
00508
00509
00510
00511 return TRUE;
00512 }
00513
00514 void TDERootSystemDevice::setHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
00515 TQString hibernationnode = "/sys/power/disk";
00516 TQFile file( hibernationnode );
00517 if ( file.open( IO_WriteOnly ) ) {
00518 TQString hibernationCommand;
00519 if (hm == TDESystemHibernationMethod::Platform) {
00520 hibernationCommand = "platform";
00521 }
00522 if (hm == TDESystemHibernationMethod::Shutdown) {
00523 hibernationCommand = "shutdown";
00524 }
00525 if (hm == TDESystemHibernationMethod::Reboot) {
00526 hibernationCommand = "reboot";
00527 }
00528 if (hm == TDESystemHibernationMethod::TestProc) {
00529 hibernationCommand = "testproc";
00530 }
00531 if (hm == TDESystemHibernationMethod::Test) {
00532 hibernationCommand = "test";
00533 }
00534 TQTextStream stream( &file );
00535 stream << hibernationCommand;
00536 file.close();
00537 return;
00538 }
00539
00540 #ifdef WITH_TDEHWLIB_DAEMONS
00541 {
00542 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00543 if (dbusConn.isConnected()) {
00544 TQT_DBusProxy hardwareControl("org.trinitydesktop.hardwarecontrol", "/org/trinitydesktop/hardwarecontrol", "org.trinitydesktop.hardwarecontrol.Power", dbusConn);
00545 if (hardwareControl.canSend()) {
00546
00547 TQValueList<TQT_DBusData> params;
00548 TQString hibernationCommand;
00549 if (hm == TDESystemHibernationMethod::Platform) {
00550 hibernationCommand = "platform";
00551 }
00552 if (hm == TDESystemHibernationMethod::Shutdown) {
00553 hibernationCommand = "shutdown";
00554 }
00555 if (hm == TDESystemHibernationMethod::Reboot) {
00556 hibernationCommand = "reboot";
00557 }
00558 if (hm == TDESystemHibernationMethod::TestProc) {
00559 hibernationCommand = "testproc";
00560 }
00561 if (hm == TDESystemHibernationMethod::Test) {
00562 hibernationCommand = "test";
00563 }
00564 params << TQT_DBusData::fromString(hibernationCommand);
00565 TQT_DBusMessage reply = hardwareControl.sendWithReply("SetHibernationMethod", params);
00566 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00567 return;
00568 }
00569 }
00570 }
00571 }
00572 #endif // WITH_TDEHWLIB_DAEMONS
00573
00574 }
00575
00576 bool TDERootSystemDevice::setPowerState(TDESystemPowerState::TDESystemPowerState ps) {
00577 if ((ps == TDESystemPowerState::Standby) || (ps == TDESystemPowerState::Freeze) || (ps == TDESystemPowerState::Suspend) || (ps == TDESystemPowerState::Hibernate)) {
00578 TQString statenode = "/sys/power/state";
00579 TQFile file( statenode );
00580 if ( file.open( IO_WriteOnly ) ) {
00581 TQString powerCommand;
00582 if (ps == TDESystemPowerState::Standby) {
00583 powerCommand = "standby";
00584 }
00585 if (ps == TDESystemPowerState::Freeze) {
00586 powerCommand = "freeze";
00587 }
00588 if (ps == TDESystemPowerState::Suspend) {
00589 powerCommand = "mem";
00590 }
00591 if (ps == TDESystemPowerState::Hibernate) {
00592 powerCommand = "disk";
00593 }
00594 TQTextStream stream( &file );
00595 stream << powerCommand;
00596 file.close();
00597 return true;
00598 }
00599
00600 #ifdef WITH_LOGINDPOWER
00601 {
00602
00603 TQT_DBusConnection dbusConn;
00604 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00605 if ( dbusConn.isConnected() ) {
00606 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00607 "org.freedesktop.login1.Manager", dbusConn);
00608 TQValueList<TQT_DBusData> params;
00609 params << TQT_DBusData::fromBool(true);
00610 if (logindProxy.canSend()) {
00611 if (ps == TDESystemPowerState::Suspend) {
00612 TQT_DBusMessage reply = logindProxy.sendWithReply("Suspend", params);
00613 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00614 return true;
00615 }
00616 }
00617 else if (ps == TDESystemPowerState::Hibernate) {
00618 TQT_DBusMessage reply = logindProxy.sendWithReply("Hibernate", params);
00619 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00620 return true;
00621 }
00622 }
00623 }
00624 }
00625 }
00626 #endif // WITH_LOGINDPOWER
00627
00628 #ifdef WITH_UPOWER
00629 {
00630 TQT_DBusConnection dbusConn;
00631 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00632 if ( dbusConn.isConnected() ) {
00633 if (ps == TDESystemPowerState::Suspend) {
00634 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00635 "org.freedesktop.UPower",
00636 "/org/freedesktop/UPower",
00637 "org.freedesktop.UPower",
00638 "Suspend");
00639 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00640 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00641 return true;
00642 }
00643 }
00644 else if (ps == TDESystemPowerState::Hibernate) {
00645 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00646 "org.freedesktop.UPower",
00647 "/org/freedesktop/UPower",
00648 "org.freedesktop.UPower",
00649 "Hibernate");
00650 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00651 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00652 return true;
00653 }
00654 }
00655 }
00656 }
00657 #endif // WITH_UPOWER
00658
00659 #ifdef WITH_DEVKITPOWER
00660 {
00661 TQT_DBusConnection dbusConn;
00662 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00663 if ( dbusConn.isConnected() ) {
00664 if (ps == TDESystemPowerState::Suspend) {
00665 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00666 "org.freedesktop.DeviceKit.Power",
00667 "/org/freedesktop/DeviceKit/Power",
00668 "org.freedesktop.DeviceKit.Power",
00669 "Suspend");
00670 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00671 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00672 return true;
00673 }
00674 }
00675 else if (ps == TDESystemPowerState::Hibernate) {
00676 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00677 "org.freedesktop.DeviceKit.Power",
00678 "/org/freedesktop/DeviceKit/Power",
00679 "org.freedesktop.DeviceKit.Power",
00680 "Hibernate");
00681 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00682 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00683 return true;
00684 }
00685 }
00686 }
00687 }
00688 #endif // WITH_DEVKITPOWER
00689
00690 #ifdef WITH_HAL
00691 {
00692 TQT_DBusConnection dbusConn;
00693 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00694 if ( dbusConn.isConnected() ) {
00695 if (ps == TDESystemPowerState::Suspend) {
00696 TQT_DBusProxy halPowerManagement(
00697 "org.freedesktop.Hal",
00698 "/org/freedesktop/Hal/devices/computer",
00699 "org.freedesktop.Hal.Device.SystemPowerManagement",
00700 dbusConn);
00701 TQValueList<TQT_DBusData> params;
00702 params << TQT_DBusData::fromInt32(0);
00703 TQT_DBusMessage reply = halPowerManagement.sendWithReply("Suspend", params);
00704 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00705 return true;
00706 }
00707 }
00708 else if (ps == TDESystemPowerState::Hibernate) {
00709 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00710 "org.freedesktop.Hal",
00711 "/org/freedesktop/Hal/devices/computer",
00712 "org.freedesktop.Hal.Device.SystemPowerManagement",
00713 "Hibernate");
00714 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00715 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00716 return true;
00717 }
00718 }
00719 }
00720 }
00721 #endif // WITH_HAL
00722
00723 #ifdef WITH_TDEHWLIB_DAEMONS
00724 {
00725 TQT_DBusConnection dbusConn;
00726 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00727 if ( dbusConn.isConnected() ) {
00728 if (ps == TDESystemPowerState::Standby) {
00729 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00730 "org.trinitydesktop.hardwarecontrol",
00731 "/org/trinitydesktop/hardwarecontrol",
00732 "org.trinitydesktop.hardwarecontrol.Power",
00733 "Standby");
00734 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00735 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00736 return true;
00737 }
00738 }
00739 else if (ps == TDESystemPowerState::Freeze) {
00740 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00741 "org.trinitydesktop.hardwarecontrol",
00742 "/org/trinitydesktop/hardwarecontrol",
00743 "org.trinitydesktop.hardwarecontrol.Power",
00744 "Freeze");
00745 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00746 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00747 return true;
00748 }
00749 }
00750 else if (ps == TDESystemPowerState::Suspend) {
00751 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00752 "org.trinitydesktop.hardwarecontrol",
00753 "/org/trinitydesktop/hardwarecontrol",
00754 "org.trinitydesktop.hardwarecontrol.Power",
00755 "Suspend");
00756 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00757 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00758 return true;
00759 }
00760 }
00761 else if (ps == TDESystemPowerState::Hibernate) {
00762 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00763 "org.trinitydesktop.hardwarecontrol",
00764 "/org/trinitydesktop/hardwarecontrol",
00765 "org.trinitydesktop.hardwarecontrol.Power",
00766 "Hibernate");
00767 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00768 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00769 return true;
00770 }
00771 }
00772 }
00773 }
00774 #endif // WITH_TDEHWLIB_DAEMONS
00775
00776 return false;
00777 }
00778 else if (ps == TDESystemPowerState::PowerOff) {
00779 TDEConfig config("ksmserverrc", true);
00780 config.setGroup("General" );
00781 if (!config.readBoolEntry( "offerShutdown", true )) {
00782 return false;
00783 }
00784 #ifdef WITH_LOGINDPOWER
00785 {
00786 TQT_DBusConnection dbusConn;
00787 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00788 if ( dbusConn.isConnected() ) {
00789 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00790 "org.freedesktop.login1.Manager", dbusConn);
00791 TQValueList<TQT_DBusData> params;
00792 params << TQT_DBusData::fromBool(true);
00793 if (logindProxy.canSend()) {
00794 TQT_DBusMessage reply = logindProxy.sendWithReply("PowerOff", params);
00795 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00796 return true;
00797 }
00798 }
00799 }
00800 }
00801 #endif // WITH_LOGINDPOWER
00802 #ifdef WITH_CONSOLEKIT
00803 {
00804 TQT_DBusConnection dbusConn;
00805 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00806 if ( dbusConn.isConnected() ) {
00807 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00808 "org.freedesktop.ConsoleKit",
00809 "/org/freedesktop/ConsoleKit/Manager",
00810 "org.freedesktop.ConsoleKit.Manager",
00811 "Stop");
00812 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00813 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00814 return true;
00815 }
00816 }
00817 }
00818 #endif // WITH_CONSOLEKIT
00819
00820
00821 TQByteArray data;
00822 TQDataStream arg(data, IO_WriteOnly);
00823 arg << (int)0 << (int)2 << (int)2;
00824 if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
00825 return true;
00826 }
00827 return false;
00828 }
00829 else if (ps == TDESystemPowerState::Reboot) {
00830 TDEConfig config("ksmserverrc", true);
00831 config.setGroup("General" );
00832 if (!config.readBoolEntry( "offerShutdown", true )) {
00833 return false;
00834 }
00835 #ifdef WITH_LOGINDPOWER
00836 {
00837 TQT_DBusConnection dbusConn;
00838 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00839 if ( dbusConn.isConnected() ) {
00840 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00841 "org.freedesktop.login1.Manager", dbusConn);
00842 TQValueList<TQT_DBusData> params;
00843 params << TQT_DBusData::fromBool(true);
00844 if (logindProxy.canSend()) {
00845 TQT_DBusMessage reply = logindProxy.sendWithReply("Reboot", params);
00846 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00847 return true;
00848 }
00849 }
00850 }
00851 }
00852 #endif // WITH_LOGINDPOWER
00853 #ifdef WITH_CONSOLEKIT
00854 {
00855 TQT_DBusConnection dbusConn;
00856 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00857 if ( dbusConn.isConnected() ) {
00858 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00859 "org.freedesktop.ConsoleKit",
00860 "/org/freedesktop/ConsoleKit/Manager",
00861 "org.freedesktop.ConsoleKit.Manager",
00862 "Restart");
00863 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00864 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00865 return true;
00866 }
00867 }
00868 }
00869 #endif // WITH_CONSOLEKIT
00870
00871
00872 TQByteArray data;
00873 TQDataStream arg(data, IO_WriteOnly);
00874 arg << (int)0 << (int)1 << (int)2;
00875 if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
00876 return true;
00877 }
00878 return false;
00879 }
00880 else if (ps == TDESystemPowerState::Active) {
00881
00882 return true;
00883 }
00884
00885 return false;
00886 }
00887
00888 #include "tderootsystemdevice.moc"