On So, Ășno 07 2015, Alexander Wolf wrote: > Dear Michal, > > 2015-02-06 15:02 GMT+06:00 Michal Sojka <sojk...@fel.cvut.cz>: > >> I need to configure on which screen Stellarium starts so I put together >> the following patch. I haven't found what is the patch submitting >> procedure, so feel free to point me to the right place. > > We use bazaar for development of the Stellarium - > https://code.launchpad.net/stellarium and receive patches with different > ways - through branches in bazaar, patches in the bug reports, forum's > messages and e-mails.
OK. So I'll keep posting patches via email as I use git and I'm not familiar with Bazaar. > >> On multi-screen setups, Stellarium always starts on primary screen. This >> > patch adds a configuration-file option to configure the screen where >> Stellarium appears. This option is only effective if fullscreen=true. In >> windowed mode, the used screen depends on screen_x and screen_y options. >> >> This was tested on Linux and Windows on top of 0.13.2 and it compiles >> with the current HEAD. >> > > Thank you for the patch but... you should add modifications in the code for > the both cases - fullscreen and windowed mode. Done. See patch v2 below. > >> [video] >> fullscreen = true >> +fullscreen_num = 0 >> > > Maybe screen number will be more predictable here? I renamed it as screenNumber. If it was screen_number, it would sort between screen_h and _w, which I don't like :) > > >> + QRect screenGeom = desktop->screenGeometry(screen); >> + move(QPoint(screenGeom.x(), screenGeom.y())); >> + resize(screenGeom.width(), screenGeom.height()); >> > > Why you use resize() here? This code will be switch Stellarium to "expanded > windowed mode" - not a fullscreen mode. This is to ensure that the window is not larger than the screen. I majority of the windows appears on another screen, the window would appear there. I added comment to the code. > Plus how about multiscreen for X11 > users? This doesn't work as it would probably require using QGuiApplication and other Qt5-only stuff. I'm not sure whether/how do you plan to transition to this. Any way, this is not important as one can set DISPLAY explicitely to make stellarium start on the specific screen. This is mentioned in the commit message. Thank. -Michal From b9d69780bb0247c49acc8e85e37f90b484940d5f Mon Sep 17 00:00:00 2001 From: Michal Sojka <sojk...@fel.cvut.cz> Date: Thu, 5 Feb 2015 21:53:26 +0100 Subject: [PATCH v2] Allow configuring the used screen in multiscreen setups On multi-screen setups, Stellarium always starts on primary screen. This patch adds a configuration-file option to configure the screen where Stellarium appears. This was tested on Windows 7 and several Linux desktops on top of 0.13.2 and it compiles with current HEAD. The results of testing are as follows: - Windows 7: Works correctly. - Linux/Gnome: Works correctly expect when fullscreen = false and screen_x = screen_y = 0. In this case, the window is positioned in the middle of screen 0. When any of screen_x/y is set to at least 1, the window appears on the right screen. - Linux/Xfce: Fullscreen window always appears on the screen with mouse cursor. - Linux/KDE: Works correctly. Configuring the screen does not work on Linux with multiple X screens, but this is not a problem, because there one can start stellarium with DISPLAY set explicitly like this: DISPLAY=:0.1 stellarium --- data/default_config.ini.cmake | 1 + src/StelMainView.cpp | 18 +++++++++++++++++- src/gui/ConfigurationDialog.cpp | 9 +++++++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/data/default_config.ini.cmake b/data/default_config.ini.cmake index 1334a18..40a0017 100644 --- a/data/default_config.ini.cmake +++ b/data/default_config.ini.cmake @@ -10,6 +10,7 @@ TimeZoneConfiguration = true [video] fullscreen = true +screenNumber = 0 screen_w = 1024 screen_h = 768 screen_x = 0 diff --git a/src/StelMainView.cpp b/src/StelMainView.cpp index b798af8..027f04b 100644 --- a/src/StelMainView.cpp +++ b/src/StelMainView.cpp @@ -38,6 +38,8 @@ #else #include <QGLWidget> #endif +#include <QApplication> +#include <QDesktopWidget> #include <QGuiApplication> #include <QFileInfo> #include <QIcon> @@ -467,8 +469,22 @@ void StelMainView::init(QSettings* conf) // Without this, the screen is not shown on a Mac + we should use resize() for correct work of fullscreen/windowed mode switch. --AW WTF??? resize(size); + QDesktopWidget *desktop = QApplication::desktop(); + int screen = conf->value("video/screenNumber", 0).toInt(); + if (screen < 0 || screen >= desktop->screenCount()) + { + qWarning() << "WARNING: screen" << screen << "not found"; + screen = 0; + } + QRect screenGeom = desktop->screenGeometry(screen); + if (fullscreen) { + // The fullscreen window appears on screen where is the majority of + // the normal window. So we first resize (shrink) the normal window + // to screen area. + move(screenGeom.x(), screenGeom.y()); + resize(screenGeom.width(), screenGeom.height()); setFullScreen(true); } else @@ -476,7 +492,7 @@ void StelMainView::init(QSettings* conf) setFullScreen(false); int x = conf->value("video/screen_x", 0).toInt(); int y = conf->value("video/screen_y", 0).toInt(); - move(x, y); + move(x + screenGeom.x(), y + screenGeom.y()); } flagInvertScreenShotColors = conf->value("main/invert_screenshots_colors", false).toBool(); diff --git a/src/gui/ConfigurationDialog.cpp b/src/gui/ConfigurationDialog.cpp index 3cb1ef6..3ae2f3e 100644 --- a/src/gui/ConfigurationDialog.cpp +++ b/src/gui/ConfigurationDialog.cpp @@ -65,6 +65,7 @@ #include <QFileDialog> #include <QComboBox> #include <QDir> +#include <QDesktopWidget> ConfigurationDialog::ConfigurationDialog(StelGui* agui, QObject* parent) : StelDialog(parent) @@ -708,15 +709,19 @@ void ConfigurationDialog::saveCurrentViewOptions() conf->setValue("main/screenshot_dir", StelFileMgr::getScreenshotDir()); conf->setValue("main/invert_screenshots_colors", StelMainView::getInstance().getFlagInvertScreenShotColors()); + int screenNum = qApp->desktop()->screenNumber(&StelMainView::getInstance()); + conf->setValue("video/screenNumber", screenNum); + // full screen and window size conf->setValue("video/fullscreen", StelMainView::getInstance().isFullScreen()); if (!StelMainView::getInstance().isFullScreen()) { + QRect screenGeom = QApplication::desktop()->screenGeometry(screenNum); QWidget& mainWindow = StelMainView::getInstance(); conf->setValue("video/screen_w", mainWindow.size().width()); conf->setValue("video/screen_h", mainWindow.size().height()); - conf->setValue("video/screen_x", mainWindow.x()); - conf->setValue("video/screen_y", mainWindow.y()); + conf->setValue("video/screen_x", mainWindow.x() - screenGeom.x()); + conf->setValue("video/screen_y", mainWindow.y() - screenGeom.y()); } // clear the restore defaults flag if it is set. -- 2.1.4 ------------------------------------------------------------------------------ Dive into the World of Parallel Programming. The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Stellarium-pubdevel mailing list Stellarium-pubdevel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/stellarium-pubdevel