void DesktopWindow::updateFromSettings(Settings& settings, bool changeSlide) { setDesktopFolder(); setWallpaperFile(settings.wallpaper()); setWallpaperMode(settings.wallpaperMode()); setLastSlide(settings.lastSlide()); QString wallpaperDir = settings.wallpaperDir(); if(wallpaperDir_ != wallpaperDir) { changeSlide = true; // another wallpapaer directory; change slide! } setWallpaperDir(wallpaperDir); int interval = settings.slideShowInterval(); if(interval > 0 && (interval < MIN_SLIDE_INTERVAL || interval > MAX_SLIDE_INTERVAL)) { interval = qBound(MIN_SLIDE_INTERVAL, interval, MAX_SLIDE_INTERVAL); settings.setSlideShowInterval(interval); } setSlideShowInterval(interval); setWallpaperRandomize(settings.wallpaperRandomize()); setFont(settings.desktopFont()); setIconSize(Fm::FolderView::IconMode, QSize(settings.desktopIconSize(), settings.desktopIconSize())); setMargins(settings.desktopCellMargins()); // setIconSize and setMargins may trigger relayout of items by QListView, so we need to do the layout again. queueRelayout(); setForeground(settings.desktopFgColor()); setBackground(settings.desktopBgColor()); setShadow(settings.desktopShadowColor()); showWmMenu_ = settings.showWmMenu(); if(slideShowInterval_ > 0 && QFileInfo(wallpaperDir_).isDir()) { if(!wallpaperTimer_) { changeSlide = true; // slideshow activated; change slide! wallpaperTimer_ = new QTimer(); connect(wallpaperTimer_, &QTimer::timeout, this, &DesktopWindow::nextWallpaper); } else { wallpaperTimer_->stop(); // restart the timer after updating wallpaper } if(changeSlide) { pickWallpaper(); } else if(QFile::exists(lastSlide_)) { /* show the last slide if it still exists, otherwise show the wallpaper until timeout */ wallpaperFile_ = lastSlide_; } } else if(wallpaperTimer_) { wallpaperTimer_->stop(); delete wallpaperTimer_; wallpaperTimer_ = nullptr; } updateWallpaper(); update(); if(wallpaperTimer_) { wallpaperTimer_->start(slideShowInterval_); } }
void DesktopWindow::updateFromSettings(Settings& settings) { setDesktopFolder(); setWallpaperFile(settings.wallpaper()); setWallpaperMode(settings.wallpaperMode()); setFont(settings.desktopFont()); setIconSize(Fm::FolderView::IconMode, QSize(settings.desktopIconSize(), settings.desktopIconSize())); setMargins(settings.desktopCellMargins()); // setIconSize and setMargins may trigger relayout of items by QListView, so we need to do the layout again. queueRelayout(); setForeground(settings.desktopFgColor()); setBackground(settings.desktopBgColor()); setShadow(settings.desktopShadowColor()); showWmMenu_ = settings.showWmMenu(); updateWallpaper(); update(); }