From 43c669fb13fafe6d551db68380d0b6382c551806 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Mon, 25 Aug 2014 20:55:03 +0200 Subject: [PATCH] Fix the -geometry command line argument for Windows. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 27 ++++++++++++++++++++++++++- status.21x | 2 ++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/frontends/qt4/GuiApplication.cpp b/src/frontends/qt4/GuiApplication.cpp index b4960b2094..88dd8847e8 100644 --- a/src/frontends/qt4/GuiApplication.cpp +++ b/src/frontends/qt4/GuiApplication.cpp @@ -86,6 +86,7 @@ #include #include #include +#include #include #include #include @@ -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(); diff --git a/status.21x b/status.21x index 40862613d3..f8bd25d63a 100644 --- a/status.21x +++ b/status.21x @@ -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 -- 2.39.5