[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