From d3463250a995551fa0202e916af0bf1c7de32cf6 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 18 Jun 2020 21:46:36 +0200 Subject: [PATCH] Add on startup options to show maximized or minimized --- src/core/mainwindow.cpp | 42 ++++++++++++------ src/core/mainwindow.h | 10 +---- src/settings/behavioursettingspage.cpp | 24 +++++----- src/settings/behavioursettingspage.h | 9 ++++ src/settings/behavioursettingspage.ui | 61 ++++++++++++++++++++------ 5 files changed, 101 insertions(+), 45 deletions(-) diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index a6eae2a97..cc3c05b0b 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -249,8 +249,9 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co collection_sort_model_(new QSortFilterProxyModel(this)), track_position_timer_(new QTimer(this)), track_slider_timer_(new QTimer(this)), - initialised_(false), + initialized_(false), was_maximized_(true), + was_minimized_(false), playing_widget_(true), doubleclick_addmode_(BehaviourSettingsPage::AddBehaviour_Append), doubleclick_playmode_(BehaviourSettingsPage::PlayBehaviour_Never), @@ -794,8 +795,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co if (settings_.contains("geometry")) { restoreGeometry(settings_.value("geometry").toByteArray()); } - was_maximized_ = settings_.value("maximized", true).toBool(); - if (was_maximized_) setWindowState(windowState() | Qt::WindowMaximized); if (!ui_->splitter->restoreState(settings_.value("splitter_state").toByteArray())) { ui_->splitter->setSizes(QList() << 250 << width() - 250); @@ -828,7 +827,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co #else QSettings s; s.beginGroup(BehaviourSettingsPage::kSettingsGroup); - StartupBehaviour behaviour = StartupBehaviour(s.value("startupbehaviour", Startup_Remember).toInt()); + BehaviourSettingsPage::StartupBehaviour behaviour = BehaviourSettingsPage::StartupBehaviour(s.value("startupbehaviour", BehaviourSettingsPage::Startup_Remember).toInt()); s.endGroup(); bool hidden = settings_.value("hidden", false).toBool(); if (hidden && (!QSystemTrayIcon::isSystemTrayAvailable() || !tray_icon_ || !tray_icon_->IsVisible())) { @@ -838,14 +837,26 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co } else { switch (behaviour) { - case Startup_AlwaysHide: - hide(); + case BehaviourSettingsPage::Startup_Remember: + was_maximized_ = settings_.value("maximized", true).toBool(); + if (was_maximized_) setWindowState(windowState() | Qt::WindowMaximized); + was_minimized_ = settings_.value("minimized", false).toBool(); + if (was_minimized_) setWindowState(windowState() | Qt::WindowMinimized); + setVisible(!hidden); break; - case Startup_AlwaysShow: + case BehaviourSettingsPage::Startup_Show: show(); break; - case Startup_Remember: - setVisible(!hidden); + case BehaviourSettingsPage::Startup_Hide: + hide(); + break; + case BehaviourSettingsPage::Startup_ShowMaximized: + setWindowState(windowState() | Qt::WindowMaximized); + show(); + break; + case BehaviourSettingsPage::Startup_ShowMinimized: + setWindowState(windowState() | Qt::WindowMinimized); + show(); break; } } @@ -866,10 +877,12 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co if (!options.contains_play_options()) { LoadPlaybackStatus(); } - if (app_->scrobbler()->IsEnabled() && !app_->scrobbler()->IsOffline()) app_->scrobbler()->Submit(); + if (app_->scrobbler()->IsEnabled() && !app_->scrobbler()->IsOffline()) { + app_->scrobbler()->Submit(); + } qLog(Debug) << "Started" << QThread::currentThread(); - initialised_ = true; + initialized_ = true; } @@ -1187,9 +1200,10 @@ void MainWindow::ToggleSearchCoverAuto(const bool checked) { void MainWindow::SaveGeometry() { - if (!initialised_) return; + if (!initialized_) return; settings_.setValue("maximized", isMaximized()); + settings_.setValue("minimized", isMinimized()); settings_.setValue("geometry", saveGeometry()); settings_.setValue("splitter_state", ui_->splitter->saveState()); @@ -1375,10 +1389,12 @@ void MainWindow::SetHiddenInTray(const bool hidden) { // Some window managers don't remember maximized state between calls to hide() and show(), so we have to remember it ourself. if (hidden) { was_maximized_ = isMaximized(); + was_minimized_ = isMinimized(); hide(); } else { - if (was_maximized_) showMaximized(); + if (was_minimized_) { showMinimized(); } + else if (was_maximized_) showMaximized(); else show(); } diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index db690eb89..bab076022 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -106,13 +106,6 @@ class MainWindow : public QMainWindow, public PlatformInterface { static const char *kSettingsGroup; static const char *kAllFilesFilterSpec; - // Don't change the values - enum StartupBehaviour { - Startup_Remember = 1, - Startup_AlwaysShow = 2, - Startup_AlwaysHide = 3, - }; - void SetHiddenInTray(const bool hidden); void CommandlineOptionsReceived(const CommandlineOptions& options); @@ -358,8 +351,9 @@ class MainWindow : public QMainWindow, public PlatformInterface { QTimer *track_slider_timer_; QSettings settings_; - bool initialised_; + bool initialized_; bool was_maximized_; + bool was_minimized_; bool playing_widget_; BehaviourSettingsPage::AddBehaviour doubleclick_addmode_; BehaviourSettingsPage::PlayBehaviour doubleclick_playmode_; diff --git a/src/settings/behavioursettingspage.cpp b/src/settings/behavioursettingspage.cpp index 4631c5af8..623536489 100644 --- a/src/settings/behavioursettingspage.cpp +++ b/src/settings/behavioursettingspage.cpp @@ -169,11 +169,13 @@ void BehaviourSettingsPage::Load() { ui_->checkbox_resumeplayback->setChecked(s.value("resumeplayback", false).toBool()); ui_->checkbox_playingwidget->setChecked(s.value("playing_widget", true).toBool()); - MainWindow::StartupBehaviour behaviour = MainWindow::StartupBehaviour(s.value("startupbehaviour", MainWindow::Startup_Remember).toInt()); + StartupBehaviour behaviour = StartupBehaviour(s.value("startupbehaviour", Startup_Remember).toInt()); switch (behaviour) { - case MainWindow::Startup_AlwaysHide: ui_->radiobutton_alwayshide->setChecked(true); break; - case MainWindow::Startup_AlwaysShow: ui_->radiobutton_alwaysshow->setChecked(true); break; - case MainWindow::Startup_Remember: ui_->radiobutton_remember->setChecked(true); break; + case Startup_Remember: ui_->radiobutton_remember->setChecked(true); break; + case Startup_Show: ui_->radiobutton_show->setChecked(true); break; + case Startup_Hide: ui_->radiobutton_hide->setChecked(true); break; + case Startup_ShowMaximized: ui_->radiobutton_show_maximized->setChecked(true); break; + case Startup_ShowMinimized: ui_->radiobutton_show_minimized->setChecked(true); break; } QString name = language_map_.key(s.value("language").toString()); @@ -211,10 +213,12 @@ void BehaviourSettingsPage::Save() { s.setValue("playing_widget", ui_->checkbox_playingwidget->isChecked()); s.setValue("scrolltrayicon", ui_->checkbox_scrolltrayicon->isChecked()); - MainWindow::StartupBehaviour behaviour = MainWindow::Startup_Remember; - if (ui_->radiobutton_alwayshide->isChecked()) behaviour = MainWindow::Startup_AlwaysHide; - if (ui_->radiobutton_alwaysshow->isChecked()) behaviour = MainWindow::Startup_AlwaysShow; - if (ui_->radiobutton_remember->isChecked()) behaviour = MainWindow::Startup_Remember; + StartupBehaviour behaviour = Startup_Remember; + if (ui_->radiobutton_remember->isChecked()) behaviour = Startup_Remember; + if (ui_->radiobutton_show->isChecked()) behaviour = Startup_Show; + if (ui_->radiobutton_hide->isChecked()) behaviour = Startup_Hide; + if (ui_->radiobutton_show_maximized->isChecked()) behaviour = Startup_ShowMaximized; + if (ui_->radiobutton_show_minimized->isChecked()) behaviour = Startup_ShowMinimized; s.setValue("startupbehaviour", int(behaviour)); s.setValue("language", language_map_.contains(ui_->combobox_language->currentText()) ? language_map_[ui_->combobox_language->currentText()] : QString()); @@ -242,8 +246,8 @@ void BehaviourSettingsPage::Save() { void BehaviourSettingsPage::ShowTrayIconToggled(bool on) { - ui_->radiobutton_alwayshide->setEnabled(on); - if (!on && ui_->radiobutton_alwayshide->isChecked()) ui_->radiobutton_remember->setChecked(true); + ui_->radiobutton_hide->setEnabled(on); + if (!on && ui_->radiobutton_hide->isChecked()) ui_->radiobutton_remember->setChecked(true); ui_->checkbox_keeprunning->setEnabled(on); ui_->checkbox_scrolltrayicon->setEnabled(on); diff --git a/src/settings/behavioursettingspage.h b/src/settings/behavioursettingspage.h index 5ec3045b5..ad271ead1 100644 --- a/src/settings/behavioursettingspage.h +++ b/src/settings/behavioursettingspage.h @@ -41,6 +41,15 @@ public: static const char *kSettingsGroup; + // Don't change the values + enum StartupBehaviour { + Startup_Remember = 1, + Startup_Show = 2, + Startup_Hide = 3, + Startup_ShowMaximized = 4, + Startup_ShowMinimized = 5, + }; + enum PlayBehaviour { PlayBehaviour_Never = 1, PlayBehaviour_IfStopped = 2, diff --git a/src/settings/behavioursettingspage.ui b/src/settings/behavioursettingspage.ui index 13751a0fe..c35dc8d4c 100644 --- a/src/settings/behavioursettingspage.ui +++ b/src/settings/behavioursettingspage.ui @@ -67,20 +67,6 @@ On startup - - - - Always show &the main window - - - - - - - Alwa&ys hide the main window - - - @@ -91,6 +77,34 @@ + + + + Show the main window + + + + + + + Hide the main window + + + + + + + Show the main window maximized + + + + + + + Show the main window minimized + + + @@ -323,6 +337,25 @@ + + checkbox_showtrayicon + checkbox_keeprunning + checkbox_resumeplayback + checkbox_playingwidget + checkbox_scrolltrayicon + radiobutton_remember + radiobutton_show + radiobutton_hide + radiobutton_show_maximized + radiobutton_show_minimized + combobox_language + combobox_menuplaymode + combobox_previousmode + combobox_doubleclickaddmode + combobox_doubleclickplaymode + combobox_doubleclickplaylistaddmode + spinbox_seekstepsec +