Remember monitor of main window

This commit is contained in:
heckflosse
2017-07-17 15:22:31 +02:00
parent 9a13e4b360
commit aab3a60356
4 changed files with 26 additions and 14 deletions

View File

@@ -88,7 +88,7 @@ void EditWindow::restoreWindow() {
int meowMonitor = 0; int meowMonitor = 0;
if(isMultiDisplayEnabled()) { if(isMultiDisplayEnabled()) {
if(options.meowMonitor >= 0) { // use display from last session if available if(options.meowMonitor >= 0) { // use display from last session if available
meowMonitor = std::min(options.meowMonitor, Gdk::Screen::get_default()->get_n_monitors()); meowMonitor = std::min(options.meowMonitor, Gdk::Screen::get_default()->get_n_monitors() - 1);
} else { // Determine the other display } else { // Determine the other display
const Glib::RefPtr< Gdk::Window >& wnd = parent->get_window(); const Glib::RefPtr< Gdk::Window >& wnd = parent->get_window();
meowMonitor = parent->get_screen()->get_monitor_at_window(wnd) == 0 ? 1 : 0; meowMonitor = parent->get_screen()->get_monitor_at_window(wnd) == 0 ? 1 : 0;

View File

@@ -295,6 +295,7 @@ void Options::setDefaults ()
windowX = 0; windowX = 0;
windowY = 0; windowY = 0;
windowMaximized = true; windowMaximized = true;
windowMonitor = 0;
meowMonitor = -1; meowMonitor = -1;
meowFullScreen = false; meowFullScreen = false;
meowMaximized = true; meowMaximized = true;
@@ -1265,6 +1266,10 @@ int Options::readFromFile (Glib::ustring fname)
windowY = keyFile.get_integer ("GUI", "WindowY"); windowY = keyFile.get_integer ("GUI", "WindowY");
} }
if (keyFile.has_key ("GUI", "WindowMonitor")) {
windowMonitor = keyFile.get_integer ("GUI", "WindowMonitor");
}
if (keyFile.has_key ("GUI", "MeowMonitor")) { if (keyFile.has_key ("GUI", "MeowMonitor")) {
meowMonitor = keyFile.get_integer ("GUI", "MeowMonitor"); meowMonitor = keyFile.get_integer ("GUI", "MeowMonitor");
} }
@@ -2044,6 +2049,7 @@ int Options::saveToFile (Glib::ustring fname)
keyFile.set_integer ("GUI", "WindowHeight", windowHeight); keyFile.set_integer ("GUI", "WindowHeight", windowHeight);
keyFile.set_integer ("GUI", "WindowX", windowX); keyFile.set_integer ("GUI", "WindowX", windowX);
keyFile.set_integer ("GUI", "WindowY", windowY); keyFile.set_integer ("GUI", "WindowY", windowY);
keyFile.set_integer ("GUI", "WindowMonitor", windowMonitor);
keyFile.set_integer ("GUI", "MeowMonitor", meowMonitor); keyFile.set_integer ("GUI", "MeowMonitor", meowMonitor);
keyFile.set_boolean ("GUI", "MeowFullScreen", meowFullScreen); keyFile.set_boolean ("GUI", "MeowFullScreen", meowFullScreen);
keyFile.set_boolean ("GUI", "MeowMaximized", meowMaximized); keyFile.set_boolean ("GUI", "MeowMaximized", meowMaximized);

View File

@@ -137,6 +137,7 @@ public:
int windowWidth; int windowWidth;
int windowHeight; int windowHeight;
bool windowMaximized; bool windowMaximized;
int windowMonitor;
int meowMonitor; int meowMonitor;
bool meowFullScreen; bool meowFullScreen;
bool meowMaximized; bool meowMaximized;

View File

@@ -128,11 +128,19 @@ RTWindow::RTWindow ()
set_default_size(options.windowWidth, options.windowHeight); set_default_size(options.windowWidth, options.windowHeight);
set_modal(false); set_modal(false);
Gdk::Rectangle lMonitorRect;
get_screen()->get_monitor_geometry(std::min(options.windowMonitor, Gdk::Screen::get_default()->get_n_monitors() - 1), lMonitorRect);
if (options.windowMaximized) { if (options.windowMaximized) {
move(lMonitorRect.get_x(), lMonitorRect.get_y());
maximize(); maximize();
} else { } else {
unmaximize(); unmaximize();
move(options.windowX, options.windowY); resize(options.windowWidth, options.windowHeight);
if(options.windowX <= lMonitorRect.get_x() + lMonitorRect.get_width() && options.windowY <= lMonitorRect.get_y() + lMonitorRect.get_height()) {
move(options.windowX, options.windowY);
} else {
move(lMonitorRect.get_x(), lMonitorRect.get_y());
}
} }
on_delete_has_run = false; on_delete_has_run = false;
@@ -597,15 +605,11 @@ bool RTWindow::on_delete_event(GdkEventAny* event)
bool isProcessing = false; bool isProcessing = false;
EditWindow* editWindow = nullptr; EditWindow* editWindow = nullptr;
if (isSingleTabMode() || simpleEditor) { if (isSingleTabMode() || simpleEditor) {
isProcessing = epanel->getIsProcessing(); isProcessing = epanel->getIsProcessing();
} else if (options.multiDisplayMode > 0) { } else if (options.multiDisplayMode > 0) {
editWindow = EditWindow::getInstance(this, false); editWindow = EditWindow::getInstance(this, false);
isProcessing = editWindow->isProcessing();
if (editWindow->isProcessing ()) {
return true;
}
} else { } else {
int pageCount = mainNB->get_n_pages(); int pageCount = mainNB->get_n_pages();
@@ -631,15 +635,14 @@ bool RTWindow::on_delete_event(GdkEventAny* event)
if ((isSingleTabMode() || simpleEditor) && epanel->isRealized()) { if ((isSingleTabMode() || simpleEditor) && epanel->isRealized()) {
epanel->saveProfile(); epanel->saveProfile();
epanel->writeOptions (); epanel->writeOptions ();
} } else {
else { if (options.multiDisplayMode > 0 && editWindow) {
if (options.multiDisplayMode > 0) {
editWindow->closeOpenEditors(); editWindow->closeOpenEditors();
editWindow->writeOptions(); editWindow->writeOptions();
} } else if (epanels.size()) {
// Storing the options of the last EditorPanel before Gtk destroys everything // Storing the options of the last EditorPanel before Gtk destroys everything
// Look at the active panel first, if any, otherwise look at the first one (sorted on the filename) // Look at the active panel first, if any, otherwise look at the first one (sorted on the filename)
else if (epanels.size()) {
int page = mainNB->get_current_page(); int page = mainNB->get_current_page();
Gtk::Widget *w = mainNB->get_nth_page(page); Gtk::Widget *w = mainNB->get_nth_page(page);
bool optionsWritten = false; bool optionsWritten = false;
@@ -668,6 +671,8 @@ bool RTWindow::on_delete_event(GdkEventAny* event)
get_position (options.windowX, options.windowY); get_position (options.windowX, options.windowY);
} }
options.windowMonitor = get_screen()->get_monitor_at_window(get_window());
Options::save (); Options::save ();
hide(); hide();