Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.2:Test
kdebase3
ksmserver-suspend_legacy-10.1.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ksmserver-suspend_legacy-10.1.diff of Package kdebase3
--- ksmserver/Makefile.am +++ ksmserver/Makefile.am @@ -17,7 +17,7 @@ SUBDIRS = . -INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) +INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) $(DBUS_INCS) bin_PROGRAMS = lib_LTLIBRARIES = @@ -31,7 +31,7 @@ KSMServerInterface.skel server.skel ksmserver_la_LDFLAGS = $(all_libraries) -avoid-version -module -ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) +ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) -lpowersave_dbus -lpowersave $(DBUS_LIBS) picsdir = $(kde_datadir)/ksmserver/pics pics_DATA = shutdownkonq.png @@ -44,7 +44,7 @@ EXTRA_PROGRAMS = testsh testsh_SOURCES = test.cpp testsh_LDFLAGS = $(all_libraries) $(KDE_RPATH) -testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la +testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la -lpowersave_dbus $(DBUS_LIBS) messages: $(XGETTEXT) *.cpp -o $(podir)/ksmserver.pot --- ksmserver/shutdowndlg.cpp +++ ksmserver/shutdowndlg.cpp @@ -38,12 +38,15 @@ #include <kpixmapeffect.h> #include <kdialog.h> #include <kseparator.h> +#include <kmessagebox.h> #include <sys/types.h> #include <sys/utsname.h> #include <unistd.h> #include <stdlib.h> #include <dmctl.h> +#include <powerlib.h> +#include <powersave_dbus.h> #include <X11/Xlib.h> @@ -234,8 +237,55 @@ connect( targets, SIGNAL(activated(int)), SLOT(slotReboot(int)) ); } else QToolTip::add( btnReboot, i18n( "<qt><h3>Restart Computer</h3><p>Log out of the current session and restart the computer</p></qt>" ) ); - } + int64_t supported_sleep_states = getSupportedSleepStates(); + suspend_ram = ((supported_sleep_states & APM_SUSPEND) || + (supported_sleep_states & ACPI_S3) || + (supported_sleep_states & ACPI_S3_BIOS)); + standby = ((supported_sleep_states & APM_STANDBY) || + (supported_sleep_states & ACPI_S1)); + suspend_disk = ((supported_sleep_states & APM_SUSPEND) || + (supported_sleep_states & ACPI_S4) || + (supported_sleep_states & ACPI_S4_BIOS)); + + int err_code = dbusSendSimpleMessage(REQUEST_MESSAGE, + "suspend_to_disk_allowed"); + //REPLY_DISABLED means disabled, there are also other errors we don't care ... + if (err_code != REPLY_SUCCESS) + suspend_disk = false; + + err_code = dbusSendSimpleMessage(REQUEST_MESSAGE, + "suspend_to_ram_allowed"); + if (err_code != REPLY_SUCCESS) + suspend_ram = false; + + err_code = dbusSendSimpleMessage(REQUEST_MESSAGE, + "standby_allowed"); + if (err_code != REPLY_SUCCESS) + standby = false; + + int sum = standby + suspend_ram + suspend_disk; + if ( sum ) { + QButton *btnSuspend; + if (sum > 1) { + btnSuspend = new KSMDelayedPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); + QPopupMenu *suspends = new QPopupMenu(frame); + if (suspend_disk) + suspends->insertItem(i18n("Suspend to Disk"), 1); + if (suspend_ram) + suspends->insertItem(i18n("Suspend to RAM"), 2); + if (standby) + suspends->insertItem(i18n("Standby"), 3); + connect(suspends, SIGNAL(activated(int)), SLOT(slotSuspend(int))); + static_cast<KSMDelayedPushButton*>(btnSuspend)->setPopup(suspends); + } else { + btnSuspend = new KPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); + } + btnSuspend->setFont( btnFont ); + buttonlay->addWidget( btnSuspend ); + connect(btnSuspend, SIGNAL(clicked()), SLOT(slotSuspend())); + } + } buttonlay->addStretch( 1 ); // Separator @@ -248,6 +298,41 @@ } +void KSMShutdownDlg::slotSuspend() +{ + int res = REPLY_SUCCESS; + if (suspend_disk) + res = dbusSendSimpleMessage(ACTION_MESSAGE, "suspend_to_disk"); + else if (suspend_ram) + res = dbusSendSimpleMessage(ACTION_MESSAGE, "suspend_to_ram"); + else + res = dbusSendSimpleMessage(ACTION_MESSAGE, "standby"); + + if (res != REPLY_SUCCESS) + KMessageBox::error(this, i18n("Suspend failed")); + + // possibly after resume :) + reject(); +} + +void KSMShutdownDlg::slotSuspend(int id) +{ + int res = REPLY_SUCCESS; + if (suspend_disk && id == 1) + res = dbusSendSimpleMessage(ACTION_MESSAGE, "suspend_to_disk"); + else if (suspend_ram && id == 2) + res = dbusSendSimpleMessage(ACTION_MESSAGE, "suspend_to_ram"); + else if (standby && id == 3) + res = dbusSendSimpleMessage(ACTION_MESSAGE, "standby"); + else + return; + + if (res != REPLY_SUCCESS) + KMessageBox::error(this, i18n("Suspend failed")); + + // possibly after resume :) + reject(); +} void KSMShutdownDlg::slotLogout() { --- ksmserver/shutdowndlg.h +++ ksmserver/shutdowndlg.h @@ -59,6 +59,8 @@ void slotHalt(); void slotReboot(); void slotReboot(int); + void slotSuspend(); + void slotSuspend(int); protected: ~KSMShutdownDlg() {}; @@ -69,6 +71,7 @@ QString m_bootOption; QPopupMenu *targets; QStringList rebootOptions; + bool suspend_disk, suspend_ram, standby; }; class KSMDelayedPushButton : public KPushButton
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor