From 81bf61867f39e89a89af970db1a9db88eb85bfab Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 11 May 2021 15:53:42 +1000 Subject: [PATCH] Amending QTwindow geometry config to resovle #1245 + Code to initialise config values. + Added "load_geometry" variable so that you can load set values but not have to "save_on_exit" Commit amended for code style by Adam Honse --- qt/OpenRGBDialog2.cpp | 69 +++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/qt/OpenRGBDialog2.cpp b/qt/OpenRGBDialog2.cpp index 1578adad..a020c55c 100644 --- a/qt/OpenRGBDialog2.cpp +++ b/qt/OpenRGBDialog2.cpp @@ -169,25 +169,60 @@ OpenRGBDialog2::OpenRGBDialog2(QWidget *parent) : QMainWindow(parent), ui(new Op ui_settings = settings_manager->GetSettings(ui_string); + /*-----------------------------------------------------*\ + | If geometry info doesn't exist, write it to config | + \*-----------------------------------------------------*/ + if(!ui_settings.contains("geometry")) + { + json geometry_settings; + + geometry_settings["load_geometry"] = false; + geometry_settings["save_on_exit"] = false; + geometry_settings["x"] = 0; + geometry_settings["y"] = 0; + geometry_settings["width"] = 0; + geometry_settings["height"] = 0; + + ui_settings["geometry"] = geometry_settings; + + settings_manager->SetSettings(ui_string, ui_settings); + settings_manager->SaveSettings(); + } + /*-----------------------------------------------------*\ | If geometry information exists in settings, apply it | \*-----------------------------------------------------*/ - if(ui_settings.contains("geometry")) + bool load_geometry = false; + + if(ui_settings["geometry"].contains("load_geometry")) { - if( ui_settings["geometry"].contains("x") - && ui_settings["geometry"].contains("y") - && ui_settings["geometry"].contains("width") - && ui_settings["geometry"].contains("height")) - { - QRect set_window; + load_geometry = ui_settings["geometry"]["load_geometry"].get(); + } + if(load_geometry) + { + QRect set_window; + + /*-----------------------------------------------------*\ + | x and y can be set independent of width and height | + | QT attempts to clamp these values in case the user | + | enters invalid numbers | + \*-----------------------------------------------------*/ + if( ui_settings["geometry"].contains("x") + && ui_settings["geometry"].contains("y")) + { set_window.setX(ui_settings["geometry"]["x"].get()); set_window.setY(ui_settings["geometry"]["y"].get()); + } + + if( ui_settings["geometry"].contains("width") + && ui_settings["geometry"].contains("height")) + { set_window.setWidth(ui_settings["geometry"]["width"].get()); set_window.setHeight(ui_settings["geometry"]["height"].get()); - - setGeometry(set_window); } + + setGeometry(set_window); } /*-----------------------------------------------------*\ @@ -291,7 +326,7 @@ OpenRGBDialog2::OpenRGBDialog2(QWidget *parent) : QMainWindow(parent), ui(new Op } else { - MinimizeToTray = ui_settings["minimize_on_close"]; + MinimizeToTray = ui_settings["minimize_on_close"].get(); } connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_ReShow(QSystemTrayIcon::ActivationReason))); @@ -395,14 +430,16 @@ OpenRGBDialog2::~OpenRGBDialog2() if(ui_settings.contains("geometry")) { - if(ui_settings["geometry"].contains("save_on_exit")) + if( ui_settings["geometry"].contains("load_geometry") + && ui_settings["geometry"].contains("save_on_exit")) { - if(ui_settings["geometry"]["save_on_exit"] == true) + if( ui_settings["geometry"]["load_geometry"].get() + && ui_settings["geometry"]["save_on_exit"].get()) { - ui_settings["geometry"]["x"] = geometry().x(); - ui_settings["geometry"]["y"] = geometry().y(); - ui_settings["geometry"]["width"] = geometry().width(); - ui_settings["geometry"]["height"] = geometry().height(); + ui_settings["geometry"]["x"] = geometry().x(); + ui_settings["geometry"]["y"] = geometry().y(); + ui_settings["geometry"]["width"] = geometry().width(); + ui_settings["geometry"]["height"] = geometry().height(); settings_manager->SetSettings(ui_string, ui_settings); settings_manager->SaveSettings();