diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-08-18 09:59:46 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-08-18 12:15:29 +0000 |
commit | a56cda359b45a900d0b5d017693efccf3b5b2e59 (patch) | |
tree | 8b3d3b22ccb86ffe9765004605f26f6cd1d79be0 /sw | |
parent | 78a7dfe3aeb8cb42fcc2a370b8ee4979a5560029 (diff) |
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 <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/core/view/viewsh.cxx | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx index 9cb69419f93c..1b4b80da01a0 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 |