• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdecore
 

tdecore

  • tdecore
  • tdehw
tderootsystemdevice.cpp
1/* This file is part of the TDE libraries
2 Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
3 (C) 2013 Golubev Alexander <fatzer2@gmail.com>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License version 2 as published by the Free Software Foundation.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19
20#include "tderootsystemdevice.h"
21#include "tdestoragedevice.h"
22
23#include <unistd.h>
24
25#include <tqfile.h>
26
27#include <dcopclient.h>
28#include "tdeglobal.h"
29#include "tdeconfig.h"
30#include "tdeapplication.h"
31#include "tdestandarddirs.h"
32
33#include "config.h"
34
35#if defined(WITH_TDEHWLIB_DAEMONS) || defined(WITH_UPOWER) || defined(WITH_DEVKITPOWER) || defined(WITH_CONSOLEKIT)
36 #include <tqdbusdata.h>
37 #include <tqdbusmessage.h>
38 #include <tqdbusproxy.h>
39 #include <tqdbusvariant.h>
40 #include <tqdbusconnection.h>
41#endif
42
43TDERootSystemDevice::TDERootSystemDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) {
44 m_hibernationSpace = -1;
45}
46
47TDERootSystemDevice::~TDERootSystemDevice() {
48}
49
50TDESystemFormFactor::TDESystemFormFactor TDERootSystemDevice::formFactor() {
51 return m_formFactor;
52}
53
54void TDERootSystemDevice::internalSetFormFactor(TDESystemFormFactor::TDESystemFormFactor ff) {
55 m_formFactor = ff;
56}
57
58TDESystemPowerStateList TDERootSystemDevice::powerStates() {
59 return m_powerStates;
60}
61
62void TDERootSystemDevice::internalSetPowerStates(TDESystemPowerStateList ps) {
63 m_powerStates = ps;
64}
65
66TDESystemHibernationMethodList TDERootSystemDevice::hibernationMethods() {
67 return m_hibernationMethods;
68}
69
70void TDERootSystemDevice::internalSetHibernationMethods(TDESystemHibernationMethodList hm) {
71 m_hibernationMethods = hm;
72}
73
74TDESystemHibernationMethod::TDESystemHibernationMethod TDERootSystemDevice::hibernationMethod() {
75 return m_hibernationMethod;
76}
77
78void TDERootSystemDevice::internalSetHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
79 m_hibernationMethod = hm;
80}
81
82unsigned long TDERootSystemDevice::diskSpaceNeededForHibernation() {
83 return m_hibernationSpace;
84}
85
86void TDERootSystemDevice::internalSetDiskSpaceNeededForHibernation(unsigned long sz) {
87 m_hibernationSpace = sz;
88}
89
90bool TDERootSystemDevice::canSetHibernationMethod() {
91 TQString hibernationnode = "/sys/power/disk";
92 int rval = access (hibernationnode.ascii(), W_OK);
93 if (rval == 0) {
94 return true;
95 }
96
97#ifdef WITH_TDEHWLIB_DAEMONS
98 {
99 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
100 if (dbusConn.isConnected()) {
101 // can set hibernation method?
102 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
103 "org.trinitydesktop.hardwarecontrol",
104 "/org/trinitydesktop/hardwarecontrol",
105 "org.trinitydesktop.hardwarecontrol.Power",
106 "CanSetHibernationMethod");
107 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
108 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
109 return reply[0].toBool();
110 }
111 }
112 }
113#endif // WITH_TDEHWLIB_DAEMONS
114
115 return false;
116}
117
118bool TDERootSystemDevice::canStandby() {
119 TQString statenode = "/sys/power/state";
120 int rval = access (statenode.ascii(), W_OK);
121 if (rval == 0) {
122 if (powerStates().contains(TDESystemPowerState::Standby)) {
123 return true;
124 }
125 else {
126 return false;
127 }
128 }
129
130#ifdef WITH_TDEHWLIB_DAEMONS
131 {
132 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
133 if (dbusConn.isConnected()) {
134 // can standby?
135 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
136 "org.trinitydesktop.hardwarecontrol",
137 "/org/trinitydesktop/hardwarecontrol",
138 "org.trinitydesktop.hardwarecontrol.Power",
139 "CanStandby");
140 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
141 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
142 return reply[0].toBool();
143 }
144 }
145 }
146#endif // WITH_TDEHWLIB_DAEMONS
147
148 return false;
149}
150
151bool TDERootSystemDevice::canFreeze() {
152 TQString statenode = "/sys/power/state";
153 int rval = access (statenode.ascii(), W_OK);
154 if (rval == 0) {
155 if (powerStates().contains(TDESystemPowerState::Freeze)) {
156 return true;
157 }
158 else {
159 return false;
160 }
161 }
162
163#ifdef WITH_TDEHWLIB_DAEMONS
164 {
165 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
166 if (dbusConn.isConnected()) {
167 // can freeze?
168 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
169 "org.trinitydesktop.hardwarecontrol",
170 "/org/trinitydesktop/hardwarecontrol",
171 "org.trinitydesktop.hardwarecontrol.Power",
172 "CanFreeze");
173 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
174 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
175 return reply[0].toBool();
176 }
177 }
178 }
179#endif // WITH_TDEHWLIB_DAEMONS
180
181 return false;
182}
183
184bool TDERootSystemDevice::canSuspend() {
185 TQString statenode = "/sys/power/state";
186 int rval = access (statenode.ascii(), W_OK);
187 if (rval == 0) {
188 if (powerStates().contains(TDESystemPowerState::Suspend)) {
189 return true;
190 }
191 else {
192 return false;
193 }
194 }
195
196#ifdef WITH_LOGINDPOWER
197 {
198 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
199 if (dbusConn.isConnected()) {
200 // can suspend?
201 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
202 "org.freedesktop.login1",
203 "/org/freedesktop/login1",
204 "org.freedesktop.login1.Manager",
205 "CanSuspend");
206 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
207 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
208 return (reply[0].toString() == "yes");
209 }
210 }
211 }
212#endif // WITH_LOGINDPOWER
213
214#ifdef WITH_UPOWER
215 {
216 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
217 if (dbusConn.isConnected()) {
218 TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
219 if (upowerProperties.canSend()) {
220 // can suspend?
221 TQValueList<TQT_DBusData> params;
222 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
223 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
224 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
225 return reply[0].toVariant().value.toBool();
226 }
227 }
228 }
229 }
230#endif// WITH_UPOWER
231
232#ifdef WITH_DEVKITPOWER
233 {
234 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
235 if (dbusConn.isConnected()) {
236 TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
237 if (devkitpowerProperties.canSend()) {
238 // can suspend?
239 TQValueList<TQT_DBusData> params;
240 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
241 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
242 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
243 return reply[0].toVariant().value.toBool();
244 }
245 }
246 }
247 }
248#endif// WITH_DEVKITPOWER
249
250#ifdef WITH_TDEHWLIB_DAEMONS
251 {
252 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
253 if (dbusConn.isConnected()) {
254 // can suspend?
255 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
256 "org.trinitydesktop.hardwarecontrol",
257 "/org/trinitydesktop/hardwarecontrol",
258 "org.trinitydesktop.hardwarecontrol.Power",
259 "CanSuspend");
260 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
261 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
262 return reply[0].toBool();
263 }
264 }
265 }
266#endif // WITH_TDEHWLIB_DAEMONS
267
268 return false;
269}
270
271bool TDERootSystemDevice::canHibernate() {
272 TQString statenode = "/sys/power/state";
273 TQString disknode = "/sys/power/disk";
274 int state_rval = access (statenode.ascii(), W_OK);
275 int disk_rval = access (disknode.ascii(), W_OK);
276 if (state_rval == 0 && disk_rval == 0) {
277 if (powerStates().contains(TDESystemPowerState::Hibernate)) {
278 return true;
279 }
280 else {
281 return false;
282 }
283 }
284
285#ifdef WITH_LOGINDPOWER
286 {
287 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
288 if (dbusConn.isConnected()) {
289 // can hibernate?
290 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
291 "org.freedesktop.login1",
292 "/org/freedesktop/login1",
293 "org.freedesktop.login1.Manager",
294 "CanHibernate");
295 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
296 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
297 return (reply[0].toString() == "yes");
298 }
299 }
300 }
301#endif // WITH_LOGINDPOWER
302
303#ifdef WITH_UPOWER
304 {
305 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
306 if (dbusConn.isConnected()) {
307 TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
308 if (upowerProperties.canSend()) {
309 // can hibernate?
310 TQValueList<TQT_DBusData> params;
311 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
312 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
313 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
314 return reply[0].toVariant().value.toBool();
315 }
316 }
317 }
318 }
319#endif// WITH_UPOWER
320
321#ifdef WITH_DEVKITPOWER
322 {
323 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
324 if (dbusConn.isConnected()) {
325 TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
326 if (devkitpowerProperties.canSend()) {
327 // can hibernate?
328 TQValueList<TQT_DBusData> params;
329 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
330 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
331 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
332 return reply[0].toVariant().value.toBool();
333 }
334 }
335 }
336 }
337#endif// WITH_DEVKITPOWER
338
339#ifdef WITH_TDEHWLIB_DAEMONS
340 {
341 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
342 if (dbusConn.isConnected()) {
343 // can hibernate?
344 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
345 "org.trinitydesktop.hardwarecontrol",
346 "/org/trinitydesktop/hardwarecontrol",
347 "org.trinitydesktop.hardwarecontrol.Power",
348 "CanHibernate");
349 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
350 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
351 return reply[0].toBool();
352 }
353 }
354 }
355#endif // WITH_TDEHWLIB_DAEMONS
356
357 return false;
358}
359
360bool TDERootSystemDevice::canHybridSuspend() {
361 TQString statenode = "/sys/power/state";
362 TQString disknode = "/sys/power/disk";
363 int state_rval = access (statenode.ascii(), W_OK);
364 int disk_rval = access (disknode.ascii(), W_OK);
365 if (state_rval == 0 && disk_rval == 0) {
366 if (powerStates().contains(TDESystemPowerState::HybridSuspend)) {
367 return true;
368 }
369 else {
370 return false;
371 }
372 }
373
374#ifdef WITH_LOGINDPOWER
375 {
376 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
377 if (dbusConn.isConnected()) {
378 // can hybrid suspend?
379 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
380 "org.freedesktop.login1",
381 "/org/freedesktop/login1",
382 "org.freedesktop.login1.Manager",
383 "CanHybridSleep");
384 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
385 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
386 return (reply[0].toString() == "yes");
387 }
388 }
389 }
390#endif // WITH_LOGINDPOWER
391
392 // No support "hybrid suspend" in org.freedesktop.UPower
393 // No support "hybrid suspend" in org.freedesktop.DeviceKit.Power
394
395#ifdef WITH_TDEHWLIB_DAEMONS
396 {
397 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
398 if (dbusConn.isConnected()) {
399 // can hybrid suspend?
400 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
401 "org.trinitydesktop.hardwarecontrol",
402 "/org/trinitydesktop/hardwarecontrol",
403 "org.trinitydesktop.hardwarecontrol.Power",
404 "CanHybridSuspend");
405 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
406 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
407 return reply[0].toBool();
408 }
409 }
410 }
411#endif // WITH_TDEHWLIB_DAEMONS
412
413 return false;
414}
415
416bool TDERootSystemDevice::canPowerOff() {
417 TDEConfig config("ksmserverrc", true);
418 config.setGroup("General" );
419 if (!config.readBoolEntry( "offerShutdown", true )) {
420 return false;
421 }
422
423#ifdef WITH_LOGINDPOWER
424 {
425 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
426 if (dbusConn.isConnected()) {
427 // can power off?
428 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
429 "org.freedesktop.login1",
430 "/org/freedesktop/login1",
431 "org.freedesktop.login1.Manager",
432 "CanPowerOff");
433 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
434 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
435 return (reply[0].toString() == "yes");
436 }
437 }
438 }
439#endif // WITH_LOGINDPOWER
440
441#ifdef WITH_CONSOLEKIT
442 {
443 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
444 if (dbusConn.isConnected()) {
445 // can power off?
446 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
447 "org.freedesktop.ConsoleKit",
448 "/org/freedesktop/ConsoleKit/Manager",
449 "org.freedesktop.ConsoleKit.Manager",
450 "CanStop");
451 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
452 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
453 return reply[0].toBool();
454 }
455 }
456 }
457#endif // WITH_CONSOLEKIT
458
459 // FIXME
460 // Can we power down this system?
461 // This should probably be checked via DCOP and therefore interface with TDM
462 // if ( DM().canShutdown() ) {
463 // return true;
464 // }
465 return true;
466}
467
468bool TDERootSystemDevice::canReboot() {
469 TDEConfig config("ksmserverrc", true);
470 config.setGroup("General" );
471 if (!config.readBoolEntry( "offerShutdown", true )) {
472 return false;
473 }
474
475#ifdef WITH_LOGINDPOWER
476 {
477 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
478 if (dbusConn.isConnected()) {
479 // can reboot?
480 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
481 "org.freedesktop.login1",
482 "/org/freedesktop/login1",
483 "org.freedesktop.login1.Manager",
484 "CanReboot");
485 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
486 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
487 return (reply[0].toString() == "yes");
488 }
489 }
490 }
491#endif // WITH_LOGINDPOWER
492
493#ifdef WITH_CONSOLEKIT
494 {
495 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
496 if (dbusConn.isConnected()) {
497 // can reboot?
498 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
499 "org.freedesktop.ConsoleKit",
500 "/org/freedesktop/ConsoleKit/Manager",
501 "org.freedesktop.ConsoleKit.Manager",
502 "CanRestart");
503 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
504 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
505 return reply[0].toBool();
506 }
507 }
508 }
509#endif // WITH_CONSOLEKIT
510
511 // FIXME
512 // Can we power down this system?
513 // This should probably be checked via DCOP and therefore interface with TDM
514 // if ( DM().canShutdown() ) {
515 // return true;
516 // }
517 return true;
518}
519
520void TDERootSystemDevice::setHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
521 TQString hibernationnode = "/sys/power/disk";
522 TQFile file( hibernationnode );
523 if ( file.open( IO_WriteOnly ) ) {
524 TQString hibernationCommand;
525 if (hm == TDESystemHibernationMethod::Platform) {
526 hibernationCommand = "platform";
527 }
528 else if (hm == TDESystemHibernationMethod::Shutdown) {
529 hibernationCommand = "shutdown";
530 }
531 else if (hm == TDESystemHibernationMethod::Reboot) {
532 hibernationCommand = "reboot";
533 }
534 else if (hm == TDESystemHibernationMethod::TestProc) {
535 hibernationCommand = "testproc";
536 }
537 else if (hm == TDESystemHibernationMethod::Test) {
538 hibernationCommand = "test";
539 }
540 else if (hm == TDESystemHibernationMethod::Suspend) {
541 hibernationCommand = "suspend";
542 }
543 TQTextStream stream( &file );
544 stream << hibernationCommand;
545 file.close();
546 return;
547 }
548
549#ifdef WITH_TDEHWLIB_DAEMONS
550 {
551 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
552 if (dbusConn.isConnected()) {
553 TQT_DBusProxy hardwareControl("org.trinitydesktop.hardwarecontrol", "/org/trinitydesktop/hardwarecontrol", "org.trinitydesktop.hardwarecontrol.Power", dbusConn);
554 if (hardwareControl.canSend()) {
555 // set hibernation method
556 TQValueList<TQT_DBusData> params;
557 TQString hibernationCommand;
558 if (hm == TDESystemHibernationMethod::Platform) {
559 hibernationCommand = "platform";
560 }
561 else if (hm == TDESystemHibernationMethod::Shutdown) {
562 hibernationCommand = "shutdown";
563 }
564 else if (hm == TDESystemHibernationMethod::Reboot) {
565 hibernationCommand = "reboot";
566 }
567 else if (hm == TDESystemHibernationMethod::TestProc) {
568 hibernationCommand = "testproc";
569 }
570 else if (hm == TDESystemHibernationMethod::Test) {
571 hibernationCommand = "test";
572 }
573 else if (hm == TDESystemHibernationMethod::Suspend) {
574 hibernationCommand = "suspend";
575 }
576 params << TQT_DBusData::fromString(hibernationCommand);
577 TQT_DBusMessage reply = hardwareControl.sendWithReply("SetHibernationMethod", params);
578 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
579 return;
580 }
581 }
582 }
583 }
584#endif // WITH_TDEHWLIB_DAEMONS
585
586}
587
588bool TDERootSystemDevice::setPowerState(TDESystemPowerState::TDESystemPowerState ps) {
589 if ((ps == TDESystemPowerState::Freeze) || (ps == TDESystemPowerState::Standby) ||
590 (ps == TDESystemPowerState::Suspend) || (ps == TDESystemPowerState::Hibernate) ||
591 (ps == TDESystemPowerState::HybridSuspend)) {
592 TQString statenode = "/sys/power/state";
593 TQString disknode = "/sys/power/disk";
594 TQFile statefile( statenode );
595 TQFile diskfile( disknode );
596 if ( statefile.open( IO_WriteOnly ) &&
597 ((ps != TDESystemPowerState::Hibernate && ps != TDESystemPowerState::HybridSuspend) ||
598 diskfile.open( IO_WriteOnly )) ) {
599 TQString powerCommand;
600 if (ps == TDESystemPowerState::Freeze) {
601 powerCommand = "freeze";
602 }
603 else if (ps == TDESystemPowerState::Standby) {
604 powerCommand = "standby";
605 }
606 else if (ps == TDESystemPowerState::Suspend) {
607 powerCommand = "mem";
608 }
609 else if (ps == TDESystemPowerState::Hibernate) {
610 powerCommand = "disk";
611 TQTextStream diskstream( &diskfile );
612 diskstream << "platform";
613 diskfile.close();
614 }
615 else if (ps == TDESystemPowerState::HybridSuspend) {
616 powerCommand = "disk";
617 TQTextStream diskstream( &diskfile );
618 diskstream << "suspend";
619 diskfile.close();
620 }
621 TQTextStream statestream( &statefile );
622 statestream << powerCommand;
623 statefile.close();
624 return true;
625 }
626
627#ifdef WITH_LOGINDPOWER
628 {
629 // No support for "freeze" and "standby" in org.freedesktop.login1
630 TQT_DBusConnection dbusConn;
631 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
632 if ( dbusConn.isConnected() ) {
633 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
634 "org.freedesktop.login1.Manager", dbusConn);
635 TQValueList<TQT_DBusData> params;
636 params << TQT_DBusData::fromBool(true);
637 if (logindProxy.canSend()) {
638 if (ps == TDESystemPowerState::Suspend) {
639 TQT_DBusMessage reply = logindProxy.sendWithReply("Suspend", params);
640 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
641 return true;
642 }
643 }
644 else if (ps == TDESystemPowerState::Hibernate) {
645 TQT_DBusMessage reply = logindProxy.sendWithReply("Hibernate", params);
646 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
647 return true;
648 }
649 }
650 else if (ps == TDESystemPowerState::HybridSuspend) {
651 TQT_DBusMessage reply = logindProxy.sendWithReply("HybridSleep", params);
652 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
653 return true;
654 }
655 }
656 }
657 }
658 }
659#endif // WITH_LOGINDPOWER
660
661#ifdef WITH_UPOWER
662 {
663 // No support for "freeze" and "hybrid suspend" in org.freedesktop.UPower
664 TQT_DBusConnection dbusConn;
665 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
666 if ( dbusConn.isConnected() ) {
667 if (ps == TDESystemPowerState::Suspend) {
668 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
669 "org.freedesktop.UPower",
670 "/org/freedesktop/UPower",
671 "org.freedesktop.UPower",
672 "Suspend");
673 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
674 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
675 return true;
676 }
677 }
678 else if (ps == TDESystemPowerState::Hibernate) {
679 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
680 "org.freedesktop.UPower",
681 "/org/freedesktop/UPower",
682 "org.freedesktop.UPower",
683 "Hibernate");
684 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
685 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
686 return true;
687 }
688 }
689 }
690 }
691#endif // WITH_UPOWER
692
693#ifdef WITH_DEVKITPOWER
694 {
695 // No support for "freeze" and "hybrid suspend" in org.freedesktop.DeviceKit.Power
696 TQT_DBusConnection dbusConn;
697 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
698 if ( dbusConn.isConnected() ) {
699 if (ps == TDESystemPowerState::Suspend) {
700 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
701 "org.freedesktop.DeviceKit.Power",
702 "/org/freedesktop/DeviceKit/Power",
703 "org.freedesktop.DeviceKit.Power",
704 "Suspend");
705 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
706 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
707 return true;
708 }
709 }
710 else if (ps == TDESystemPowerState::Hibernate) {
711 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
712 "org.freedesktop.DeviceKit.Power",
713 "/org/freedesktop/DeviceKit/Power",
714 "org.freedesktop.DeviceKit.Power",
715 "Hibernate");
716 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
717 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
718 return true;
719 }
720 }
721 }
722 }
723#endif // WITH_DEVKITPOWER
724
725#ifdef WITH_TDEHWLIB_DAEMONS
726 {
727 TQT_DBusConnection dbusConn;
728 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
729 if ( dbusConn.isConnected() ) {
730 if (ps == TDESystemPowerState::Standby) {
731 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
732 "org.trinitydesktop.hardwarecontrol",
733 "/org/trinitydesktop/hardwarecontrol",
734 "org.trinitydesktop.hardwarecontrol.Power",
735 "Standby");
736 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
737 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
738 return true;
739 }
740 }
741 else if (ps == TDESystemPowerState::Freeze) {
742 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
743 "org.trinitydesktop.hardwarecontrol",
744 "/org/trinitydesktop/hardwarecontrol",
745 "org.trinitydesktop.hardwarecontrol.Power",
746 "Freeze");
747 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
748 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
749 return true;
750 }
751 }
752 else if (ps == TDESystemPowerState::Suspend) {
753 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
754 "org.trinitydesktop.hardwarecontrol",
755 "/org/trinitydesktop/hardwarecontrol",
756 "org.trinitydesktop.hardwarecontrol.Power",
757 "Suspend");
758 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
759 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
760 return true;
761 }
762 }
763 else if (ps == TDESystemPowerState::Hibernate) {
764 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
765 "org.trinitydesktop.hardwarecontrol",
766 "/org/trinitydesktop/hardwarecontrol",
767 "org.trinitydesktop.hardwarecontrol.Power",
768 "Hibernate");
769 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
770 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
771 return true;
772 }
773 }
774 else if (ps == TDESystemPowerState::HybridSuspend) {
775 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
776 "org.trinitydesktop.hardwarecontrol",
777 "/org/trinitydesktop/hardwarecontrol",
778 "org.trinitydesktop.hardwarecontrol.Power",
779 "HybridSuspend");
780 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
781 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
782 return true;
783 }
784 }
785 }
786 }
787#endif // WITH_TDEHWLIB_DAEMONS
788
789 return false;
790 }
791 else if (ps == TDESystemPowerState::PowerOff) {
792 TDEConfig config("ksmserverrc", true);
793 config.setGroup("General" );
794 if (!config.readBoolEntry( "offerShutdown", true )) {
795 return false;
796 }
797#ifdef WITH_LOGINDPOWER
798 {
799 TQT_DBusConnection dbusConn;
800 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
801 if ( dbusConn.isConnected() ) {
802 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
803 "org.freedesktop.login1.Manager", dbusConn);
804 TQValueList<TQT_DBusData> params;
805 params << TQT_DBusData::fromBool(true);
806 if (logindProxy.canSend()) {
807 TQT_DBusMessage reply = logindProxy.sendWithReply("PowerOff", params);
808 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
809 return true;
810 }
811 }
812 }
813 }
814#endif // WITH_LOGINDPOWER
815#ifdef WITH_CONSOLEKIT
816 {
817 TQT_DBusConnection dbusConn;
818 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
819 if ( dbusConn.isConnected() ) {
820 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
821 "org.freedesktop.ConsoleKit",
822 "/org/freedesktop/ConsoleKit/Manager",
823 "org.freedesktop.ConsoleKit.Manager",
824 "Stop");
825 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
826 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
827 return true;
828 }
829 }
830 }
831#endif // WITH_CONSOLEKIT
832 // Power down the system using a DCOP command
833 /* As found at http://lists.kde.org/?l=kde-linux&m=115770988603387
834 Logout parameters explanation:
835 First parameter: confirm
836 Obey the user's confirmation setting: -1
837 Don't confirm, shutdown without asking: 0
838 Always confirm, ask even if the user turned it off: 1
839 Second parameter: type
840 Select previous action or the default if it's the first time: -1
841 Only log out: 0
842 Log out and reboot the machine: 1
843 Log out and halt the machine: 2
844 Third parameter: mode
845 Select previous mode or the default if it's the first time: -1
846 Schedule a shutdown (halt or reboot) for the time all active sessions have exited: 0
847 Shut down, if no sessions are active. Otherwise do nothing: 1
848 Force shutdown. Kill any possibly active sessions: 2
849 Pop up a dialog asking the user what to do if sessions are still active: 3
850 */
851 TQByteArray data;
852 TQDataStream arg(data, IO_WriteOnly);
853 arg << (int)0 << (int)2 << (int)2;
854 if ( tdeApp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
855 return true;
856 }
857 return false;
858 }
859 else if (ps == TDESystemPowerState::Reboot) {
860 TDEConfig config("ksmserverrc", true);
861 config.setGroup("General" );
862 if (!config.readBoolEntry( "offerShutdown", true )) {
863 return false;
864 }
865#ifdef WITH_LOGINDPOWER
866 {
867 TQT_DBusConnection dbusConn;
868 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
869 if ( dbusConn.isConnected() ) {
870 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
871 "org.freedesktop.login1.Manager", dbusConn);
872 TQValueList<TQT_DBusData> params;
873 params << TQT_DBusData::fromBool(true);
874 if (logindProxy.canSend()) {
875 TQT_DBusMessage reply = logindProxy.sendWithReply("Reboot", params);
876 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
877 return true;
878 }
879 }
880 }
881 }
882#endif // WITH_LOGINDPOWER
883#ifdef WITH_CONSOLEKIT
884 {
885 TQT_DBusConnection dbusConn;
886 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
887 if ( dbusConn.isConnected() ) {
888 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
889 "org.freedesktop.ConsoleKit",
890 "/org/freedesktop/ConsoleKit/Manager",
891 "org.freedesktop.ConsoleKit.Manager",
892 "Restart");
893 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
894 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
895 return true;
896 }
897 }
898 }
899#endif // WITH_CONSOLEKIT
900 // Power down the system using a DCOP command
901 // See above PowerOff section for logout() parameters explanation
902 TQByteArray data;
903 TQDataStream arg(data, IO_WriteOnly);
904 arg << (int)0 << (int)1 << (int)2;
905 if ( tdeApp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
906 return true;
907 }
908 return false;
909 }
910 else if (ps == TDESystemPowerState::Active) {
911 // Ummm...we're already active...
912 return true;
913 }
914
915 return false;
916}
917
918#include "tderootsystemdevice.moc"
TDEConfig
Access KDE Configuration entries.
Definition: tdeconfig.h:44

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.9.4
This website is maintained by Timothy Pearson.