I've fixed the save/restore and -geometry problem for Qt4.
Therefore I have to remember lyx if there was the geometry option,
and I have to emulate the QWidget::normalGeometry() function.

I've tested it with Linux and Windows.





Index: frontends/qt4/lyx_gui.C
===================================================================
--- frontends/qt4/lyx_gui.C     (Revision 14125)
+++ frontends/qt4/lyx_gui.C     (Arbeitskopie)
@@ -233,19 +233,26 @@
        // this can't be done before because it needs the Languages object
        initEncodings();
 
-       boost::shared_ptr<QtView> view_ptr(new QtView(width, height));
+       boost::shared_ptr<QtView> view_ptr(new QtView);
        LyX::ref().addLyXView(view_ptr);
 
        QtView & view = *view_ptr.get();
 
        view.init();
-               
-       if (posx != -1 && posy != -1) {         
-               view.setGeometry(posx, posy, width, height);
-               if (maximize)
-                       view.setWindowState(Qt::WindowMaximized);
-       }
 
+       if (!LyX::geometryOption())
+               if (posx != -1 && posy != -1) { 
+#ifdef Q_OS_WIN32
+                       view.setGeometry(posx, posy, width, height);
+#else
+                       // X11: use frameGeometry position
+                       view.setGeometry(0, 0, width, height);
+                       view.move(posx, posy);
+#endif
+                       if (maximize)
+                               view.setWindowState(Qt::WindowMaximized);
+               }
+
        view.show();
 
        // FIXME: some code below needs moving
Index: frontends/qt4/QtView.C
===================================================================
--- frontends/qt4/QtView.C      (Revision 14125)
+++ frontends/qt4/QtView.C      (Arbeitskopie)
@@ -70,7 +70,7 @@
 } // namespace anon
 
 
-QtView::QtView(unsigned int width, unsigned int height)
+QtView::QtView()
        : QMainWindow(), LyXView(), commandbuffer_(0)
 {
        mainWidget_ = this;
@@ -78,7 +78,8 @@
 //     setToolButtonStyle(Qt::ToolButtonIconOnly);
 //     setIconSize(QSize(12,12));
 
-       bufferview_.reset(new BufferView(this, width, height));
+       // -geometry could set the width and hight
+       bufferview_.reset(new BufferView(this, geometry().width(), 
geometry().height()));
 
        menubar_.reset(new QLMenubar(this, menubackend));
        connect(menuBar(), SIGNAL(triggered(QAction *)), this, 
SLOT(updateMenu(QAction *)));
@@ -176,12 +177,44 @@
        return qApp->activeWindow() == this;
 }
 
+QRect QtView::qtViewGeometry() const
+{
+       QRect rec;
+       // setX/Y changes the size!
+       rec.setX(frameGeometry().x());
+       rec.setY(frameGeometry().y());
+       rec.setWidth(geometry().width());
+       rec.setHeight(geometry().height());
+       return rec;
+}
 
+void QtView::resizeEvent(QResizeEvent *)
+{
+       if(!isMaximized())
+               showGeometry_ = qtViewGeometry();
+}
+
+void QtView::moveEvent(QMoveEvent *)
+{
+       if(!isMaximized())
+               showGeometry_ = qtViewGeometry();
+}
+
 void QtView::closeEvent(QCloseEvent *)
 {
-       QRect geometry = normalGeometry();
+       QRect geometry;
+#ifdef Q_OS_WIN32
+       geometry = normalGeometry();
+#else
+       if (isMaximized()) 
+               geometry = showGeometry_;       
+       else
+               geometry = qtViewGeometry();
+
+#endif
+
+       // save windows size and position
        Session & session = LyX::ref().session();
-       // save windows size and position
        session.saveSessionInfo("WindowWidth", 
convert<string>(geometry.width()));
        session.saveSessionInfo("WindowHeight", 
convert<string>(geometry.height()));
        session.saveSessionInfo("WindowIsMaximized", (isMaximized() ? "yes" : 
"no"));
@@ -199,6 +232,8 @@
 {
        QMainWindow::setWindowTitle(qt_("LyX"));
        QMainWindow::show();
+       if(!isMaximized())
+               showGeometry_ = qtViewGeometry();
 }
 
 
Index: frontends/qt4/QtView.h
===================================================================
--- frontends/qt4/QtView.h      (Revision 14125)
+++ frontends/qt4/QtView.h      (Arbeitskopie)
@@ -46,8 +46,8 @@
 class QtView : public QMainWindow, public LyXView {
        Q_OBJECT
 public:
-       /// create a main window of the given dimensions
-       QtView(unsigned int w, unsigned int h);
+       /// create a main window 
+       QtView();
 
        ~QtView();
 
@@ -84,6 +84,13 @@
 protected:
        /// make sure we quit cleanly
        virtual void closeEvent(QCloseEvent * e);
+
+       /// 
+       virtual void resizeEvent(QResizeEvent * e);
+
+       /// 
+       virtual void moveEvent(QMoveEvent * e);
+
 private:
        /// focus the command buffer widget
        void focus_command_widget();
@@ -105,6 +112,13 @@
 
        ///
        static QMainWindow* mainWidget_;
+
+       ///
+       QRect qtViewGeometry() const;
+       
+       ///
+       QRect showGeometry_;
+
 };
 
 } // namespace frontend
Index: lyx_main.C
===================================================================
--- lyx_main.C  (Revision 14125)
+++ lyx_main.C  (Arbeitskopie)
@@ -973,6 +973,14 @@
 } // namespace anon
 
 
+bool LyX::geometryOption()
+{
+       return geometryOption_;
+}
+
+bool LyX::geometryOption_ = false;
+
+
 bool LyX::easyParse(int & argc, char * argv[])
 {
        std::map<string, cmd_helper> cmdmap;
@@ -995,6 +1003,11 @@
                std::map<string, cmd_helper>::const_iterator it
                        = cmdmap.find(argv[i]);
 
+               // check for X11 -geometry option
+               if (argv[i] == string("-geometry"))
+                       geometryOption_ = true;
+
+
                // don't complain if not found - may be parsed later
                if (it == cmdmap.end())
                        continue;
Index: lyx_main.h
===================================================================
--- lyx_main.h  (Revision 14125)
+++ lyx_main.h  (Arbeitskopie)
@@ -65,6 +65,9 @@
         */
        Buffer const * const updateInset(InsetBase const *) const;
 
+       /// returns true when '-geometry' was used in the command line
+       static bool geometryOption();
+
 private:
        static boost::scoped_ptr<LyX> singleton_;
 
@@ -107,6 +110,11 @@
        ///
        typedef std::list<boost::shared_ptr<LyXView> > ViewList;
        ViewList views_;
+
+       /// 
+       static bool geometryOption_;
+
+
 };
 
 #endif // LYX_MAIN_H

Reply via email to