• 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 "kstandarddirs.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 int rval1 = access ("/var/lib/q4os/disable_can_freeze.stp", R_OK); //if file exists, globally disable freeze option
153 if( rval1 == 0 ) {
154 return false;
155 }
156
157 TQString statenode = "/sys/power/state";
158 int rval = access (statenode.ascii(), W_OK);
159 if (rval == 0) {
160 if (powerStates().contains(TDESystemPowerState::Freeze)) {
161 return true;
162 }
163 else {
164 return false;
165 }
166 }
167
168#ifdef WITH_TDEHWLIB_DAEMONS
169 {
170 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
171 if (dbusConn.isConnected()) {
172 // can freeze?
173 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
174 "org.trinitydesktop.hardwarecontrol",
175 "/org/trinitydesktop/hardwarecontrol",
176 "org.trinitydesktop.hardwarecontrol.Power",
177 "CanFreeze");
178 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
179 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
180 return reply[0].toBool();
181 }
182 }
183 }
184#endif // WITH_TDEHWLIB_DAEMONS
185
186 return false;
187}
188
189bool TDERootSystemDevice::canSuspend() {
190 TQString statenode = "/sys/power/state";
191 int rval = access (statenode.ascii(), W_OK);
192 if (rval == 0) {
193 if (powerStates().contains(TDESystemPowerState::Suspend)) {
194 return true;
195 }
196 else {
197 return false;
198 }
199 }
200
201#ifdef WITH_LOGINDPOWER
202 {
203 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
204 if (dbusConn.isConnected()) {
205 // can suspend?
206 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
207 "org.freedesktop.login1",
208 "/org/freedesktop/login1",
209 "org.freedesktop.login1.Manager",
210 "CanSuspend");
211 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
212 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
213 return (reply[0].toString() == "yes");
214 }
215 }
216 }
217#endif // WITH_LOGINDPOWER
218
219#ifdef WITH_UPOWER
220 {
221 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
222 if (dbusConn.isConnected()) {
223 TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
224 if (upowerProperties.canSend()) {
225 // can suspend?
226 TQValueList<TQT_DBusData> params;
227 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
228 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
229 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
230 return reply[0].toVariant().value.toBool();
231 }
232 }
233 }
234 }
235#endif// WITH_UPOWER
236
237#ifdef WITH_DEVKITPOWER
238 {
239 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
240 if (dbusConn.isConnected()) {
241 TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
242 if (devkitpowerProperties.canSend()) {
243 // can suspend?
244 TQValueList<TQT_DBusData> params;
245 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanSuspend");
246 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
247 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
248 return reply[0].toVariant().value.toBool();
249 }
250 }
251 }
252 }
253#endif// WITH_DEVKITPOWER
254
255#ifdef WITH_TDEHWLIB_DAEMONS
256 {
257 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
258 if (dbusConn.isConnected()) {
259 // can suspend?
260 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
261 "org.trinitydesktop.hardwarecontrol",
262 "/org/trinitydesktop/hardwarecontrol",
263 "org.trinitydesktop.hardwarecontrol.Power",
264 "CanSuspend");
265 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
266 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
267 return reply[0].toBool();
268 }
269 }
270 }
271#endif // WITH_TDEHWLIB_DAEMONS
272
273 return false;
274}
275
276bool TDERootSystemDevice::canHibernate() {
277 TQString statenode = "/sys/power/state";
278 TQString disknode = "/sys/power/disk";
279 int state_rval = access (statenode.ascii(), W_OK);
280 int disk_rval = access (disknode.ascii(), W_OK);
281 if (state_rval == 0 && disk_rval == 0) {
282 if (powerStates().contains(TDESystemPowerState::Hibernate)) {
283 return true;
284 }
285 else {
286 return false;
287 }
288 }
289
290#ifdef WITH_LOGINDPOWER
291 {
292 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
293 if (dbusConn.isConnected()) {
294 // can hibernate?
295 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
296 "org.freedesktop.login1",
297 "/org/freedesktop/login1",
298 "org.freedesktop.login1.Manager",
299 "CanHibernate");
300 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
301 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
302 return (reply[0].toString() == "yes");
303 }
304 }
305 }
306#endif // WITH_LOGINDPOWER
307
308#ifdef WITH_UPOWER
309 {
310 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
311 if (dbusConn.isConnected()) {
312 TQT_DBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", dbusConn);
313 if (upowerProperties.canSend()) {
314 // can hibernate?
315 TQValueList<TQT_DBusData> params;
316 params << TQT_DBusData::fromString(upowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
317 TQT_DBusMessage reply = upowerProperties.sendWithReply("Get", params);
318 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
319 return reply[0].toVariant().value.toBool();
320 }
321 }
322 }
323 }
324#endif// WITH_UPOWER
325
326#ifdef WITH_DEVKITPOWER
327 {
328 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
329 if (dbusConn.isConnected()) {
330 TQT_DBusProxy devkitpowerProperties("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DBus.Properties", dbusConn);
331 if (devkitpowerProperties.canSend()) {
332 // can hibernate?
333 TQValueList<TQT_DBusData> params;
334 params << TQT_DBusData::fromString(devkitpowerProperties.interface()) << TQT_DBusData::fromString("CanHibernate");
335 TQT_DBusMessage reply = devkitpowerProperties.sendWithReply("Get", params);
336 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
337 return reply[0].toVariant().value.toBool();
338 }
339 }
340 }
341 }
342#endif// WITH_DEVKITPOWER
343
344#ifdef WITH_TDEHWLIB_DAEMONS
345 {
346 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
347 if (dbusConn.isConnected()) {
348 // can hibernate?
349 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
350 "org.trinitydesktop.hardwarecontrol",
351 "/org/trinitydesktop/hardwarecontrol",
352 "org.trinitydesktop.hardwarecontrol.Power",
353 "CanHibernate");
354 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
355 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
356 return reply[0].toBool();
357 }
358 }
359 }
360#endif // WITH_TDEHWLIB_DAEMONS
361
362 return false;
363}
364
365bool TDERootSystemDevice::canHybridSuspend() {
366 TQString statenode = "/sys/power/state";
367 TQString disknode = "/sys/power/disk";
368 int state_rval = access (statenode.ascii(), W_OK);
369 int disk_rval = access (disknode.ascii(), W_OK);
370 if (state_rval == 0 && disk_rval == 0) {
371 if (powerStates().contains(TDESystemPowerState::HybridSuspend)) {
372 return true;
373 }
374 else {
375 return false;
376 }
377 }
378
379#ifdef WITH_LOGINDPOWER
380 {
381 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
382 if (dbusConn.isConnected()) {
383 // can hybrid suspend?
384 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
385 "org.freedesktop.login1",
386 "/org/freedesktop/login1",
387 "org.freedesktop.login1.Manager",
388 "CanHybridSleep");
389 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
390 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
391 return (reply[0].toString() == "yes");
392 }
393 }
394 }
395#endif // WITH_LOGINDPOWER
396
397 // No support "hybrid suspend" in org.freedesktop.UPower
398 // No support "hybrid suspend" in org.freedesktop.DeviceKit.Power
399
400#ifdef WITH_TDEHWLIB_DAEMONS
401 {
402 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
403 if (dbusConn.isConnected()) {
404 // can hybrid suspend?
405 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
406 "org.trinitydesktop.hardwarecontrol",
407 "/org/trinitydesktop/hardwarecontrol",
408 "org.trinitydesktop.hardwarecontrol.Power",
409 "CanHybridSuspend");
410 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
411 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
412 return reply[0].toBool();
413 }
414 }
415 }
416#endif // WITH_TDEHWLIB_DAEMONS
417
418 return false;
419}
420
421bool TDERootSystemDevice::canPowerOff() {
422 TDEConfig config("ksmserverrc", true);
423 config.setGroup("General" );
424 if (!config.readBoolEntry( "offerShutdown", true )) {
425 return false;
426 }
427
428#ifdef WITH_LOGINDPOWER
429 {
430 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
431 if (dbusConn.isConnected()) {
432 // can power off?
433 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
434 "org.freedesktop.login1",
435 "/org/freedesktop/login1",
436 "org.freedesktop.login1.Manager",
437 "CanPowerOff");
438 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
439 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
440 return (reply[0].toString() == "yes");
441 }
442 }
443 }
444#endif // WITH_LOGINDPOWER
445
446#ifdef WITH_CONSOLEKIT
447 {
448 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
449 if (dbusConn.isConnected()) {
450 // can power off?
451 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
452 "org.freedesktop.ConsoleKit",
453 "/org/freedesktop/ConsoleKit/Manager",
454 "org.freedesktop.ConsoleKit.Manager",
455 "CanStop");
456 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
457 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
458 return reply[0].toBool();
459 }
460 }
461 }
462#endif // WITH_CONSOLEKIT
463
464 // FIXME
465 // Can we power down this system?
466 // This should probably be checked via DCOP and therefore interface with TDM
467 // if ( DM().canShutdown() ) {
468 // return true;
469 // }
470 return true;
471}
472
473bool TDERootSystemDevice::canReboot() {
474 TDEConfig config("ksmserverrc", true);
475 config.setGroup("General" );
476 if (!config.readBoolEntry( "offerShutdown", true )) {
477 return false;
478 }
479
480#ifdef WITH_LOGINDPOWER
481 {
482 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
483 if (dbusConn.isConnected()) {
484 // can reboot?
485 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
486 "org.freedesktop.login1",
487 "/org/freedesktop/login1",
488 "org.freedesktop.login1.Manager",
489 "CanReboot");
490 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
491 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
492 return (reply[0].toString() == "yes");
493 }
494 }
495 }
496#endif // WITH_LOGINDPOWER
497
498#ifdef WITH_CONSOLEKIT
499 {
500 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
501 if (dbusConn.isConnected()) {
502 // can reboot?
503 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
504 "org.freedesktop.ConsoleKit",
505 "/org/freedesktop/ConsoleKit/Manager",
506 "org.freedesktop.ConsoleKit.Manager",
507 "CanRestart");
508 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
509 if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
510 return reply[0].toBool();
511 }
512 }
513 }
514#endif // WITH_CONSOLEKIT
515
516 // FIXME
517 // Can we power down this system?
518 // This should probably be checked via DCOP and therefore interface with TDM
519 // if ( DM().canShutdown() ) {
520 // return true;
521 // }
522 return true;
523}
524
525void TDERootSystemDevice::setHibernationMethod(TDESystemHibernationMethod::TDESystemHibernationMethod hm) {
526 TQString hibernationnode = "/sys/power/disk";
527 TQFile file( hibernationnode );
528 if ( file.open( IO_WriteOnly ) ) {
529 TQString hibernationCommand;
530 if (hm == TDESystemHibernationMethod::Platform) {
531 hibernationCommand = "platform";
532 }
533 else if (hm == TDESystemHibernationMethod::Shutdown) {
534 hibernationCommand = "shutdown";
535 }
536 else if (hm == TDESystemHibernationMethod::Reboot) {
537 hibernationCommand = "reboot";
538 }
539 else if (hm == TDESystemHibernationMethod::TestProc) {
540 hibernationCommand = "testproc";
541 }
542 else if (hm == TDESystemHibernationMethod::Test) {
543 hibernationCommand = "test";
544 }
545 else if (hm == TDESystemHibernationMethod::Suspend) {
546 hibernationCommand = "suspend";
547 }
548 TQTextStream stream( &file );
549 stream << hibernationCommand;
550 file.close();
551 return;
552 }
553
554#ifdef WITH_TDEHWLIB_DAEMONS
555 {
556 TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
557 if (dbusConn.isConnected()) {
558 TQT_DBusProxy hardwareControl("org.trinitydesktop.hardwarecontrol", "/org/trinitydesktop/hardwarecontrol", "org.trinitydesktop.hardwarecontrol.Power", dbusConn);
559 if (hardwareControl.canSend()) {
560 // set hibernation method
561 TQValueList<TQT_DBusData> params;
562 TQString hibernationCommand;
563 if (hm == TDESystemHibernationMethod::Platform) {
564 hibernationCommand = "platform";
565 }
566 else if (hm == TDESystemHibernationMethod::Shutdown) {
567 hibernationCommand = "shutdown";
568 }
569 else if (hm == TDESystemHibernationMethod::Reboot) {
570 hibernationCommand = "reboot";
571 }
572 else if (hm == TDESystemHibernationMethod::TestProc) {
573 hibernationCommand = "testproc";
574 }
575 else if (hm == TDESystemHibernationMethod::Test) {
576 hibernationCommand = "test";
577 }
578 else if (hm == TDESystemHibernationMethod::Suspend) {
579 hibernationCommand = "suspend";
580 }
581 params << TQT_DBusData::fromString(hibernationCommand);
582 TQT_DBusMessage reply = hardwareControl.sendWithReply("SetHibernationMethod", params);
583 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
584 return;
585 }
586 }
587 }
588 }
589#endif // WITH_TDEHWLIB_DAEMONS
590
591}
592
593bool TDERootSystemDevice::setPowerState(TDESystemPowerState::TDESystemPowerState ps) {
594 if ((ps == TDESystemPowerState::Freeze) || (ps == TDESystemPowerState::Standby) ||
595 (ps == TDESystemPowerState::Suspend) || (ps == TDESystemPowerState::Hibernate) ||
596 (ps == TDESystemPowerState::HybridSuspend)) {
597 TQString statenode = "/sys/power/state";
598 TQString disknode = "/sys/power/disk";
599 TQFile statefile( statenode );
600 TQFile diskfile( disknode );
601 if ( statefile.open( IO_WriteOnly ) &&
602 ((ps != TDESystemPowerState::Hibernate && ps != TDESystemPowerState::HybridSuspend) ||
603 diskfile.open( IO_WriteOnly )) ) {
604 TQString powerCommand;
605 if (ps == TDESystemPowerState::Freeze) {
606 powerCommand = "freeze";
607 }
608 else if (ps == TDESystemPowerState::Standby) {
609 powerCommand = "standby";
610 }
611 else if (ps == TDESystemPowerState::Suspend) {
612 powerCommand = "mem";
613 }
614 else if (ps == TDESystemPowerState::Hibernate) {
615 powerCommand = "disk";
616 TQTextStream diskstream( &diskfile );
617 diskstream << "platform";
618 diskfile.close();
619 }
620 else if (ps == TDESystemPowerState::HybridSuspend) {
621 powerCommand = "disk";
622 TQTextStream diskstream( &diskfile );
623 diskstream << "suspend";
624 diskfile.close();
625 }
626 TQTextStream statestream( &statefile );
627 statestream << powerCommand;
628 statefile.close();
629 return true;
630 }
631
632#ifdef WITH_LOGINDPOWER
633 {
634 // No support for "freeze" and "standby" in org.freedesktop.login1
635 TQT_DBusConnection dbusConn;
636 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
637 if ( dbusConn.isConnected() ) {
638 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
639 "org.freedesktop.login1.Manager", dbusConn);
640 TQValueList<TQT_DBusData> params;
641 params << TQT_DBusData::fromBool(true);
642 if (logindProxy.canSend()) {
643 if (ps == TDESystemPowerState::Suspend) {
644 TQT_DBusMessage reply = logindProxy.sendWithReply("Suspend", params);
645 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
646 return true;
647 }
648 }
649 else if (ps == TDESystemPowerState::Hibernate) {
650 TQT_DBusMessage reply = logindProxy.sendWithReply("Hibernate", params);
651 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
652 return true;
653 }
654 }
655 else if (ps == TDESystemPowerState::HybridSuspend) {
656 TQT_DBusMessage reply = logindProxy.sendWithReply("HybridSleep", params);
657 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
658 return true;
659 }
660 }
661 }
662 }
663 }
664#endif // WITH_LOGINDPOWER
665
666#ifdef WITH_UPOWER
667 {
668 // No support for "freeze" and "hybrid suspend" in org.freedesktop.UPower
669 TQT_DBusConnection dbusConn;
670 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
671 if ( dbusConn.isConnected() ) {
672 if (ps == TDESystemPowerState::Suspend) {
673 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
674 "org.freedesktop.UPower",
675 "/org/freedesktop/UPower",
676 "org.freedesktop.UPower",
677 "Suspend");
678 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
679 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
680 return true;
681 }
682 }
683 else if (ps == TDESystemPowerState::Hibernate) {
684 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
685 "org.freedesktop.UPower",
686 "/org/freedesktop/UPower",
687 "org.freedesktop.UPower",
688 "Hibernate");
689 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
690 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
691 return true;
692 }
693 }
694 }
695 }
696#endif // WITH_UPOWER
697
698#ifdef WITH_DEVKITPOWER
699 {
700 // No support for "freeze" and "hybrid suspend" in org.freedesktop.DeviceKit.Power
701 TQT_DBusConnection dbusConn;
702 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
703 if ( dbusConn.isConnected() ) {
704 if (ps == TDESystemPowerState::Suspend) {
705 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
706 "org.freedesktop.DeviceKit.Power",
707 "/org/freedesktop/DeviceKit/Power",
708 "org.freedesktop.DeviceKit.Power",
709 "Suspend");
710 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
711 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
712 return true;
713 }
714 }
715 else if (ps == TDESystemPowerState::Hibernate) {
716 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
717 "org.freedesktop.DeviceKit.Power",
718 "/org/freedesktop/DeviceKit/Power",
719 "org.freedesktop.DeviceKit.Power",
720 "Hibernate");
721 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
722 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
723 return true;
724 }
725 }
726 }
727 }
728#endif // WITH_DEVKITPOWER
729
730#ifdef WITH_TDEHWLIB_DAEMONS
731 {
732 TQT_DBusConnection dbusConn;
733 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
734 if ( dbusConn.isConnected() ) {
735 if (ps == TDESystemPowerState::Standby) {
736 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
737 "org.trinitydesktop.hardwarecontrol",
738 "/org/trinitydesktop/hardwarecontrol",
739 "org.trinitydesktop.hardwarecontrol.Power",
740 "Standby");
741 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
742 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
743 return true;
744 }
745 }
746 else if (ps == TDESystemPowerState::Freeze) {
747 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
748 "org.trinitydesktop.hardwarecontrol",
749 "/org/trinitydesktop/hardwarecontrol",
750 "org.trinitydesktop.hardwarecontrol.Power",
751 "Freeze");
752 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
753 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
754 return true;
755 }
756 }
757 else if (ps == TDESystemPowerState::Suspend) {
758 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
759 "org.trinitydesktop.hardwarecontrol",
760 "/org/trinitydesktop/hardwarecontrol",
761 "org.trinitydesktop.hardwarecontrol.Power",
762 "Suspend");
763 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
764 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
765 return true;
766 }
767 }
768 else if (ps == TDESystemPowerState::Hibernate) {
769 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
770 "org.trinitydesktop.hardwarecontrol",
771 "/org/trinitydesktop/hardwarecontrol",
772 "org.trinitydesktop.hardwarecontrol.Power",
773 "Hibernate");
774 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
775 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
776 return true;
777 }
778 }
779 else if (ps == TDESystemPowerState::HybridSuspend) {
780 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
781 "org.trinitydesktop.hardwarecontrol",
782 "/org/trinitydesktop/hardwarecontrol",
783 "org.trinitydesktop.hardwarecontrol.Power",
784 "HybridSuspend");
785 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
786 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
787 return true;
788 }
789 }
790 }
791 }
792#endif // WITH_TDEHWLIB_DAEMONS
793
794 return false;
795 }
796 else if (ps == TDESystemPowerState::PowerOff) {
797 TDEConfig config("ksmserverrc", true);
798 config.setGroup("General" );
799 if (!config.readBoolEntry( "offerShutdown", true )) {
800 return false;
801 }
802#ifdef WITH_LOGINDPOWER
803 {
804 TQT_DBusConnection dbusConn;
805 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
806 if ( dbusConn.isConnected() ) {
807 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
808 "org.freedesktop.login1.Manager", dbusConn);
809 TQValueList<TQT_DBusData> params;
810 params << TQT_DBusData::fromBool(true);
811 if (logindProxy.canSend()) {
812 TQT_DBusMessage reply = logindProxy.sendWithReply("PowerOff", params);
813 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
814 return true;
815 }
816 }
817 }
818 }
819#endif // WITH_LOGINDPOWER
820#ifdef WITH_CONSOLEKIT
821 {
822 TQT_DBusConnection dbusConn;
823 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
824 if ( dbusConn.isConnected() ) {
825 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
826 "org.freedesktop.ConsoleKit",
827 "/org/freedesktop/ConsoleKit/Manager",
828 "org.freedesktop.ConsoleKit.Manager",
829 "Stop");
830 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
831 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
832 return true;
833 }
834 }
835 }
836#endif // WITH_CONSOLEKIT
837 // Power down the system using a DCOP command
838 /* As found at http://lists.kde.org/?l=kde-linux&m=115770988603387
839 Logout parameters explanation:
840 First parameter: confirm
841 Obey the user's confirmation setting: -1
842 Don't confirm, shutdown without asking: 0
843 Always confirm, ask even if the user turned it off: 1
844 Second parameter: type
845 Select previous action or the default if it's the first time: -1
846 Only log out: 0
847 Log out and reboot the machine: 1
848 Log out and halt the machine: 2
849 Third parameter: mode
850 Select previous mode or the default if it's the first time: -1
851 Schedule a shutdown (halt or reboot) for the time all active sessions have exited: 0
852 Shut down, if no sessions are active. Otherwise do nothing: 1
853 Force shutdown. Kill any possibly active sessions: 2
854 Pop up a dialog asking the user what to do if sessions are still active: 3
855 */
856 TQByteArray data;
857 TQDataStream arg(data, IO_WriteOnly);
858 arg << (int)0 << (int)2 << (int)2;
859 if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
860 return true;
861 }
862 return false;
863 }
864 else if (ps == TDESystemPowerState::Reboot) {
865 TDEConfig config("ksmserverrc", true);
866 config.setGroup("General" );
867 if (!config.readBoolEntry( "offerShutdown", true )) {
868 return false;
869 }
870#ifdef WITH_LOGINDPOWER
871 {
872 TQT_DBusConnection dbusConn;
873 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
874 if ( dbusConn.isConnected() ) {
875 TQT_DBusProxy logindProxy("org.freedesktop.login1", "/org/freedesktop/login1",
876 "org.freedesktop.login1.Manager", dbusConn);
877 TQValueList<TQT_DBusData> params;
878 params << TQT_DBusData::fromBool(true);
879 if (logindProxy.canSend()) {
880 TQT_DBusMessage reply = logindProxy.sendWithReply("Reboot", params);
881 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
882 return true;
883 }
884 }
885 }
886 }
887#endif // WITH_LOGINDPOWER
888#ifdef WITH_CONSOLEKIT
889 {
890 TQT_DBusConnection dbusConn;
891 dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
892 if ( dbusConn.isConnected() ) {
893 TQT_DBusMessage msg = TQT_DBusMessage::methodCall(
894 "org.freedesktop.ConsoleKit",
895 "/org/freedesktop/ConsoleKit/Manager",
896 "org.freedesktop.ConsoleKit.Manager",
897 "Restart");
898 TQT_DBusMessage reply = dbusConn.sendWithReply(msg);
899 if (reply.type() == TQT_DBusMessage::ReplyMessage) {
900 return true;
901 }
902 }
903 }
904#endif // WITH_CONSOLEKIT
905 // Power down the system using a DCOP command
906 // See above PowerOff section for logout() parameters explanation
907 TQByteArray data;
908 TQDataStream arg(data, IO_WriteOnly);
909 arg << (int)0 << (int)1 << (int)2;
910 if ( kapp->dcopClient()->send("ksmserver", "default", "logout(int,int,int)", data) ) {
911 return true;
912 }
913 return false;
914 }
915 else if (ps == TDESystemPowerState::Active) {
916 // Ummm...we're already active...
917 return true;
918 }
919
920 return false;
921}
922
923#include "tderootsystemdevice.moc"
TDEConfig
Access KDE Configuration entries.
Definition tdeconfig.h:44

tdecore

Skip menu "tdecore"
  • Main Page
  • 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.8
This website is maintained by Timothy Pearson.