Attached a patch to restore the
windows position correctly.

Once again a Qt bug.

Please test it if it becomes better on Linux.

Peter
Index: src/frontends/qt4/GuiView.C
===================================================================
--- src/frontends/qt4/GuiView.C (revision 15808)
+++ src/frontends/qt4/GuiView.C (working copy)
@@ -100,7 +100,10 @@
        NameMap namemap;
        WidgetWithTabBar* wt;
 
-       GuiViewPrivate()
+       int posx_offset;
+       int posy_offset;
+
+       GuiViewPrivate() : wt(0), posx_offset(0), posy_offset(0)
        {}
 };
 
@@ -169,7 +172,7 @@
        // Then also the moveEvent, resizeEvent, and the
        // code for floatingGeometry_ can be removed;
        // adjust GuiView::setGeometry()
-#ifdef Q_OS_WIN32
+#ifdef Q_OS_WIN
        QRect geometry = normalGeometry();
 #else
        updateFloatingGeometry();
@@ -182,8 +185,8 @@
        session.sessionInfo().save("WindowHeight", 
convert<string>(geometry.height()));
        session.sessionInfo().save("WindowIsMaximized", (isMaximized() ? "yes" 
: "no"));
        if (lyxrc.geometry_xysaved) {
-               session.sessionInfo().save("WindowPosX", 
convert<string>(geometry.x()));
-               session.sessionInfo().save("WindowPosY", 
convert<string>(geometry.y()));
+               session.sessionInfo().save("WindowPosX", 
convert<string>(geometry.x() + d.posx_offset));
+               session.sessionInfo().save("WindowPosY", 
convert<string>(geometry.y() + d.posy_offset));
        }
        getToolbars().saveToolbarInfo();
 }
@@ -203,10 +206,9 @@
                        QRect desk = dw.availableGeometry(dw.primaryScreen());
                        (posx >= desk.width() ? posx = 50 : true);
                        (posy >= desk.height()? posy = 50 : true);
-#ifdef Q_WS_WIN
-                       // FIXME: use only setGeoemtry when Trolltech has
-                       // fixed the qt4/X11 bug
-                       QMainWindow::setGeometry(posx, posy,width, height);
+#ifdef Q_OS_WIN
+                       // FIXME: use setGeometry only when Trolltech has fixed 
the qt4/X11 bug
+                       QWidget::setGeometry(posx, posy, width, height);
 #else
                        resize(width, height);
                        move(posx, posy);
@@ -218,12 +220,29 @@
                if (maximize)
                        setWindowState(Qt::WindowMaximized);
        }
-       
+
        show();
 
        // For an unknown reason, the Window title update is not effective for
        // the second windows up until it is shown on screen (Qt bug?).
        updateWindowTitle();
+
+       // after show geometry() has changed (Qt bug?)
+       // we compensate the drift when storing the position
+       d.posx_offset = 0;
+       d.posy_offset = 0;
+       if (width != 0 && height != 0) 
+               if (posx != -1 && posy != -1) {
+#ifdef Q_OS_WIN
+                       d.posx_offset = posx - normalGeometry().x();
+                       d.posy_offset = posy - normalGeometry().y();
+#else
+                       if (!maximize) {
+                               d.posx_offset = posx - geometry().x();
+                               d.posy_offset = posy - geometry().y();
+                       }
+#endif
+               }
 }
 
 

Reply via email to