sw/source/core/view/viewsh.cxx |   20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

New commits:
commit a56cda359b45a900d0b5d017693efccf3b5b2e59
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Tue Aug 18 09:59:46 2015 +0200

    tdf#93096 sw: fix selection with keyboard outside current view
    
    Regression from commit c9175a1bd3249ad573ae6827bf19963a3ebe2fbc
    (SwViewShell::ImplEndAction: avoid direct PaintDesktop(), 2015-07-03),
    the problem is that while going via InvalidateWindows() is fine for the
    double-buffering case, it has side effects when painting directly, so
    revert back to the old code in that case.
    
    Change-Id: Ib1e3b143f5cfe2c6ab8b102a1a2064900282f136
    (cherry picked from commit 222f10e773ba51a19880be1b798990260c198147)
    Reviewed-on: https://gerrit.libreoffice.org/17835
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index 9cb6941..1b4b80d 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -405,7 +405,25 @@ void SwViewShell::ImplEndAction( const bool bIdleEnd )
                     }
                     if ( bPaint )
                     {
-                        InvalidateWindows(aRect.SVRect());
+                        if (GetWin() && GetWin()->SupportsDoubleBuffering())
+                            InvalidateWindows(aRect.SVRect());
+                        else
+                        {
+                            // #i75172# begin DrawingLayer paint
+                            // need to do begin/end DrawingLayer preparation 
for each single rectangle of the
+                            // repaint region. I already tried to prepare only 
once for the whole Region. This
+                            // seems to work (and does technically) but fails 
with transparent objects. Since the
+                            // region given to BeginDarwLayers() defines the 
clip region for DrawingLayer paint,
+                            // transparent objects in the single rectangles 
will indeed be painted multiple times.
+                            DLPrePaint2(vcl::Region(aRect.SVRect()));
+
+                            if ( bPaintsFromSystem )
+                                PaintDesktop(*GetOut(), aRect);
+                            
pCurrentLayout->GetCurrShell()->InvalidateWindows(aRect.SVRect());
+
+                            // #i75172# end DrawingLayer paint
+                            DLPostPaint2(true);
+                        }
                     }
                     else
                         lcl_PaintTransparentFormControls(*this, aRect); // 
i#107365
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to