@@ -86,19 +86,37 @@ QVector<QgsDataItem*> QgsWMSConnectionItem::createChildren()
86
86
QgsWmsCapabilitiesProperty capabilitiesProperty = caps.capabilitiesProperty ();
87
87
const QgsWmsCapabilityProperty& capabilityProperty = capabilitiesProperty.capability ;
88
88
89
- // Top level layer is present max once
90
- // <element name="Capability">
91
- // <element ref="wms:Layer" minOccurs="0"/> - default maxOccurs=1
92
- const QgsWmsLayerProperty &topLayerProperty = capabilityProperty.layer ;
93
- Q_FOREACH ( const QgsWmsLayerProperty &layerProperty, topLayerProperty.layer )
89
+ // If we have several top-level layers, or if we just have one single top-level layer,
90
+ // then use those top-level layers directly
91
+ if ( capabilityProperty.layers .size () > 1 ||
92
+ ( capabilityProperty.layers .size () == 1 && capabilityProperty.layers [0 ].layer .size () == 0 ) )
94
93
{
95
- // Attention, the name may be empty
96
- QgsDebugMsg ( QString::number ( layerProperty.orderId ) + ' ' + layerProperty.name + ' ' + layerProperty.title );
97
- QString pathName = layerProperty.name .isEmpty () ? QString::number ( layerProperty.orderId ) : layerProperty.name ;
94
+ Q_FOREACH ( const QgsWmsLayerProperty& layerProperty, capabilityProperty.layers )
95
+ {
96
+ // Attention, the name may be empty
97
+ QgsDebugMsg ( QString::number ( layerProperty.orderId ) + ' ' + layerProperty.name + ' ' + layerProperty.title );
98
+ QString pathName = layerProperty.name .isEmpty () ? QString::number ( layerProperty.orderId ) : layerProperty.name ;
99
+
100
+ QgsWMSLayerItem *layer = new QgsWMSLayerItem ( this , layerProperty.title , mPath + ' /' + pathName, capabilitiesProperty, uri, layerProperty );
101
+
102
+ children << layer;
103
+ }
104
+ }
105
+ // Otherwise if we have just one single top-level layers with children, then
106
+ // skip this top-level layer and iterate directly on its children
107
+ // Note (E. Rouault): this was the historical behaviour before fixing #13762
108
+ else if ( capabilityProperty.layers .size () == 1 )
109
+ {
110
+ Q_FOREACH ( const QgsWmsLayerProperty &layerProperty, capabilityProperty.layers [0 ].layer )
111
+ {
112
+ // Attention, the name may be empty
113
+ QgsDebugMsg ( QString::number ( layerProperty.orderId ) + ' ' + layerProperty.name + ' ' + layerProperty.title );
114
+ QString pathName = layerProperty.name .isEmpty () ? QString::number ( layerProperty.orderId ) : layerProperty.name ;
98
115
99
- QgsWMSLayerItem *layer = new QgsWMSLayerItem ( this , layerProperty.title , mPath + ' /' + pathName, capabilitiesProperty, uri, layerProperty );
116
+ QgsWMSLayerItem *layer = new QgsWMSLayerItem ( this , layerProperty.title , mPath + ' /' + pathName, capabilitiesProperty, uri, layerProperty );
100
117
101
- children << layer;
118
+ children << layer;
119
+ }
102
120
}
103
121
}
104
122
0 commit comments