On Thursday 16 February 2012 20:48:28 Calvin Morrison wrote:
Currently
kickoff detects well if kpowersave is running. I thought you patched kpowersave to work
through upower instead of hal.
Err what? I don't see kpowersave referenced anywhere in our kickoff
branch. It actually detects from hal directly. I don't know where you
got that idea.
If kpowersave is not installed, the suspend/hybernate buttons are unavailable.
} else
QToolTip::add( btnReboot, i18n( "<qt><h3>Restart
Computer</h3><p>Log out of the current session and restart the
computer</p></qt>" ) );
DCOPRef kpowersave( "kpowersave", "KPowersaveIface" );
DCOPReply reply = kpowersave.call( "allowed_sleepingStates" );
if( reply.isValid()) {
QStringList supported = reply;
suspend_ram = supported.contains( "suspendToRAM" );
suspend_disk = supported.contains( "suspendToDisk" );
standby = supported.contains( "standBy" );
} else {
int supported = -1;
liblazy_hal_get_property_bool(HAL_UDI_COMPUTER,
"power_management.can_suspend", &supported);
if (supported == 1)
===
void KSMShutdownDlg::slotSuspend()
{
int error = 0;
DCOPRef kpowersave( "kpowersave", "KPowersaveIface" );
DCOPReply reply = kpowersave.call( "allowed_sleepingStates" );
if( reply.isValid()) {
bool ok;
// so that screen locking can take place
extern Time qt_x_time;
XUngrabKeyboard( qt_xdisplay(), qt_x_time );
XUngrabPointer( qt_xdisplay(), qt_x_time );
XSync( qt_xdisplay(), False );
if( suspend_disk )
ok = kpowersave.call( "do_suspendToDisk" );
else if( suspend_ram )
ok = kpowersave.call( "do_suspendToRAM" );
else
ok = kpowersave.call( "do_standBy" );
error = ok ? 0 : 1;
} else {
int wake = 0;
DBusMessage *reply;
===
void KSMShutdownDlg::slotSuspend(int id)
{
int error = 0;
DCOPRef kpowersave( "kpowersave", "KPowersaveIface" );
DCOPReply reply = kpowersave.call( "allowed_sleepingStates" );
if( reply.isValid()) {
bool ok;
extern Time qt_x_time;
XUngrabKeyboard( qt_xdisplay(), qt_x_time );
XUngrabPointer( qt_xdisplay(), qt_x_time );
XSync( qt_xdisplay(), False );
if( suspend_disk && id == 1 )
ok = kpowersave.call( "do_suspendToDisk" );
else if( suspend_ram && id == 2 )
ok = kpowersave.call( "do_suspendToRAM" );
else if( standby && id == 3 )
ok = kpowersave.call( "do_standBy" );
else
return;
error = ok ? 0 : 1;
} else {
Would not it be a better solution?
Nope, kpowersave does exactly what kickoff does, communicate via hal.
kickoff and the shutdown dialog, and the k-munu and the kicker panel applet with the power
buttons
all call kpowersave to detect whether suspend and hybernate are available. kpowersave on
the other hand
either calls hal or its own daemon.
the best solution is to implement a interface for all
programs to
access via dcop, that way we can use hal or udev or whatever backend
and not have to rewrite the system every time
They all ask kpowersave. Once somebody patches kpowersave, all kde components wioll know
whether
hybernate|suspend is available.
Previously it
used its own daemon, then it was ported to hal, why not to port it to upower?
previously what did? ksmserver?
kpowersave
Hybernate/suspend dialog circumventing kpowersave
is not good I think.
Kpowersave works the same way, via hal.
Not necessary.