Bug 76034 - Notes appear at random positions upon startup
Summary: Notes appear at random positions upon startup
Status: RESOLVED FIXED
Alias: None
Product: knotes
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Debian testing Linux
: NOR normal
Target Milestone: ---
Assignee: Michael Brade
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-02-24 16:42 UTC by Axel Boldt
Modified: 2004-03-28 19:13 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Axel Boldt 2004-02-24 16:42:00 UTC
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.
Comment 1 Michael Zimmermann 2004-03-05 16:45:24 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.
Comment 2 Michael Brade 2004-03-23 15:18:25 UTC
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();
 


Comment 3 elbows 2004-03-28 01:58:43 UTC
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.
Comment 4 Michael Brade 2004-03-28 19:13:55 UTC
Yes, and this is fixed as well :)