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 TQString disknode = "/sys/power/disk";
00300 int state_rval = access (statenode.ascii(), W_OK);
00301 int disk_rval = access (disknode.ascii(), W_OK);
00302 if (state_rval == 0 && disk_rval == 0) {
00303 if (powerStates().contains(TDESystemPowerState::Hibernate)) {
00304 return TRUE;
00305 }
00306 else {
00307 return FALSE;
00308 }
00309 }
00310
00311 #ifdef WITH_LOGINDPOWER
00312 {
00313 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00314 if (dbusConn.isConnected()) {
00315
00316 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00317 "org.freedesktop.login1",
00318 "/org/freedesktop/login1",
00319 "org.freedesktop.login1.Manager",
00320 "CanHibernate");
00321 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00322 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00323 return (reply[0].toString() == "yes");
00324 }
00325 }
00326 }
00327 #endif // WITH_LOGINDPOWER
00328
00329 #ifdef WITH_UPOWER
00330 {
00331 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00332 if (dbusConn.isConnected()) {
00333 TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
00334 if (upowerProperties.canSend()) {
00335
00336 TQValueList<TQT_DBusData> params;
00337 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
00338 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
00339 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00340 return reply[0].toVariant().value.toBool();
00341 }
00342 }
00343 }
00344 }
00345 #endif// WITH_UPOWER
00346
00347 #ifdef WITH_DEVKITPOWER
00348 {
00349 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00350 if (dbusConn.isConnected()) {
00351 TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
00352 if (devkitpowerProperties.canSend()) {
00353
00354 TQValueList<TQT_DBusData> params;
00355 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
00356 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
00357 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00358 return reply[0].toVariant().value.toBool();
00359 }
00360 }
00361 }
00362 }
00363 #endif// WITH_DEVKITPOWER
00364
00365 #ifdef WITH_HAL
00366 {
00367 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00368 if (dbusConn.isConnected()) {
00369 TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
00370 if (halProperties.canSend()) {
00371
00372 TQValueList<TQT_DBusData> params;
00373 TQT_DBusMessage reply;
00374 params.clear();
00375 params << TQT_DBusData::fromString("power_management.can_hibernate");
00376 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00377 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00378 return reply[0].toBool();
00379 }
00380 params.clear();
00381 params << TQT_DBusData::fromString("power_management.can_suspend_to_disk");
00382 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00383 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00384 return reply[0].toBool();
00385 }
00386 }
00387 }
00388 }
00389 #endif // WITH_HAL
00390
00391 #ifdef WITH_TDEHWLIB_DAEMONS
00392 {
00393 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00394 if (dbusConn.isConnected()) {
00395
00396 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00397 "org.trinitydesktop.hardwarecontrol",
00398 "/org/trinitydesktop/hardwarecontrol",
00399 "org.trinitydesktop.hardwarecontrol.Power",
00400 "CanHibernate");
00401 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00402 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00403 return reply[0].toBool();
00404 }
00405 }
00406 }
00407 #endif // WITH_TDEHWLIB_DAEMONS
00408
00409 return FALSE;
00410 }
00411
00412 bool TDERootSystemDevice::canHybridSuspend() {
00413 TQString statenode = "/sys/power/state";
00414 TQString disknode = "/sys/power/disk";
00415 int state_rval = access (statenode.ascii(), W_OK);
00416 int disk_rval = access (disknode.ascii(), W_OK);
00417 if (state_rval == 0 && disk_rval == 0) {
00418 if (powerStates().contains(TDESystemPowerState::HybridSuspend)) {
00419 return TRUE;
00420 }
00421 else {
00422 return FALSE;
00423 }
00424 }
00425
00426 #ifdef WITH_LOGINDPOWER
00427 {
00428 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00429 if (dbusConn.isConnected()) {
00430
00431 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00432 "org.freedesktop.login1",
00433 "/org/freedesktop/login1",
00434 "org.freedesktop.login1.Manager",
00435 "CanHybridSleep");
00436 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00437 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00438 return (reply[0].toString() == "yes");
00439 }
00440 }
00441 }
00442 #endif // WITH_LOGINDPOWER
00443
00444
00445
00446
00447 #ifdef WITH_HAL
00448 {
00449 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00450 if (dbusConn.isConnected()) {
00451 TQT_DBusProxy halProperties("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device", dbusConn);
00452 if (halProperties.canSend()) {
00453
00454 TQValueList<TQT_DBusData> params;
00455 TQT_DBusMessage reply;
00456 params.clear();
00457 params << TQT_DBusData::fromString("power_management.can_suspend_hybrid");
00458 reply = halProperties.sendWithReply("GetPropertyBoolean", params);
00459 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00460 return reply[0].toBool();
00461 }
00462 }
00463 }
00464 }
00465 #endif // WITH_HAL
00466
00467 #ifdef WITH_TDEHWLIB_DAEMONS
00468 {
00469 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00470 if (dbusConn.isConnected()) {
00471
00472 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00473 "org.trinitydesktop.hardwarecontrol",
00474 "/org/trinitydesktop/hardwarecontrol",
00475 "org.trinitydesktop.hardwarecontrol.Power",
00476 "CanHybridSuspend");
00477 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00478 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00479 return reply[0].toBool();
00480 }
00481 }
00482 }
00483 #endif // WITH_TDEHWLIB_DAEMONS
00484
00485 return FALSE;
00486 }
00487
00488 bool TDERootSystemDevice::canPowerOff() {
00489 TDEConfig config("ksmserverrc", true);
00490 config.setGroup("General" );
00491 if (!config.readBoolEntry( "offerShutdown", true )) {
00492 return FALSE;
00493 }
00494
00495 #ifdef WITH_LOGINDPOWER
00496 {
00497 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00498 if (dbusConn.isConnected()) {
00499
00500 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00501 "org.freedesktop.login1",
00502 "/org/freedesktop/login1",
00503 "org.freedesktop.login1.Manager",
00504 "CanPowerOff");
00505 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00506 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00507 return (reply[0].toString() == "yes");
00508 }
00509 }
00510 }
00511 #endif // WITH_LOGINDPOWER
00512
00513 #ifdef WITH_CONSOLEKIT
00514 {
00515 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00516 if (dbusConn.isConnected()) {
00517
00518 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00519 "org.freedesktop.ConsoleKit",
00520 "/org/freedesktop/ConsoleKit/Manager",
00521 "org.freedesktop.ConsoleKit.Manager",
00522 "CanStop");
00523 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00524 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00525 return reply[0].toBool();
00526 }
00527 }
00528 }
00529 #endif // WITH_CONSOLEKIT
00530
00531
00532
00533
00534
00535
00536
00537 return TRUE;
00538 }
00539
00540 bool TDERootSystemDevice::canReboot() {
00541 TDEConfig config("ksmserverrc", true);
00542 config.setGroup("General" );
00543 if (!config.readBoolEntry( "offerShutdown", true )) {
00544 return FALSE;
00545 }
00546
00547 #ifdef WITH_LOGINDPOWER
00548 {
00549 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00550 if (dbusConn.isConnected()) {
00551
00552 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00553 "org.freedesktop.login1",
00554 "/org/freedesktop/login1",
00555 "org.freedesktop.login1.Manager",
00556 "CanReboot");
00557 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00558 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00559 return (reply[0].toString() == "yes");
00560 }
00561 }
00562 }
00563 #endif // WITH_LOGINDPOWER
00564
00565 #ifdef WITH_CONSOLEKIT
00566 {
00567 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00568 if (dbusConn.isConnected()) {
00569
00570 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00571 "org.freedesktop.ConsoleKit",
00572 "/org/freedesktop/ConsoleKit/Manager",
00573 "org.freedesktop.ConsoleKit.Manager",
00574 "CanRestart");
00575 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00576 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
00577 return reply[0].toBool();
00578 }
00579 }
00580 }
00581 #endif // WITH_CONSOLEKIT
00582
00583
00584
00585
00586
00587
00588
00589 return TRUE;
00590 }
00591
00592 void TDERootSystemDevice::setHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
00593 TQString hibernationnode = "/sys/power/disk";
00594 TQFile file( hibernationnode );
00595 if ( file.open( IO_WriteOnly ) ) {
00596 TQString hibernationCommand;
00597 if (hm == TDESystemHibernationMethod::Platform) {
00598 hibernationCommand = "platform";
00599 }
00600 else if (hm == TDESystemHibernationMethod::Shutdown) {
00601 hibernationCommand = "shutdown";
00602 }
00603 else if (hm == TDESystemHibernationMethod::Reboot) {
00604 hibernationCommand = "reboot";
00605 }
00606 else if (hm == TDESystemHibernationMethod::TestProc) {
00607 hibernationCommand = "testproc";
00608 }
00609 else if (hm == TDESystemHibernationMethod::Test) {
00610 hibernationCommand = "test";
00611 }
00612 else if (hm == TDESystemHibernationMethod::Suspend) {
00613 hibernationCommand = "suspend";
00614 }
00615 TQTextStream stream( &file );
00616 stream << hibernationCommand;
00617 file.close();
00618 return;
00619 }
00620
00621 #ifdef WITH_TDEHWLIB_DAEMONS
00622 {
00623 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00624 if (dbusConn.isConnected()) {
00625 TQT_DBusProxy hardwareControl("org.trinitydesktop.hardwarecontrol", "/org/trinitydesktop/hardwarecontrol", "org.trinitydesktop.hardwarecontrol.Power", dbusConn);
00626 if (hardwareControl.canSend()) {
00627
00628 TQValueList<TQT_DBusData> params;
00629 TQString hibernationCommand;
00630 if (hm == TDESystemHibernationMethod::Platform) {
00631 hibernationCommand = "platform";
00632 }
00633 else if (hm == TDESystemHibernationMethod::Shutdown) {
00634 hibernationCommand = "shutdown";
00635 }
00636 else if (hm == TDESystemHibernationMethod::Reboot) {
00637 hibernationCommand = "reboot";
00638 }
00639 else if (hm == TDESystemHibernationMethod::TestProc) {
00640 hibernationCommand = "testproc";
00641 }
00642 else if (hm == TDESystemHibernationMethod::Test) {
00643 hibernationCommand = "test";
00644 }
00645 else if (hm == TDESystemHibernationMethod::Suspend) {
00646 hibernationCommand = "suspend";
00647 }
00648 params << TQT_DBusData::fromString(hibernationCommand);
00649 TQT_DBusMessage reply = hardwareControl.sendWithReply("SetHibernationMethod", params);
00650 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00651 return;
00652 }
00653 }
00654 }
00655 }
00656 #endif // WITH_TDEHWLIB_DAEMONS
00657
00658 }
00659
00660 bool TDERootSystemDevice::setPowerState(TDESystemPowerState::TDESystemPowerState ps) {
00661 if ((ps == TDESystemPowerState::Freeze) || (ps == TDESystemPowerState::Standby) ||
00662 (ps == TDESystemPowerState::Suspend) || (ps == TDESystemPowerState::Hibernate) ||
00663 (ps == TDESystemPowerState::HybridSuspend)) {
00664 TQString statenode = "/sys/power/state";
00665 TQString disknode = "/sys/power/disk";
00666 TQFile statefile( statenode );
00667 TQFile diskfile( disknode );
00668 if ( statefile.open( IO_WriteOnly ) &&
00669 ((ps != TDESystemPowerState::Hibernate && ps != TDESystemPowerState::HybridSuspend) ||
00670 diskfile.open( IO_WriteOnly )) ) {
00671 TQString powerCommand;
00672 if (ps == TDESystemPowerState::Freeze) {
00673 powerCommand = "freeze";
00674 }
00675 else if (ps == TDESystemPowerState::Standby) {
00676 powerCommand = "standby";
00677 }
00678 else if (ps == TDESystemPowerState::Suspend) {
00679 powerCommand = "mem";
00680 }
00681 else if (ps == TDESystemPowerState::Hibernate) {
00682 powerCommand = "disk";
00683 TQTextStream diskstream( &diskfile );
00684 diskstream << "platform";
00685 diskfile.close();
00686 }
00687 else if (ps == TDESystemPowerState::HybridSuspend) {
00688 powerCommand = "disk";
00689 TQTextStream diskstream( &diskfile );
00690 diskstream << "suspend";
00691 diskfile.close();
00692 }
00693 TQTextStream statestream( &statefile );
00694 statestream << powerCommand;
00695 statefile.close();
00696 return true;
00697 }
00698
00699 #ifdef WITH_LOGINDPOWER
00700 {
00701
00702 TQT_DBusConnection dbusConn;
00703 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00704 if ( dbusConn.isConnected() ) {
00705 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00706 "org.freedesktop.login1.Manager", dbusConn);
00707 TQValueList<TQT_DBusData> params;
00708 params << TQT_DBusData::fromBool(true);
00709 if (logindProxy.canSend()) {
00710 if (ps == TDESystemPowerState::Suspend) {
00711 TQT_DBusMessage reply = logindProxy.sendWithReply("Suspend", params);
00712 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00713 return true;
00714 }
00715 }
00716 else if (ps == TDESystemPowerState::Hibernate) {
00717 TQT_DBusMessage reply = logindProxy.sendWithReply("Hibernate", params);
00718 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00719 return true;
00720 }
00721 }
00722 else if (ps == TDESystemPowerState::HybridSuspend) {
00723 TQT_DBusMessage reply = logindProxy.sendWithReply("HybridSleep", params);
00724 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00725 return true;
00726 }
00727 }
00728 }
00729 }
00730 }
00731 #endif // WITH_LOGINDPOWER
00732
00733 #ifdef WITH_UPOWER
00734 {
00735
00736 TQT_DBusConnection dbusConn;
00737 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00738 if ( dbusConn.isConnected() ) {
00739 if (ps == TDESystemPowerState::Suspend) {
00740 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00741 "org.freedesktop.UPower",
00742 "/org/freedesktop/UPower",
00743 "org.freedesktop.UPower",
00744 "Suspend");
00745 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00746 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00747 return true;
00748 }
00749 }
00750 else if (ps == TDESystemPowerState::Hibernate) {
00751 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00752 "org.freedesktop.UPower",
00753 "/org/freedesktop/UPower",
00754 "org.freedesktop.UPower",
00755 "Hibernate");
00756 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00757 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00758 return true;
00759 }
00760 }
00761 }
00762 }
00763 #endif // WITH_UPOWER
00764
00765 #ifdef WITH_DEVKITPOWER
00766 {
00767
00768 TQT_DBusConnection dbusConn;
00769 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00770 if ( dbusConn.isConnected() ) {
00771 if (ps == TDESystemPowerState::Suspend) {
00772 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00773 "org.freedesktop.DeviceKit.Power",
00774 "/org/freedesktop/DeviceKit/Power",
00775 "org.freedesktop.DeviceKit.Power",
00776 "Suspend");
00777 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00778 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00779 return true;
00780 }
00781 }
00782 else if (ps == TDESystemPowerState::Hibernate) {
00783 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00784 "org.freedesktop.DeviceKit.Power",
00785 "/org/freedesktop/DeviceKit/Power",
00786 "org.freedesktop.DeviceKit.Power",
00787 "Hibernate");
00788 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00789 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00790 return true;
00791 }
00792 }
00793 }
00794 }
00795 #endif // WITH_DEVKITPOWER
00796
00797 #ifdef WITH_HAL
00798 {
00799
00800 TQT_DBusConnection dbusConn;
00801 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00802 if ( dbusConn.isConnected() ) {
00803 if (ps == TDESystemPowerState::Suspend) {
00804 TQT_DBusProxy halPowerManagement(
00805 "org.freedesktop.Hal",
00806 "/org/freedesktop/Hal/devices/computer",
00807 "org.freedesktop.Hal.Device.SystemPowerManagement",
00808 dbusConn);
00809 TQValueList<TQT_DBusData> params;
00810 params << TQT_DBusData::fromInt32(0);
00811 TQT_DBusMessage reply = halPowerManagement.sendWithReply("Suspend", params);
00812 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00813 return true;
00814 }
00815 }
00816 else if (ps == TDESystemPowerState::Hibernate) {
00817 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00818 "org.freedesktop.Hal",
00819 "/org/freedesktop/Hal/devices/computer",
00820 "org.freedesktop.Hal.Device.SystemPowerManagement",
00821 "Hibernate");
00822 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00823 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00824 return true;
00825 }
00826 }
00827 else if (ps == TDESystemPowerState::HybridSuspend) {
00828 TQT_DBusProxy halPowerManagement(
00829 "org.freedesktop.Hal",
00830 "/org/freedesktop/Hal/devices/computer",
00831 "org.freedesktop.Hal.Device.SystemPowerManagement",
00832 dbusConn);
00833 TQValueList<TQT_DBusData> params;
00834 params << TQT_DBusData::fromInt32(0);
00835 TQT_DBusMessage reply = halPowerManagement.sendWithReply("SuspendHybrid", params);
00836 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00837 return true;
00838 }
00839 }
00840 }
00841 }
00842 #endif // WITH_HAL
00843
00844 #ifdef WITH_TDEHWLIB_DAEMONS
00845 {
00846 TQT_DBusConnection dbusConn;
00847 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00848 if ( dbusConn.isConnected() ) {
00849 if (ps == TDESystemPowerState::Standby) {
00850 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00851 "org.trinitydesktop.hardwarecontrol",
00852 "/org/trinitydesktop/hardwarecontrol",
00853 "org.trinitydesktop.hardwarecontrol.Power",
00854 "Standby");
00855 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00856 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00857 return true;
00858 }
00859 }
00860 else if (ps == TDESystemPowerState::Freeze) {
00861 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00862 "org.trinitydesktop.hardwarecontrol",
00863 "/org/trinitydesktop/hardwarecontrol",
00864 "org.trinitydesktop.hardwarecontrol.Power",
00865 "Freeze");
00866 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00867 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00868 return true;
00869 }
00870 }
00871 else if (ps == TDESystemPowerState::Suspend) {
00872 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00873 "org.trinitydesktop.hardwarecontrol",
00874 "/org/trinitydesktop/hardwarecontrol",
00875 "org.trinitydesktop.hardwarecontrol.Power",
00876 "Suspend");
00877 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00878 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00879 return true;
00880 }
00881 }
00882 else if (ps == TDESystemPowerState::Hibernate) {
00883 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00884 "org.trinitydesktop.hardwarecontrol",
00885 "/org/trinitydesktop/hardwarecontrol",
00886 "org.trinitydesktop.hardwarecontrol.Power",
00887 "Hibernate");
00888 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00889 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00890 return true;
00891 }
00892 }
00893 else if (ps == TDESystemPowerState::HybridSuspend) {
00894 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00895 "org.trinitydesktop.hardwarecontrol",
00896 "/org/trinitydesktop/hardwarecontrol",
00897 "org.trinitydesktop.hardwarecontrol.Power",
00898 "HybridSuspend");
00899 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00900 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00901 return true;
00902 }
00903 }
00904 }
00905 }
00906 #endif // WITH_TDEHWLIB_DAEMONS
00907
00908 return false;
00909 }
00910 else if (ps == TDESystemPowerState::PowerOff) {
00911 TDEConfig config("ksmserverrc", true);
00912 config.setGroup("General" );
00913 if (!config.readBoolEntry( "offerShutdown", true )) {
00914 return false;
00915 }
00916 #ifdef WITH_LOGINDPOWER
00917 {
00918 TQT_DBusConnection dbusConn;
00919 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00920 if ( dbusConn.isConnected() ) {
00921 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00922 "org.freedesktop.login1.Manager", dbusConn);
00923 TQValueList<TQT_DBusData> params;
00924 params << TQT_DBusData::fromBool(true);
00925 if (logindProxy.canSend()) {
00926 TQT_DBusMessage reply = logindProxy.sendWithReply("PowerOff", params);
00927 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00928 return true;
00929 }
00930 }
00931 }
00932 }
00933 #endif // WITH_LOGINDPOWER
00934 #ifdef WITH_CONSOLEKIT
00935 {
00936 TQT_DBusConnection dbusConn;
00937 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00938 if ( dbusConn.isConnected() ) {
00939 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
00940 "org.freedesktop.ConsoleKit",
00941 "/org/freedesktop/ConsoleKit/Manager",
00942 "org.freedesktop.ConsoleKit.Manager",
00943 "Stop");
00944 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
00945 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00946 return true;
00947 }
00948 }
00949 }
00950 #endif // WITH_CONSOLEKIT
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969
00970 TQByteArray data;
00971 TQDataStream arg(data, IO_WriteOnly);
00972 arg << (int)0 << (int)2 << (int)2;
00973 if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
00974 return true;
00975 }
00976 return false;
00977 }
00978 else if (ps == TDESystemPowerState::Reboot) {
00979 TDEConfig config("ksmserverrc", true);
00980 config.setGroup("General" );
00981 if (!config.readBoolEntry( "offerShutdown", true )) {
00982 return false;
00983 }
00984 #ifdef WITH_LOGINDPOWER
00985 {
00986 TQT_DBusConnection dbusConn;
00987 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
00988 if ( dbusConn.isConnected() ) {
00989 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
00990 "org.freedesktop.login1.Manager", dbusConn);
00991 TQValueList<TQT_DBusData> params;
00992 params << TQT_DBusData::fromBool(true);
00993 if (logindProxy.canSend()) {
00994 TQT_DBusMessage reply = logindProxy.sendWithReply("Reboot", params);
00995 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
00996 return true;
00997 }
00998 }
00999 }
01000 }
01001 #endif // WITH_LOGINDPOWER
01002 #ifdef WITH_CONSOLEKIT
01003 {
01004 TQT_DBusConnection dbusConn;
01005 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
01006 if ( dbusConn.isConnected() ) {
01007 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
01008 "org.freedesktop.ConsoleKit",
01009 "/org/freedesktop/ConsoleKit/Manager",
01010 "org.freedesktop.ConsoleKit.Manager",
01011 "Restart");
01012 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
01013 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
01014 return true;
01015 }
01016 }
01017 }
01018 #endif // WITH_CONSOLEKIT
01019
01020
01021 TQByteArray data;
01022 TQDataStream arg(data, IO_WriteOnly);
01023 arg << (int)0 << (int)1 << (int)2;
01024 if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
01025 return true;
01026 }
01027 return false;
01028 }
01029 else if (ps == TDESystemPowerState::Active) {
01030
01031 return true;
01032 }
01033
01034 return false;
01035 }
01036
01037 #include "tderootsystemdevice.moc"