libs: drop unused and redundant bits

if the reboot/poweroff is not interactive it may silently fail

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-03-22 09:14:12 +02:00
parent cb4b132a2f
commit 27b83e2023
9 changed files with 34 additions and 141 deletions

View file

@ -32,7 +32,7 @@ class KSMServerInterface : public QObject
Q_CLASSINFO("D-Bus Interface", "org.kde.KSMServerInterface")
public Q_SLOTS:
Q_SCRIPTABLE void logout(int, int, int );
Q_SCRIPTABLE void logout(int, int );
Q_SCRIPTABLE QStringList sessionList();
Q_SCRIPTABLE QString currentSession();

View file

@ -4,7 +4,6 @@
<method name="logout">
<arg type="i" direction="in"/>
<arg type="i" direction="in"/>
<arg type="i" direction="in"/>
</method>
<method name="canShutdown">
<arg type="b" direction="out"/>

View file

@ -193,8 +193,7 @@ void KSMSaveYourselfRequestProc (
the_server->shutdown( fast ?
KWorkSpace::ShutdownConfirmNo :
KWorkSpace::ShutdownConfirmDefault,
KWorkSpace::ShutdownTypeDefault,
KWorkSpace::ShutdownModeDefault );
KWorkSpace::ShutdownTypeDefault );
} else if ( !global ) {
SmsSaveYourself( smsConn, saveType, false, interactStyle, fast );
SmsSaveComplete( smsConn );
@ -716,7 +715,7 @@ void KSMServer::cleanUp()
FreeAuthenticationData(numTransports, authDataEntries);
KDisplayManager().shutdown( shutdownType, shutdownMode );
KDisplayManager().shutdown( shutdownType );
}
@ -1026,22 +1025,22 @@ void KSMServer::setupShortcuts()
void KSMServer::defaultLogout()
{
shutdown(KWorkSpace::ShutdownConfirmYes, KWorkSpace::ShutdownTypeDefault, KWorkSpace::ShutdownModeDefault);
shutdown(KWorkSpace::ShutdownConfirmYes, KWorkSpace::ShutdownTypeDefault);
}
void KSMServer::logoutWithoutConfirmation()
{
shutdown(KWorkSpace::ShutdownConfirmNo, KWorkSpace::ShutdownTypeNone, KWorkSpace::ShutdownModeDefault);
shutdown(KWorkSpace::ShutdownConfirmNo, KWorkSpace::ShutdownTypeNone);
}
void KSMServer::haltWithoutConfirmation()
{
shutdown(KWorkSpace::ShutdownConfirmNo, KWorkSpace::ShutdownTypeHalt, KWorkSpace::ShutdownModeDefault);
shutdown(KWorkSpace::ShutdownConfirmNo, KWorkSpace::ShutdownTypeHalt);
}
void KSMServer::rebootWithoutConfirmation()
{
shutdown(KWorkSpace::ShutdownConfirmNo, KWorkSpace::ShutdownTypeReboot, KWorkSpace::ShutdownModeDefault);
shutdown(KWorkSpace::ShutdownConfirmNo, KWorkSpace::ShutdownTypeReboot);
}
#include "moc_server.cpp"

View file

@ -90,8 +90,7 @@ public:
void restoreSession( const QString &sessionName );
void startDefaultSession();
void shutdown( KWorkSpace::ShutdownConfirm confirm,
KWorkSpace::ShutdownType sdtype,
KWorkSpace::ShutdownMode sdmode );
KWorkSpace::ShutdownType sdtype );
virtual void suspendStartup( const QString &app );
virtual void resumeStartup( const QString &app );
@ -171,7 +170,7 @@ private:
// public dcop interface
public Q_SLOTS: //public dcop interface
void logout( int, int, int );
void logout( int, int );
bool canShutdown();
QString currentSession();
void saveCurrentSession();
@ -205,7 +204,6 @@ private:
QMap< QString, int > startupSuspendCount;
KWorkSpace::ShutdownType shutdownType;
KWorkSpace::ShutdownMode shutdownMode;
bool clean;
KSMClient* clientInteracting;
@ -224,7 +222,6 @@ private:
QWidget* logoutEffectWidget;
KWorkSpace::ShutdownConfirm pendingShutdown_confirm;
KWorkSpace::ShutdownType pendingShutdown_sdtype;
KWorkSpace::ShutdownMode pendingShutdown_sdmode;
// sequential startup
int appsToStart;

View file

@ -73,15 +73,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <X11/Xutil.h>
#include <X11/Xatom.h>
void KSMServer::logout( int confirm, int sdtype, int sdmode )
void KSMServer::logout( int confirm, int sdtype )
{
// KDE5: remove me
if (sdtype == KWorkSpace::ShutdownTypeLogout)
sdtype = KWorkSpace::ShutdownTypeNone;
shutdown( (KWorkSpace::ShutdownConfirm)confirm,
(KWorkSpace::ShutdownType)sdtype,
(KWorkSpace::ShutdownMode)sdmode );
(KWorkSpace::ShutdownType)sdtype);
}
bool KSMServer::canShutdown()
@ -94,7 +89,7 @@ bool KSMServer::canShutdown()
}
void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
KWorkSpace::ShutdownType sdtype, KWorkSpace::ShutdownMode sdmode )
KWorkSpace::ShutdownType sdtype )
{
pendingShutdown.stop();
if( dialogActive )
@ -109,7 +104,6 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
pendingShutdown.start( 1000 );
pendingShutdown_confirm = confirm;
pendingShutdown_sdtype = sdtype;
pendingShutdown_sdmode = sdmode;
}
return;
}
@ -138,8 +132,6 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
cg.readEntry( "shutdownType", (int)KWorkSpace::ShutdownTypeNone );
choose = true;
}
if (sdmode == KWorkSpace::ShutdownModeDefault)
sdmode = KWorkSpace::ShutdownModeInteractive;
dialogActive = true;
if ( !logoutConfirmed ) {
@ -159,7 +151,6 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
inhibitCookie = Solid::PowerManagement::beginSuppressingSleep();
shutdownType = sdtype;
shutdownMode = sdmode;
// shall we save the session on logout?
saveSession = ( cg.readEntry( "loginMode", "restorePreviousLogout" ) == "restorePreviousLogout" );
@ -214,7 +205,7 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
void KSMServer::pendingShutdownTimeout()
{
shutdown( pendingShutdown_confirm, pendingShutdown_sdtype, pendingShutdown_sdmode );
shutdown( pendingShutdown_confirm, pendingShutdown_sdtype );
}
void KSMServer::saveCurrentSession()

View file

@ -106,31 +106,26 @@ bool KDisplayManager::canShutdown()
return false;
}
void KDisplayManager::shutdown(KWorkSpace::ShutdownType shutdownType,
KWorkSpace::ShutdownMode shutdownMode)
void KDisplayManager::shutdown(KWorkSpace::ShutdownType shutdownType)
{
if (shutdownType == KWorkSpace::ShutdownTypeNone || shutdownType == KWorkSpace::ShutdownTypeLogout) {
if (shutdownType == KWorkSpace::ShutdownTypeNone) {
return;
}
const bool interactive = (
shutdownMode == KWorkSpace::ShutdownModeInteractive
|| shutdownMode == KWorkSpace::ShutdownModeForceNow
);
if (d->m_login1.isValid()) {
if (shutdownType == KWorkSpace::ShutdownTypeReboot) {
d->m_login1.call("Reboot", interactive);
d->m_login1.call("Reboot", true);
} else if (shutdownType == KWorkSpace::ShutdownTypeHalt) {
d->m_login1.call("PowerOff", interactive);
d->m_login1.call("PowerOff", true);
}
return;
}
if (d->m_consolekit.isValid()) {
if (shutdownType == KWorkSpace::ShutdownTypeReboot) {
d->m_consolekit.call("Reboot", interactive);
d->m_consolekit.call("Reboot", true);
} else if (shutdownType == KWorkSpace::ShutdownTypeHalt) {
d->m_consolekit.call("PowerOff", interactive);
d->m_consolekit.call("PowerOff", true);
}
return;
}

View file

@ -46,8 +46,7 @@ public:
~KDisplayManager();
bool canShutdown();
void shutdown(KWorkSpace::ShutdownType shutdownType,
KWorkSpace::ShutdownMode shutdownMode);
void shutdown(KWorkSpace::ShutdownType shutdownType);
bool isSwitchable();
void newSession();

View file

@ -164,16 +164,15 @@ static void cleanup_sm()
}
#endif
void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode sdmode)
void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype)
{
#ifdef Q_WS_X11
/* use ksmserver's dcop interface if necessary */
if ( confirm == ShutdownConfirmYes ||
sdtype != ShutdownTypeDefault ||
sdmode != ShutdownModeDefault )
sdtype != ShutdownTypeDefault )
{
org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus());
ksmserver.logout((int)confirm, (int)sdtype, (int)sdmode);
ksmserver.logout((int)confirm, (int)sdtype);
return;
}
@ -186,14 +185,11 @@ void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode
#endif
}
bool canShutDown( ShutdownConfirm confirm,
ShutdownType sdtype,
ShutdownMode sdmode )
bool canShutDown( ShutdownConfirm confirm, ShutdownType sdtype )
{
#ifdef Q_WS_X11
if ( confirm == ShutdownConfirmYes ||
sdtype != ShutdownTypeDefault ||
sdmode != ShutdownModeDefault )
sdtype != ShutdownTypeDefault )
{
org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus());
QDBusReply<bool> reply = ksmserver.canShutdown();
@ -209,42 +205,6 @@ bool canShutDown( ShutdownConfirm confirm,
#endif
}
static QTime smModificationTime;
void propagateSessionManager()
{
#ifdef Q_WS_X11
QByteArray fName = QFile::encodeName(KStandardDirs::locateLocal("tmp", "KSMserver"));
QString display = QString::fromLocal8Bit( ::getenv(DISPLAY) );
// strip the screen number from the display
display.remove(QRegExp("\\.[0-9]+$"));
int i;
while( (i = display.indexOf(':')) >= 0)
display[i] = '_';
while( (i = display.indexOf('/')) >= 0)
display[i] = '_';
fName += '_';
fName += display.toLocal8Bit();
QByteArray smEnv = ::getenv("SESSION_MANAGER");
bool check = smEnv.isEmpty();
if ( !check && smModificationTime.isValid() ) {
QFileInfo info( fName );
QTime current = info.lastModified().time();
check = current > smModificationTime;
}
if ( check ) {
QFile f( fName );
if ( !f.open( QIODevice::ReadOnly ) )
return;
QFileInfo info ( f );
smModificationTime = QTime( info.lastModified().time() );
const QByteArray b = f.readLine().trimmed();
f.close();
::setenv( "SESSION_MANAGER", b.constData(), true );
}
#endif
}
} // end namespace
#include "moc_kworkspace_p.cpp"

View file

@ -62,53 +62,23 @@ namespace KWorkSpace
/**
* Log out and halt the machine.
*/
ShutdownTypeHalt = 2,
/**
* Temporary brain damage. Don't use. Same as ShutdownTypeNone
*/
// KDE5: kill this
ShutdownTypeLogout = 3
};
/**
* The possible values for the @p sdmode parameter of requestShutDown().
*/
// KDE5: this seems fairly useless
enum ShutdownMode {
/**
* Select previous mode or the default if it's the first time.
*/
ShutdownModeDefault = -1,
/**
* Shut down, if no sessions are active. Otherwise do nothing.
*/
ShutdownModeTryNow = 1,
/**
* Force shutdown. Kill any possibly active sessions.
*/
ShutdownModeForceNow = 2,
/**
* Pop up a dialog asking the user what to do if sessions are still active.
*/
ShutdownModeInteractive = 3
ShutdownTypeHalt = 2
};
/**
* Asks the session manager to shut the session down.
*
* Using @p confirm == ShutdownConfirmYes or @p sdtype != ShutdownTypeDefault or
* @p sdmode != ShutdownModeDefault causes the use of ksmserver's DCOP
* interface. The remaining two combinations use the standard XSMP and
* will work with any session manager compliant with it.
* Using @p confirm == ShutdownConfirmYes or @p sdtype != ShutdownTypeDefault
* causes the use of ksmserver's D-Bus interface. The remaining two
* combinations use the standard XSMP and will work with any session manager
* compliant with it.
*
* @param confirm Whether to ask the user if he really wants to log out.
* ShutdownConfirm
* @param sdtype The action to take after logging out. ShutdownType
* @param sdmode If/When the action should be taken. ShutdownMode
*/
KWORKSPACE_EXPORT void requestShutDown( ShutdownConfirm confirm = ShutdownConfirmDefault,
ShutdownType sdtype = ShutdownTypeDefault,
ShutdownMode sdmode = ShutdownModeDefault );
KWORKSPACE_EXPORT void requestShutDown(ShutdownConfirm confirm = ShutdownConfirmDefault,
ShutdownType sdtype = ShutdownTypeDefault);
/**
* Used to check whether a requestShutDown call with the same arguments
@ -121,25 +91,8 @@ namespace KWorkSpace
* configuration may prevent the user from requesting a shutdown or
* reboot.
*/
KWORKSPACE_EXPORT bool canShutDown( ShutdownConfirm confirm = ShutdownConfirmDefault,
ShutdownType sdtype = ShutdownTypeDefault,
ShutdownMode sdmode = ShutdownModeDefault );
/**
* Propagates the network address of the session manager in the
* SESSION_MANAGER environment variable so that child processes can
* pick it up.
*
* If SESSION_MANAGER isn't defined yet, the address is searched in
* $HOME/.KSMserver.
*
* This function is called by clients that are started outside the
* session ( i.e. before ksmserver is started), but want to launch
* other processes that should participate in the session. Examples
* are kdesktop or kicker.
*/
KWORKSPACE_EXPORT void propagateSessionManager();
KWORKSPACE_EXPORT bool canShutDown(ShutdownConfirm confirm = ShutdownConfirmDefault,
ShutdownType sdtype = ShutdownTypeDefault);
}
#endif