From cb5ea1573b0caab1bba693e0523e4ca06cdafdce Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 26 Mar 2013 14:59:14 +0000 Subject: [PATCH] Linux window SHM repainting fix. --- .../juce_gui_basics/native/juce_linux_Windowing.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp index 9bb48ee3cc..1465e5efaf 100644 --- a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp @@ -1789,7 +1789,7 @@ private: : peer (p), lastTimeImageUsed (0) { #if JUCE_USE_XSHM - shmCompletedDrawing = true; + shmPaintsPending = 0; useARGBImagesForRendering = XSHMHelpers::isShmAvailable(); @@ -1811,7 +1811,7 @@ private: void timerCallback() { #if JUCE_USE_XSHM - if (! shmCompletedDrawing) + if (shmPaintsPending != 0) return; #endif @@ -1838,7 +1838,7 @@ private: void performAnyPendingRepaintsNow() { #if JUCE_USE_XSHM - if (! shmCompletedDrawing) + if (shmPaintsPending != 0) { startTimer (repaintTimerPeriod); return; @@ -1888,7 +1888,7 @@ private: for (const Rectangle* i = originalRepaintRegion.begin(), * const e = originalRepaintRegion.end(); i != e; ++i) { #if JUCE_USE_XSHM - shmCompletedDrawing = false; + ++shmPaintsPending; #endif static_cast (image.getPixelData()) @@ -1903,7 +1903,7 @@ private: } #if JUCE_USE_XSHM - void notifyPaintCompleted() { shmCompletedDrawing = true; } + void notifyPaintCompleted() noexcept { --shmPaintsPending; } #endif private: @@ -1915,7 +1915,8 @@ private: RectangleList regionsNeedingRepaint; #if JUCE_USE_XSHM - bool useARGBImagesForRendering, shmCompletedDrawing; + bool useARGBImagesForRendering; + int shmPaintsPending; #endif JUCE_DECLARE_NON_COPYABLE (LinuxRepaintManager) };