Version: 2.3 (using KDE KDE 3.1.5) Installed from: Debian testing/unstable Packages OS: Linux Upon starting KDE, the knotes application starts automatically, but the notes appear at random locations. Sometimes two notes are placed exactly on top of each other, sometimes one is not shown at all, sometimes one appears at the left side of the screen and the other at the right. It does not seem possible to specify a fixed location for the notes windows.
Using KDE 3.2 I still do see these symptoms. As far as I can see the information in the files is correct, but knotes upon startup uses the size + position information of one note for this and the next note. Note: It seems as if this only happens upon kde login. If I do start knotes manually all is fine.
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();
I am also seeing this bug in 3.2.1, although the exact symptoms differ slightly from the original report. When I login and my session is restored, KNotes gives all notes the same size and location. If I quit and restart knotes manually, it restores positions properly.
Yes, and this is fixed as well :)