vcl/source/window/syswin.cxx |   29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

New commits:
commit 105d129683b0e88bbb8e682d308786a587aa895f
Author:     Xisco Fauli <[email protected]>
AuthorDate: Fri Aug 19 12:53:16 2022 +0200
Commit:     Xisco Fauli <[email protected]>
CommitDate: Tue Aug 23 11:30:15 2022 +0200

    tdf#150236: Revert "avoid uninitialized data when handling WindowState"
    
    This reverts commit 8b46093b27b065ac9b537348ed909530b5ffd588.
    
    Reason for revert: Considering the number of bugs already reported
    for this issue since LibreOffice 7.4 was released, I would like
    to revert this commit only on libreoffice-7-4 branch.
    In master, the issue got fixed by 8b6000f6075725b2e17b8fa745251ea96d7185f1
    < WIN drop window state redundancies > but reading the discussion
    in https://gerrit.libreoffice.org/c/core/+/135809, it might be risky
    to backport it to libreoffice-7-4, thus I prefer to revert this patch
    
    Change-Id: I5c78d165afed59a3d578f53356682425c9de2cd3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138534
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>
    Reviewed-by: Luboš Luňák <[email protected]>
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx
index 113b2da02689..fa053499d623 100644
--- a/vcl/source/window/syswin.cxx
+++ b/vcl/source/window/syswin.cxx
@@ -755,10 +755,7 @@ void SystemWindow::GetWindowState(vcl::WindowData& rData) 
const
         return;
 
     if ( mbSysChild )
-    {
-        rData.setMask( vcl::WindowDataMask::NONE );
         return;
-    }
 
     const vcl::Window* pWindow = this;
     while ( pWindow->mpWindowImpl->mpBorderWindow )
@@ -767,11 +764,9 @@ void SystemWindow::GetWindowState(vcl::WindowData& rData) 
const
     if ( pWindow->mpWindowImpl->mbFrame )
     {
         vcl::WindowData aState;
+        aState.setMask(vcl::WindowDataMask::All);
         if ( mpWindowImpl->mpFrame->GetWindowState( &aState ) )
         {
-            // Limit mask only to what we've received, the rest is not set.
-            nValidMask &= aState.mask();
-            rData.setMask( nValidMask );
             if ( nValidMask & vcl::WindowDataMask::X )
                 rData.setX( aState.x() );
             if ( nValidMask & vcl::WindowDataMask::Y )
@@ -780,14 +775,26 @@ void SystemWindow::GetWindowState(vcl::WindowData& rData) 
const
                 rData.setWidth( aState.width() );
             if ( nValidMask & vcl::WindowDataMask::Height )
                 rData.setHeight( aState.height() );
-            if ( nValidMask & vcl::WindowDataMask::MaximizedX )
+            if ( aState.mask() & vcl::WindowDataMask::MaximizedX )
+            {
                 rData.SetMaximizedX( aState.GetMaximizedX() );
-            if ( nValidMask & vcl::WindowDataMask::MaximizedY )
+                nValidMask |= vcl::WindowDataMask::MaximizedX;
+            }
+            if ( aState.mask() & vcl::WindowDataMask::MaximizedY )
+            {
                 rData.SetMaximizedY( aState.GetMaximizedY() );
-            if ( nValidMask & vcl::WindowDataMask::MaximizedWidth )
+                nValidMask |= vcl::WindowDataMask::MaximizedY;
+            }
+            if ( aState.mask() & vcl::WindowDataMask::MaximizedWidth )
+            {
                 rData.SetMaximizedWidth( aState.GetMaximizedWidth() );
-            if ( nValidMask & vcl::WindowDataMask::MaximizedHeight )
+                nValidMask |= vcl::WindowDataMask::MaximizedWidth;
+            }
+            if ( aState.mask() & vcl::WindowDataMask::MaximizedHeight )
+            {
                 rData.SetMaximizedHeight( aState.GetMaximizedHeight() );
+                nValidMask |= vcl::WindowDataMask::MaximizedHeight;
+            }
             if ( nValidMask & vcl::WindowDataMask::State )
             {
                 // #94144# allow Minimize again, should be masked out when 
read from configuration
@@ -807,8 +814,6 @@ void SystemWindow::GetWindowState(vcl::WindowData& rData) 
const
         Size    aSize = GetSizePixel();
         vcl::WindowState nState = vcl::WindowState::NONE;
 
-        nValidMask &= vcl::WindowDataMask::PosSizeState;
-        rData.setMask( nValidMask );
         if (nValidMask & vcl::WindowDataMask::X)
             rData.setX(aPos.X());
         if (nValidMask & vcl::WindowDataMask::Y)

Reply via email to