]> git.lyx.org Git - features.git/commitdiff
Fix the -geometry command line argument for Windows.
authorEnrico Forestieri <forenr@lyx.org>
Mon, 25 Aug 2014 18:55:03 +0000 (20:55 +0200)
committerEnrico Forestieri <forenr@lyx.org>
Mon, 25 Aug 2014 18:55:03 +0000 (20:55 +0200)
The command line argument -geometry WIDTHxHEIGHT±XOFF±YOFF
specifies a preferred size and location for the main window.
Currently, this is semi-broken on Windows. Indeed, only
specifying WIDTH and HEIGHT places the main window such that
the left and top borders are invisible such that the window cannot
be moved. Moreover, the XOFF and YOFF parts (when present) are
used to specify the distance of the window from the left and top
or right and bottom edges of the screen, when using '+' or '-',
respectively. However, -geometry 800x600-20-20, instead of placing
the window such that its bottom and right edges are at a distance
of 20 pixels from the corresponding screen edges, places the
window such that its left and top borders are out of the screen.
This is corrected by this commit.

src/frontends/qt4/GuiApplication.cpp
status.21x

index b4960b20947dadb54b75672322c40abe74ddb269..88dd8847e87b2e30bfd5388ad37bd113375c96f6 100644 (file)
@@ -86,6 +86,7 @@
 #include <QByteArray>
 #include <QClipboard>
 #include <QDateTime>
+#include <QDesktopWidget>
 #include <QDir>
 #include <QEvent>
 #include <QEventLoop>
@@ -2211,13 +2212,37 @@ void GuiApplication::createView(QString const & geometry_arg, bool autoShow,
 #ifdef Q_WS_WIN
                int x, y;
                int w, h;
-               QRegExp re( "[=]*(?:([0-9]+)[xX]([0-9]+)){0,1}[ ]*(?:([+-][0-9]*)([+-][0-9]*)){0,1}" );
+               QChar sx, sy;
+               QRegExp re( "[=]*(?:([0-9]+)[xX]([0-9]+)){0,1}[ ]*(?:([+-][0-9]*)){0,1}(?:([+-][0-9]*)){0,1}" );
                re.indexIn(geometry_arg);
                w = re.cap(1).toInt();
                h = re.cap(2).toInt();
                x = re.cap(3).toInt();
                y = re.cap(4).toInt();
+               sx = re.cap(3).isEmpty() ? '+' : re.cap(3).at(0);
+               sy = re.cap(4).isEmpty() ? '+' : re.cap(4).at(0);
+               // Set initial geometry such that we can get the frame size.
                view->setGeometry(x, y, w, h);
+               int framewidth = view->geometry().x() - view->x();
+               int titleheight = view->geometry().y() - view->y();
+               // Negative displacements must be interpreted as distances
+               // from the right or bottom screen borders.
+               if (sx == '-' || sy == '-') {
+                       QRect rec = QApplication::desktop()->screenGeometry();
+                       if (sx == '-')
+                               x += rec.width() - w - framewidth;
+                       if (sy == '-')
+                               y += rec.height() - h - titleheight;
+                       view->setGeometry(x, y, w, h);
+               }
+               // Make sure that the left and top frame borders are visible.
+               if (view->x() < 0 || view->y() < 0) {
+                       if (view->x() < 0)
+                               x = framewidth;
+                       if (view->y() < 0)
+                               y = titleheight;
+                       view->setGeometry(x, y, w, h);
+               }
 #endif
        }
        view->setFocus();
index 40862613d36e9dc797100e1e7558ca3ec7b74a86..f8bd25d63a1b57df6a1017249ac5fe6912d86272 100644 (file)
@@ -98,6 +98,8 @@ What's new
 
 - Fix on-screen display of images whose type is not known to LyX (bug 9146).
 
+- Fix the -geometry command line argument for Windows.
+
 
 * INTERNALS