@@ -3141,8 +3141,12 @@ QgsMapCanvas *QgisApp::createNewMapCanvas( const QString &name )
3141
3141
QgsMapCanvasDockWidget *dock = createNewMapCanvasDock ( name );
3142
3142
if ( !dock )
3143
3143
return nullptr ;
3144
- else
3145
- return dock->mapCanvas ();
3144
+
3145
+ dock->mapCanvas ()->setLayers ( mMapCanvas ->layers () );
3146
+ dock->mapCanvas ()->setExtent ( mMapCanvas ->extent () );
3147
+ dock->mapCanvas ()->setDestinationCrs ( QgsProject::instance ()->crs () );
3148
+ dock->mapCanvas ()->freeze ( false );
3149
+ return dock->mapCanvas ();
3146
3150
}
3147
3151
3148
3152
QgsMapCanvasDockWidget *QgisApp::createNewMapCanvasDock ( const QString &name, bool isFloating, const QRect &dockGeometry, Qt::DockWidgetArea area )
@@ -3170,20 +3174,13 @@ QgsMapCanvasDockWidget *QgisApp::createNewMapCanvasDock( const QString &name, bo
3170
3174
applyProjectSettingsToCanvas ( mapCanvas );
3171
3175
applyDefaultSettingsToCanvas ( mapCanvas );
3172
3176
3173
- mapCanvas->setLayers ( mMapCanvas ->layers () );
3174
- mapCanvas->setExtent ( mMapCanvas ->extent () );
3175
-
3176
- mapCanvas->setDestinationCrs ( QgsProject::instance ()->crs () );
3177
-
3178
-
3179
3177
// add existing annotations to canvas
3180
3178
Q_FOREACH ( QgsAnnotation *annotation, QgsProject::instance ()->annotationManager ()->annotations () )
3181
3179
{
3182
3180
QgsMapCanvasAnnotationItem *canvasItem = new QgsMapCanvasAnnotationItem ( annotation, mapCanvas );
3183
3181
Q_UNUSED ( canvasItem ); // item is already added automatically to canvas scene
3184
3182
}
3185
3183
3186
- mapCanvas->freeze ( false );
3187
3184
markDirty ();
3188
3185
connect ( mapCanvasWidget, &QgsMapCanvasDockWidget::closed, this , &QgisApp::markDirty );
3189
3186
connect ( mapCanvasWidget, &QgsMapCanvasDockWidget::renameTriggered, this , &QgisApp::renameView );
@@ -9809,7 +9806,14 @@ void QgisApp::newMapCanvas()
9809
9806
}
9810
9807
}
9811
9808
9812
- createNewMapCanvasDock ( name, true );
9809
+ QgsMapCanvasDockWidget *dock = createNewMapCanvasDock ( name, true );
9810
+ if ( dock )
9811
+ {
9812
+ dock->mapCanvas ()->setLayers ( mMapCanvas ->layers () );
9813
+ dock->mapCanvas ()->setExtent ( mMapCanvas ->extent () );
9814
+ dock->mapCanvas ()->setDestinationCrs ( QgsProject::instance ()->crs () );
9815
+ dock->mapCanvas ()->freeze ( false );
9816
+ }
9813
9817
}
9814
9818
9815
9819
void QgisApp::setExtent ( const QgsRectangle &rect )
@@ -11873,6 +11877,7 @@ void QgisApp::readProject( const QDomDocument &doc )
11873
11877
mLayerTreeCanvasBridge ->setAutoSetupOnFirstLayer ( true );
11874
11878
11875
11879
QDomNodeList nodes = doc.elementsByTagName ( QStringLiteral ( " mapViewDocks" ) );
11880
+ QList< QgsMapCanvas * > views;
11876
11881
if ( !nodes.isEmpty () )
11877
11882
{
11878
11883
QDomNode viewNode = nodes.at ( 0 );
@@ -11896,16 +11901,23 @@ void QgisApp::readProject( const QDomDocument &doc )
11896
11901
11897
11902
QgsMapCanvasDockWidget *mapCanvasDock = createNewMapCanvasDock ( mapName, floating, QRect ( x, y, w, h ), area );
11898
11903
QgsMapCanvas *mapCanvas = mapCanvasDock->mapCanvas ();
11899
- mapCanvas->readProject ( doc );
11900
-
11901
11904
mapCanvasDock->setViewCenterSynchronized ( synced );
11902
11905
mapCanvasDock->setCursorMarkerVisible ( showCursor );
11903
11906
mapCanvasDock->setScaleFactor ( scaleFactor );
11904
11907
mapCanvasDock->setViewScaleSynchronized ( scaleSynced );
11905
11908
mapCanvasDock->setMainCanvasExtentVisible ( showExtent );
11906
11909
mapCanvasDock->setLabelsVisible ( showLabels );
11910
+ mapCanvas->readProject ( doc );
11911
+ views << mapCanvas;
11907
11912
}
11908
11913
}
11914
+ // unfreeze all new views at once. We don't do this as they are created since additional
11915
+ // views which may exist in project could rearrange the docks and cause the canvases to resize
11916
+ // resulting in multiple redraws
11917
+ Q_FOREACH ( QgsMapCanvas *c, views )
11918
+ {
11919
+ c->freeze ( false );
11920
+ }
11909
11921
}
11910
11922
11911
11923
void QgisApp::showLayerProperties ( QgsMapLayer *ml )
0 commit comments