Version: 2.3 (using KDE 3.1.4) Installed from: SuSE Compiler: gcc version 3.3 20030226 (prerelease) (SuSE Linux) OS: Linux (i686) release 2.4.20-4GB After restart the position and size of some notes on desktop is not according to data in e.g. `/home/hrd/.kde/share/apps/knotes/notes/KNote 1`. KNote 1 and KNote 2 with different height, width, position are both positioned according to data in Knote 2. Updating to kdepim3-3.1.4-16 from kdepim3-3.1.1-13 (SuSE 8.2 prof.): ftp://ftp.suse.com/pub/suse/i386/supplementary/KDE/update_for_8.2/applications
This seems to be corrected in the CVS version. I can replicate it in 3.1.4, but it seems fine in CVS from 2003-01-10.
CVS commit by brade: Very Cool! Thanks to Lubos for his function that removes sm from the client leader KNotes is not managed anymore by KWin (again) and is now thus able to restore its notes properly on login with manually saved sessions. CCMAIL: 77783-done@bugs.kde.org, 76034-done@bugs.kde.org, 65744-done@bugs.kde.org M +1 -8 knote.cpp 1.108 M +2 -1 knotesapp.cpp 1.80 M +37 -1 main.cpp 1.25 --- kdepim/knotes/knote.cpp #1.107:1.108 @@ -62,6 +62,4 @@ #include <fixx11h.h> -extern Atom qt_sm_client_id; - using namespace KCal; @@ -73,10 +71,5 @@ KNote::KNote( KXMLGUIBuilder* builder, Q m_config( 0 ), m_journal( j ) { - // to disable kwin's session management (ie. saving positions of windows) we need to - // remove the session id from all note windows - XChangeProperty( x11Display(), winId(), qt_sm_client_id, XA_STRING, 8, - PropModeReplace, 0, 0 ); - - actionCollection()->setWidget( this ); + //actionCollection()->setWidget( this ); // if there is no title yet, use the start date if valid --- kdepim/knotes/knotesapp.cpp #1.79:1.80 @@ -415,5 +415,6 @@ void KNotesApp::showNote( KNote* note ) void KNotesApp::createNote( KCal::Journal *journal ) { - KNote *newNote = new KNote( this, domDocument(), journal ); + KNote *newNote = new KNote( this, domDocument(), journal, + 0, journal->uid().utf8() ); m_noteList.insert( newNote->noteId(), newNote ); --- kdepim/knotes/main.cpp #1.24:1.25 @@ -23,4 +23,8 @@ #include <kaboutdata.h> #include <klocale.h> +#include <kxerrorhandler.h> + +#include <X11/Xlib.h> +#include <X11/Xatom.h> #include "knotesapp.h" @@ -29,4 +33,35 @@ +void remove_sm_from_client_leader() +{ + Atom type; + int format, status; + unsigned long nitems = 0; + unsigned long extra = 0; + unsigned char *data = 0; + + Atom atoms[ 2 ]; + char *atom_names[ 2 ] = { "WM_CLIENT_LEADER", "SM_CLIENT_ID" }; + + XInternAtoms( qt_xdisplay(), atom_names, 2, False, atoms ); + + QWidget w; + KXErrorHandler handler; // ignore X errors + status = XGetWindowProperty( qt_xdisplay(), w.winId(), atoms[ 0 ], 0, 10000, + FALSE, XA_WINDOW, &type, &format, + &nitems, &extra, &data ); + + if (status == Success && !handler.error( false )) + { + if (data && nitems > 0) + { + Window leader = *((Window*) data); + XDeleteProperty( qt_xdisplay(), leader, atoms[ 1 ] ); + } + XFree(data); + } +} + + Application::Application() : KUniqueApplication(), mMainWindow( 0 ) @@ -87,4 +121,6 @@ int main( int argc, char* argv[] ) app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); + remove_sm_from_client_leader(); + int rval = app.exec();