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") Q_CLASSINFO("D-Bus Interface", "org.kde.KSMServerInterface")
public Q_SLOTS: public Q_SLOTS:
Q_SCRIPTABLE void logout(int, int, int ); Q_SCRIPTABLE void logout(int, int );
Q_SCRIPTABLE QStringList sessionList(); Q_SCRIPTABLE QStringList sessionList();
Q_SCRIPTABLE QString currentSession(); Q_SCRIPTABLE QString currentSession();

View file

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

View file

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

View file

@ -90,8 +90,7 @@ public:
void restoreSession( const QString &sessionName ); void restoreSession( const QString &sessionName );
void startDefaultSession(); void startDefaultSession();
void shutdown( KWorkSpace::ShutdownConfirm confirm, void shutdown( KWorkSpace::ShutdownConfirm confirm,
KWorkSpace::ShutdownType sdtype, KWorkSpace::ShutdownType sdtype );
KWorkSpace::ShutdownMode sdmode );
virtual void suspendStartup( const QString &app ); virtual void suspendStartup( const QString &app );
virtual void resumeStartup( const QString &app ); virtual void resumeStartup( const QString &app );
@ -171,7 +170,7 @@ private:
// public dcop interface // public dcop interface
public Q_SLOTS: //public dcop interface public Q_SLOTS: //public dcop interface
void logout( int, int, int ); void logout( int, int );
bool canShutdown(); bool canShutdown();
QString currentSession(); QString currentSession();
void saveCurrentSession(); void saveCurrentSession();
@ -205,7 +204,6 @@ private:
QMap< QString, int > startupSuspendCount; QMap< QString, int > startupSuspendCount;
KWorkSpace::ShutdownType shutdownType; KWorkSpace::ShutdownType shutdownType;
KWorkSpace::ShutdownMode shutdownMode;
bool clean; bool clean;
KSMClient* clientInteracting; KSMClient* clientInteracting;
@ -224,7 +222,6 @@ private:
QWidget* logoutEffectWidget; QWidget* logoutEffectWidget;
KWorkSpace::ShutdownConfirm pendingShutdown_confirm; KWorkSpace::ShutdownConfirm pendingShutdown_confirm;
KWorkSpace::ShutdownType pendingShutdown_sdtype; KWorkSpace::ShutdownType pendingShutdown_sdtype;
KWorkSpace::ShutdownMode pendingShutdown_sdmode;
// sequential startup // sequential startup
int appsToStart; 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/Xutil.h>
#include <X11/Xatom.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, shutdown( (KWorkSpace::ShutdownConfirm)confirm,
(KWorkSpace::ShutdownType)sdtype, (KWorkSpace::ShutdownType)sdtype);
(KWorkSpace::ShutdownMode)sdmode );
} }
bool KSMServer::canShutdown() bool KSMServer::canShutdown()
@ -94,7 +89,7 @@ bool KSMServer::canShutdown()
} }
void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm, void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
KWorkSpace::ShutdownType sdtype, KWorkSpace::ShutdownMode sdmode ) KWorkSpace::ShutdownType sdtype )
{ {
pendingShutdown.stop(); pendingShutdown.stop();
if( dialogActive ) if( dialogActive )
@ -109,7 +104,6 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
pendingShutdown.start( 1000 ); pendingShutdown.start( 1000 );
pendingShutdown_confirm = confirm; pendingShutdown_confirm = confirm;
pendingShutdown_sdtype = sdtype; pendingShutdown_sdtype = sdtype;
pendingShutdown_sdmode = sdmode;
} }
return; return;
} }
@ -138,8 +132,6 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
cg.readEntry( "shutdownType", (int)KWorkSpace::ShutdownTypeNone ); cg.readEntry( "shutdownType", (int)KWorkSpace::ShutdownTypeNone );
choose = true; choose = true;
} }
if (sdmode == KWorkSpace::ShutdownModeDefault)
sdmode = KWorkSpace::ShutdownModeInteractive;
dialogActive = true; dialogActive = true;
if ( !logoutConfirmed ) { if ( !logoutConfirmed ) {
@ -159,7 +151,6 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
inhibitCookie = Solid::PowerManagement::beginSuppressingSleep(); inhibitCookie = Solid::PowerManagement::beginSuppressingSleep();
shutdownType = sdtype; shutdownType = sdtype;
shutdownMode = sdmode;
// shall we save the session on logout? // shall we save the session on logout?
saveSession = ( cg.readEntry( "loginMode", "restorePreviousLogout" ) == "restorePreviousLogout" ); saveSession = ( cg.readEntry( "loginMode", "restorePreviousLogout" ) == "restorePreviousLogout" );
@ -214,7 +205,7 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
void KSMServer::pendingShutdownTimeout() void KSMServer::pendingShutdownTimeout()
{ {
shutdown( pendingShutdown_confirm, pendingShutdown_sdtype, pendingShutdown_sdmode ); shutdown( pendingShutdown_confirm, pendingShutdown_sdtype );
} }
void KSMServer::saveCurrentSession() void KSMServer::saveCurrentSession()

View file

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

View file

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

View file

@ -164,16 +164,15 @@ static void cleanup_sm()
} }
#endif #endif
void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode sdmode) void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype)
{ {
#ifdef Q_WS_X11 #ifdef Q_WS_X11
/* use ksmserver's dcop interface if necessary */ /* use ksmserver's dcop interface if necessary */
if ( confirm == ShutdownConfirmYes || if ( confirm == ShutdownConfirmYes ||
sdtype != ShutdownTypeDefault || sdtype != ShutdownTypeDefault )
sdmode != ShutdownModeDefault )
{ {
org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus()); 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; return;
} }
@ -186,14 +185,11 @@ void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode
#endif #endif
} }
bool canShutDown( ShutdownConfirm confirm, bool canShutDown( ShutdownConfirm confirm, ShutdownType sdtype )
ShutdownType sdtype,
ShutdownMode sdmode )
{ {
#ifdef Q_WS_X11 #ifdef Q_WS_X11
if ( confirm == ShutdownConfirmYes || if ( confirm == ShutdownConfirmYes ||
sdtype != ShutdownTypeDefault || sdtype != ShutdownTypeDefault )
sdmode != ShutdownModeDefault )
{ {
org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus()); org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus());
QDBusReply<bool> reply = ksmserver.canShutdown(); QDBusReply<bool> reply = ksmserver.canShutdown();
@ -209,42 +205,6 @@ bool canShutDown( ShutdownConfirm confirm,
#endif #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 } // end namespace
#include "moc_kworkspace_p.cpp" #include "moc_kworkspace_p.cpp"

View file

@ -62,53 +62,23 @@ namespace KWorkSpace
/** /**
* Log out and halt the machine. * Log out and halt the machine.
*/ */
ShutdownTypeHalt = 2, 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
}; };
/** /**
* Asks the session manager to shut the session down. * Asks the session manager to shut the session down.
* *
* Using @p confirm == ShutdownConfirmYes or @p sdtype != ShutdownTypeDefault or * Using @p confirm == ShutdownConfirmYes or @p sdtype != ShutdownTypeDefault
* @p sdmode != ShutdownModeDefault causes the use of ksmserver's DCOP * causes the use of ksmserver's D-Bus interface. The remaining two
* interface. The remaining two combinations use the standard XSMP and * combinations use the standard XSMP and will work with any session manager
* will work with any session manager compliant with it. * compliant with it.
* *
* @param confirm Whether to ask the user if he really wants to log out. * @param confirm Whether to ask the user if he really wants to log out.
* ShutdownConfirm * ShutdownConfirm
* @param sdtype The action to take after logging out. ShutdownType * @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, KWORKSPACE_EXPORT void requestShutDown(ShutdownConfirm confirm = ShutdownConfirmDefault,
ShutdownType sdtype = ShutdownTypeDefault, ShutdownType sdtype = ShutdownTypeDefault);
ShutdownMode sdmode = ShutdownModeDefault );
/** /**
* Used to check whether a requestShutDown call with the same arguments * 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 * configuration may prevent the user from requesting a shutdown or
* reboot. * reboot.
*/ */
KWORKSPACE_EXPORT bool canShutDown( ShutdownConfirm confirm = ShutdownConfirmDefault, KWORKSPACE_EXPORT bool canShutDown(ShutdownConfirm confirm = ShutdownConfirmDefault,
ShutdownType sdtype = ShutdownTypeDefault, 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();
} }
#endif #endif