From e70fa9217976f3bddaf920cbb74287a736090db7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Peter=20K=C3=BCmmel?= Date: Thu, 9 Nov 2006 09:13:04 +0000 Subject: [PATCH] fix drifted position of restored window git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15814 a592a061-630c-0410-9148-cb99ea01b6c8 --- Status.15x | 8 +++++--- src/frontends/qt4/GuiView.C | 35 +++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/Status.15x b/Status.15x index 71413d9304..7f6f744b9e 100644 --- a/Status.15x +++ b/Status.15x @@ -52,9 +52,6 @@ TABLE OF CONTENTS DIALOGS -* Window positions are not remembered correctly. Each time a window is openend - window again it has moved towards the bottom of the screen. (Joost 3/11/06) - MATH CONTROL PANEL @@ -317,3 +314,8 @@ CREDITS: FIXED: use the defaul.ui value only when there is no valid position stored (1st start of lyx) (Peter 7/11/2006) + +* Window positions are not remembered correctly. Each time a window is openend + window again it has moved towards the bottom of the screen. (Joost 3/11/06) + + FIXED (Peter 8/11/2006) \ No newline at end of file diff --git a/src/frontends/qt4/GuiView.C b/src/frontends/qt4/GuiView.C index ac09c8edda..54520561b6 100644 --- a/src/frontends/qt4/GuiView.C +++ b/src/frontends/qt4/GuiView.C @@ -100,7 +100,10 @@ struct GuiView::GuiViewPrivate NameMap namemap; WidgetWithTabBar* wt; - GuiViewPrivate() + int posx_offset; + int posy_offset; + + GuiViewPrivate() : wt(0), posx_offset(0), posy_offset(0) {} }; @@ -175,7 +178,7 @@ void GuiView::saveGeometry() // Then also the moveEvent, resizeEvent, and the // code for floatingGeometry_ can be removed; // adjust GuiView::setGeometry() -#ifdef Q_OS_WIN32 +#ifdef Q_WS_WIN QRect geometry = normalGeometry(); #else updateFloatingGeometry(); @@ -188,8 +191,8 @@ void GuiView::saveGeometry() session.sessionInfo().save("WindowHeight", convert(geometry.height())); session.sessionInfo().save("WindowIsMaximized", (isMaximized() ? "yes" : "no")); if (lyxrc.geometry_xysaved) { - session.sessionInfo().save("WindowPosX", convert(geometry.x())); - session.sessionInfo().save("WindowPosY", convert(geometry.y())); + session.sessionInfo().save("WindowPosX", convert(geometry.x() + d.posx_offset)); + session.sessionInfo().save("WindowPosY", convert(geometry.y() + d.posy_offset)); } getToolbars().saveToolbarInfo(); } @@ -210,9 +213,8 @@ void GuiView::setGeometry(unsigned int width, (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); + // 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); @@ -224,12 +226,29 @@ void GuiView::setGeometry(unsigned int width, 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_WS_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 + } } -- 2.39.5