SVN commit 792196 by lunakl: Make KDE4 applications restart in saved session using a wrapper script 'kde4' if not running in a KDE4 session (http://lists.kde.org/?t=120569055200005&r=1&w=2). M +2 -0 kdebase/runtime/CMakeLists.txt AM kdebase/runtime/kde4 M +29 -0 kdelibs/kdeui/kernel/kapplication.cpp --- branches/KDE/4.0/kdebase/runtime/CMakeLists.txt #792195:792196 @@ -79,3 +79,5 @@ macro_display_feature_log() endif(CMAKE_SOURCE_DIR STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") +########### install files ############### +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/kde4 DESTINATION ${BIN_INSTALL_DIR}) ** branches/KDE/4.0/kdebase/runtime/kde4 #property svn:executable + * --- branches/KDE/4.0/kdelibs/kdeui/kernel/kapplication.cpp #792195:792196 @@ -731,6 +731,34 @@ d->session_save = false; } +static void checkRestartVersion( QSessionManager& sm ) +{ + Display* dpy = QX11Info::display(); + Atom type; + int format; + unsigned long nitems, after; + unsigned char* data; + if( XGetWindowProperty( dpy, DefaultRootWindow( dpy ), XInternAtom( dpy, "KDE_SESSION_VERSION", False ), + 0, 1, False, AnyPropertyType, &type, &format, &nitems, &after, &data ) == Success ) { + if( type == XA_INTEGER && format == 32 ) { + int version = *( long* ) data; + if( version == KDE_VERSION_MAJOR ) { // we run in our native session + XFree( data ); + return; // no need to wrap + } + } + XFree( data ); + } +#define NUM_TO_STRING2( num ) #num +#define NUM_TO_STRING( num ) NUM_TO_STRING2( num ) + QString wrapper = KStandardDirs::findExe( "kde" NUM_TO_STRING( KDE_VERSION_MAJOR ) ); // "kde4", etc. +#undef NUM_TO_STRING +#undef NUM_TO_STRING2 + QStringList restartCommand = sm.restartCommand(); + restartCommand.prepend( wrapper ); + sm.setRestartCommand( restartCommand ); +} + void KApplication::saveState( QSessionManager& sm ) { d->session_save = true; @@ -784,6 +812,7 @@ sm.setRestartCommand( restartCommand ); } + checkRestartVersion( sm ); // finally: do session management emit saveYourself(); // for compatibility