CVS commit by esben: Patch by Lubos Lunak to save data on session end without enabling session management. The patch has been slightly modified (added comments, move unneeded declarations from headerfile) by me. M +1 -0 main.cpp 1.44 M +24 -1 toplevel.cpp 1.172 M +2 -1 toplevel.h 1.61 --- kdebase/klipper/toplevel.cpp #1.171:1.172 @@ -92,4 +92,26 @@ namespace { } +/** + * Helper class to save history upon session exit. + */ +class KlipperSessionManaged : public KSessionManaged +{ +public: + KlipperSessionManaged( KlipperWidget* k ) + : klipper( k ) + {} + + /** + * Save state upon session exit. + * + * Saving history on session save + */ + virtual bool commitData( QSessionManager& ) { + klipper->saveSession(); + return true; + } +private: + KlipperWidget* klipper; +}; extern bool qt_qclipboard_bailout_hack; @@ -108,4 +130,5 @@ KlipperWidget::KlipperWidget( QWidget *p , m_config( config ) , m_pendingContentsCheck( false ) + , session_managed( new KlipperSessionManaged( this )) { qt_qclipboard_bailout_hack = true; @@ -164,5 +187,4 @@ KlipperWidget::KlipperWidget( QWidget *p readProperties(m_config); - connect(kapp, SIGNAL(saveYourself()), SLOT(saveSession())); connect(kapp, SIGNAL(settingsChanged(int)), SLOT(slotSettingsChanged(int))); @@ -204,4 +226,5 @@ KlipperWidget::KlipperWidget( QWidget *p KlipperWidget::~KlipperWidget() { + delete session_managed; delete showTimer; delete hideTimer; --- kdebase/klipper/toplevel.h #1.60:1.61 @@ -40,4 +40,5 @@ class KAction; class QMimeSource; class HistoryItem; +class KlipperSessionManaged; class KlipperWidget : public QWidget, public DCOPObject @@ -200,4 +201,5 @@ private: bool blockFetchingNewData(); + KlipperSessionManaged* session_managed; }; --- kdebase/klipper/main.cpp #1.43:1.44 @@ -47,4 +47,5 @@ extern "C" int KDE_EXPORT kdemain(int ar } KUniqueApplication app; + app.disableSessionManagement(); Klipper *toplevel = new Klipper();