Trying to fix #10164 (crash on zoom in/out)

This happens due to infinite recursion when syncing extent between
map canvas and map renderer. Not entirely sure why, seems to happen
only on 32bit systems.
This commit is contained in:
Martin Dobias 2014-06-04 19:00:53 +07:00
parent 32ddb2084f
commit e6b337e323
2 changed files with 15 additions and 0 deletions

View File

@ -89,6 +89,7 @@ QgsMapCanvasRendererSync::QgsMapCanvasRendererSync( QgsMapCanvas* canvas, QgsMap
: QObject( canvas )
, mCanvas( canvas )
, mRenderer( renderer )
, mSyncingExtent( false )
{
connect( mCanvas, SIGNAL( extentsChanged() ), this, SLOT( onExtentC2R() ) );
connect( mRenderer, SIGNAL( extentsChanged() ), this, SLOT( onExtentR2C() ) );
@ -109,12 +110,24 @@ QgsMapCanvasRendererSync::QgsMapCanvasRendererSync( QgsMapCanvas* canvas, QgsMap
void QgsMapCanvasRendererSync::onExtentC2R()
{
// protection against possible bounce back
if ( mSyncingExtent )
return;
mSyncingExtent = true;
mRenderer->setExtent( mCanvas->mapSettings().extent() );
mSyncingExtent = false;
}
void QgsMapCanvasRendererSync::onExtentR2C()
{
// protection against possible bounce back
if ( mSyncingExtent )
return;
mSyncingExtent = true;
mCanvas->setExtent( mRenderer->extent() );
mSyncingExtent = false;
}
void QgsMapCanvasRendererSync::onMapUnitsC2R()

View File

@ -662,6 +662,8 @@ class QgsMapCanvasRendererSync : public QObject
protected:
QgsMapCanvas* mCanvas;
QgsMapRenderer* mRenderer;
bool mSyncingExtent;
};