[qgis] 01/03: Add patches from upstream release-2_4 branch.
Bas Couwenberg
sebastic at xs4all.nl
Tue Sep 30 20:06:31 UTC 2014
This is an automated email from the git hooks/post-receive script.
sebastic-guest pushed a commit to branch master
in repository qgis.
commit a4f208b0a76b5355ebbca5c271739a73fea176ec
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Fri Sep 26 22:29:05 2014 +0200
Add patches from upstream release-2_4 branch.
---
debian/changelog | 6 +
...e-11109-Write-relative-path-in-project-XM.patch | 124 +++++++
...GIS-WFS-Server-provides-too-much-precisio.patch | 397 +++++++++++++++++++++
...d-a-precision-setting-for-GetFeatureInfo-.patch | 190 ++++++++++
...view-modes-under-OSX-due-to-issues-with-Q.patch | 65 ++++
...ield-value-to-NULL-if-multiline-text-edit.patch | 28 ++
...ding-python-library-on-Ubuntu-14.04-64bit.patch | 18 +
...esture-events-don-t-get-sent-correctly-wi.patch | 20 ++
debian/patches/0001-Fix-10720.patch | 20 ++
...rashes-with-CSV-files-with-parallel-rende.patch | 90 +++++
.../0001-Fix-10828-slow-project-loading.patch | 59 +++
...VG-markers-rendered-as-images-in-composer.patch | 27 ++
...nectedFeatures-not-keeping-the-featurePar.patch | 18 +
...-b53cab2-Edit-dialog-is-not-an-add-dialog.patch | 21 ++
...ature-once-when-python-init-function-is-s.patch | 21 ++
.../0001-Typo-fixes-from-Rome-airport.patch | 36 ++
.../0001-change-str-to-unicode-fix-10624.patch | 19 +
...x-calculation-of-rotated-image-size-insid.patch | 52 +++
...x-loss-of-alpha-value-for-attribute-table.patch | 28 ++
...event-crash-when-loading-project-which-co.patch | 19 +
...sform-toString-to-quote-values-NULL-integ.patch | 19 +
...ure-form-on-openFeatureForm-on-editable-l.patch | 19 +
...-of-NULL-values-fixes-0-to-NULL-and-fixes.patch | 41 +++
.../patches/0001-metasearch-fix-fsf-address.patch | 180 ++++++++++
...ider-fix-closing-of-iterator-in-case-of-e.patch | 7 +-
...Sort-algorithms-when-updating-provider-al.patch | 20 ++
...ing-fix-join-to-layer-with-join-fix-10244.patch | 23 ++
debian/patches/0001-processing-fixed-10445.patch | 19 +
debian/patches/0001-processing-fixed-10792.patch | 19 +
...methods-in-dataobjects.py-now-return-laye.patch | 51 +++
...r-fix-absolute-path-conversion-on-windows.patch | 28 ++
debian/patches/arm_qreal.patch | 27 +-
debian/patches/series | 29 ++
33 files changed, 1714 insertions(+), 26 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 3e4ebfe..cf09b4f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+qgis (2.4.0-1~exp3) UNRELEASED; urgency=medium
+
+ * Add patches from upstream release-2_4 branch.
+
+ -- Bas Couwenberg <sebastic at xs4all.nl> Fri, 26 Sep 2014 22:28:31 +0200
+
qgis (2.4.0-1~exp2) experimental; urgency=medium
* Team upload.
diff --git a/debian/patches/0001-BUGFIX-Issue-11109-Write-relative-path-in-project-XM.patch b/debian/patches/0001-BUGFIX-Issue-11109-Write-relative-path-in-project-XM.patch
new file mode 100644
index 0000000..727d4bd
--- /dev/null
+++ b/debian/patches/0001-BUGFIX-Issue-11109-Write-relative-path-in-project-XM.patch
@@ -0,0 +1,124 @@
+From 86e350c3dfdff439ef06a0fcb9d6395793fb9ffa Mon Sep 17 00:00:00 2001
+From: Michael Douchin <mdouchin at 3liz.com>
+Date: Thu, 28 Aug 2014 18:24:05 +0200
+Subject: [BUGFIX] Issue #11109 - Write relative path in project XML for
+ embedded groups and layers when needed
+Origin: https://github.com/qgis/QGIS/commit/86e350c3dfdff439ef06a0fcb9d6395793fb9ffa
+Bug: http://hub.qgis.org/issues/11109
+
+
+--- a/src/app/qgisapp.cpp
++++ b/src/app/qgisapp.cpp
+@@ -9663,6 +9663,7 @@ void QgisApp::writeProject( QDomDocument
+
+ QgsLayerTreeNode* clonedRoot = QgsProject::instance()->layerTreeRoot()->clone();
+ QgsLayerTreeUtils::removeChildrenOfEmbeddedGroups( QgsLayerTree::toGroup( clonedRoot ) );
++ QgsLayerTreeUtils::updateEmbeddedGroupsProjectPath( QgsLayerTree::toGroup( clonedRoot ) ); // convert absolute paths to relative paths if required
+ QDomElement oldLegendElem = QgsLayerTreeUtils::writeOldLegend( doc, QgsLayerTree::toGroup( clonedRoot ),
+ mLayerTreeCanvasBridge->hasCustomLayerOrder(), mLayerTreeCanvasBridge->customLayerOrder() );
+ delete clonedRoot;
+--- a/src/core/layertree/qgslayertreeutils.cpp
++++ b/src/core/layertree/qgslayertreeutils.cpp
+@@ -19,8 +19,11 @@
+
+ #include "qgsvectorlayer.h"
+
++#include "qgsproject.h"
++
+ #include <QDomElement>
+
++
+ static void _readOldLegendGroup( const QDomElement& groupElem, QgsLayerTreeGroup* parent );
+ static void _readOldLegendLayer( const QDomElement& layerElem, QgsLayerTreeGroup* parent );
+
+@@ -314,3 +317,22 @@ void QgsLayerTreeUtils::removeChildrenOf
+ }
+ }
+ }
++
++
++void QgsLayerTreeUtils::updateEmbeddedGroupsProjectPath( QgsLayerTreeGroup* group )
++{
++ foreach ( QgsLayerTreeNode* node, group->children() )
++ {
++ if ( !node->customProperty( "embedded_project" ).toString().isEmpty() )
++ {
++ // may change from absolute path to relative path
++ QString newPath = QgsProject::instance()->writePath( node->customProperty( "embedded_project" ).toString() );
++ node->setCustomProperty( "embedded_project", newPath );
++ }
++
++ if ( QgsLayerTree::isGroup( node ) )
++ {
++ updateEmbeddedGroupsProjectPath( QgsLayerTree::toGroup( node ) );
++ }
++ }
++}
+--- a/src/core/layertree/qgslayertreeutils.h
++++ b/src/core/layertree/qgslayertreeutils.h
+@@ -58,6 +58,9 @@ class CORE_EXPORT QgsLayerTreeUtils
+ //! Remove subtree of embedded groups. Useful when saving layer tree
+ static void removeChildrenOfEmbeddedGroups( QgsLayerTreeGroup* group );
+
++ //! @note not available in python bindings
++ static void updateEmbeddedGroupsProjectPath( QgsLayerTreeGroup* group );
++
+ };
+
+ #endif // QGSLAYERTREEUTILS_H
+--- a/src/core/qgsproject.cpp
++++ b/src/core/qgsproject.cpp
+@@ -1003,24 +1003,6 @@ void QgsProject::loadEmbeddedNodes( QgsL
+ }
+ }
+
+-void QgsProject::updateEmbeddedGroupsProjectPath( QgsLayerTreeGroup* group )
+-{
+- foreach ( QgsLayerTreeNode* node, group->children() )
+- {
+- if ( QgsLayerTree::isGroup( node ) )
+- {
+- if ( !node->customProperty( "embedded_project" ).toString().isEmpty() )
+- {
+- // may change from absolute path to relative path
+- QString newPath = writePath( node->customProperty( "embedded_project" ).toString() );
+- node->setCustomProperty( "embedded_project", newPath );
+- }
+- else
+- updateEmbeddedGroupsProjectPath( QgsLayerTree::toGroup( node ) );
+- }
+- }
+-}
+-
+
+ bool QgsProject::read( QDomNode & layerNode )
+ {
+@@ -1102,7 +1084,7 @@ bool QgsProject::write()
+ // write layer tree - make sure it is without embedded subgroups
+ QgsLayerTreeNode* clonedRoot = mRootGroup->clone();
+ QgsLayerTreeUtils::removeChildrenOfEmbeddedGroups( QgsLayerTree::toGroup( clonedRoot ) );
+- updateEmbeddedGroupsProjectPath( QgsLayerTree::toGroup( clonedRoot ) ); // convert absolute paths to relative paths if required
++ QgsLayerTreeUtils::updateEmbeddedGroupsProjectPath( QgsLayerTree::toGroup( clonedRoot ) ); // convert absolute paths to relative paths if required
+ clonedRoot->writeXML( qgisNode );
+ delete clonedRoot;
+
+@@ -1716,6 +1698,7 @@ bool QgsProject::createEmbeddedLayer( co
+
+ //does project store pathes absolute or relative?
+ bool useAbsolutePathes = true;
++
+ QDomElement propertiesElem = projectDocument.documentElement().firstChildElement( "properties" );
+ if ( !propertiesElem.isNull() )
+ {
+--- a/src/core/qgsproject.h
++++ b/src/core/qgsproject.h
+@@ -361,9 +361,6 @@ class CORE_EXPORT QgsProject : public QO
+ //! @note not available in python bindings
+ void loadEmbeddedNodes( QgsLayerTreeGroup* group );
+
+- //! @note not available in python bindings
+- void updateEmbeddedGroupsProjectPath( QgsLayerTreeGroup* group );
+-
+ signals:
+ //! emitted when project is being read
+ void readProject( const QDomDocument & );
diff --git a/debian/patches/0001-Bug-10974-QGIS-WFS-Server-provides-too-much-precisio.patch b/debian/patches/0001-Bug-10974-QGIS-WFS-Server-provides-too-much-precisio.patch
new file mode 100644
index 0000000..dcb7d6b
--- /dev/null
+++ b/debian/patches/0001-Bug-10974-QGIS-WFS-Server-provides-too-much-precisio.patch
@@ -0,0 +1,397 @@
+From 27ebd9657db57a1925f7f0172a697363a63844b3 Mon Sep 17 00:00:00 2001
+From: rldhont <rldhont at gmail.com>
+Date: Tue, 29 Jul 2014 17:11:42 +0200
+Subject: Bug #10974 QGIS WFS Server provides too much precision
+Origin: https://github.com/qgis/QGIS/commit/27ebd9657db57a1925f7f0172a697363a63844b3
+Bug: http://hub.qgis.org/issues/10974
+
+In the GetFeature request QGIS WFS Server uses the static method: QgsDoubleToString. This method returns double with a precision fixed to 17.
+
+We do not need that much precision for coordinates. Firstly because we are not able to measure a position on earth with a lower micron precision. Secondly because it unnecessarily overload response.
+
+I propose to add the ability to specify the precision in the QgsDoubleToString method.
+
+--- a/python/core/qgsgeometry.sip
++++ b/python/core/qgsgeometry.sip
+@@ -369,12 +369,13 @@ class QgsGeometry
+ */
+ QString exportToWkt() const;
+
+- /** Exports the geometry to mGeoJSON
+- * @return true in case of success and false else
++ /** Exports the geometry to GeoJSON
++ * @return a QString representing the geometry as GeoJSON
+ * @note added in 1.8
+ * @note python binding added in 1.9
++ * @note precision parameter added in 2.4
+ */
+- QString exportToGeoJSON() const;
++ QString exportToGeoJSON( const int &precision = 17 ) const;
+
+ /** try to convert the geometry to the requested type
+ * @param destType the geometry type to be converted to
+--- a/python/core/qgsogcutils.sip
++++ b/python/core/qgsogcutils.sip
+@@ -28,22 +28,22 @@ class QgsOgcUtils
+ /** Exports the geometry to GML2 or GML3
+ @return QDomElement
+ */
+- static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc, QString format );
++ static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc, QString format, const int &precision = 17 );
+
+ /** Exports the geometry to GML2
+ @return QDomElement
+ */
+- static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc );
++ static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc, const int &precision = 17 );
+
+ /** Exports the rectangle to GML2 Box
+ @return QDomElement
+ */
+- static QDomElement rectangleToGMLBox( QgsRectangle* box, QDomDocument& doc );
++ static QDomElement rectangleToGMLBox( QgsRectangle* box, QDomDocument& doc, const int &precision = 17 );
+
+ /** Exports the rectangle to GML2 Envelope
+ @return QDomElement
+ */
+- static QDomElement rectangleToGMLEnvelope( QgsRectangle* env, QDomDocument& doc );
++ static QDomElement rectangleToGMLEnvelope( QgsRectangle* env, QDomDocument& doc, const int &precision = 17 );
+
+
+ /** Parse XML with OGC fill into QColor */
+--- a/src/core/qgis.h
++++ b/src/core/qgis.h
+@@ -313,9 +313,9 @@ inline void ( *cast_to_fptr( void *p ) )
+ //
+ // return a string representation of a double
+ //
+-inline QString qgsDoubleToString( const double &a )
++inline QString qgsDoubleToString( const double &a, const int &precision = 17 )
+ {
+- return QString::number( a, 'f', 17 ).remove( QRegExp( "\\.?0+$" ) );
++ return QString::number( a, 'f', precision ).remove( QRegExp( "\\.?0+$" ) );
+ }
+
+ //
+--- a/src/core/qgsgeometry.cpp
++++ b/src/core/qgsgeometry.cpp
+@@ -3745,7 +3745,7 @@ QString QgsGeometry::exportToWkt() const
+ }
+ }
+
+-QString QgsGeometry::exportToGeoJSON() const
++QString QgsGeometry::exportToGeoJSON( const int &precision ) const
+ {
+ QgsDebugMsg( "entered." );
+
+@@ -3776,8 +3776,8 @@ QString QgsGeometry::exportToGeoJSON() c
+ wkbPtr >> x >> y;
+
+ wkt += "{ \"type\": \"Point\", \"coordinates\": ["
+- + qgsDoubleToString( x ) + ", "
+- + qgsDoubleToString( y )
++ + qgsDoubleToString( x, precision ) + ", "
++ + qgsDoubleToString( y, precision )
+ + "] }";
+ return wkt;
+ }
+@@ -3801,7 +3801,7 @@ QString QgsGeometry::exportToGeoJSON() c
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += "[" + qgsDoubleToString( x ) + ", " + qgsDoubleToString( y ) + "]";
++ wkt += "[" + qgsDoubleToString( x, precision ) + ", " + qgsDoubleToString( y, precision ) + "]";
+ }
+ wkt += " ] }";
+ return wkt;
+@@ -3839,7 +3839,7 @@ QString QgsGeometry::exportToGeoJSON() c
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += "[" + qgsDoubleToString( x ) + ", " + qgsDoubleToString( y ) + "]";
++ wkt += "[" + qgsDoubleToString( x, precision ) + ", " + qgsDoubleToString( y, precision ) + "]";
+ }
+ wkt += " ]";
+ }
+@@ -3865,7 +3865,7 @@ QString QgsGeometry::exportToGeoJSON() c
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += "[" + qgsDoubleToString( x ) + ", " + qgsDoubleToString( y ) + "]";
++ wkt += "[" + qgsDoubleToString( x, precision ) + ", " + qgsDoubleToString( y, precision ) + "]";
+ }
+ wkt += " ] }";
+ return wkt;
+@@ -3899,7 +3899,7 @@ QString QgsGeometry::exportToGeoJSON() c
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += "[" + qgsDoubleToString( x ) + ", " + qgsDoubleToString( y ) + "]";
++ wkt += "[" + qgsDoubleToString( x, precision ) + ", " + qgsDoubleToString( y, precision ) + "]";
+ }
+ wkt += " ]";
+ }
+@@ -3946,7 +3946,7 @@ QString QgsGeometry::exportToGeoJSON() c
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += "[" + qgsDoubleToString( x ) + ", " + qgsDoubleToString( y ) + "]";
++ wkt += "[" + qgsDoubleToString( x, precision ) + ", " + qgsDoubleToString( y, precision ) + "]";
+ }
+ wkt += " ]";
+ }
+--- a/src/core/qgsgeometry.h
++++ b/src/core/qgsgeometry.h
+@@ -411,12 +411,13 @@ class CORE_EXPORT QgsGeometry
+ */
+ QString exportToWkt() const;
+
+- /** Exports the geometry to mGeoJSON
+- * @return true in case of success and false else
++ /** Exports the geometry to GeoJSON
++ * @return a QString representing the geometry as GeoJSON
+ * @note added in 1.8
+ * @note python binding added in 1.9
++ * @note precision parameter added in 2.4
+ */
+- QString exportToGeoJSON() const;
++ QString exportToGeoJSON( const int &precision = 17 ) const;
+
+ /** try to convert the geometry to the requested type
+ * @param destType the geometry type to be converted to
+--- a/src/core/qgsogcutils.cpp
++++ b/src/core/qgsogcutils.cpp
+@@ -993,7 +993,7 @@ QgsRectangle QgsOgcUtils::rectangleFromG
+ return rect;
+ }
+
+-QDomElement QgsOgcUtils::rectangleToGMLBox( QgsRectangle* box, QDomDocument& doc )
++QDomElement QgsOgcUtils::rectangleToGMLBox( QgsRectangle* box, QDomDocument& doc, const int &precision )
+ {
+ if ( !box )
+ {
+@@ -1006,13 +1006,13 @@ QDomElement QgsOgcUtils::rectangleToGMLB
+ coordElem.setAttribute( "ts", " " );
+
+ QString coordString;
+- coordString += qgsDoubleToString( box->xMinimum() );
++ coordString += qgsDoubleToString( box->xMinimum(), precision );
+ coordString += ",";
+- coordString += qgsDoubleToString( box->yMinimum() );
++ coordString += qgsDoubleToString( box->yMinimum(), precision );
+ coordString += " ";
+- coordString += qgsDoubleToString( box->xMaximum() );
++ coordString += qgsDoubleToString( box->xMaximum(), precision );
+ coordString += ",";
+- coordString += qgsDoubleToString( box->yMaximum() );
++ coordString += qgsDoubleToString( box->yMaximum(), precision );
+
+ QDomText coordText = doc.createTextNode( coordString );
+ coordElem.appendChild( coordText );
+@@ -1021,7 +1021,7 @@ QDomElement QgsOgcUtils::rectangleToGMLB
+ return boxElem;
+ }
+
+-QDomElement QgsOgcUtils::rectangleToGMLEnvelope( QgsRectangle* env, QDomDocument& doc )
++QDomElement QgsOgcUtils::rectangleToGMLEnvelope( QgsRectangle* env, QDomDocument& doc, const int &precision )
+ {
+ if ( !env )
+ {
+@@ -1032,17 +1032,17 @@ QDomElement QgsOgcUtils::rectangleToGMLE
+ QString posList;
+
+ QDomElement lowerCornerElem = doc.createElement( "gml:lowerCorner" );
+- posList = qgsDoubleToString( env->xMinimum() );
++ posList = qgsDoubleToString( env->xMinimum(), precision );
+ posList += " ";
+- posList += qgsDoubleToString( env->yMinimum() );
++ posList += qgsDoubleToString( env->yMinimum(), precision );
+ QDomText lowerCornerText = doc.createTextNode( posList );
+ lowerCornerElem.appendChild( lowerCornerText );
+ envElem.appendChild( lowerCornerElem );
+
+ QDomElement upperCornerElem = doc.createElement( "gml:upperCorner" );
+- posList = qgsDoubleToString( env->xMaximum() );
++ posList = qgsDoubleToString( env->xMaximum(), precision );
+ posList += " ";
+- posList += qgsDoubleToString( env->yMaximum() );
++ posList += qgsDoubleToString( env->yMaximum(), precision );
+ QDomText upperCornerText = doc.createTextNode( posList );
+ upperCornerElem.appendChild( upperCornerText );
+ envElem.appendChild( upperCornerElem );
+@@ -1050,7 +1050,7 @@ QDomElement QgsOgcUtils::rectangleToGMLE
+ return envElem;
+ }
+
+-QDomElement QgsOgcUtils::geometryToGML( QgsGeometry* geometry, QDomDocument& doc, QString format )
++QDomElement QgsOgcUtils::geometryToGML( QgsGeometry* geometry, QDomDocument& doc, QString format, const int &precision )
+ {
+ if ( !geometry || !geometry->asWkb() )
+ return QDomElement();
+@@ -1100,7 +1100,7 @@ QDomElement QgsOgcUtils::geometryToGML(
+
+ double x, y;
+ wkbPtr >> x >> y;
+- QDomText coordText = doc.createTextNode( qgsDoubleToString( x ) + cs + qgsDoubleToString( y ) );
++ QDomText coordText = doc.createTextNode( qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision ) );
+
+ coordElem.appendChild( coordText );
+ pointElem.appendChild( coordElem );
+@@ -1124,7 +1124,7 @@ QDomElement QgsOgcUtils::geometryToGML(
+
+ double x, y;
+ wkbPtr >> x >> y;
+- QDomText coordText = doc.createTextNode( qgsDoubleToString( x ) + cs + qgsDoubleToString( y ) );
++ QDomText coordText = doc.createTextNode( qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision ) );
+
+ coordElem.appendChild( coordText );
+ pointElem.appendChild( coordElem );
+@@ -1159,7 +1159,7 @@ QDomElement QgsOgcUtils::geometryToGML(
+
+ double x, y;
+ wkbPtr >> x >> y;
+- coordString += qgsDoubleToString( x ) + cs + qgsDoubleToString( y );
++ coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
+
+ if ( hasZValue )
+ {
+@@ -1201,7 +1201,7 @@ QDomElement QgsOgcUtils::geometryToGML(
+ double x, y;
+ wkbPtr >> x >> y;
+
+- coordString += qgsDoubleToString( x ) + cs + qgsDoubleToString( y );
++ coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
+
+ if ( hasZValue )
+ {
+@@ -1257,7 +1257,7 @@ QDomElement QgsOgcUtils::geometryToGML(
+ double x, y;
+ wkbPtr >> x >> y;
+
+- coordString += qgsDoubleToString( x ) + cs + qgsDoubleToString( y );
++ coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
+ if ( hasZValue )
+ {
+ wkbPtr += sizeof( double );
+@@ -1316,7 +1316,7 @@ QDomElement QgsOgcUtils::geometryToGML(
+ double x, y;
+ wkbPtr >> x >> y;
+
+- coordString += qgsDoubleToString( x ) + cs + qgsDoubleToString( y );
++ coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
+
+ if ( hasZValue )
+ {
+@@ -1339,9 +1339,9 @@ QDomElement QgsOgcUtils::geometryToGML(
+ }
+ }
+
+-QDomElement QgsOgcUtils::geometryToGML( QgsGeometry *geometry, QDomDocument &doc )
++QDomElement QgsOgcUtils::geometryToGML( QgsGeometry *geometry, QDomDocument &doc, const int &precision )
+ {
+- return geometryToGML( geometry, doc, "GML2" );
++ return geometryToGML( geometry, doc, "GML2", precision );
+ }
+
+ QDomElement QgsOgcUtils::createGMLCoordinates( const QgsPolyline &points, QDomDocument &doc )
+--- a/src/core/qgsogcutils.h
++++ b/src/core/qgsogcutils.h
+@@ -51,22 +51,22 @@ class CORE_EXPORT QgsOgcUtils
+ /** Exports the geometry to GML2 or GML3
+ @return QDomElement
+ */
+- static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc, QString format );
++ static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc, QString format, const int &precision = 17 );
+
+ /** Exports the geometry to GML2
+ @return QDomElement
+ */
+- static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc );
++ static QDomElement geometryToGML( QgsGeometry* geometry, QDomDocument& doc, const int &precision = 17 );
+
+ /** Exports the rectangle to GML2 Box
+ @return QDomElement
+ */
+- static QDomElement rectangleToGMLBox( QgsRectangle* box, QDomDocument& doc );
++ static QDomElement rectangleToGMLBox( QgsRectangle* box, QDomDocument& doc, const int &precision = 17 );
+
+ /** Exports the rectangle to GML2 Envelope
+ @return QDomElement
+ */
+- static QDomElement rectangleToGMLEnvelope( QgsRectangle* env, QDomDocument& doc );
++ static QDomElement rectangleToGMLEnvelope( QgsRectangle* env, QDomDocument& doc, const int &precision = 17 );
+
+
+ /** Parse XML with OGC fill into QColor */
+--- a/src/mapserver/qgswfsserver.cpp
++++ b/src/mapserver/qgswfsserver.cpp
+@@ -1074,7 +1074,7 @@ void QgsWFSServer::startGetFeature( QgsR
+ if ( format == "GeoJSON" )
+ {
+ fcString = "{\"type\": \"FeatureCollection\",\n";
+- fcString += " \"bbox\": [ " + QString::number( rect->xMinimum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + ", " + QString::number( rect->yMinimum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + ", " + QString::number( rect->xMaximum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + ", " + QString::number( rect->yMaximum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + "],\n";
++ fcString += " \"bbox\": [ " + qgsDoubleToString( rect->xMinimum(), 8 ) + ", " + qgsDoubleToString( rect->yMinimum(), 8 ) + ", " + qgsDoubleToString( rect->xMaximum(), 8 ) + ", " + qgsDoubleToString( rect->yMaximum(), 8 ) + "],\n";
+ fcString += " \"features\": [\n";
+ result = fcString.toUtf8();
+ request.startGetFeatureResponse( &result, format );
+@@ -1167,7 +1167,7 @@ void QgsWFSServer::startGetFeature( QgsR
+ QDomElement bbElem = doc.createElement( "gml:boundedBy" );
+ if ( format == "GML3" )
+ {
+- QDomElement envElem = QgsOgcUtils::rectangleToGMLEnvelope( rect, doc );
++ QDomElement envElem = QgsOgcUtils::rectangleToGMLEnvelope( rect, doc, 8 );
+ if ( !envElem.isNull() )
+ {
+ if ( crs.isValid() )
+@@ -1180,7 +1180,7 @@ void QgsWFSServer::startGetFeature( QgsR
+ }
+ else
+ {
+- QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( rect, doc );
++ QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( rect, doc, 8 );
+ if ( !boxElem.isNull() )
+ {
+ if ( crs.isValid() )
+@@ -1691,10 +1691,10 @@ QString QgsWFSServer::createFeatureGeoJS
+ {
+ QgsRectangle box = geom->boundingBox();
+
+- fStr += " \"bbox\": [ " + QString::number( box.xMinimum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + ", " + QString::number( box.yMinimum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + ", " + QString::number( box.xMaximum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + ", " + QString::number( box.yMaximum(), 'f', 8 ).remove( QRegExp( "[0]{1,7}$" ) ) + "],\n";
++ fStr += " \"bbox\": [ " + qgsDoubleToString( box.xMinimum(), 8 ) + ", " + qgsDoubleToString( box.yMinimum(), 8 ) + ", " + qgsDoubleToString( box.xMaximum(), 8 ) + ", " + qgsDoubleToString( box.yMaximum(), 8 ) + "],\n";
+
+ fStr += " \"geometry\": ";
+- fStr += geom->exportToGeoJSON();
++ fStr += geom->exportToGeoJSON( 8 );
+ fStr += ",\n";
+ }
+
+@@ -1757,12 +1757,12 @@ QDomElement QgsWFSServer::createFeatureG
+ QgsGeometry* geom = feat->geometry();
+
+ QDomElement geomElem = doc.createElement( "qgs:geometry" );
+- QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc );
++ QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc, 8 );
+ if ( !gmlElem.isNull() )
+ {
+ QgsRectangle box = geom->boundingBox();
+ QDomElement bbElem = doc.createElement( "gml:boundedBy" );
+- QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( &box, doc );
++ QDomElement boxElem = QgsOgcUtils::rectangleToGMLBox( &box, doc, 8 );
+
+ if ( crs.isValid() )
+ {
+@@ -1816,12 +1816,12 @@ QDomElement QgsWFSServer::createFeatureG
+ QgsGeometry* geom = feat->geometry();
+
+ QDomElement geomElem = doc.createElement( "qgs:geometry" );
+- QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc, "GML3" );
++ QDomElement gmlElem = QgsOgcUtils::geometryToGML( geom, doc, "GML3", 8 );
+ if ( !gmlElem.isNull() )
+ {
+ QgsRectangle box = geom->boundingBox();
+ QDomElement bbElem = doc.createElement( "gml:boundedBy" );
+- QDomElement boxElem = QgsOgcUtils::rectangleToGMLEnvelope( &box, doc );
++ QDomElement boxElem = QgsOgcUtils::rectangleToGMLEnvelope( &box, doc, 8 );
+
+ if ( crs.isValid() )
+ {
diff --git a/debian/patches/0001-Bug-9797-Add-a-precision-setting-for-GetFeatureInfo-.patch b/debian/patches/0001-Bug-9797-Add-a-precision-setting-for-GetFeatureInfo-.patch
new file mode 100644
index 0000000..d741f35
--- /dev/null
+++ b/debian/patches/0001-Bug-9797-Add-a-precision-setting-for-GetFeatureInfo-.patch
@@ -0,0 +1,190 @@
+From 5add43c24b4dadce9a74038f6697e4915f07438c Mon Sep 17 00:00:00 2001
+From: rldhont <rldhont at gmail.com>
+Date: Sat, 9 Aug 2014 17:08:21 +0200
+Subject: Bug #9797 Add a precision setting for GetFeatureInfo geometry
+ attributes
+Origin: https://github.com/qgis/QGIS/commit/5add43c24b4dadce9a74038f6697e4915f07438c
+Bug: http://hub.qgis.org/issues/9797
+
+Add precision to QgsGeometry method exportToWKT and use it in GetFeatureInfo
+
+--- a/python/core/qgsgeometry.sip
++++ b/python/core/qgsgeometry.sip
+@@ -364,10 +364,11 @@ class QgsGeometry
+ /** Returns a Geometry representing the points making up this Geometry that do not make up other. */
+ QgsGeometry* symDifference( QgsGeometry* geometry ) /Factory/;
+
+- /** Exports the geometry to mWkt
++ /** Exports the geometry to WKT
++ * @note precision parameter added in 2.4
+ * @return true in case of success and false else
+ */
+- QString exportToWkt() const;
++ QString exportToWkt( const int &precision = 17 ) const;
+
+ /** Exports the geometry to GeoJSON
+ * @return a QString representing the geometry as GeoJSON
+--- a/src/core/qgsgeometry.cpp
++++ b/src/core/qgsgeometry.cpp
+@@ -3536,7 +3536,7 @@ bool QgsGeometry::crosses( const QgsGeom
+ return geosRelOp( GEOSCrosses, this, geometry );
+ }
+
+-QString QgsGeometry::exportToWkt() const
++QString QgsGeometry::exportToWkt( const int &precision ) const
+ {
+ QgsDebugMsg( "entered." );
+
+@@ -3566,7 +3566,7 @@ QString QgsGeometry::exportToWkt() const
+ {
+ double x, y;
+ wkbPtr >> x >> y;
+- wkt += "POINT(" + qgsDoubleToString( x ) + " " + qgsDoubleToString( y ) + ")";
++ wkt += "POINT(" + qgsDoubleToString( x, precision ) + " " + qgsDoubleToString( y, precision ) + ")";
+ return wkt;
+ }
+
+@@ -3589,7 +3589,7 @@ QString QgsGeometry::exportToWkt() const
+ if ( idx != 0 )
+ wkt += ", ";
+
+- wkt += qgsDoubleToString( x ) + " " + qgsDoubleToString( y );
++ wkt += qgsDoubleToString( x, precision ) + " " + qgsDoubleToString( y, precision );
+ }
+ wkt += ")";
+ return wkt;
+@@ -3626,7 +3626,7 @@ QString QgsGeometry::exportToWkt() const
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += qgsDoubleToString( x ) + " " + qgsDoubleToString( y );
++ wkt += qgsDoubleToString( x, precision ) + " " + qgsDoubleToString( y, precision );
+ }
+ wkt += ")";
+ }
+@@ -3653,7 +3653,7 @@ QString QgsGeometry::exportToWkt() const
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += qgsDoubleToString( x ) + " " + qgsDoubleToString( y );
++ wkt += qgsDoubleToString( x, precision ) + " " + qgsDoubleToString( y, precision );
+ }
+ wkt += ")";
+ return wkt;
+@@ -3686,7 +3686,7 @@ QString QgsGeometry::exportToWkt() const
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += qgsDoubleToString( x ) + " " + qgsDoubleToString( y );
++ wkt += qgsDoubleToString( x, precision ) + " " + qgsDoubleToString( y, precision );
+ }
+ wkt += ")";
+ }
+@@ -3729,7 +3729,7 @@ QString QgsGeometry::exportToWkt() const
+ if ( hasZValue )
+ wkbPtr += sizeof( double );
+
+- wkt += qgsDoubleToString( x ) + " " + qgsDoubleToString( y );
++ wkt += qgsDoubleToString( x, precision ) + " " + qgsDoubleToString( y, precision );
+ }
+ wkt += ")";
+ }
+--- a/src/core/qgsgeometry.h
++++ b/src/core/qgsgeometry.h
+@@ -406,10 +406,11 @@ class CORE_EXPORT QgsGeometry
+ /** Returns a Geometry representing the points making up this Geometry that do not make up other. */
+ QgsGeometry* symDifference( QgsGeometry* geometry );
+
+- /** Exports the geometry to mWkt
++ /** Exports the geometry to WKT
++ * @note precision parameter added in 2.4
+ * @return true in case of success and false else
+ */
+- QString exportToWkt() const;
++ QString exportToWkt( const int &precision = 17 ) const;
+
+ /** Exports the geometry to GeoJSON
+ * @return a QString representing the geometry as GeoJSON
+--- a/src/mapserver/qgswmsserver.cpp
++++ b/src/mapserver/qgswmsserver.cpp
+@@ -1282,11 +1282,11 @@ int QgsWMSServer::getFeatureInfo( QDomDo
+ int gmlVersion = infoFormat.startsWith( "application/vnd.ogc.gml/3" ) ? 3 : 2;
+ if ( gmlVersion < 3 )
+ {
+- boxElem = QgsOgcUtils::rectangleToGMLBox( featuresRect, result );
++ boxElem = QgsOgcUtils::rectangleToGMLBox( featuresRect, result, 8 );
+ }
+ else
+ {
+- boxElem = QgsOgcUtils::rectangleToGMLEnvelope( featuresRect, result );
++ boxElem = QgsOgcUtils::rectangleToGMLEnvelope( featuresRect, result, 8 );
+ }
+
+ QgsCoordinateReferenceSystem crs = mMapRenderer->destinationCrs();
+@@ -1301,10 +1301,10 @@ int QgsWMSServer::getFeatureInfo( QDomDo
+ {
+ QDomElement bBoxElem = result.createElement( "BoundingBox" );
+ bBoxElem.setAttribute( "CRS", mMapRenderer->destinationCrs().authid() );
+- bBoxElem.setAttribute( "minx", QString::number( featuresRect->xMinimum() ) );
+- bBoxElem.setAttribute( "maxx", QString::number( featuresRect->xMaximum() ) );
+- bBoxElem.setAttribute( "miny", QString::number( featuresRect->yMinimum() ) );
+- bBoxElem.setAttribute( "maxy", QString::number( featuresRect->yMaximum() ) );
++ bBoxElem.setAttribute( "minx", qgsDoubleToString( featuresRect->xMinimum(), 8 ) );
++ bBoxElem.setAttribute( "maxx", qgsDoubleToString( featuresRect->xMaximum(), 8 ) );
++ bBoxElem.setAttribute( "miny", qgsDoubleToString( featuresRect->yMinimum(), 8 ) );
++ bBoxElem.setAttribute( "maxy", qgsDoubleToString( featuresRect->yMaximum(), 8 ) );
+ getFeatureInfoElement.insertBefore( bBoxElem, QDomNode() ); //insert as first child
+ }
+ }
+@@ -1823,10 +1823,10 @@ int QgsWMSServer::featureInfoFromVectorL
+ {
+ QDomElement bBoxElem = infoDocument.createElement( "BoundingBox" );
+ bBoxElem.setAttribute( version == "1.1.1" ? "SRS" : "CRS", outputCrs.authid() );
+- bBoxElem.setAttribute( "minx", QString::number( box.xMinimum() ) );
+- bBoxElem.setAttribute( "maxx", QString::number( box.xMaximum() ) );
+- bBoxElem.setAttribute( "miny", QString::number( box.yMinimum() ) );
+- bBoxElem.setAttribute( "maxy", QString::number( box.yMaximum() ) );
++ bBoxElem.setAttribute( "minx", qgsDoubleToString( box.xMinimum(), 8 ) );
++ bBoxElem.setAttribute( "maxx", qgsDoubleToString( box.xMaximum(), 8 ) );
++ bBoxElem.setAttribute( "miny", qgsDoubleToString( box.yMinimum(), 8 ) );
++ bBoxElem.setAttribute( "maxy", qgsDoubleToString( box.yMaximum(), 8 ) );
+ featureElement.appendChild( bBoxElem );
+ }
+
+@@ -1844,7 +1844,7 @@ int QgsWMSServer::featureInfoFromVectorL
+ }
+ QDomElement geometryElement = infoDocument.createElement( "Attribute" );
+ geometryElement.setAttribute( "name", "geometry" );
+- geometryElement.setAttribute( "value", geom->exportToWkt() );
++ geometryElement.setAttribute( "value", geom->exportToWkt( 8 ) );
+ geometryElement.setAttribute( "type", "derived" );
+ featureElement.appendChild( geometryElement );
+ }
+@@ -2830,11 +2830,11 @@ QDomElement QgsWMSServer::createFeatureG
+ QDomElement boxElem;
+ if ( version < 3 )
+ {
+- boxElem = QgsOgcUtils::rectangleToGMLBox( &box, doc );
++ boxElem = QgsOgcUtils::rectangleToGMLBox( &box, doc, 8 );
+ }
+ else
+ {
+- boxElem = QgsOgcUtils::rectangleToGMLEnvelope( &box, doc );
++ boxElem = QgsOgcUtils::rectangleToGMLEnvelope( &box, doc, 8 );
+ }
+
+ if ( crs.isValid() )
+@@ -2858,11 +2858,11 @@ QDomElement QgsWMSServer::createFeatureG
+ QDomElement gmlElem;
+ if ( version < 3 )
+ {
+- gmlElem = QgsOgcUtils::geometryToGML( geom, doc );
++ gmlElem = QgsOgcUtils::geometryToGML( geom, doc, 8 );
+ }
+ else
+ {
+- gmlElem = QgsOgcUtils::geometryToGML( geom, doc, "GML3" );
++ gmlElem = QgsOgcUtils::geometryToGML( geom, doc, "GML3", 8 );
+ }
+
+ if ( !gmlElem.isNull() )
diff --git a/debian/patches/0001-Disable-preview-modes-under-OSX-due-to-issues-with-Q.patch b/debian/patches/0001-Disable-preview-modes-under-OSX-due-to-issues-with-Q.patch
new file mode 100644
index 0000000..81f386c
--- /dev/null
+++ b/debian/patches/0001-Disable-preview-modes-under-OSX-due-to-issues-with-Q.patch
@@ -0,0 +1,65 @@
+From 5ecc9080ec113e422f789bc680f63447af9e7e15 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Sun, 27 Jul 2014 15:41:25 +1000
+Subject: Disable preview modes under OSX due to issues with QGraphicsEffects
+ under OSX (refs #10761)
+Origin: https://github.com/qgis/QGIS/commit/5ecc9080ec113e422f789bc680f63447af9e7e15
+Bug: http://hub.qgis.org/issues/10761
+
+
+--- a/src/app/composer/qgscomposer.cpp
++++ b/src/app/composer/qgscomposer.cpp
+@@ -296,12 +296,16 @@ QgsComposer::QgsComposer( QgisApp *qgis,
+ QShortcut* ctrlEquals = new QShortcut( QKeySequence( "Ctrl+=" ), this );
+ connect( ctrlEquals, SIGNAL( activated() ), mActionZoomIn, SLOT( trigger() ) );
+
++#ifndef Q_WS_MAC
++ //disabled for OSX - see #10761
++ //also see http://qt-project.org/forums/viewthread/3630 QGraphicsEffects are not well supported on OSX
+ QMenu *previewMenu = viewMenu->addMenu( "Preview" );
+ previewMenu->addAction( mActionPreviewModeOff );
+ previewMenu->addAction( mActionPreviewModeGrayscale );
+ previewMenu->addAction( mActionPreviewModeMono );
+ previewMenu->addAction( mActionPreviewProtanope );
+ previewMenu->addAction( mActionPreviewDeuteranope );
++#endif
+
+ viewMenu->addSeparator();
+ viewMenu->addAction( mActionZoomIn );
+--- a/src/app/qgisapp.cpp
++++ b/src/app/qgisapp.cpp
+@@ -1471,6 +1471,14 @@ void QgisApp::createMenus()
+ mSettingsMenu->insertSeparator( before );
+ }
+
++
++#ifdef Q_WS_MAC
++ //disabled for OSX - see #10761
++ //also see http://qt-project.org/forums/viewthread/3630 QGraphicsEffects are not well supported on OSX
++ mMenuPreviewMode->menuAction()->setVisible( false );
++#endif
++
++
+ #ifdef Q_WS_MAC
+
+ // keep plugins from hijacking About and Preferences application menus
+--- a/src/ui/qgisapp.ui
++++ b/src/ui/qgisapp.ui
+@@ -88,7 +88,7 @@
+ <addaction name="mActionDecorationNorthArrow"/>
+ <addaction name="mActionDecorationCopyright"/>
+ </widget>
+- <widget class="QMenu" name="menuPreview_Mode">
++ <widget class="QMenu" name="mMenuPreviewMode">
+ <property name="title">
+ <string>Preview Mode</string>
+ </property>
+@@ -115,7 +115,7 @@
+ <addaction name="mActionZoomActualSize"/>
+ <addaction name="separator"/>
+ <addaction name="menuDecorations"/>
+- <addaction name="menuPreview_Mode"/>
++ <addaction name="mMenuPreviewMode"/>
+ <addaction name="mActionMapTips"/>
+ <addaction name="mActionNewBookmark"/>
+ <addaction name="mActionShowBookmarks"/>
diff --git a/debian/patches/0001-Don-t-set-field-value-to-NULL-if-multiline-text-edit.patch b/debian/patches/0001-Don-t-set-field-value-to-NULL-if-multiline-text-edit.patch
new file mode 100644
index 0000000..c636341
--- /dev/null
+++ b/debian/patches/0001-Don-t-set-field-value-to-NULL-if-multiline-text-edit.patch
@@ -0,0 +1,28 @@
+From ed106474ce5c39aa2b7fd089134af955b0cc5e2f Mon Sep 17 00:00:00 2001
+From: Matthias Kuhn <matthias.kuhn at gmx.ch>
+Date: Thu, 7 Aug 2014 09:24:39 +0200
+Subject: Don't set field value to NULL if multiline text edit has not been
+ edited
+Origin: https://github.com/qgis/QGIS/commit/ed106474ce5c39aa2b7fd089134af955b0cc5e2f
+
+
+--- a/src/gui/editorwidgets/qgstexteditwidget.cpp
++++ b/src/gui/editorwidgets/qgstexteditwidget.cpp
+@@ -30,7 +30,7 @@ QVariant QgsTextEditWidget::value()
+ {
+ QString v;
+
+- if ( mTextEdit && mTextEdit->document()->isModified() )
++ if ( mTextEdit )
+ {
+ if ( config( "UseHtml" ).toBool() )
+ {
+@@ -42,7 +42,7 @@ QVariant QgsTextEditWidget::value()
+ }
+ }
+
+- if ( mPlainTextEdit && mPlainTextEdit->document()->isModified() )
++ if ( mPlainTextEdit )
+ {
+ v = mPlainTextEdit->toPlainText();
+ }
diff --git a/debian/patches/0001-Finding-python-library-on-Ubuntu-14.04-64bit.patch b/debian/patches/0001-Finding-python-library-on-Ubuntu-14.04-64bit.patch
new file mode 100644
index 0000000..4daa7cd
--- /dev/null
+++ b/debian/patches/0001-Finding-python-library-on-Ubuntu-14.04-64bit.patch
@@ -0,0 +1,18 @@
+From b2df34fcd16b139422c94b7480ae1b9a9bda136d Mon Sep 17 00:00:00 2001
+From: Jarl Friis <jarl at softace.dk>
+Date: Wed, 6 Aug 2014 12:22:54 +0200
+Subject: Finding python library on Ubuntu 14.04 64bit
+Origin: https://github.com/qgis/QGIS/commit/b2df34fcd16b139422c94b7480ae1b9a9bda136d
+
+
+--- a/cmake/FindPythonLibrary.cmake
++++ b/cmake/FindPythonLibrary.cmake
+@@ -68,7 +68,7 @@ else(EXISTS "${PYTHON_INCLUDE_PATH}" AND
+ if(WIN32)
+ STRING(REPLACE "\\" "/" PYTHON_SITE_PACKAGES_DIR ${PYTHON_SITE_PACKAGES_DIR})
+ endif(WIN32)
+- FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS ${PYTHON_PREFIX}/lib ${PYTHON_PREFIX}/libs NO_DEFAULT_PATH)
++ FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES})
+ set(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_PATH} CACHE FILEPATH "Directory holding the python.h include file" FORCE)
+ set(PYTHONLIBRARY_FOUND TRUE)
+ endif(python_config)
diff --git a/debian/patches/0001-Fix-10589-Gesture-events-don-t-get-sent-correctly-wi.patch b/debian/patches/0001-Fix-10589-Gesture-events-don-t-get-sent-correctly-wi.patch
new file mode 100644
index 0000000..7598098
--- /dev/null
+++ b/debian/patches/0001-Fix-10589-Gesture-events-don-t-get-sent-correctly-wi.patch
@@ -0,0 +1,20 @@
+From 232e23ad3bb437693280443a7f20559d2f3f0f60 Mon Sep 17 00:00:00 2001
+From: Nathan Woodrow <nathan.woodrow at mapsolutions.com.au>
+Date: Tue, 1 Jul 2014 21:25:04 +1000
+Subject: Fix #10589 - Gesture events don't get sent correctly with
+ interactive mode on view
+Origin: https://github.com/qgis/QGIS/commit/232e23ad3bb437693280443a7f20559d2f3f0f60
+Bug: http://hub.qgis.org/issues/10589
+
+
+--- a/src/gui/qgsmapcanvas.cpp
++++ b/src/gui/qgsmapcanvas.cpp
+@@ -246,6 +246,8 @@ QgsMapCanvas::QgsMapCanvas( QWidget * pa
+ mPreviewEffect = new QgsPreviewEffect( this );
+ viewport()->setGraphicsEffect( mPreviewEffect );
+
++ setInteractive( false );
++
+ refresh();
+
+ } // QgsMapCanvas ctor
diff --git a/debian/patches/0001-Fix-10720.patch b/debian/patches/0001-Fix-10720.patch
new file mode 100644
index 0000000..0e929bd
--- /dev/null
+++ b/debian/patches/0001-Fix-10720.patch
@@ -0,0 +1,20 @@
+From e973c66aa09baa9c8147ef231b11c9d8eefa680c Mon Sep 17 00:00:00 2001
+From: Marco Hugentobler <marco.hugentobler at sourcepole.ch>
+Date: Thu, 10 Jul 2014 17:25:08 +0200
+Subject: Fix #10720
+Origin: https://github.com/qgis/QGIS/commit/e973c66aa09baa9c8147ef231b11c9d8eefa680c
+Bug: http://hub.qgis.org/issues/10720
+
+
+--- a/src/mapserver/qgswmsprojectparser.cpp
++++ b/src/mapserver/qgswmsprojectparser.cpp
+@@ -168,8 +168,7 @@ QList<QgsMapLayer*> QgsWMSProjectParser:
+ QHash< QString, QDomElement >::const_iterator pLayerNameIt = pLayerByName.find( lName );
+ if ( pLayerNameIt != pLayerByName.constEnd() )
+ {
+- pp.layerFromLegendLayer( pLayerNameIt.value(), layers, useCache );
+- break;
++ return ( QList<QgsMapLayer*>() << pp.createLayerFromElement( pLayerNameIt.value(), useCache ) );
+ }
+
+ const QList<QDomElement>& legendGroupElements = pp.legendGroupElements();
diff --git a/debian/patches/0001-Fix-10744-crashes-with-CSV-files-with-parallel-rende.patch b/debian/patches/0001-Fix-10744-crashes-with-CSV-files-with-parallel-rende.patch
new file mode 100644
index 0000000..92bc33b
--- /dev/null
+++ b/debian/patches/0001-Fix-10744-crashes-with-CSV-files-with-parallel-rende.patch
@@ -0,0 +1,90 @@
+From e937b628f4a4dcd0be2cf021a64d868daf430c2e Mon Sep 17 00:00:00 2001
+From: Martin Dobias <wonder.sk at gmail.com>
+Date: Wed, 16 Jul 2014 19:44:23 +0200
+Subject: Fix #10744 (crashes with CSV files with parallel rendering)
+Origin: https://github.com/qgis/QGIS/commit/e937b628f4a4dcd0be2cf021a64d868daf430c2e
+Bug: http://hub.qgis.org/issues/10744
+
+I can't replicate the crash, but the static QRegExp instances will not work
+with multiple threads.
+
+--- a/src/providers/delimitedtext/qgsdelimitedtextfile.cpp
++++ b/src/providers/delimitedtext/qgsdelimitedtextfile.cpp
+@@ -28,10 +28,6 @@
+ #include <QRegExp>
+ #include <QUrl>
+
+-static QString DefaultFieldName( "field_%1" );
+-static QRegExp InvalidFieldRegexp( "^\\d*(\\.\\d*)?$" );
+-// field_ is optional in following regexp to simplify QgsDelimitedTextFile::fieldNumber()
+-static QRegExp DefaultFieldRegexp( "^(?:field_)?(\\d+)$", Qt::CaseInsensitive );
+
+ QgsDelimitedTextFile::QgsDelimitedTextFile( QString url ) :
+ mFileName( QString() ),
+@@ -52,7 +48,11 @@ QgsDelimitedTextFile::QgsDelimitedTextFi
+ mRecordNumber( -1 ),
+ mHoldCurrentRecord( false ),
+ mMaxRecordNumber( -1 ),
+- mMaxFieldCount( 0 )
++ mMaxFieldCount( 0 ),
++ mDefaultFieldName( "field_%1" ),
++ mInvalidFieldRegexp( "^\\d*(\\.\\d*)?$" ),
++ // field_ is optional in following regexp to simplify QgsDelimitedTextFile::fieldNumber()
++ mDefaultFieldRegexp( "^(?:field_)?(\\d+)$", Qt::CaseInsensitive )
+ {
+ // The default type is CSV
+ setTypeCSV();
+@@ -428,15 +428,15 @@ void QgsDelimitedTextFile::setFieldNames
+ if ( name.length() > mMaxNameLength ) name = name.mid( 0, mMaxNameLength );
+
+ // If the name is invalid then reset it to default name
+- if ( InvalidFieldRegexp.exactMatch( name ) )
++ if ( mInvalidFieldRegexp.exactMatch( name ) )
+ {
+- name = DefaultFieldName.arg( fieldNo );
++ name = mDefaultFieldName.arg( fieldNo );
+ }
+ // If the name looks like a default field name (field_##), then it is
+ // valid if the number matches its column number..
+- else if ( DefaultFieldRegexp.indexIn( name ) == 0 )
++ else if ( mDefaultFieldRegexp.indexIn( name ) == 0 )
+ {
+- int col = DefaultFieldRegexp.capturedTexts()[1].toInt();
++ int col = mDefaultFieldRegexp.capturedTexts()[1].toInt();
+ nameOk = col == fieldNo;
+ }
+ // Otherwise it is valid if isn't the name of an existing field...
+@@ -477,7 +477,7 @@ QStringList &QgsDelimitedTextFile::field
+ {
+ for ( int i = mFieldNames.size() + 1; i <= mMaxFieldCount; i++ )
+ {
+- mFieldNames.append( DefaultFieldName.arg( i ) );
++ mFieldNames.append( mDefaultFieldName.arg( i ) );
+ }
+ }
+ return mFieldNames;
+@@ -490,9 +490,9 @@ int QgsDelimitedTextFile::fieldIndex( QS
+ if ( mUseHeader && ! mFile ) reset();
+ // Try to determine the field based on a default field name, includes
+ // Field_### and simple integer fields.
+- if ( DefaultFieldRegexp.indexIn( name ) == 0 )
++ if ( mDefaultFieldRegexp.indexIn( name ) == 0 )
+ {
+- return DefaultFieldRegexp.capturedTexts()[1].toInt() - 1;
++ return mDefaultFieldRegexp.capturedTexts()[1].toInt() - 1;
+ }
+ for ( int i = 0; i < mFieldNames.size(); i++ )
+ {
+--- a/src/providers/delimitedtext/qgsdelimitedtextfile.h
++++ b/src/providers/delimitedtext/qgsdelimitedtextfile.h
+@@ -379,6 +379,10 @@ class QgsDelimitedTextFile : public QObj
+ // Maximum number of record (ie maximum record number visited)
+ long mMaxRecordNumber;
+ int mMaxFieldCount;
++
++ QString mDefaultFieldName;
++ QRegExp mInvalidFieldRegexp;
++ QRegExp mDefaultFieldRegexp;
+ };
+
+ #endif
diff --git a/debian/patches/0001-Fix-10828-slow-project-loading.patch b/debian/patches/0001-Fix-10828-slow-project-loading.patch
new file mode 100644
index 0000000..960966f
--- /dev/null
+++ b/debian/patches/0001-Fix-10828-slow-project-loading.patch
@@ -0,0 +1,59 @@
+From 904443ff0d49b3d6b6b883cb479ab2f0b5f5f6af Mon Sep 17 00:00:00 2001
+From: Martin Dobias <wonder.sk at gmail.com>
+Date: Wed, 16 Jul 2014 23:29:16 +0200
+Subject: Fix #10828 (slow project loading)
+Origin: https://github.com/qgis/QGIS/commit/904443ff0d49b3d6b6b883cb479ab2f0b5f5f6af
+Bug: http://hub.qgis.org/issues/10828
+
+
+--- a/src/gui/qgsmaplayermodel.cpp
++++ b/src/gui/qgsmaplayermodel.cpp
+@@ -15,6 +15,7 @@
+
+ #include <QIcon>
+
++#include "qgsdataitem.h"
+ #include "qgsmaplayermodel.h"
+ #include "qgsmaplayerregistry.h"
+ #include "qgsapplication.h"
+@@ -132,6 +133,7 @@ int QgsMapLayerModel::columnCount( const
+ return 1;
+ }
+
++
+ QVariant QgsMapLayerModel::data( const QModelIndex &index, int role ) const
+ {
+ if ( !index.isValid() || !index.internalPointer() )
+@@ -165,7 +167,7 @@ QVariant QgsMapLayerModel::data( const Q
+ {
+ case QgsMapLayer::RasterLayer:
+ {
+- return QgsApplication::getThemeIcon( "/mIconRasterLayer.svg" );
++ return QgsLayerItem::iconRaster();
+ }
+
+ case QgsMapLayer::VectorLayer:
+@@ -180,19 +182,19 @@ QVariant QgsMapLayerModel::data( const Q
+ {
+ case QGis::Point:
+ {
+- return QgsApplication::getThemeIcon( "/mIconPointLayer.svg" );
++ return QgsLayerItem::iconPoint();
+ }
+ case QGis::Polygon :
+ {
+- return QgsApplication::getThemeIcon( "/mIconPolygonLayer.svg" );
++ return QgsLayerItem::iconPolygon();
+ }
+ case QGis::Line :
+ {
+- return QgsApplication::getThemeIcon( "/mIconLineLayer.svg" );
++ return QgsLayerItem::iconLine();
+ }
+ case QGis::NoGeometry :
+ {
+- return QgsApplication::getThemeIcon( "/mIconTableLayer.png" );
++ return QgsLayerItem::iconTable();
+ }
+ default:
+ {
diff --git a/debian/patches/0001-Fix-10909-SVG-markers-rendered-as-images-in-composer.patch b/debian/patches/0001-Fix-10909-SVG-markers-rendered-as-images-in-composer.patch
new file mode 100644
index 0000000..34146df
--- /dev/null
+++ b/debian/patches/0001-Fix-10909-SVG-markers-rendered-as-images-in-composer.patch
@@ -0,0 +1,27 @@
+From 9648bc7b946e2ee7ad077c37559df0d97efac169 Mon Sep 17 00:00:00 2001
+From: Martin Dobias <wonder.sk at gmail.com>
+Date: Mon, 21 Jul 2014 14:11:30 +0200
+Subject: Fix #10909 (SVG markers rendered as images in composer)
+Origin: https://github.com/qgis/QGIS/commit/9648bc7b946e2ee7ad077c37559df0d97efac169
+Bug: http://hub.qgis.org/issues/10909
+
+
+--- a/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp
++++ b/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp
+@@ -1194,7 +1194,6 @@ void QgsSvgMarkerSymbolLayerV2::renderPo
+ p->translate( point + outputOffset );
+
+ bool rotated = !qgsDoubleNear( angle, 0 );
+- bool drawOnScreen = qgsDoubleNear( context.renderContext().rasterScaleFactor(), 1.0, 0.1 );
+ if ( rotated )
+ p->rotate( angle );
+
+@@ -1230,7 +1229,7 @@ void QgsSvgMarkerSymbolLayerV2::renderPo
+ bool fitsInCache = true;
+ bool usePict = true;
+ double hwRatio = 1.0;
+- if ( drawOnScreen && !rotated )
++ if ( !context.renderContext().forceVectorOutput() && !rotated )
+ {
+ usePict = false;
+ const QImage& img = QgsSvgCache::instance()->svgAsImage( path, size, fillColor, outlineColor, outlineWidth,
diff --git a/debian/patches/0001-Fix-joinConnectedFeatures-not-keeping-the-featurePar.patch b/debian/patches/0001-Fix-joinConnectedFeatures-not-keeping-the-featurePar.patch
new file mode 100644
index 0000000..bb23219
--- /dev/null
+++ b/debian/patches/0001-Fix-joinConnectedFeatures-not-keeping-the-featurePar.patch
@@ -0,0 +1,18 @@
+From 7bc055ed10dc68cc9c974f234667753bdc5d1179 Mon Sep 17 00:00:00 2001
+From: Sandro Mani <manisandro at gmail.com>
+Date: Thu, 3 Jul 2014 20:59:33 +0200
+Subject: Fix joinConnectedFeatures not keeping the featureParts list in sync
+ (Funded by Sourcepole)
+Origin: https://github.com/qgis/QGIS/commit/7bc055ed10dc68cc9c974f234667753bdc5d1179
+
+
+--- a/src/core/pal/layer.cpp
++++ b/src/core/pal/layer.cpp
+@@ -462,6 +462,7 @@ namespace pal
+ double bmin[2], bmax[2];
+ partCheck->getBoundingBox( bmin, bmax );
+ rtree->Remove( bmin, bmax, partCheck );
++ featureParts->remove( partCheck );
+
+ otherPart->getBoundingBox( bmin, bmax );
+
diff --git a/debian/patches/0001-Followup-b53cab2-Edit-dialog-is-not-an-add-dialog.patch b/debian/patches/0001-Followup-b53cab2-Edit-dialog-is-not-an-add-dialog.patch
new file mode 100644
index 0000000..0e19e04
--- /dev/null
+++ b/debian/patches/0001-Followup-b53cab2-Edit-dialog-is-not-an-add-dialog.patch
@@ -0,0 +1,21 @@
+From 4dce5ec092c5ecf481327cde034ab1b20b3832b9 Mon Sep 17 00:00:00 2001
+From: Matthias Kuhn <matthias.kuhn at gmx.ch>
+Date: Thu, 24 Jul 2014 11:40:26 +0200
+Subject: =?UTF-8?q?Followup=20b53cab2,=20Edit=20dialog=20is=20not=20an=20add?=
+ =?UTF-8?q?=20dialog=0AFix=20#11036?=
+Origin: https://github.com/qgis/QGIS/commit/4dce5ec092c5ecf481327cde034ab1b20b3832b9
+Bug: http://hub.qgis.org/issues/11036
+
+
+--- a/src/app/qgsfeatureaction.cpp
++++ b/src/app/qgsfeatureaction.cpp
+@@ -118,7 +118,8 @@ bool QgsFeatureAction::editFeature()
+ else
+ {
+ QgsAttributes src = mFeature.attributes();
+- dialog->setIsAddDialog( true );
++ if ( !mFeature.isValid() )
++ dialog->setIsAddDialog( true );
+
+ if ( dialog->exec() )
+ {
diff --git a/debian/patches/0001-Only-add-feature-once-when-python-init-function-is-s.patch b/debian/patches/0001-Only-add-feature-once-when-python-init-function-is-s.patch
new file mode 100644
index 0000000..808535c
--- /dev/null
+++ b/debian/patches/0001-Only-add-feature-once-when-python-init-function-is-s.patch
@@ -0,0 +1,21 @@
+From bd5846b5893a488c6dadfc2b160ccf0400add513 Mon Sep 17 00:00:00 2001
+From: Matthias Kuhn <matthias.kuhn at gmx.ch>
+Date: Tue, 22 Jul 2014 23:08:30 +0200
+Subject: =?UTF-8?q?Only=20add=20feature=20once=20when=20python=20init=20func?=
+ =?UTF-8?q?tion=20is=20set=20on=20attribute=20form=0AFix=20#10862?=
+Origin: https://github.com/qgis/QGIS/commit/bd5846b5893a488c6dadfc2b160ccf0400add513
+Bug: http://hub.qgis.org/issues/10862
+
+
+--- a/src/gui/qgsattributeformlegacyinterface.cpp
++++ b/src/gui/qgsattributeformlegacyinterface.cpp
+@@ -46,6 +46,9 @@ void QgsAttributeFormLegacyInterface::fe
+ QDialogButtonBox* buttonBox = form()->findChild<QDialogButtonBox*>();
+ if ( buttonBox )
+ {
++ // If the init function did not call disconnect, we do it here before reconnecting
++ // If it did call disconnect, then the call will just do nothing
++ QObject::disconnect( buttonBox, SIGNAL( accepted() ), form(), SLOT( accept() ) );
+ QObject::connect( buttonBox, SIGNAL( accepted() ), form(), SLOT( accept() ) );
+ }
+
diff --git a/debian/patches/0001-Typo-fixes-from-Rome-airport.patch b/debian/patches/0001-Typo-fixes-from-Rome-airport.patch
new file mode 100644
index 0000000..23f6922
--- /dev/null
+++ b/debian/patches/0001-Typo-fixes-from-Rome-airport.patch
@@ -0,0 +1,36 @@
+From 041eafdfeaae435e2ddb57b8d4f11d8aac7187be Mon Sep 17 00:00:00 2001
+From: borys <info at borysjurgiel.pl>
+Date: Thu, 3 Jul 2014 16:03:13 +0200
+Subject: Typo fixes from Rome airport
+Origin: https://github.com/qgis/QGIS/commit/041eafdfeaae435e2ddb57b8d4f11d8aac7187be
+
+
+--- a/src/mapserver/qgswmsserver.cpp
++++ b/src/mapserver/qgswmsserver.cpp
+@@ -1062,7 +1062,7 @@ int QgsWMSServer::getFeatureInfo( QDomDo
+ QgsDebugMsg( QString( "mMapRenderer width = %1 height = %2" ).arg( mMapRenderer->outputSize().width() ).arg( mMapRenderer->outputSize().height() ) );
+ QgsDebugMsg( QString( "mMapRenderer->mapUnitsPerPixel() = %1" ).arg( mMapRenderer->mapUnitsPerPixel() ) );
+
+- //find out the current scale denominater and set it to the SLD parser
++ //find out the current scale denominator and set it to the SLD parser
+ QgsScaleCalculator scaleCalc(( outputImage->logicalDpiX() + outputImage->logicalDpiY() ) / 2 , mMapRenderer->destinationCrs().mapUnits() );
+ QgsRectangle mapExtent = mMapRenderer->extent();
+ double scaleDenominator = scaleCalc.calculate( mapExtent, outputImage->width() );
+@@ -1507,7 +1507,7 @@ int QgsWMSServer::configureMapRender( co
+ QgsCoordinateReferenceSystem outputCRS;
+
+ //wms spec says that CRS parameter is mandatory.
+- //we don't rejeict the request if it is not there but disable reprojection on the fly
++ //we don't reject the request if it is not there but disable reprojection on the fly
+ if ( crs.isEmpty() )
+ {
+ //disable on the fly projection
+@@ -1649,7 +1649,7 @@ int QgsWMSServer::infoPointToLayerCoordi
+ // use pixel center instead of corner
+ // Unfortunately going through pixel (integer) we cannot reconstruct precisely
+ // the coordinate clicked on client and thus result may differ from
+- // the same raster loaded and queried localy on client
++ // the same raster loaded and queried locally on client
+ mapPoint.setX( mapPoint.x() + xRes / 2 );
+ mapPoint.setY( mapPoint.y() - yRes / 2 );
+
diff --git a/debian/patches/0001-change-str-to-unicode-fix-10624.patch b/debian/patches/0001-change-str-to-unicode-fix-10624.patch
new file mode 100644
index 0000000..0541b87
--- /dev/null
+++ b/debian/patches/0001-change-str-to-unicode-fix-10624.patch
@@ -0,0 +1,19 @@
+From eb8325644a83b410d1d8f6420853da8201a3a236 Mon Sep 17 00:00:00 2001
+From: Etienne Trimaille <etienne.trimaille at gmail.com>
+Date: Thu, 3 Jul 2014 14:02:54 +0200
+Subject: change str to unicode fix #10624
+Origin: https://github.com/qgis/QGIS/commit/eb8325644a83b410d1d8f6420853da8201a3a236
+Bug: http://hub.qgis.org/issues/10624
+
+
+--- a/python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py
++++ b/python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py
+@@ -324,7 +324,7 @@ class ModelerParameterDefinitionDialog(Q
+ == ModelerParameterDefinitionDialog.PARAMETER_STRING \
+ or isinstance(self.param, ParameterString):
+ self.param = ParameterString(name, description,
+- str(self.defaultTextBox.text()))
++ unicode(self.defaultTextBox.text()))
+ elif self.paramType \
+ == ModelerParameterDefinitionDialog.PARAMETER_EXTENT \
+ or isinstance(self.param, ParameterExtent):
diff --git a/debian/patches/0001-composer-Fix-calculation-of-rotated-image-size-insid.patch b/debian/patches/0001-composer-Fix-calculation-of-rotated-image-size-insid.patch
new file mode 100644
index 0000000..88284cc
--- /dev/null
+++ b/debian/patches/0001-composer-Fix-calculation-of-rotated-image-size-insid.patch
@@ -0,0 +1,52 @@
+From 2d427a4ece131af8f9a7ed51aa79de78a4612dc9 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Sat, 19 Jul 2014 22:05:01 +1000
+Subject: [composer] Fix calculation of rotated image size inside picture
+ items when rotation is 90 or 270 degrees
+Origin: https://github.com/qgis/QGIS/commit/2d427a4ece131af8f9a7ed51aa79de78a4612dc9
+
+
+--- a/src/core/composer/qgscomposeritem.cpp
++++ b/src/core/composer/qgscomposeritem.cpp
+@@ -891,26 +891,35 @@ QRectF QgsComposerItem::largestRotatedRe
+ double boundsHeight = boundsRect.height();
+ double ratioBoundsRect = boundsWidth / boundsHeight;
+
++ double clippedRotation = fmod( rotation, 360.0 );
++
+ //shortcut for some rotation values
+- if ( rotation == 0 || rotation == 90 || rotation == 180 || rotation == 270 )
++ if ( clippedRotation == 0 || clippedRotation == 90 || clippedRotation == 180 || clippedRotation == 270 )
+ {
+- double originalRatio = originalWidth / originalHeight;
+- double rectScale = originalRatio > ratioBoundsRect ? boundsWidth / originalWidth : boundsHeight / originalHeight;
++ double rectScale;
++ if ( clippedRotation == 0 || clippedRotation == 180 )
++ {
++ rectScale = (( originalWidth / originalHeight ) > ratioBoundsRect ) ? boundsWidth / originalWidth : boundsHeight / originalHeight;
++ }
++ else
++ {
++ rectScale = (( originalHeight / originalWidth ) > ratioBoundsRect ) ? boundsWidth / originalHeight : boundsHeight / originalWidth;
++ }
+ double rectScaledWidth = rectScale * originalWidth;
+ double rectScaledHeight = rectScale * originalHeight;
+
+- if ( rotation == 0 || rotation == 180 )
++ if ( clippedRotation == 0 || clippedRotation == 180 )
+ {
+ return QRectF(( boundsWidth - rectScaledWidth ) / 2.0, ( boundsHeight - rectScaledHeight ) / 2.0, rectScaledWidth, rectScaledHeight );
+ }
+ else
+ {
+- return QRectF(( boundsWidth - rectScaledHeight ) / 2.0, ( boundsHeight - rectScaledWidth ) / 2.0, rectScaledHeight, rectScaledWidth );
++ return QRectF(( boundsWidth - rectScaledHeight ) / 2.0, ( boundsHeight - rectScaledWidth ) / 2.0, rectScaledWidth, rectScaledHeight );
+ }
+ }
+
+ //convert angle to radians and flip
+- double angleRad = -rotation * M_DEG2RAD;
++ double angleRad = -clippedRotation * M_DEG2RAD;
+ double cosAngle = cos( angleRad );
+ double sinAngle = sin( angleRad );
+
diff --git a/debian/patches/0001-composer-Fix-loss-of-alpha-value-for-attribute-table.patch b/debian/patches/0001-composer-Fix-loss-of-alpha-value-for-attribute-table.patch
new file mode 100644
index 0000000..b69ff6d
--- /dev/null
+++ b/debian/patches/0001-composer-Fix-loss-of-alpha-value-for-attribute-table.patch
@@ -0,0 +1,28 @@
+From 5cb356a4c16f5af3a27dd14d4023e0677e6dfbed Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Sat, 19 Jul 2014 22:46:10 +1000
+Subject: [composer] Fix loss of alpha value for attribute table grid color
+ when project saved and restored
+Origin: https://github.com/qgis/QGIS/commit/5cb356a4c16f5af3a27dd14d4023e0677e6dfbed
+
+
+--- a/src/core/composer/qgscomposertable.cpp
++++ b/src/core/composer/qgscomposertable.cpp
+@@ -248,6 +248,7 @@ bool QgsComposerTable::tableWriteXML( QD
+ elem.setAttribute( "gridColorRed", mGridColor.red() );
+ elem.setAttribute( "gridColorGreen", mGridColor.green() );
+ elem.setAttribute( "gridColorBlue", mGridColor.blue() );
++ elem.setAttribute( "gridColorAlpha", mGridColor.alpha() );
+ elem.setAttribute( "showGrid", mShowGrid );
+
+ //columns
+@@ -282,7 +283,8 @@ bool QgsComposerTable::tableReadXML( con
+ int gridRed = itemElem.attribute( "gridColorRed", "0" ).toInt();
+ int gridGreen = itemElem.attribute( "gridColorGreen", "0" ).toInt();
+ int gridBlue = itemElem.attribute( "gridColorBlue", "0" ).toInt();
+- mGridColor = QColor( gridRed, gridGreen, gridBlue );
++ int gridAlpha = itemElem.attribute( "gridColorAlpha", "255" ).toInt();
++ mGridColor = QColor( gridRed, gridGreen, gridBlue, gridAlpha );
+
+ //restore column specifications
+ qDeleteAll( mColumns );
diff --git a/debian/patches/0001-composer-Prevent-crash-when-loading-project-which-co.patch b/debian/patches/0001-composer-Prevent-crash-when-loading-project-which-co.patch
new file mode 100644
index 0000000..bbb6b1f
--- /dev/null
+++ b/debian/patches/0001-composer-Prevent-crash-when-loading-project-which-co.patch
@@ -0,0 +1,19 @@
+From 111d7d3da04b01930b6ef3b44ddbc50a184cc810 Mon Sep 17 00:00:00 2001
+From: Nyall Dawson <nyall.dawson at gmail.com>
+Date: Sat, 19 Jul 2014 22:36:57 +1000
+Subject: [composer] Prevent crash when loading project which contains no Grid
+ elements (refs #10905)
+Origin: https://github.com/qgis/QGIS/commit/111d7d3da04b01930b6ef3b44ddbc50a184cc810
+Bug: http://hub.qgis.org/issues/10905
+
+
+--- a/src/core/composer/qgscomposermap.cpp
++++ b/src/core/composer/qgscomposermap.cpp
+@@ -115,6 +115,7 @@ QgsComposerMap::QgsComposerMap( QgsCompo
+ mOverviewFrameMapSymbol = 0;
+ mGridLineSymbol = 0;
+ createDefaultOverviewFrameSymbol();
++ createDefaultGridLineSymbol();
+
+ //Offset
+ mXOffset = 0.0;
diff --git a/debian/patches/0001-do-not-transform-toString-to-quote-values-NULL-integ.patch b/debian/patches/0001-do-not-transform-toString-to-quote-values-NULL-integ.patch
new file mode 100644
index 0000000..f2b7b20
--- /dev/null
+++ b/debian/patches/0001-do-not-transform-toString-to-quote-values-NULL-integ.patch
@@ -0,0 +1,19 @@
+From ed14cf374d7c9b4849e89882c6009e25230fd952 Mon Sep 17 00:00:00 2001
+From: Denis Rouzaud <denis.rouzaud at gmail.com>
+Date: Wed, 30 Jul 2014 11:37:56 +0200
+Subject: do not transform toString to quote values (NULL integer becomes 0
+ otherwise)
+Origin: https://github.com/qgis/QGIS/commit/ed14cf374d7c9b4849e89882c6009e25230fd952
+
+
+--- a/src/providers/postgres/qgspostgresprovider.cpp
++++ b/src/providers/postgres/qgspostgresprovider.cpp
+@@ -1676,7 +1676,7 @@ bool QgsPostgresProvider::addFeatures( Q
+ }
+ else
+ {
+- values += delim + quotedValue( v.toString() );
++ values += delim + quotedValue( v );
+ }
+ }
+ else
diff --git a/debian/patches/0001-enable-feature-form-on-openFeatureForm-on-editable-l.patch b/debian/patches/0001-enable-feature-form-on-openFeatureForm-on-editable-l.patch
new file mode 100644
index 0000000..0af1f1d
--- /dev/null
+++ b/debian/patches/0001-enable-feature-form-on-openFeatureForm-on-editable-l.patch
@@ -0,0 +1,19 @@
+From b53cab2bed2cbafad8e505e35df52037a2456de6 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Thu, 10 Jul 2014 23:59:04 +0200
+Subject: enable feature form on openFeatureForm on editable layer (fixes
+ #10865)
+Origin: https://github.com/qgis/QGIS/commit/b53cab2bed2cbafad8e505e35df52037a2456de6
+Bug: http://hub.qgis.org/issues/10865
+
+
+--- a/src/app/qgsfeatureaction.cpp
++++ b/src/app/qgsfeatureaction.cpp
+@@ -118,6 +118,7 @@ bool QgsFeatureAction::editFeature()
+ else
+ {
+ QgsAttributes src = mFeature.attributes();
++ dialog->setIsAddDialog( true );
+
+ if ( dialog->exec() )
+ {
diff --git a/debian/patches/0001-fix-editing-of-NULL-values-fixes-0-to-NULL-and-fixes.patch b/debian/patches/0001-fix-editing-of-NULL-values-fixes-0-to-NULL-and-fixes.patch
new file mode 100644
index 0000000..b3f80d6
--- /dev/null
+++ b/debian/patches/0001-fix-editing-of-NULL-values-fixes-0-to-NULL-and-fixes.patch
@@ -0,0 +1,41 @@
+From 54e3feacb11ba36463c7f97ecae114392a2d4479 Mon Sep 17 00:00:00 2001
+From: Denis Rouzaud <denis.rouzaud at gmail.com>
+Date: Wed, 30 Jul 2014 15:34:27 +0200
+Subject: fix editing of NULL values (fixes 0 to NULL, and fixes setting of
+ NULL values in postgres)
+Origin: https://github.com/qgis/QGIS/commit/54e3feacb11ba36463c7f97ecae114392a2d4479
+
+
+--- a/src/gui/qgsattributeform.cpp
++++ b/src/gui/qgsattributeform.cpp
+@@ -154,7 +154,9 @@ bool QgsAttributeForm::save()
+ {
+ QVariant dstVar = dst[eww->fieldIdx()];
+ QVariant srcVar = eww->value();
+- if ( dstVar != srcVar && srcVar.isValid() )
++ // need to check dstVar.isNull() != srcVar.isNull()
++ // otherwise if dstVar=NULL and scrVar=0, then dstVar = srcVar
++ if ( ( dstVar != srcVar || dstVar.isNull() != srcVar.isNull() ) && srcVar.isValid() )
+ {
+ dst[eww->fieldIdx()] = srcVar;
+
+@@ -192,7 +194,7 @@ bool QgsAttributeForm::save()
+ int n = 0;
+ for ( int i = 0; i < dst.count(); ++i )
+ {
+- if ( dst[i] == src[i] || !dst[i].isValid() )
++ if ( ( dst[i] == src[i] && dst[i].isNull() == src[i].isNull() ) || !dst[i].isValid() )
+ {
+ QgsDebugMsg( "equal or invalid destination" );
+ QgsDebugMsg( QString( "dst:'%1' (type:%2,isNull:%3,isValid:%4)" )
+--- a/src/providers/postgres/qgspostgresprovider.cpp
++++ b/src/providers/postgres/qgspostgresprovider.cpp
+@@ -2024,7 +2024,7 @@ bool QgsPostgresProvider::changeAttribut
+ }
+ else
+ {
+- sql += quotedValue( siter->toString() );
++ sql += quotedValue( *siter );
+ }
+ }
+ catch ( PGFieldNotFound )
diff --git a/debian/patches/0001-metasearch-fix-fsf-address.patch b/debian/patches/0001-metasearch-fix-fsf-address.patch
new file mode 100644
index 0000000..917734e
--- /dev/null
+++ b/debian/patches/0001-metasearch-fix-fsf-address.patch
@@ -0,0 +1,180 @@
+From 53b30c52dbc9191c7fea78b8bc37bf2076cd3829 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Sun, 29 Jun 2014 20:53:00 +0200
+Subject: metasearch: fix fsf address
+Origin: https://github.com/qgis/QGIS/commit/53b30c52dbc9191c7fea78b8bc37bf2076cd3829
+
+
+--- a/ms-windows/Installer-Files/LICENSE.txt
++++ b/ms-windows/Installer-Files/LICENSE.txt
+@@ -11,9 +11,9 @@
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+- You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software
+- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ In addition, as a special exception, the QGIS Development Team gives
+ permission to link the code of this program with the Qt library,
+--- a/python/plugins/MetaSearch/__init__.py
++++ b/python/plugins/MetaSearch/__init__.py
+@@ -17,10 +17,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
+--- a/python/plugins/MetaSearch/dialogs/__init__.py
++++ b/python/plugins/MetaSearch/dialogs/__init__.py
+@@ -13,9 +13,8 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+--- a/python/plugins/MetaSearch/dialogs/maindialog.py
++++ b/python/plugins/MetaSearch/dialogs/maindialog.py
+@@ -21,10 +21,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
+--- a/python/plugins/MetaSearch/dialogs/manageconnectionsdialog.py
++++ b/python/plugins/MetaSearch/dialogs/manageconnectionsdialog.py
+@@ -21,10 +21,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
+--- a/python/plugins/MetaSearch/dialogs/newconnectiondialog.py
++++ b/python/plugins/MetaSearch/dialogs/newconnectiondialog.py
+@@ -21,10 +21,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
+--- a/python/plugins/MetaSearch/dialogs/recorddialog.py
++++ b/python/plugins/MetaSearch/dialogs/recorddialog.py
+@@ -21,10 +21,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
+--- a/python/plugins/MetaSearch/dialogs/xmldialog.py
++++ b/python/plugins/MetaSearch/dialogs/xmldialog.py
+@@ -17,10 +17,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
+--- a/python/plugins/MetaSearch/plugin.py
++++ b/python/plugins/MetaSearch/plugin.py
+@@ -17,10 +17,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
+--- a/python/plugins/MetaSearch/ui/__init__.py
++++ b/python/plugins/MetaSearch/ui/__init__.py
+@@ -13,9 +13,8 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+--- a/python/plugins/MetaSearch/util.py
++++ b/python/plugins/MetaSearch/util.py
+@@ -18,10 +18,9 @@
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ # details.
+ #
+-# A copy of the GNU General Public License is available on the World Wide Web
+-# at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
+-# to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+-# MA 02111-1307, USA.
++# You should have received a copy of the GNU General Public License along
++# with this program; if not, write to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ #
+ ###############################################################################
+
diff --git a/debian/patches/0001-oracle-provider-fix-closing-of-iterator-in-case-of-e.patch b/debian/patches/0001-oracle-provider-fix-closing-of-iterator-in-case-of-e.patch
index f5ea72a..11baf6a 100644
--- a/debian/patches/0001-oracle-provider-fix-closing-of-iterator-in-case-of-e.patch
+++ b/debian/patches/0001-oracle-provider-fix-closing-of-iterator-in-case-of-e.patch
@@ -8,11 +8,9 @@ Origin: https://github.com/qgis/QGIS/commit/87e4b074c720eeef31985e6d1b570771b5d8
src/providers/oracle/qgsoraclefeatureiterator.cpp | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
-diff --git a/src/providers/oracle/qgsoraclefeatureiterator.cpp b/src/providers/oracle/qgsoraclefeatureiterator.cpp
-index 4ca2843..7603cc8 100644
--- a/src/providers/oracle/qgsoraclefeatureiterator.cpp
+++ b/src/providers/oracle/qgsoraclefeatureiterator.cpp
-@@ -107,8 +107,7 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource* sour
+@@ -107,8 +107,7 @@ QgsOracleFeatureIterator::QgsOracleFeatu
whereClause += "(" + mSource->mSqlWhereClause + ")";
}
@@ -35,6 +33,3 @@ index 4ca2843..7603cc8 100644
if ( mConnection )
mConnection->disconnect();
---
-1.7.10.4
-
diff --git a/debian/patches/0001-processing-Sort-algorithms-when-updating-provider-al.patch b/debian/patches/0001-processing-Sort-algorithms-when-updating-provider-al.patch
new file mode 100644
index 0000000..cfc67c7
--- /dev/null
+++ b/debian/patches/0001-processing-Sort-algorithms-when-updating-provider-al.patch
@@ -0,0 +1,20 @@
+From fcd09c5c25f6629744d4f42027ae2b7dfdc1f90e Mon Sep 17 00:00:00 2001
+From: Rado Guzinski <rmgu at dhi-gras.com>
+Date: Fri, 27 Jun 2014 13:33:08 +0200
+Subject: [processing] Sort algorithms when updating provider alg list.
+Origin: https://github.com/qgis/QGIS/commit/fcd09c5c25f6629744d4f42027ae2b7dfdc1f90e
+
+
+--- a/python/plugins/processing/gui/ProcessingToolbox.py
++++ b/python/plugins/processing/gui/ProcessingToolbox.py
+@@ -123,6 +123,10 @@ class ProcessingToolbox(QDockWidget, Ui_
+ if isinstance(child, TreeProviderItem):
+ if child.providerName == providerName:
+ child.refresh()
++ # sort categories and items in categories
++ child.sortChildren(0, Qt.AscendingOrder)
++ for i in xrange(child.childCount()):
++ child.child(i).sortChildren(0, Qt.AscendingOrder)
+ break
+
+ def showPopupMenu(self, point):
diff --git a/debian/patches/0001-processing-fix-join-to-layer-with-join-fix-10244.patch b/debian/patches/0001-processing-fix-join-to-layer-with-join-fix-10244.patch
new file mode 100644
index 0000000..9237f25
--- /dev/null
+++ b/debian/patches/0001-processing-fix-join-to-layer-with-join-fix-10244.patch
@@ -0,0 +1,23 @@
+From df5c1f0747ae66cd134896974afee8d8c6a8d495 Mon Sep 17 00:00:00 2001
+From: Minoru Akagi <akaginch at gmail.com>
+Date: Sat, 5 Jul 2014 13:38:25 +0900
+Subject: [processing] fix join to layer with join (fix #10244)
+Origin: https://github.com/qgis/QGIS/commit/df5c1f0747ae66cd134896974afee8d8c6a8d495
+Bug: http://hub.qgis.org/issues/10244
+
+
+--- a/python/plugins/processing/tools/vector.py
++++ b/python/plugins/processing/tools/vector.py
+@@ -260,10 +260,10 @@ def combineVectorFields(layerA, layerB):
+ """Create single field map from two input field maps.
+ """
+ fields = []
+- fieldsA = layerA.dataProvider().fields()
++ fieldsA = layerA.pendingFields()
+ fields.extend(fieldsA)
+ namesA = [unicode(f.name()).lower() for f in fieldsA]
+- fieldsB = layerB.dataProvider().fields()
++ fieldsB = layerB.pendingFields()
+ for field in fieldsB:
+ name = unicode(field.name()).lower()
+ if name in namesA:
diff --git a/debian/patches/0001-processing-fixed-10445.patch b/debian/patches/0001-processing-fixed-10445.patch
new file mode 100644
index 0000000..8fa1b6d
--- /dev/null
+++ b/debian/patches/0001-processing-fixed-10445.patch
@@ -0,0 +1,19 @@
+From 6c73e001e507c766df062164f9e989f06aa8561c Mon Sep 17 00:00:00 2001
+From: Victor Olaya <volayaf at gmail.com>
+Date: Sat, 28 Jun 2014 16:59:53 +0200
+Subject: [processing] fixed #10445
+Origin: https://github.com/qgis/QGIS/commit/6c73e001e507c766df062164f9e989f06aa8561c
+Bug: http://hub.qgis.org/issues/10445
+
+
+--- a/python/plugins/processing/gui/BatchInputSelectionPanel.py
++++ b/python/plugins/processing/gui/BatchInputSelectionPanel.py
+@@ -95,7 +95,7 @@ class BatchInputSelectionPanel(QtGui.QWi
+ if isinstance(self.param, ParameterMultipleInput):
+ self.text.setText(';'.join(layers[idx].name() for idx in selected))
+ else:
+- rowdif = len(layers) - (self.table.rowCount() - self.row)
++ rowdif = len(selected) - (self.table.rowCount() - self.row)
+ for i in range(rowdif):
+ self.batchDialog.addRow()
+ for i, layeridx in enumerate(selected):
diff --git a/debian/patches/0001-processing-fixed-10792.patch b/debian/patches/0001-processing-fixed-10792.patch
new file mode 100644
index 0000000..054ee95
--- /dev/null
+++ b/debian/patches/0001-processing-fixed-10792.patch
@@ -0,0 +1,19 @@
+From 84950f55c82ac7dfc9a01d6621ead6537b25337b Mon Sep 17 00:00:00 2001
+From: Victor Olaya <volayaf at gmail.com>
+Date: Fri, 4 Jul 2014 22:35:41 +0200
+Subject: [processing] fixed #10792
+Origin: https://github.com/qgis/QGIS/commit/84950f55c82ac7dfc9a01d6621ead6537b25337b
+Bug: http://hub.qgis.org/issues/10792
+
+
+--- a/python/plugins/processing/modeler/ModelerParametersDialog.py
++++ b/python/plugins/processing/modeler/ModelerParametersDialog.py
+@@ -503,7 +503,7 @@ class ModelerParametersDialog(QtGui.QDia
+ elif isinstance(param, ParameterFile):
+ item = QtGui.QComboBox()
+ item.setEditable(True)
+- files = self.getFiles()
++ files = self.getAvailableValuesOfType(ParameterFile, OutputFile)
+ for f in files:
+ item.addItem(f.name(), f)
+ else:
diff --git a/debian/patches/0001-processing-methods-in-dataobjects.py-now-return-laye.patch b/debian/patches/0001-processing-methods-in-dataobjects.py-now-return-laye.patch
new file mode 100644
index 0000000..b89e2af
--- /dev/null
+++ b/debian/patches/0001-processing-methods-in-dataobjects.py-now-return-laye.patch
@@ -0,0 +1,51 @@
+From 50113cda90596a7642e85e88372cf4b3ca7f5e69 Mon Sep 17 00:00:00 2001
+From: Victor Olaya <volayaf at gmail.com>
+Date: Sat, 28 Jun 2014 16:48:24 +0200
+Subject: [processing] methods in dataobjects.py now return layers ordered by
+ name
+Origin: https://github.com/qgis/QGIS/commit/50113cda90596a7642e85e88372cf4b3ca7f5e69
+Bug: http://hub.qgis.org/issues/10446
+
+fixes #10446
+
+--- a/python/plugins/processing/tools/dataobjects.py
++++ b/python/plugins/processing/tools/dataobjects.py
+@@ -76,7 +76,7 @@ def getRasterLayers():
+ if layer.type() == layer.RasterLayer:
+ if layer.providerType() == 'gdal': # only gdal file-based layers
+ raster.append(layer)
+- return raster
++ return sorted(raster, key=lambda layer: layer.name().lower())
+
+
+ def getVectorLayers(shapetype=[-1]):
+@@ -86,17 +86,16 @@ def getVectorLayers(shapetype=[-1]):
+ if layer.type() == layer.VectorLayer:
+ if shapetype == ALL_TYPES or layer.geometryType() in shapetype:
+ uri = unicode(layer.source())
+- if not uri.lower().endswith('csv') \
+- and not uri.lower().endswith('dbf'):
++ if not uri.lower().endswith('csv') and not uri.lower().endswith('dbf'):
+ vector.append(layer)
+- return vector
++ return sorted(vector, key=lambda layer: layer.name().lower())
+
+
+ def getAllLayers():
+ layers = []
+ layers += getRasterLayers()
+ layers += getVectorLayers()
+- return layers
++ return sorted(layers, key=lambda layer: layer.name().lower())
+
+
+ def getTables():
+@@ -105,7 +104,7 @@ def getTables():
+ for layer in layers:
+ if layer.type() == layer.VectorLayer:
+ tables.append(layer)
+- return tables
++ return sorted(tables, key=lambda table: table.name().lower())
+
+
+ def extent(layers):
diff --git a/debian/patches/0001-server-fix-absolute-path-conversion-on-windows.patch b/debian/patches/0001-server-fix-absolute-path-conversion-on-windows.patch
new file mode 100644
index 0000000..6292733
--- /dev/null
+++ b/debian/patches/0001-server-fix-absolute-path-conversion-on-windows.patch
@@ -0,0 +1,28 @@
+From e642231e70e05680e43539ae6a528cdd9f973120 Mon Sep 17 00:00:00 2001
+From: "Juergen E. Fischer" <jef at norbit.de>
+Date: Fri, 8 Aug 2014 17:07:54 +0200
+Subject: server: fix absolute path conversion on windows
+Origin: https://github.com/qgis/QGIS/commit/e642231e70e05680e43539ae6a528cdd9f973120
+
+
+--- a/src/mapserver/qgsserverprojectparser.cpp
++++ b/src/mapserver/qgsserverprojectparser.cpp
+@@ -103,14 +103,14 @@ QString QgsServerProjectParser::convertT
+ bool uncPath = projPath.startsWith( "//" );
+ #endif
+
+- QStringList srcElems = file.split( "/", QString::SkipEmptyParts );
+- QStringList projElems = mProjectPath.split( "/", QString::SkipEmptyParts );
++ QStringList srcElems = srcPath.split( "/", QString::SkipEmptyParts );
++ QStringList projElems = projPath.split( "/", QString::SkipEmptyParts );
+
+ #if defined(Q_OS_WIN)
+ if ( uncPath )
+ {
+- projElems.insert( 0, "" );
+- projElems.insert( 0, "" );
++ projElems.prepend( "" );
++ projElems.prepend( "" );
+ }
+ #endif
+
diff --git a/debian/patches/arm_qreal.patch b/debian/patches/arm_qreal.patch
index 3338bce..a902f6f 100644
--- a/debian/patches/arm_qreal.patch
+++ b/debian/patches/arm_qreal.patch
@@ -24,8 +24,6 @@ Author: Peter Michael Green <plugwash at debian.org>
src/gui/qgscomposerview.cpp | 2 +-
5 files changed, 9 insertions(+), 9 deletions(-)
-diff --git a/python/core/composer/qgsatlascomposition.sip b/python/core/composer/qgsatlascomposition.sip
-index 3871116..f573eea 100644
--- a/python/core/composer/qgsatlascomposition.sip
+++ b/python/core/composer/qgsatlascomposition.sip
@@ -155,7 +155,7 @@ public:
@@ -46,11 +44,9 @@ index 3871116..f573eea 100644
/** Begins the rendering. Returns true if successful, false if no matching atlas
features found.*/
-diff --git a/src/app/composer/qgscomposer.cpp b/src/app/composer/qgscomposer.cpp
-index 841e7e8..e1fc447 100644
--- a/src/app/composer/qgscomposer.cpp
+++ b/src/app/composer/qgscomposer.cpp
-@@ -3629,7 +3629,7 @@ void QgsComposer::loadAtlasPredefinedScalesFromProject()
+@@ -3594,7 +3594,7 @@ void QgsComposer::loadAtlasPredefinedSca
return;
}
QgsAtlasComposition& atlasMap = mComposition->atlasComposition();
@@ -59,11 +55,9 @@ index 841e7e8..e1fc447 100644
// first look at project's scales
QStringList scales( QgsProject::instance()->readListEntry( "Scales", "/ScalesList" ) );
bool hasProjectScales( QgsProject::instance()->readBoolEntry( "Scales", "/useProjectScales" ) );
-diff --git a/src/core/composer/qgsatlascomposition.cpp b/src/core/composer/qgsatlascomposition.cpp
-index 1153f30..94a8769 100644
--- a/src/core/composer/qgsatlascomposition.cpp
+++ b/src/core/composer/qgsatlascomposition.cpp
-@@ -506,7 +506,7 @@ void QgsAtlasComposition::prepareMap( QgsComposerMap* map )
+@@ -491,7 +491,7 @@ void QgsAtlasComposition::prepareMap( Qg
// choose one of the predefined scales
double newWidth = mOrigExtent.width();
double newHeight = mOrigExtent.height();
@@ -72,7 +66,7 @@ index 1153f30..94a8769 100644
for ( int i = 0; i < scales.size(); i++ )
{
double ratio = scales[i] / originalScale;
-@@ -768,7 +768,7 @@ bool QgsAtlasComposition::evalFeatureFilename()
+@@ -747,7 +747,7 @@ bool QgsAtlasComposition::evalFeatureFil
return true;
}
@@ -81,11 +75,9 @@ index 1153f30..94a8769 100644
{
mPredefinedScales = scales;
// make sure the list is sorted
-diff --git a/src/core/composer/qgsatlascomposition.h b/src/core/composer/qgsatlascomposition.h
-index 0e20f61..64aeb36 100644
--- a/src/core/composer/qgsatlascomposition.h
+++ b/src/core/composer/qgsatlascomposition.h
-@@ -183,7 +183,7 @@ class CORE_EXPORT QgsAtlasComposition : public QObject
+@@ -183,7 +183,7 @@ class CORE_EXPORT QgsAtlasComposition :
* @see setPredefinedScales
* @see QgsComposerMap::atlasScalingMode
*/
@@ -94,7 +86,7 @@ index 0e20f61..64aeb36 100644
/**Sets the list of predefined scales for the atlas. This is used
* for maps which are set to the predefined atlas scaling mode.
-@@ -191,7 +191,7 @@ class CORE_EXPORT QgsAtlasComposition : public QObject
+@@ -191,7 +191,7 @@ class CORE_EXPORT QgsAtlasComposition :
* @see predefinedScales
* @see QgsComposerMap::atlasScalingMode
*/
@@ -103,7 +95,7 @@ index 0e20f61..64aeb36 100644
/** Begins the rendering. Returns true if successful, false if no matching atlas
features found.*/
-@@ -336,7 +336,7 @@ class CORE_EXPORT QgsAtlasComposition : public QObject
+@@ -320,7 +320,7 @@ class CORE_EXPORT QgsAtlasComposition :
void computeExtent( QgsComposerMap *map );
//list of predefined scales
@@ -112,11 +104,9 @@ index 0e20f61..64aeb36 100644
};
#endif
-diff --git a/src/gui/qgscomposerview.cpp b/src/gui/qgscomposerview.cpp
-index 39c3142..89b07f1 100644
--- a/src/gui/qgscomposerview.cpp
+++ b/src/gui/qgscomposerview.cpp
-@@ -865,7 +865,7 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
+@@ -869,7 +869,7 @@ void QgsComposerView::mouseReleaseEvent(
else
{
QgsComposerAttributeTable* newTable = new QgsComposerAttributeTable( composition() );
@@ -125,6 +115,3 @@ index 39c3142..89b07f1 100644
QList<const QgsComposerMap*> mapItemList = composition()->composerMapItems();
if ( mapItemList.size() > 0 )
{
---
-1.9.1
-
diff --git a/debian/patches/series b/debian/patches/series
index 0d6db93..b1e963a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,3 +3,32 @@ allows-to-typo.patch
python-env.patch
disable-doxygen.patch
0001-oracle-provider-fix-closing-of-iterator-in-case-of-e.patch
+0001-enable-feature-form-on-openFeatureForm-on-editable-l.patch
+0001-change-str-to-unicode-fix-10624.patch
+0001-Fix-joinConnectedFeatures-not-keeping-the-featurePar.patch
+0001-processing-fix-join-to-layer-with-join-fix-10244.patch
+0001-processing-fixed-10792.patch
+0001-Typo-fixes-from-Rome-airport.patch
+0001-Fix-10589-Gesture-events-don-t-get-sent-correctly-wi.patch
+0001-metasearch-fix-fsf-address.patch
+0001-processing-fixed-10445.patch
+0001-processing-methods-in-dataobjects.py-now-return-laye.patch
+0001-processing-Sort-algorithms-when-updating-provider-al.patch
+0001-Fix-10744-crashes-with-CSV-files-with-parallel-rende.patch
+0001-Fix-10828-slow-project-loading.patch
+0001-composer-Fix-calculation-of-rotated-image-size-insid.patch
+0001-composer-Prevent-crash-when-loading-project-which-co.patch
+0001-composer-Fix-loss-of-alpha-value-for-attribute-table.patch
+0001-Fix-10909-SVG-markers-rendered-as-images-in-composer.patch
+0001-Only-add-feature-once-when-python-init-function-is-s.patch
+0001-Disable-preview-modes-under-OSX-due-to-issues-with-Q.patch
+0001-do-not-transform-toString-to-quote-values-NULL-integ.patch
+0001-Finding-python-library-on-Ubuntu-14.04-64bit.patch
+0001-Don-t-set-field-value-to-NULL-if-multiline-text-edit.patch
+0001-server-fix-absolute-path-conversion-on-windows.patch
+0001-fix-editing-of-NULL-values-fixes-0-to-NULL-and-fixes.patch
+0001-Followup-b53cab2-Edit-dialog-is-not-an-add-dialog.patch
+0001-Bug-10974-QGIS-WFS-Server-provides-too-much-precisio.patch
+0001-Bug-9797-Add-a-precision-setting-for-GetFeatureInfo-.patch
+0001-BUGFIX-Issue-11109-Write-relative-path-in-project-XM.patch
+0001-Fix-10720.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qgis.git
More information about the Pkg-grass-devel
mailing list