Blame SOURCES/qtwayland-fix-issue-with-repeated-window-size-changes.patch

2702c2
From 14d066c61025e548227ccd8d655e80ffa31fa15e Mon Sep 17 00:00:00 2001
2702c2
From: Jaeyoon Jung <jaeyoon.jung@lge.com>
2702c2
Date: Mon, 15 Feb 2021 08:31:06 +0900
2702c2
Subject: [PATCH] Fix issue with repeated window size changes
2702c2
2702c2
Check if the new window size is different from the size requested
2702c2
previously before calling wl_egl_window_resize. It addresses the issue
2702c2
where repeated setGeometry calls between two sizes might not work as
2702c2
expected. The problem occurs when wl_egl_window_get_attached_size does
2702c2
not get the same size that was requested by the previous setGeometry
2702c2
call. If the returned size happened to match the new size instead,
2702c2
we would mistakenly skip the resize.
2702c2
2702c2
Change-Id: Iafe4a91cc707f854b9099b6109b6be1423d7bd29
2702c2
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2702c2
---
2702c2
 .../client/wayland-egl/qwaylandeglwindow.cpp                  | 4 +++-
2702c2
 .../client/wayland-egl/qwaylandeglwindow.h                    | 1 +
2702c2
 2 files changed, 4 insertions(+), 1 deletion(-)
2702c2
2702c2
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
2702c2
index 1e8dc06f7..355aca864 100644
2702c2
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
2702c2
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
2702c2
@@ -131,14 +131,16 @@ void QWaylandEglWindow::updateSurface(bool create)
2702c2
             if (!disableResizeCheck) {
2702c2
                 wl_egl_window_get_attached_size(m_waylandEglWindow, &current_width, &current_height);
2702c2
             }
2702c2
-            if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height())) {
2702c2
+            if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height()) || m_requestedSize != sizeWithMargins) {
2702c2
                 wl_egl_window_resize(m_waylandEglWindow, sizeWithMargins.width(), sizeWithMargins.height(), mOffset.x(), mOffset.y());
2702c2
+                m_requestedSize = sizeWithMargins;
2702c2
                 mOffset = QPoint();
2702c2
 
2702c2
                 m_resize = true;
2702c2
             }
2702c2
         } else if (create && wlSurface()) {
2702c2
             m_waylandEglWindow = wl_egl_window_create(wlSurface(), sizeWithMargins.width(), sizeWithMargins.height());
2702c2
+            m_requestedSize = sizeWithMargins;
2702c2
         }
2702c2
 
2702c2
         if (!m_eglSurface && m_waylandEglWindow && create) {
2702c2
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
2702c2
index 5b1f4d56f..0079dfef8 100644
2702c2
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
2702c2
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
2702c2
@@ -88,6 +88,7 @@ class QWaylandEglWindow : public QWaylandWindow
2702c2
     mutable QOpenGLFramebufferObject *m_contentFBO = nullptr;
2702c2
 
2702c2
     QSurfaceFormat m_format;
2702c2
+    QSize m_requestedSize;
2702c2
 };
2702c2
 
2702c2
 }