File keep-wallpaper-aspect-ratio-wallpaper-on-screen-resolution-change.diff of Package plasma5-workspace

diff --git a/wallpapers/image/image.cpp b/wallpapers/image/image.cpp
index 0aa72bb..0a65b7d 100644
--- a/wallpapers/image/image.cpp
+++ b/wallpapers/image/image.cpp
@@ -192,7 +192,7 @@ void Image::findPreferedImageInPackage(KPackage::Package &package)
     // choose the nearest resolution, always preferring images with the same aspect ratio
     float best = FLT_MAX;
     float bestWithSameAspectRatio = FLT_MAX;
-    float targetAspectRatio = m_targetSize.width()/(float)m_targetSize.height();
+    float targetAspectRatio = ( m_targetSize.height() > 0 ) ? m_targetSize.width() / (float)m_targetSize.height() : 0;
 
     QString bestImage;
     QString bestImageWithSameAspectRatio;
@@ -201,7 +201,7 @@ void Image::findPreferedImageInPackage(KPackage::Package &package)
         if (candidate == QSize()) {
             continue;
         }
-        float candidateAspectRatio = candidate.width()/(float)candidate.height();
+        float candidateAspectRatio = (candidate.height() > 0 ) ? candidate.width() / (float)candidate.height() : FLT_MAX;
 
         double dist = distance(candidate, m_targetSize);
         //qDebug() << "candidate" << candidate << "distance" << dist << "aspect ratio" << candidateAspectRatio;
@@ -235,9 +235,15 @@ QSize Image::targetSize() const
 
 void Image::setTargetSize(const QSize &size)
 {
+    bool sizeChanged = m_targetSize != size;
     m_targetSize = size;
 
     if (m_mode == SingleImage) {
+        if (sizeChanged) {
+            // If screen size was changed, we may want to select a new preferred image
+            // which has correct aspect ratio for the new screen size.
+            m_wallpaperPackage.removeDefinition("preferred");
+        }
         setSingleImage();
     }
 }
openSUSE Build Service is sponsored by