vcl/inc/unx/gtk/gtkframe.hxx |    3 ++-
 vcl/unx/gtk3/gtkframe.cxx    |   11 ++++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

New commits:
commit dfa2688357941d61765011cce0e511c9fd1f42a4
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Fri Aug 22 09:59:54 2025 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Fri Aug 22 13:09:16 2025 +0200

    gtk: Don't force redraw if "resize" didn't resize
    
    rather spurious resize events seen on pressing and holding gtk scrollbar
    in calc in tdf#156297 where the main topic is windows/gen
    
    Change-Id: I65591a09be1d3e3f5a92407df8a550a6bc2296d1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190050
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 41790d893dba..6533af1ae583 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -412,7 +412,8 @@ class GtkSalFrame final : public SalFrame
 
     void setMinMaxSize();
 
-    void AllocateFrame();
+    //returns true if FrameSize changed
+    bool AllocateFrame();
     void TriggerPaintEvent();
 
     void updateWMClass();
diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx
index 7d78bef83bd1..a1583a07269d 100644
--- a/vcl/unx/gtk3/gtkframe.cxx
+++ b/vcl/unx/gtk3/gtkframe.cxx
@@ -2140,12 +2140,12 @@ void GtkSalFrame::SetMinClientSize( tools::Long nWidth, 
tools::Long nHeight )
     }
 }
 
-void GtkSalFrame::AllocateFrame()
+bool GtkSalFrame::AllocateFrame()
 {
     basegfx::B2IVector aFrameSize( maGeometry.width(), maGeometry.height() );
     if (m_pSurface && m_aFrameSize.getX() == aFrameSize.getX() &&
                       m_aFrameSize.getY() == aFrameSize.getY() )
-        return;
+        return false;
 
     if( aFrameSize.getX() == 0 )
         aFrameSize.setX( 1 );
@@ -2166,6 +2166,8 @@ void GtkSalFrame::AllocateFrame()
 
     if (m_pGraphics)
         m_pGraphics->setSurface(m_pSurface, m_aFrameSize);
+
+    return true;
 }
 
 void GtkSalFrame::SetPosSize( tools::Long nX, tools::Long nY, tools::Long 
nWidth, tools::Long nHeight, sal_uInt16 nFlags )
@@ -3877,10 +3879,9 @@ void GtkSalFrame::DrawingAreaResized(GtkWidget* pWidget, 
int nWidth, int nHeight
         return;
     maGeometry.setSize({ nWidth, nHeight });
     bool bRealized = gtk_widget_get_realized(pWidget);
-    if (bRealized)
-        AllocateFrame();
+    bool bTriggerPaintEvent = bRealized && AllocateFrame();
     CallCallbackExc( SalEvent::Resize, nullptr );
-    if (bRealized)
+    if (bTriggerPaintEvent)
         TriggerPaintEvent();
 }
 

Reply via email to