From 42de7de21d2cb225ea4736c9af2bfceeaab6b475 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 28 Apr 2019 14:14:19 +0200 Subject: [PATCH] Fix saving playlist columns --- src/core/mainwindow.cpp | 2 +- src/playlist/playlistview.cpp | 47 ++++++++++++++++------------------- src/playlist/playlistview.h | 8 +++--- 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 7d6cf0f5c..33f68801b 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -2200,8 +2200,8 @@ void MainWindow::Exit() { SaveGeometry(); SavePlaybackStatus(); ui_->tabs->SaveSettings(kSettingsGroup); - ui_->playlist->view()->SaveSettings(); ui_->playlist->view()->SaveGeometry(); + ui_->playlist->view()->SaveSettings(); app_->scrobbler()->WriteCache(); if (app_->player()->engine()->is_fadeout_enabled()) { diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 16f253187..57d6b047c 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -143,6 +143,7 @@ PlaylistView::PlaylistView(QWidget *parent) background_initialized_(false), setting_initial_header_layout_(false), read_only_settings_(true), + state_loaded_(false), previous_background_image_opacity_(0.0), fade_animation_(new QTimeLine(1000, this)), force_background_redraw_(false), @@ -170,10 +171,14 @@ PlaylistView::PlaylistView(QWidget *parent) setStyle(style_); setMouseTracking(true); + connect(header_, SIGNAL(sectionResized(int,int,int)), SLOT(SaveGeometry())); + connect(header_, SIGNAL(sectionMoved(int,int,int)), SLOT(SaveGeometry())); + connect(header_, SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), SLOT(SaveGeometry())); + connect(header_, SIGNAL(SectionVisibilityChanged(int,bool)), SLOT(SaveGeometry())); + connect(header_, SIGNAL(sectionResized(int,int,int)), SLOT(InvalidateCachedCurrentPixmap())); connect(header_, SIGNAL(sectionMoved(int,int,int)), SLOT(InvalidateCachedCurrentPixmap())); connect(header_, SIGNAL(SectionVisibilityChanged(int,bool)), SLOT(InvalidateCachedCurrentPixmap())); - connect(header_, SIGNAL(StretchEnabledChanged(bool)), SLOT(SaveSettings())); connect(header_, SIGNAL(StretchEnabledChanged(bool)), SLOT(StretchChanged(bool))); inhibit_autoscroll_timer_->setInterval(kAutoscrollGraceTimeout * 1000); @@ -287,14 +292,17 @@ void PlaylistView::setModel(QAbstractItemModel *m) { void PlaylistView::LoadGeometry() { - QSettings s; - s.beginGroup(Playlist::kSettingsGroup); - QByteArray state(s.value("state").toByteArray()); - s.endGroup(); + if (!state_loaded_) { + QSettings s; + s.beginGroup(Playlist::kSettingsGroup); + state_ = s.value("state").toByteArray(); + state_loaded_ = true; + s.endGroup(); + } - if (!header_->RestoreState(state)) { + if (!header_->RestoreState(state_)) { // Maybe we're upgrading from a version that persisted the state with QHeaderView. - if (!header_->restoreState(state)) { + if (!header_->restoreState(state_)) { header_->HideSection(Playlist::Column_AlbumArtist); header_->HideSection(Playlist::Column_Performer); header_->HideSection(Playlist::Column_Composer); @@ -338,12 +346,8 @@ void PlaylistView::LoadGeometry() { void PlaylistView::SaveGeometry() { - if (!initialized_ || read_only_settings_) return; - - QSettings settings; - settings.beginGroup(Playlist::kSettingsGroup); - settings.setValue("state", header_->SaveState()); - settings.endGroup(); + if (!initialized_ || !state_loaded_) return; + state_ = header_->SaveState(); } @@ -1090,16 +1094,8 @@ void PlaylistView::SaveSettings() { if (!initialized_ || read_only_settings_) return; QSettings s; - - s.beginGroup(PlaylistSettingsPage::kSettingsGroup); - s.setValue("glow_effect", glow_enabled_); - s.endGroup(); - - s.beginGroup(AppearanceSettingsPage::kSettingsGroup); - s.setValue(AppearanceSettingsPage::kBackgroundImageType, background_image_type_); - s.endGroup(); - s.beginGroup(Playlist::kSettingsGroup); + s.setValue("state", header_->SaveState()); s.setValue("column_alignments", QVariant::fromValue(column_alignment_)); s.endGroup(); @@ -1109,6 +1105,7 @@ void PlaylistView::StretchChanged(bool stretch) { if (!initialized_) return; setHorizontalScrollBarPolicy(stretch ? Qt::ScrollBarAlwaysOff : Qt::ScrollBarAsNeeded); + SaveGeometry(); } @@ -1287,15 +1284,15 @@ void PlaylistView::focusInEvent(QFocusEvent *event) { void PlaylistView::ResetColumns() { - read_only_settings_ = true; - setting_initial_header_layout_ = true; QSettings s; s.beginGroup(Playlist::kSettingsGroup); s.remove("state"); s.endGroup(); + state_loaded_ = false; + read_only_settings_ = true; + setting_initial_header_layout_ = true; ReloadSettings(); LoadGeometry(); - ReloadSettings(); read_only_settings_ = false; SetPlaylist(playlist_); diff --git a/src/playlist/playlistview.h b/src/playlist/playlistview.h index d3c0f6796..38304f861 100644 --- a/src/playlist/playlistview.h +++ b/src/playlist/playlistview.h @@ -113,10 +113,10 @@ class PlaylistView : public QTreeView { void setModel(QAbstractItemModel *model); void ResetColumns(); - void SaveGeometry(); public slots: void ReloadSettings(); + void SaveGeometry(); void SaveSettings(); void StopGlowing(); void StartGlowing(); @@ -171,9 +171,7 @@ class PlaylistView : public QTreeView { void MaybeAutoscroll(); void InvalidateCachedCurrentPixmap(); void PlaylistDestroyed(); - void StretchChanged(bool stretch); - void FadePreviousBackgroundImage(qreal value); private: @@ -217,6 +215,7 @@ class PlaylistView : public QTreeView { bool background_initialized_; bool setting_initial_header_layout_; bool read_only_settings_; + bool state_loaded_; QImage background_image_; QImage current_song_cover_art_; @@ -264,6 +263,9 @@ class PlaylistView : public QTreeView { bool drag_over_; ColumnAlignmentMap column_alignment_; + + QByteArray state_; + }; #endif // PLAYLISTVIEW_H