Summary: | Notes appear at random positions upon startup | ||
---|---|---|---|
Product: | [Unmaintained] knotes | Reporter: | Axel Boldt <axelboldt> |
Component: | general | Assignee: | Michael Brade <brade> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Debian testing | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Axel Boldt
2004-02-24 16:42:00 UTC
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 :) |