[qgis] 01/06: Imported Upstream version 2.8.1

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Fri Feb 27 00:30:58 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository qgis.

commit 343e3038aae3beb7706a9119ce35ff7727fd9aff
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Feb 27 00:51:20 2015 +0100

    Imported Upstream version 2.8.1
---
 CMakeLists.txt                                     |   2 +-
 ChangeLog                                          | 191 ++++++
 INSTALL                                            |   9 +-
 NEWS                                               |  60 +-
 cmake/FindPyQt.py                                  |  24 +-
 debian/changelog                                   |  10 +-
 debian/control                                     |   2 +-
 debian/control.in                                  |  17 +-
 debian/copyright                                   | 694 ++++++++++++++++-----
 debian/libqgis-dev.install                         |   1 +
 debian/qgis-common.install                         |   2 +
 debian/qgis-server.install                         |   1 +
 debian/qgis.install                                |   1 +
 debian/rules                                       |  10 +-
 debian/upstream/metadata                           |  10 +
 debian/watch                                       |   1 +
 doc/CODING.html                                    |   2 +-
 doc/CODING.t2t                                     |   2 +-
 doc/INSTALL.html                                   |  12 +-
 doc/TRANSLATORS                                    |   8 +-
 doc/developersmap.html                             |   1 +
 doc/linux.t2t                                      |   3 +-
 doc/news.html                                      |  62 +-
 doc/news.t2t                                       |   9 +-
 i18n/qgis_de.ts                                    |  20 +-
 i18n/qgis_en.ts                                    |   4 +
 images/developers/essen-2012.jpg                   | Bin 60213 -> 0 bytes
 images/developers/essen-2014.jpg                   | Bin 0 -> 106306 bytes
 images/flags/sr at latin.png                          | Bin 423 -> 0 bytes
 images/flags/zh.png                                | Bin 0 -> 472 bytes
 images/images.qrc                                  |   4 +-
 python/analysis/raster/qgsrastercalcnode.sip       |   3 +-
 python/core/qgis.sip                               |   2 +
 python/core/qgsgeometry.sip                        |   2 +-
 python/gui/qgsattributedialog.sip                  |  11 +-
 .../MetaSearch/dialogs/newconnectiondialog.py      |   5 +
 .../MetaSearch/resources/connections-default.xml   |   2 +-
 .../processing/algs/qgis/SelectByLocation.py       |   4 +-
 scripts/release.pl                                 | 225 ++++---
 scripts/tsstat.pl                                  | 117 ++--
 src/analysis/raster/qgsrastercalcnode.cpp          |   8 +-
 src/analysis/raster/qgsrastercalcnode.h            |   3 +-
 src/analysis/raster/qgsrastercalculator.cpp        |  11 +-
 .../composer/qgscomposerattributetablewidget.cpp   |  35 +-
 src/app/composer/qgscomposerlabelwidget.cpp        |   7 +-
 src/app/composer/qgscomposerlegendwidget.cpp       |  33 +-
 src/app/composer/qgscomposermapwidget.cpp          |  12 +-
 src/app/composer/qgscomposerscalebarwidget.cpp     |   8 +-
 src/app/composer/qgscomposertablewidget.cpp        |  17 +-
 src/app/gps/qgsgpsinformationwidget.cpp            |  48 +-
 src/app/gps/qgsgpsinformationwidget.h              |   2 +
 src/app/qgisapp.cpp                                |   1 +
 src/app/qgsbookmarks.cpp                           |  36 +-
 src/app/qgsdecorationgriddialog.cpp                |  10 +-
 src/app/qgsdiagramproperties.cpp                   |   5 +-
 src/app/qgsfeatureaction.cpp                       |   6 +-
 src/app/qgslabeldialog.cpp                         |   9 +-
 src/app/qgslabelinggui.cpp                         |   6 -
 src/app/qgsmeasuredialog.cpp                       |  17 +-
 src/app/qgsrastercalcdialog.cpp                    |  13 +-
 src/core/qgis.cpp                                  |  12 +
 src/core/qgis.h                                    |   2 +
 src/core/qgsdistancearea.cpp                       |   3 +-
 src/core/qgsgeometry.cpp                           |   2 +-
 src/core/qgsgeometry.h                             |   2 +-
 src/core/qgssnappingutils.cpp                      |   3 +-
 src/core/qgsvectorlayer.cpp                        |   4 +-
 src/gui/qgisgui.cpp                                |  17 +-
 src/gui/qgisgui.h                                  |  10 +
 src/gui/qgsattributeform.cpp                       |   2 +-
 src/gui/qgsmaptoolzoom.cpp                         |   3 +-
 .../qgspointdisplacementrendererwidget.cpp         |  10 +-
 src/providers/oracle/qgsoracleprovider.cpp         |   5 +-
 src/providers/wms/qgswmsprovider.cpp               |  13 +-
 74 files changed, 1295 insertions(+), 613 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 637206a..c3012f0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
 SET(CPACK_PACKAGE_VERSION_MAJOR "2")
 SET(CPACK_PACKAGE_VERSION_MINOR "8")
-SET(CPACK_PACKAGE_VERSION_PATCH "0")
+SET(CPACK_PACKAGE_VERSION_PATCH "1")
 SET(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
 SET(RELEASE_NAME "Wien")
 IF (POLICY CMP0048) # in CMake 3.0.0+
diff --git a/ChangeLog b/ChangeLog
index 6939d89..5739058 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,194 @@
+Juergen E. Fischer <jef at norbit.de>	2015-02-26
+
+    fix measurement dialog translation (fixes #12262)
+
+Matthias Kuhn <matthias.kuhn at gmx.ch>	2015-02-25
+
+    Fix a const...
+
+Bas Couwenberg <sebastic at xs4all.nl>	2015-02-25
+
+    Add dependency on libqgis-server to libqgis-dev.
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-25
+
+    use PyQt4 where deprecated pyqtconfig is unavailable (fixes #10596 and fixes #11465)
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-25
+
+    debian packaging fix (fixes #11465)
+
+Nyall Dawson <nyall.dawson at gmail.com>	2015-02-25
+
+    Make new scratch layer editable by default
+
+Nyall Dawson <nyall.dawson at gmail.com>	2015-02-25
+
+    Suppress attribute form popup if layer has no fields
+
+    Prevents empty form popup for layers with no fields (eg memory layers).
+    If desired, this behaviour can be overriden by the layer's feature
+    form suppress option, eg if form has python logic which makes it useful
+    even with no fields.
+
+    (fix #10775)
+
+Salvatore Larosa <lrssvtml at gmail.com>	2015-02-25
+
+    [bookmark] use preset values instead of header name for tags when exporting in xml file
+
+Salvatore Larosa <lrssvtml at gmail.com>	2015-02-24
+
+    [bookmark] remember last used directory on import/export
+
+Salvatore Larosa <lrssvtml at gmail.com>	2015-02-24
+
+    [bookmark] write correctly the extent in tbl_bookmarks
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-25
+
+    debian packaging updates
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-25
+
+    documentation updates
+
+Nyall Dawson <nyall.dawson at gmail.com>	2015-02-25
+
+    Fix zoom out map tool (fix #12242)
+
+Bas Couwenberg <sebastic at xs4all.nl>	2015-02-23
+
+    Merged and squashed pull requests #1923 & #1928 from sebastic/debian
+
+    PR#1923: Debian packaging improvements
+     * Update copyright file.
+      - Remove unused Files paragraph for the python plugin_installer
+      - Fix qwtpolar-1.0 typo
+      - Remove unused License paragraph for Apache-2.0
+      - Add License paragraph for Zlib
+     * Remove unused substitution variable.
+     * Update watch file, add version mangle.
+     * Add upstream metadata.
+     * Fix libqgis-customwidgets package name in dh_makeshlibs override, doesn't
+       contain ABI anymore.
+     * Also install scalable icons.
+
+     PR#1928 Additional Debian packaging improvements
+     * Update copyright file.
+      - Add additional copyright holders to general files section
+      - Add copyright years to general files section
+      - Order copyright holder by year
+      - Group files sections
+      - Sort groups files sections alphanumerically
+      - Document copyright holders & licenses for external modules
+      - Add license specifications for: Apache-2.0, BSD-2-Clause,
+        dxflib-Commercial-License, GPL-2, LGPL-2.1+, QT-Commericial, LGPL-2.1 with
+        Digia Qt LGPL Exception 1.1 & GPL-3.
+     * Remove extra license file for MetaSearch plugin.
+     * Install libqgis_server.so in libqgis-dev.
+     * Install schemaExtension.xsd in qgis-server.
+     * Install contributors.json & developersmap.html in qgis-common.
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-24
+
+    fix crash on exit
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-24
+
+    update QgsAttributeDialog sip bindings (fixes #12248)
+
+Alexander Bruy <alexander.bruy at gmail.com>	2015-02-24
+
+    [processing] fix inputs in Select by Location algorithm (backport 8d87f35304)
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-24
+
+    fix build and remove debug output (followup 251aca6)
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-24
+
+    fix wmts (fixes #12241; followup 1e97b62c)
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-23
+
+    raster calculator fixes (fixes #12238)
+    * GDALGetGeoTransform failures can be ignored (partly reverts 0080f9e)
+    * handle quoted raster references
+    * don't complain if the output file is not yet set
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-23
+
+    german translation update
+
+Tom Kralidis <tomkralidis at gmail.com>	2015-02-23
+
+    backport e04570cc89d30f38430a5e71cfb795971c40afe0
+
+Tom Kralidis <tomkralidis at gmail.com>	2015-02-23
+
+    remove '/' from UNEP GRID CSW to prevent incorrect setting in Windows Registry on init
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-22
+
+    attribute form: lookup attribute fields by name. joined layers might be unavailable at load time (fixes #12146)
+
+Salvatore Larosa <lrssvtml at gmail.com>	2015-02-22
+
+    increases slightly the zoom of the developers map in about box
+
+Merge: 01066b6 bbae71e
+Tim Sutton <tim at linfiniti.com>	2015-02-22
+
+    Merge pull request #1920 from timlinux/release-2_8
+
+    Backported developer about box photo update to 2.8
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-22
+
+    release.pl: support point releases
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-22
+
+    debian packaging fix
+    (launchpad builds i386 with binary and amd64 with binary-arch only)
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-22
+
+    don't set parent of QFontDialog to avoid the stylesheet font (fixes #12233)
+
+Tim Sutton <tim at linfiniti.com>	2015-02-21
+
+    Merge pull request #1919 from timlinux/master
+
+    Updated developer image for about box
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-20
+
+    oracle provider: consider srid when looking trying spatial index (followup 991f94d; fixes #12230)
+
+Werner Macho <werner.macho at gmail.com>	2015-02-21
+
+    adding french translators and first fixes for chinese
+
+    Signed-off-by: Werner Macho <werner.macho at gmail.com>
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-20
+
+    osgeo4w: fix python server module packaging
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-20
+
+    include missing zh-Hans translation
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-20
+
+    Release of 2.8 (Wien)
+
+Juergen E. Fischer <jef at norbit.de>	2015-02-20
+
+    changelog update for 2.8
+
 Juergen E. Fischer <jef at norbit.de>	2015-02-20
 
     translation update to 2.8 from transifex
diff --git a/INSTALL b/INSTALL
index e02527e..f35bebb 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,10 +1,10 @@
 QGIS
 Building QGIS from source - step by step
-Thursday February 12, 2015
+Wednesday February 25, 2015
 
 
-Last Updated: Thursday February 12, 2015
-Last Change : Monday November 24, 2014
+Last Updated: Wednesday February 25, 2015
+Last Change : Wednesday February 25, 2015
 
 
   1. Introduction
@@ -180,9 +180,10 @@ Now update your local sources database:
   | precise | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags x [...]
   | trusty | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spa [...]
   | utopic | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spa [...]
+  | vivid | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spaw [...]
   | sid | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools pyqt4.qsci-dev python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip- [...]
 
-(extracted from the respective control files in debian/)
+(extracted from the control.in file in debian/)
 
 
   3.4. Setup ccache (Optional)
diff --git a/NEWS b/NEWS
index 9d5d8de..2119f5c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,11 +1,12 @@
 QGIS News
 Change history for the QGIS Project
-Friday February 20, 2015
+Wednesday February 25, 2015
 
 
 ------------------------------------------------------------------------
 
-  1. What's new in Version 2.8.0 'Wien'?
+
+  1. What's new in Version 2.8 'Wien'?
   2. What's new in Version 2.6.0 'Brighton'?
   3. What's new in Version 2.4.0 'Chugiak'?
   4. Whats new in Version 2.2.0 'Valmiera'?
@@ -33,12 +34,13 @@ Friday February 20, 2015
 
 ------------------------------------------------------------------------
 
-Last Updated: Friday February 20, 2015
-Last Change : Friday February 20, 2015
+
+Last Updated: Wednesday February 25, 2015
+Last Change : Wednesday February 25, 2015
 
 
-  1. What's new in Version 2.8.0 'Wien'?
-  ======================================
+  1. What's new in Version 2.8 'Wien'?
+  ====================================
 
 This is a minor release increment with the following feature:
 
@@ -57,17 +59,17 @@ This is a minor release increment with the following feature:
 - Qt5 support (optional - default packages are still currently built against Qt4).
 - Spatial bookmark import/export.
 - Composer user interface improvements.
-- Grid overlay improvements for composer maps. 
+- Grid overlay improvements for composer maps.
 - Raster image fill type.
 - Live heatmap renderer.
 - You can now use multiple styles per layer.
-- Rotation of map canvas (disabled by default, activate in settings) is now supported.
+- Rotation of map canvas is now supported.
 - Improved user interface for data defined symbology.
 - New algorithms in processing.
 - Expressions are now extendable with custom python functions.
 - Comments are now supported in expressions.
-- QGIS server improvements: better caching, layer style support, value relations, DescribeLayer, python plugins.
-
+- QGIS server improvements: better caching, layer style support, value relations,
+  DescribeLayer, python plugins.
 
 
   2. What's new in Version 2.6.0 'Brighton'?
@@ -116,7 +118,6 @@ This is a minor release increment with the following new features:
 - Context menu for identify tool
 
 
-
   3. What's new in Version 2.4.0 'Chugiak'?
   =========================================
 
@@ -137,7 +138,6 @@ This is the minor release sports a number of great new features:
 - New Inverted Polygon renderer
 
 
-
   4. Whats new in Version 2.2.0 'Valmiera'?
   =========================================
 
@@ -179,7 +179,6 @@ This is the minor release sports a number of great new features:
 - 'Processing' can be used headless in scripts.
 
 
-
   5. Whats new in Version 2.0.1 'Dufour'?
   =======================================
 
@@ -329,7 +328,6 @@ added gdal_fillnodata to GDALTools plugin
 - Support for nesting projects within other projects
 
 
-
   8. Whats new in Version 1.7.2 'Wroclaw'?
   ========================================
 
@@ -377,7 +375,6 @@ were made.
 - Fix broken Assign projection functionality in GDALTools and improve handling output file extension
 
 
-
   9. Whats new in Version 1.7.1 'Wroclaw'?
   ========================================
 
@@ -476,7 +473,6 @@ changed so we will just provide a bullet list of key new features here.
 - Move/rotate/change label edit tools to interactively change data defined label properties.
 
 
-
   10.2. New Tools
   ===============
 
@@ -507,7 +503,6 @@ changed so we will just provide a bullet list of key new features here.
 - Default to last selection when prompting for CRS.
 
 
-
   10.5. Rasters
   =============
 
@@ -517,7 +512,6 @@ changed so we will just provide a bullet list of key new features here.
 - Added raster toolbar with histogram stretch functions.
 
 
-
   10.6. Providers and Data Handling
   =================================
 
@@ -544,7 +538,6 @@ changed so we will just provide a bullet list of key new features here.
  - Allow OGR 'save as' without attributes (for eg. DGN/DXF).
 
 
-
   10.7. Api and Developer Centric
   ===============================
 
@@ -573,14 +566,12 @@ changed so we will just provide a bullet list of key new features here.
 - Removed ogr converter plugin - use 'save as' context menu rather.
 
 
-
   10.10. Printing
   ===============
 
 - Undo/Redo support for the print composer
 
 
-
   11. Whats new in Version 1.6.0 'Capiapo'?
   =========================================
 
@@ -627,7 +618,6 @@ caching providers (currently WMS and WFS) can synchronize with changes in
 the datasource.
 
 
-
   11.2. Table of contents (TOC) improvements
   ==========================================
 
@@ -638,7 +628,6 @@ as' option, you can now specify OGR creation options.
 - In the table of contents, it is now possible to select and remove several layers at once.
 
 
-
   11.3. Labelling (New generation only)
   =====================================
 
@@ -667,7 +656,6 @@ the transparency table in the raster layer properties dialog.
 the style manager more easily.
 
 
-
   11.5. Map Composer
   ==================
 
@@ -677,7 +665,6 @@ position dialog.
 - Sorting for composer attribute table (several columns and ascending / descending).
 
 
-
   12. Whats new in Version 1.5.0?
   ===============================
 
@@ -748,7 +735,6 @@ only visible features in composer table or all features
 closed and reappears when reactivated.
 
 
-
   12.2. WMS and WMS-C Support
   ===========================
 
@@ -762,7 +748,6 @@ IGNF definitions in srs.db
 - WMS-C scale slider gui added and more selection improvements
 
 
-
   12.3. API Updates
   =================
 
@@ -780,7 +765,6 @@ variables. More paths can be passed, separated by semicolon.
 - Support more GEOS operators
 
 
-
   13. Whats new in Version 1.4.0 'Enceladus'?
   ===========================================
 
@@ -857,7 +841,6 @@ This release includes over 30 bug fixes and several useful new features:
 - other OSM related bugfixes.
 
 
-
   14.2. Other notable features and improvements in this release
   =============================================================
 
@@ -873,7 +856,6 @@ This release includes over 30 bug fixes and several useful new features:
 - Zoom to a coordinate by entering it in the status bar coordinate display.
 
 
-
   15. Version 1.2.0 'Daphnis'
   ===========================
 
@@ -902,7 +884,6 @@ includes the addition of new vector editing tools:
 - Added option to show only markers of selected features in editing mode.
 - Change layer's icon in legend to reflext that the layer is editable.
 
-
 In addition, there are undo/redo actions in Edit menu, in Advanced digitizing toolbar
 and there is a new dock widget displaying undo stack of active layer.
 
@@ -967,7 +948,6 @@ be respected in the attribute table.
 - An new OpenStreetMap provider and plugin have been added to QGIS.
 
 
-
   15.6. Projects Management
   =========================
 
@@ -994,7 +974,6 @@ types and for setting of column comments.
   independent of the mapscale)
 
 
-
   15.9. Command line arguments
   ============================
 
@@ -1066,7 +1045,6 @@ implementation based on the SQLITE database.
 layers based on attribute data.
 
 
-
   16. Version 1.0.0 'Kore'
   ========================
 
@@ -1096,7 +1074,6 @@ running will support a plugin that is being installed.
 - Ported all GDAL/OGR and GEOS usage to use C APIs only.
 
 
-
   17. Version 0.11.0 'Metis'
   ==========================
 
@@ -1113,7 +1090,6 @@ QGIS 0.10.0 release. In addition we have made the following changes:
 - QML Style support for rasters and database layers
 
 
-
   18. Version 0.10.0 'Io'
   =======================
 
@@ -1135,7 +1111,6 @@ improvements 'under the hood'.
 - Support for migration of old projects to work in newer QGIS versions.
 
 
-
   19. Version 0.9.2rc1 'Ganymede'
   ===============================
 
@@ -1153,7 +1128,6 @@ in raster layers. Support for color ramps in raster layers.
 improvements 'under the hood'.
 
 
-
   20. Version 0.9.1 'Ganymede'
   ============================
 
@@ -1167,7 +1141,6 @@ This is a bug fix release
 - Python Plugin installer to install PyQGIS plugins from the repository
 
 
-
   21. Version 0.9 'Ganymede'
   ==========================
 
@@ -1183,7 +1156,6 @@ This is a bug fix release
 - Improvements to the GeoReferencer
 
 
-
   22. Version 0.8 'Joesephine' .... development version
   =====================================================
 
@@ -1208,7 +1180,6 @@ over time,
 grid_maker plugin
 
 
-
   23. Version 0.6 'Simon'
   =======================
 
@@ -2109,7 +2080,6 @@ including:
 - currently this process IS NOT KNOWN TO BE REVERSIBLE so please backup data
 first before experimenting.
 
-
 2004-04-27 [ts] 0.2.0devel1
 
 Rejigged single marker symbol so directory, icon selector, preview and 
@@ -2343,7 +2313,9 @@ Search radius for identifying features on vector layers added to Preferences
 2004-02-23 [ts]
 Save current view to disk as a PNG image
 
+
 ------------------------------------------------------------------------------
+
 Version 0.1 'Moroz' February 25, 2004
 User interface improvements - menu and dialog cleanups and a new icon theme
   based on Everaldo's Crystal icon set.
@@ -2488,7 +2460,3 @@ July 6, 2002
 
   This is the initial import of the code base into CVS on Sourceforge.net.
 
-
-
-
-
diff --git a/cmake/FindPyQt.py b/cmake/FindPyQt.py
index 256c4a6..96bbbae 100644
--- a/cmake/FindPyQt.py
+++ b/cmake/FindPyQt.py
@@ -30,9 +30,29 @@
 # Redistribution and use is allowed according to the terms of the BSD license.
 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
 
-import PyQt4.pyqtconfig
+try:
+    import PyQt4.pyqtconfig
+    pyqtcfg = PyQt4.pyqtconfig.Configuration()
+except ImportError:
+    import PyQt4.QtCore
+    import sipconfig # won't work for SIP v5
+    import os.path
+    cfg = sipconfig.Configuration()
+    sip_dir = cfg.default_sip_dir
+    for p in (os.path.join(sip_dir, "PyQt4"), sip_dir):
+        if os.path.exists(os.path.join(p, "QtCore", "QtCoremod.sip")):
+            sip_dir = p
+            break
+    cfg = {
+        'pyqt_version': PyQt4.QtCore.PYQT_VERSION,
+        'pyqt_version_str': PyQt4.QtCore.PYQT_VERSION_STR,
+        'pyqt_sip_flags': PyQt4.QtCore.PYQT_CONFIGURATION['sip_flags'],
+        'pyqt_mod_dir': cfg.default_mod_dir,
+        'pyqt_sip_dir': sip_dir,
+        'pyqt_bin_dir': cfg.default_bin_dir,
+    }
+    pyqtcfg = sipconfig.Configuration([cfg])
 
-pyqtcfg = PyQt4.pyqtconfig.Configuration()
 print("pyqt_version:%06.0x" % pyqtcfg.pyqt_version)
 print("pyqt_version_num:%d" % pyqtcfg.pyqt_version)
 print("pyqt_version_str:%s" % pyqtcfg.pyqt_version_str)
diff --git a/debian/changelog b/debian/changelog
index f0202f1..38ca2bb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,14 @@
-qgis (2.8.0) UNRELEASED; urgency=medium
+qgis (2.8.1) UNRELEASED; urgency=medium
+
+  * Release of 2.8.1
+
+ -- Jürgen E. Fischer <jef at norbit.de>  Thu, 26 Feb 2015 10:12:00 +0100
+
+qgis (2.8.0) unstable; urgency=medium
 
   * Release of 2.8
 
- -- Jürgen E. Fischer <jef at norbit.de>  Fri, 20 Feb 2015 13:05:35 +0100
+ -- Jürgen E. Fischer <jef at norbit.de>  Thu, 26 Feb 2015 10:12:00 +0100
 
 qgis (2.7.0) unstable; urgency=medium
 
diff --git a/debian/control b/debian/control
index e0a71e0..7b46c54 100644
--- a/debian/control
+++ b/debian/control
@@ -271,7 +271,7 @@ Description: QGIS server providing various OGC services
  .
  This package contains the QGIS server.
 
-Package: libqgis-customwidgets{QGIS_ABI}
+Package: libqgis-customwidgets
 Architecture: any
 Depends:
  qt4-designer,
diff --git a/debian/control.in b/debian/control.in
index a9a7f66..37e39b3 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -9,7 +9,7 @@ Build-Depends:
 #sid jessie wheezy saucy sid-oracle trusty utopic vivid# debhelper (>= 9),
 #precise# debhelper (>= 7),
  flex,
- grass-dev,
+ grass-dev (<< 7),
  libexpat1-dev,
  libfcgi-dev,
 #sid jessie sid-oracle trusty utopic vivid# libgdal-dev (>= 1.10.1-0~),
@@ -32,7 +32,7 @@ Build-Depends:
  pyqt4-dev-tools,
  python-qscintilla2,
 #precise saucy wheezy# python,
-#precise saucy# python-central (>=0.5),
+#precise saucy# python-central (>= 0.5),
 #saucy wheezy# python-dev,
 #saucy# libpython2.7-dev,
 #sid jessie sid-oracle trusty utopic vivid# python-all (>= 2.6.6-3~), python-all-dev (>= 2.6.6-3~),
@@ -210,7 +210,7 @@ Package: libqgis-dev
 Architecture: any
 Section: libdevel
 Depends:
- grass-dev,
+ grass-dev (<< 7),
  libexpat1-dev,
 #sid jessie sid-oracle trusty utopic vivid# libgdal-dev (>= 1.10.1-0~),
 #precise# libgdal-dev (>= 1.9.0) | libgdal1-dev (<< 1.9.0),
@@ -224,12 +224,13 @@ Depends:
  libqgis-gui{QGIS_ABI} (= ${binary:Version}),
  libqgis-analysis{QGIS_ABI} (= ${binary:Version}),
  libqgis-networkanalysis{QGIS_ABI} (= ${binary:Version}),
+ libqgis-server{QGIS_ABI} (= ${binary:Version}),
  libqgisgrass{QGIS_ABI} (= ${binary:Version}),
  libqgispython{QGIS_ABI} (= ${binary:Version}),
- libqt4-dev (>=4.6.0),
+ libqt4-dev (>= 4.7.0),
  libsqlite3-dev,
- python-qt4 (>=4.1.0),
- python-qt4-dev (>=4.1.0),
+ python-qt4 (>= 4.1.0),
+ python-qt4-dev (>= 4.1.0),
  qt4-designer,
  ${misc:Depends}
 Recommends: libqgis-customwidgets
@@ -250,7 +251,8 @@ Depends:
  qgis-plugin-grass-common (= ${source:Version}),
  ${shlibs:Depends},
  ${misc:Depends},
- grass{GRASS_ABI}
+#!precise# grass-core (<< 7)
+#precise# grass (<< 7)
 Description: GRASS plugin for QGIS
  QGIS is a Geographic Information System (GIS) which manages, analyzes and
  display databases of geographic information.
@@ -262,7 +264,6 @@ Architecture: all
 Depends:
 #sid jessie saucy sid-oracle trusty# python2.7,
 #wheezy precise# python,
- ${python:Depends},
  ${misc:Depends}
 Breaks: qgis-common (<< 1.5)
 Replaces: qgis-common (<< 1.5)
diff --git a/debian/copyright b/debian/copyright
index f9bdc06..7e87ebf 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -4,60 +4,228 @@ Upstream-Contact: qgis-developer at lists.osgeo.org
 Source: https://github.com/qgis/QGIS
 
 Files: *
-Comment: The upstream contributors are listed in the PROVENANCE file
- and here reported.
-Copyright: Gary E.Sherman <sherman at mrcc dot com>
- Steve Halasz	<stevehalasz at users.sourceforge.net>
- Marco Hugentobler	<mhugent at users.sourceforge.net>
- Tim Sutton	<tim at linfiniti.com>
- Denis Antipov	<rawbytes at users.sourceforge.net>
- Mark Coletti	<mcoletti at users.sourceforge.net>
- Lars Luthman	<larsl at users.sourceforge.net>
- Jens Oberender	<j.obi at troja.net>
- Christoph Spoerri	<spoerri at users.sourceforge.net>
- Carl Anderson	<>
- Gavin Macaulay	<g_j_m at users.sourceforge.net>
- Masaru Hoshi	<hoshi at users.sourceforge.net>
- Peter Brewer	<p.w.brewer at rdg dot ac dot uk>
- Radim Blazek	<blazek at itc.it>
- Tom Elwertowski	<telwertowski at users.sourceforge.net>
- Godofredo Contreras	<frdcn at hotmail.com>
- Martin Dobias	<wonder.sk at gmail.com>
- Brendan Morley	<morb at beagle.com.au>
- Magnus Homann	<magnus at homann.se>
- Jürgen E. Fischer	<jef at norbit.de>
- Tisham Dhar	<tisham at apogee.com.au>
- Leonardo Lami	<lami at faunalia.it>
- Marco Pasetti	<marco.pasetti at alice.it>
- Mateusz Loskot	<mateusz at loskot dot net>
- Peter Ersts	<ersts at amnh.org>
- Borys Jurgiel	<borysiasty at aster.pl>
- Paolo Cavallini	<cavallini at faunalia.it>
- Carson J. Q. Farmer	<carson dot farmer at gmail dot com>
- Lorenzo Masini	<lorenxo86 at gmail.com>
- Werner Macho	<werner.macho at gmail.com>
- Giuseppe Sucameli	<brush.tyler at gmail.com>
- Alessandro Furieri	<a.furieri at lqt.it>
- 2008 Paolo L. Scala, Barbara Rita Barricelli, Marco Padula
+Copyright:                   Carl Anderson
+                             Christoph Spoerri <spoerri at users.sourceforge.net>
+                             Ivan Lucena <ivan.lucena at pmldnet.com>
+                             Jens Oberender <j.obi at troja.net>
+                             Leonardo Lami <lami at faunalia.it>
+                             Marco Pasetti <marco.pasetti at alice.it>
+                             Masaru Hoshi <hoshi at users.sourceforge.net>
+                             Mateusz Loskot <mateusz at loskot.net>
+                             Tisham Dhar <tisham at apogee.com.au>
+                             Werner Macho <werner.macho at gmail.com>
+                  1997-1998, Lars Doelle <lars.doelle at on-line.de>
+                       2003, Denis Antipov <rawbytes at users.sourceforge.net>
+                  2003-2004, Steve Halasz <stevehalasz at users.sourceforge.net>
+                       2004, Peter Brewer <p.w.brewer at rdg.ac.uk>
+                  2004-2005, Gavin Macaulay <g_j_m at users.sourceforge.net>
+                  2004-2005, Lars Luthman <larsl at users.sourceforge.net>
+                  2004-2005, Mark Coletti <mcoletti at users.sourceforge.net>
+                       2005, Brendan Morley <morb at beagle.com.au>
+                       2006, Ionut Iosifescu Enescu
+                  2006-2007, Robert Knight <robertknight at gmail.com>
+                  2006-2007, Tom Elwertowski <telwertowski at users.sourceforge.net>
+                       2007, Peter Ersts <ersts at amnh.org>
+                  2007-2008, Matthew Perry
+                       2008, Alessandro Furieri <a.furieri at lqt.it>
+                       2008, Paolo L. Scala, Barbara Rita Barricelli, Marco Padula
+                       2008, Stefan Ziegler
+                 2000, 2009, Richard Kostecky <csf.kostej at mail.com>
+                  2008-2009, Maciej Sieczka <msieczka at sieczka.org>
+                       2009, Andres Manz <manz.andres at gmail.com>
+                       2009, Diego Moreira <moreira.geo at gmail.com>
+                       2009, Florian El Ahdab <felahdab at gmail.com>
+                       2009, Godofredo Contreras <frdcn at hotmail.com>
+                       2009, Lorenzo Masini <lorenxo86 at gmail.com>
+                       2009, Mathias Walker <mwa at sourcepole.ch>
+                       2009, Paolo Cavallini <cavallini at faunalia.it>
+                       2009, Vita Cizek <weetya at gmail.com>
+ 2002-2005, 2007, 2009-2010, Gary E.Sherman <sherman at mrcc.com>
+                  2009-2010, Manuel Massing <m.massing at warped-space.de>
+                       2010, Ivan Mincik <ivan.mincik at gista.sk>
+                       2010, Jack R, Maxim Dubinin (GIS-Lab) <sim at gis-lab.info>
+                       2010, Jeremy Palmer <jpalmer at linz.govt.nz>
+                       2010, Michael Minn <pyqgis at michaelminn.com>
+                       2010, NextGIS (http://nextgis.org)
+                       2010, Pirmin Kalberer <pka at sourcepole.ch>
+                       2010, Sourcepole <info at sourcepole.ch>
+                  2008-2011, Carson J. Q. Farmer <carson.farmer at gmail.com>
+                  2009-2011, Sergey Yakushev <YakushevS at list.ru>
+                 2009, 2011, Luiz Motta <motta.luiz at gmail.com>
+                       2011, German Carrillo <geotux_tuxman at linuxmail.org>
+                       2011, SunilRajKiran-kCube <sunilraj.kiran at kcubeconsulting.com>
+           2007, 2009, 2012, Magnus Homann <magnus at homann.se>
+                  2009-2012, Giuseppe Sucameli <brush.tyler at gmail.com>
+                  2010-2012, Marco Bernasocchi <marco at bernawebdesign.ch>
+                       2012, Arunmozhi <aruntheguy at gmail.com>
+                       2012, Anita Graser <anitagraser at gmx.at>
+                       2012, Australia Indonesia Facility for Disaster Reduction
+                       2012, Carterix Geomatics
+                       2012, Etienne Tourigny <etourigny.dev at gmail.com>
+                 2008, 2012, Horst Düster
+       2003-2005, 2007-2013, Tim Sutton <tim at linfiniti.com>
+                  2008-2013, Borys Jurgiel <borysiasty at aster.pl>
+                  2012-2013, Chris Crook <ccrook at linz.govt.nz>
+                  2012-2013, Larry Shaffer <larrys at dakcarto.com>
+                  2012-2013, Massimo Endrighi <massimo.endrighi at geopartner.it>
+                  2012-2013, Salvatore Larosa <lrssvtml at gmail.com>
+                  2012-2013, Vinayan Parameswaran <vinayan123 at gmail.com>
+                       2013, Alvaro Huarte <ahuarte47 at yahoo.es>
+                       2013, CS Systemes d'information (CS SI) <otb at c-s.fr>
+                       2013, Joshua Arnott <josh at snorfalorpagus.net
+                  2012-2013, René-Luc D'Hont <rldhont at 3liz.com>
+                  2004-2014, Marco Hugentobler <mhugent at users.sourceforge.net>
+           2005, 2012, 2014, Hugo Mercier <hugo.mercier at oslandia.com>
+            2011-2012, 2014, Nathan Woodrow <madmanwoo at gmail.com>
+            2008-2012, 2014, Jürgen E. Fischer <jef at norbit.de>
+                 2011, 2014, Tamas Szekeres <szekerest at gmail.com>
+                  2009-2014, Alexander Bruy <alexander.bruy at gmail.com>
+                  2012-2014, Matthias Kuhn <matthias.kuhn at gmx.ch>
+                  2012-2014, Piotr Pociask <opengis84 at gmail.com>
+            2011, 2013-2014, Bernhard Ströbl <bernhard.stroebl at jena.de>
+                  2013-2014, Martin Isenburg <martin at rapidlasso.com>
+                       2014, Agresta S. Coop <iescamochero at agresta.org>
+                       2014, Alessandro Pasotti <a.pasotti at itopen.it>
+                       2014, Angelos Tzotsos <tzotsos at gmail.com>
+                       2014, Giovanni Allegri
+                       2014, Michael Douchin
+                       2014, Niccolo' Marchi <sciurusurbanus at hotmail.it>
+                       2014, Radoslaw Guzinski <rmgu at dhi-gras.com>
+                       2015, Tom Kralidis <tomkralidis at gmail.com>
+       2004-2006, 2009-2015, Radim Blazek <blazek at itc.it>
+                  2005-2015, Martin Dobias <wonder.sk at gmail.com>
+                  2012-2015, Victor Olaya <volayaf at gmail.com>
+                  2012-2015, The QGIS Project
+                  2012-2015, Denis Rouzaud <denis.rouzaud at gmail.com>
+                  2013-2015, Nyall Dawson <nyall.dawson at gmail.com>
+                  2014-2015, Arnaud Morvan <arnaud.morvan at camptocamp.com>
+                  2014-2015, Sandro Mani <manisandro at gmail.com>
+                  2014-2015, Sandro Santilli <strk at keybit.net>
+                       2015, Michael Kirk <michael.john.kirk at gmail.com>
 License: GPL-2+
 
+Files: qgis.dtd
+Copyright: disclaimed
+License: public-domain
+ This DTD describes the maplayers and their symbology and
+ is used when saving/restoring a QGIS project.
+ This file is in the public domain
+
+Files: python/ext-libs/dateutil/*
+Copyright: 2003-2010, Gustavo Niemeyer <gustavo at niemeyer.net>
+License: BSD-3-Clause
+
+Files: python/ext-libs/httplib2/*
+Copyright: 2006, 2012, Joe Gregorio <joe at bitworking.org>
+License: GPL-2+
+
+Files: python/ext-libs/httplib2/socks.py
+Copyright: 2006, Dan-Haim
+License: BSD-2-Clause
+
+Files: python/ext-libs/jinja2/*
+Copyright: 2006-2010, the Jinja Team
+License: BSD-3-Clause
+
+Files: python/ext-libs/markupsafe/*
+Copyright: 2010, 2013, Armin Ronacher
+License: BSD-3-Clause
+
+Files: python/ext-libs/owslib/*
+Copyright: 2006, Ancient World Mapping Center
+      2008-2013, Tom Kralidis
+           2013, Christian Ledermann <christian.ledermann at gmail.com>
+           2012, Brad Hards <bradh at frogmouth.net>
+           2012, Jachym Cepicky
+      2007-2009, STFC <http://www.stfc.ac.uk>
+      2004-2006, Sean C. Gillies
+           2005, Nuxeo SARL <http://nuxeo.com>
+License: BSD-3-Clause
+
+Files: python/ext-libs/pygments/*
+Copyright: 2006-2013, the Pygments team
+License: BSD-2-Clause
+
+Files: python/ext-libs/pygments/lexers/_robotframeworklexer.py
+Copyright: 2006-2013, the Pygments team
+                2012, Nokia Siemens Networks Oyj
+License: BSD-2-Clause and Apache-2.0
+
 Files: python/ext-libs/pyspatialite/*
-Copyright: 2004-2007 Gerhard Häring <gh at ghaering.de>
+Copyright: 2004-2010, Gerhard Häring <gh at ghaering.de>
 License: Zlib
 
-Files: src/plugins/dxf2shp_converter/builder.cpp
-Copyright: 1999, Frank Warmerdam <warmerda at pobox.com>
-Comment: The code is heavily based on Christopher Michaelis' DXF to
- Shapefile Converter (http://www.wanderingidea.com/content/view/12/25/),
- released under GPL License
- .
- This code is based on two other products:
-    DXFLIB (http://www.ribbonsoft.com/dxflib.html)
- This is a library for reading DXF files, also GPL.
-    SHAPELIB (http://shapelib.maptools.org/)
- Used for the Shapefile functionality.
+Files: python/ext-libs/pytz/*
+Copyright: 2003-2009, Stuart Bishop <stuart at stuartbishop.net>
+License: MIT
+
+Files: python/ext-libs/six.py
+Copyright: 2010-2014, Benjamin Peterson
 License: MIT
 
+Files: python/plugins/fTools/*
+Copyright: 2009, Carson J.Q. Farmer
+License: MIT
+
+Files: python/plugins/GdalTools/*
+Copyright: 2009, Faunalia
+License: MIT
+
+Files: python/plugins/processing/modeler/ModelerArrowItem.py
+Copyright: 2010, Nokia Corporation and/or its subsidiary(-ies)
+           2010, Riverbank Computing Limited
+License: BSD-3-Clause
+
+Files: python/plugins/processing/algs/qgis/voronoi.py
+Copyright: 2012, Victor Olaya
+           1994, AT&T Bell Laboratories
+Comment: Voronoi diagram calculator/ Delaunay triangulator
+ Translated to Python by Bill Simons
+ September, 2005
+ .
+ Additional changes by Carson Farmer added November 2010
+ .
+ Calculate Delaunay triangulation or the Voronoi polygons for a set of
+ 2D input points.
+ .
+ Derived from code bearing the following notice:
+ .
+  The author of this software is Steven Fortune.  Copyright (c) 1994 by AT&T
+  Bell Laboratories.
+  Permission to use, copy, modify, and distribute this software for any
+  purpose without fee is hereby granted, provided that this entire notice
+  is included in all copies of any software which is or includes a copy
+  or modification of this software and in all copies of the supporting
+  documentation for such software.
+  THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+  WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY
+  REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+  OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ .
+ Comments were incorporated from Shane O'Sullivan's translation of the
+ original code into C++ (http://mapviewer.skynet.ie/voronoi.html)
+ .
+ Steve Fortune's homepage: http://netlib.bell-labs.com/cm/cs/who/sjf/index.html
+License: GPL-2+
+
+Files: src/app/gps/qwtpolar-0.1/*
+ src/app/gps/qwtpolar-1.0/*
+Copyright: 2008, Uwe Rathmann
+Comment: This library is free software; you can redistribute it and/or
+ modify it under the terms of the Qwt License, Version 1.0
+License: QWT-1.0
+
+Files: src/app/qtmain_android.cpp
+Copyright: 2009-2011, BogDan Vatra <bog_dan_ro at yahoo.com>
+License: BSD-3-Clause
+
+Files: src/astyle/*
+Copyright: Jim Pattee <jimp03 at email.com>
+           Tal Davidson
+Comment: Artistic Style is maintained and updated by Jim Pattee.
+ The original author was Tal Davidson, Israel.
+License: LGPL-2.1+
+
 Files: src/core/gps/config.h
  src/core/gps/context.c
  src/core/gps/context.h
@@ -78,35 +246,155 @@ Files: src/core/gps/config.h
 Copyright: Tim <xtimor at gmail.com>
 License: LGPL-2+
 
-Files: src/plugins/dxf2shp_converter/shapelib-1.2.10/dbfopen.c
- src/plugins/dxf2shp_converter/shapelib-1.2.10/shapefil.h
-Copyright: 1999, Frank Warmerdam
+Files: src/core/pal/*
+Copyright: 2008, Maxence Laurent, MIS-TIC, HEIG-VD
+License: GPL-3+
+
+Files: src/core/pal/rtree.hpp
+Copyright: disclaimed
+Comment: from http://www.superliminal.com/
+ .
+ AUTORS
+    - 1983 Original algorithm and test code by Antonin Guttman and Michael Stonebraker, UC Berkely
+    - 1994 ANCI C ported from original test code by Melinda Green - melinda at superliminal.com
+    - 1995 Sphere volume fix for degeneracy problem submitted by Paul Brook
+    - 2004 Templated C++ port by Greg Douglas
+    - 2008 Portability issues fixed by Maxence Laurent
+License: public-domain
+ LICENSE : Entirely free for all uses. Enjoy!
+ This File is in the public domain
+
+Files: src/core/symbology-ng/qgscolorbrewerpalette.cpp
+Copyright: 2002, Cynthia Brewer, Mark Harrower, and The Pennsylvania State University
+           2009, by Martin Dobias
+License: Apache-2.0 and GPL-2+
+
+Files: src/gui/raster/qwt5_histogram_item.h
+Copyright: 1997, Josef Wilgen
+           2002, Uwe Rathmann
+License: QWT-1.0
+
+Files: src/gui/symbology-ng/characterwidget.cpp
+ src/gui/symbology-ng/characterwidget.h
+Copyright: 2009, Nokia Corporation and/or its subsidiary(-ies)
+License: QT-Commercial or LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3
+
+Files: src/plugins/dxf2shp_converter/builder.cpp
+ src/plugins/dxf2shp_converter/builder.h
+Copyright: 1999, Frank Warmerdam <warmerda at pobox.com>
+Comment: The code is heavily based on Christopher Michaelis' DXF to
+ Shapefile Converter (http://www.wanderingidea.com/content/view/12/25/),
+ released under GPL License
+ .
+ This code is based on two other products:
+    DXFLIB (http://www.ribbonsoft.com/dxflib.html)
+ This is a library for reading DXF files, also GPL.
+    SHAPELIB (http://shapelib.maptools.org/)
+ Used for the Shapefile functionality.
+License: MIT
+
+Files: src/plugins/dxf2shp_converter/getInsertions.h
+Copyright: Christopher Michaelis
+License: GPL-2
+
+Files: src/plugins/dxf2shp_converter/getInsertions.cpp
+Copyright: Christopher Michaelis
+License: GPL-2+
+
+Files: src/plugins/dxf2shp_converter/shapelib-1.2.10/*
+Copyright: 1999, 2001-2002, Frank Warmerdam
+License: MIT or LGPL-2+
+
+Files: src/plugins/dxf2shp_converter/dxflib/src/*
+Copyright: 2001-2003, RibbonSoft
+                2001, Robert J. Campbell Jr
+License: GPL-2 or dxflib-Commercial-License
+
+Files: src/plugins/evis/*
+Copyright: 2007, American Museum of Natural History
 License: LGPL-2+
 
-Files: src/plugins/dxf2shp_converter/shapelib-1.2.10/shpopen.c
-Copyright: 1999, 2001, Frank Warmerdam
+Files: src/plugins/globe/osgEarthQt/ViewerWidget.cpp
+ src/plugins/globe/osgEarthUtil/Controls.cpp
+Copyright: 2008-2012, Pelican Mapping
 License: LGPL-2+
 
-Files: src/plugins/dxf2shp_converter/shapelib-1.2.10/shprewind.c
-Copyright: 2002, Frank Warmerdam
+Files: src/plugins/grass/qtermwidget/BlockArray.*
+Copyright: 2000, Stephan Kulow <coolo at kde.org>
+           2008, e_k <e_k at users.sourceforge.net>
+License: GPL-2+
+
+Files: src/plugins/grass/qtermwidget/Emulation.cpp
+Copyright: 1996, Matthias Ettrich <ettrich at kde.org>
+      1997-1998, Lars Doelle <lars.doelle at on-line.de>
+           2007, Robert Knight <robertknight at gmail.com>
+           2008, e_k <e_k at users.sourceforge.net>
+License: GPL-2+
+
+Files: src/plugins/grass/qtermwidget/k3process.cpp
+ src/plugins/grass/qtermwidget/k3process.h
+ src/plugins/grass/qtermwidget/k3processcontroller.cpp
+ src/plugins/grass/qtermwidget/k3processcontroller.h
+Copyright: 1997, Christian Czezakte <e9025461 at student.tuwien.ac.at>
+           2008, e_k <e_k at users.sourceforge.net>
 License: LGPL-2+
 
-Files: cmake/PythonCompile.py
-Copyright: Simon Edwards <simon at simonzone.com>
+Files: src/plugins/grass/qtermwidget/konsole_wcwidth.*
+Copyright: 2011, Markus Kuhn
 License: public-domain
- PythonCompile.py was written by Simon Edwards, and is placed in the public
- domain. The author hereby disclaims copyright to this source code.
+ This file is in the public domain
+
+Files: src/plugins/grass/qtermwidget/kpty.cpp
+ src/plugins/grass/qtermwidget/kpty.h
+ src/plugins/grass/qtermwidget/kpty_p.h
+Copyright:  2002, Waldo Bastian <bastian at kde.org>
+ 2002-2003, 2007, Oswald Buddenhagen <ossi at kde.org>
+            2008, e_k <e_k at users.sourceforge.net>
+License: LGPL-2+
 
-Files: cmake/FindLibPython.py
- cmake/FindPyQt.py
- cmake/FindSIP.py
-Copyright: 2007, Simon Edwards <simon at simonzone.com>
-License: BSD-3-Clause
+Files: src/plugins/grass/qtermwidget/qtermwidget.cpp
+ src/plugins/grass/qtermwidget/qtermwidget.h
+Copyright: 2008, e_k <e_k at users.sourceforge.net>
+           2009, Lorenzo "Il Rugginoso" Masini <lorenxo86 at gmail.com>
+License: LGPL-2+
 
-Files: cmake/FindQsci.py
-Copyright: 2012, Larry Shaffer <larry at dakotacarto.com>
-  2012, The QGIS Project'
-License: BSD-3-Clause
+Files: src/plugins/grass/qtermwidget/TerminalCharacterDecoder.cpp
+ src/plugins/grass/qtermwidget/TerminalCharacterDecoder.h
+Copyright: 2006-2007, Robert Knight <robertknight at gmail.com>
+                2008, e_k <e_k at users.sourceforge.net>
+License: LGPL-2+
+
+Files: src/providers/oracle/ocispatial/main.cpp
+ src/providers/oracle/ocispatial/qsql_ocispatial.cpp
+Copyright: 2012, Digia Plc and/or its subsidiary(-ies)
+      2012-2013, Juergen E. Fischer <jef at norbit.de>
+License: QT-Commercial or LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3
+
+Files: src/providers/oracle/ocispatial/qsql_ocispatial.h
+ src/providers/oracle/ocispatial/qsqlcachedresult_p.h
+ src/providers/spatialite/qspatialite/qsql_spatialite.cpp
+ src/providers/spatialite/qspatialite/qsql_spatialite.h
+ src/providers/spatialite/qspatialite/qsqlcachedresult_p.h
+ src/providers/spatialite/qspatialite/smain.cpp
+Copyright: 2012, Digia Plc and/or its subsidiary(-ies)
+License: QT-Commercial or LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3
+
+Files: tests/qt_modeltest/modeltest.cpp
+ tests/qt_modeltest/modeltest.h
+ tests/qt_modeltest/tst_modeltest.cpp
+Copyright: 2011, Nokia Corporation and/or its subsidiary(-ies)
+License: QT-Commercial or LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3
+
+Files: tests/qt_modeltest/dynamictreemodel.cpp
+ tests/qt_modeltest/dynamictreemodel.h
+Copyright: 2009, Stephen Kelly <steveire at gmail.com>
+License: QT-Commercial or LGPL-2.1 with Digia Qt LGPL Exception 1.1 or GPL-3
+
+Files: tests/testdata/cpt-city/gmt/*
+Copyright: 2004, 2010, Paul Wessel, SOEST
+           2004, 2010, Andreas Trawoeger
+           2004, 2010, Walter Smith, NOAA
+License: GPL-2+
 
 Files: cmake/Bison.cmake
  cmake/FindExpat.cmake
@@ -118,6 +406,10 @@ Files: cmake/Bison.cmake
 Copyright: 2007, Martin Dobias <wonder.sk at gmail.com>
 License: BSD-3-Clause
 
+Files: cmake/FindFcgi.cmake
+Copyright: 2010, Marco Hugentobler
+License: BSD-3-Clause
+
 Files: cmake/FindGDAL.cmake
 Copyright: 2007, Magnus Homann <magnus at homann dot se>
 License: BSD-3-Clause
@@ -129,7 +421,7 @@ License: BSD-3-Clause
 
 Files: cmake/FindGSL.cmake
 Copyright: 2004, Felix Woelk
- Jan Woetzel
+                 Jan Woetzel
 License: BSD-3-Clause
 
 Files: cmake/FindIconv.cmake
@@ -137,6 +429,18 @@ Files: cmake/FindIconv.cmake
 Copyright: 2009, Juergen E. Fischer <jef at norbit dot de>
 License: BSD-3-Clause
 
+Files: cmake/FindLibPython.py
+ cmake/FindPyQt.py
+ cmake/FindSIP.py
+Copyright: 2007, Simon Edwards <simon at simonzone.com>
+License: BSD-3-Clause
+
+Files: cmake/FindOSGEARTH.cmake
+Copyright: 2011-2013, Pirmin Kalberer
+                2011, Jürgen E. Fischer <jef at norbit.de>
+                2013, William Kyngesburye
+License: BSD-3-Clause
+
 Files: cmake/FindPyQt4.cmake
 Copyright: 2007-2008, Simon Edwards <simon at simonzone.com>
 License: BSD-3-Clause
@@ -158,53 +462,63 @@ Files: cmake/FindQGIS.cmake
 Copyright: Tim Sutton
 License: BSD-3-Clause
 
-Files: cmake/FindQwt.cmake
-Copyright: 2010, Tim Sutton <tim at linfiniti.com>
-License: BSD-3-Clause
-
 Files: cmake/FindQsci.cmake
  cmake/QsciAPI.cmake
 Copyright: 2012, Larry Shaffer <larrys at dakotacarto.com>
 License: BSD-3-Clause
 
-Files: cmake/FindQScintilla.cmake
-Copyright: 2007 Thomas Moenicke thomas.moenicke at kdemail.net
-License: BSD-3-Clause
-
-Files: cmake/FindSPATIALITE.cmake
-Copyright: 2009, Sandro Furieri <a.furieri at lqt.it>
+Files: cmake/FindQsci.py
+Copyright: 2012, Larry Shaffer <larry at dakotacarto.com>
+           2012, The QGIS Project
 License: BSD-3-Clause
 
-Files: cmake/UsePythonTest.cmake
-Copyright: 2006-2010 Mathieu Malaterre <mathieu.malaterre at gmail.com>
+Files: cmake/FindQScintilla.cmake
+Copyright: 2007, Thomas Moenicke thomas.moenicke at kdemail.net
 License: BSD-3-Clause
 
-Files: cmake/FindFcgi.cmake
-Copyright: 2010, Marco Hugentobler
+Files: cmake/FindQwt.cmake
+Copyright: 2010, Tim Sutton <tim at linfiniti.com>
 License: BSD-3-Clause
 
-Files: cmake/FindOSGEARTH.cmake
-Copyright: 2011-2013, Pirmin Kalberer
- 2011, Jürgen E. Fischer <jef at norbit.de>
- 2013, William Kyngesburye
+Files: cmake/FindSPATIALITE.cmake
+Copyright: 2009, Sandro Furieri <a.furieri at lqt.it>
 License: BSD-3-Clause
 
 Files: cmake/MacBundleMacros.cmake
 Copyright: 2010-2013, William Kyngesburye
- 2012, Larry Shaffer
+                2012, Larry Shaffer
 License: BSD-3-Clause
 
 Files: cmake/MacPlistMacros.cmake
 Copyright: 2011, William Kyngesburye
 License: BSD-3-Clause
 
+Files: cmake/PythonCompile.py
+Copyright: Simon Edwards <simon at simonzone.com>
+License: public-domain
+ PythonCompile.py was written by Simon Edwards, and is placed in the public
+ domain. The author hereby disclaims copyright to this source code.
+
+Files: cmake/UsePythonTest.cmake
+Copyright: 2006-2010, Mathieu Malaterre <mathieu.malaterre at gmail.com>
+License: BSD-3-Clause
+
+Files: images/themes/default/*
+Copyright: 2011, Robert Szczepanek
+                 Anita Graser
+Comment: GIS icons by Robert Szczepanek is licensed under a Creative Commons
+ Attribution-Share Alike 3.0 Unported License. Feel free to use it in any GIS
+ software or for other purposes. I only ask you to let me know about that and
+ to include licence.txt file in your work.
+License: CC-BY-SA-3.0
+
 Files: resources/cpt-city-qgis-min/bhw/*
 Copyright: 2011, Blackheartedworf (http://blackheartedwolf.deviantart.com/)
 License: CC-BY-3.0
 
 Files: resources/cpt-city-qgis-min/cb/*
 Copyright: 2002, Cynthia Brewer, Pennsylvania State University
- 2002, Mark Harrower, University of Wisconsin-Madison
+           2002, Mark Harrower, University of Wisconsin-Madison
 Comment: This product includes color specifications and designs developed by
  Cynthia Brewer (http://colorbrewer.org/).
 License: Apache-Style-Software-License-Version-1.1
@@ -340,8 +654,8 @@ License: BSD-like-gist
 
 Files: resources/cpt-city-qgis-min/gmt/*
 Copyright: 2004, 2010, Paul Wessel, SOEST
- 2004, 2010, Andreas Trawoeger
- 2004, 2010, Walter Smith, NOAA
+           2004, 2010, Andreas Trawoeger
+           2004, 2010, Walter Smith, NOAA
 License: GPL-2+
 
 Files: resources/cpt-city-qgis-min/go2/webtwo/*
@@ -487,9 +801,9 @@ License: CC-BY-SA-3.0
 
 Files: resources/cpt-city-qgis-min/ngdc/*
 Copyright: 2009, Elliot Lim, NOAA/NGDC
- 2009, Greg Reed, Australian Ocean Data Centre Joint Facility
- 2009, Lester M. Anderson, CASP, UK
- 2009, Jesse Varner, NOAA/NGDC
+           2009, Greg Reed, Australian Ocean Data Centre Joint Facility
+           2009, Lester M. Anderson, CASP, UK
+           2009, Jesse Varner, NOAA/NGDC
 Comment: Derived from GMT_globe and GMT_haxby which are licensed
  under the GPL.
  .
@@ -523,7 +837,7 @@ License: public-domain-attribution
 
 Files: resources/cpt-city-qgis-min/saga/*
 Copyright: 2012, O. Conrad, Universität Hamburg
- 2012, J. Böhner, Universität Hamburg
+           2012, J. Böhner, Universität Hamburg
 License: GPL-2+
 
 Files: resources/cpt-city-qgis-min/tp/*
@@ -562,8 +876,8 @@ License: OPL-PSI-1.0
 
 Files: resources/cpt-city-qgis-min/wkp/country/*
 Copyright: 2008, 2011, 2012, Bourrichon
- 2008, 2011, 2012, Eric Gaba
- 2008, 2011, 2012, PZmaps
+           2008, 2011, 2012, Eric Gaba
+           2008, 2011, 2012, PZmaps
 License: CC-BY-SA-3.0
 
 Files: resources/cpt-city-qgis-min/wkp/encyclopedia/*
@@ -635,41 +949,6 @@ Files: resources/cpt-city-qgis-min/wkp/tubs/*
 Copyright: 2012, TUBS
 License: CC-BY-SA-3.0
 
-Files: tests/testdata/cpt-city/gmt/*
-Copyright: 2004, 2010, Paul Wessel, SOEST
- 2004, 2010, Andreas Trawoeger
- 2004, 2010, Walter Smith, NOAA
-License: GPL-2+
-
-Files: images/themes/default/*
-Copyright: 2011, Robert Szczepanek
- Anita Graser
-Comment: GIS icons by Robert Szczepanek is licensed under a Creative Commons
- Attribution-Share Alike 3.0 Unported License. Feel free to use it in any GIS
- software or for other purposes. I only ask you to let me know about that and
- to include licence.txt file in your work.
-License: CC-BY-SA-3.0
-
-Files: python/plugins/GdalTools/*
-Copyright: 2009 Faunalia
-License: MIT
-
-Files: python/plugins/fTools/*
-Copyright: 2009 Carson J.Q. Farmer
-License: MIT
-
-Files: python/plugins/plugin_installer
-Copyright: 2007 Matthew T. Perry
- 2008-2009 Borys Jurgiel
-License: MIT
-
-Files: src/app/gps/qwtpolar-0.1/*
- src/app/gps/qwtpolor-1.0/*
-Copyright:  2008 Uwe Rathmann
-Comment: This library is free software; you can redistribute it and/or
- modify it under the terms of the Qwt License, Version 1.0
-License: QWT-1.0
-
 License: Apache-2.0
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
@@ -728,6 +1007,30 @@ License: Apache-Style-Software-License-Version-1.1
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+License: BSD-2-Clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ .
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ .
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 License: BSD-3-Clause
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
@@ -1466,6 +1769,33 @@ License: CC-BY-SA-3.0
  .
  Creative Commons may be contacted at http://creativecommons.org/.
 
+License: dxflib-Commercial-License
+ Licensees holding valid dxflib Professional Edition licenses may use
+ this file in accordance with the dxflib Commercial License
+ Agreement provided with the Software.
+ .
+ This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ See http://www.ribbonsoft.com for further details.
+ .
+ Contact info at ribbonsoft.com if any conditions of this licensing are
+ not clear to you.
+
+License: GPL-2
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 3 or
+ version 2 as published by the Free Software Foundation.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ .
+ On Debian systems, the full text of the GNU General Public License
+ version 2 can be found in the file
+ `/usr/share/common-licenses/GPL-2'.
+
 License: GPL-2+
  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License as
@@ -1480,6 +1810,22 @@ License: GPL-2+
  On Debian systems, the complete text of the GNU General Public
  License can be found in the `/usr/share/common-licenses/GPL-2' file.
 
+License: GPL-3
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 3 as published
+ by the Free Software Foundation.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 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, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License can be found in `/usr/share/common-licenses/GPL-3'.
+
 License: GPL-3+
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -1509,6 +1855,55 @@ License: LGPL-2+
  On Debian systems, the complete text of the GNU Lesser General Public
  License can be found in the `/usr/share/common-licenses/LGPL-2' file.
 
+License: LGPL-2.1+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+ .
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ On Debian systems, the full text of the GNU Lesser General Public
+ License version 2.1 can be found in the file
+ `/usr/share/common-licenses/LGPL-2.1'.
+
+License: LGPL-2.1 with Digia Qt LGPL Exception 1.1
+ Alternatively, this file may be used under the terms of the GNU Lesser
+ General Public License version 2.1 as published by the Free Software
+ Foundation and appearing in the file LICENSE.LGPL included in the
+ packaging of this file. Please review the following information to
+ ensure the GNU Lesser General Public License version 2.1 requirements
+ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+ .
+ In addition, as a special exception, Digia gives you certain additional
+ rights. These rights are described in the Digia Qt LGPL Exception
+ version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+ .
+ Digia Qt LGPL Exception version 1.1
+ As an additional permission to the GNU Lesser General Public License version
+ 2.1, the object code form of a "work that uses the Library" may incorporate
+ material from a header file that is part of the Library. You may distribute
+ such object code under terms of your choice, provided that:
+ (i) the header files of the Library have not been modified; and
+ (ii) the incorporated material is limited to numerical parameters, data
+ structure layouts, accessors, macros, inline functions and
+ templates; and
+ (iii) you comply with the terms of Section 6 of the GNU Lesser General
+ Public License version 2.1.
+ .
+ Moreover, you may apply this exception to a modified version of the Library,
+ provided that such modification does not involve copying material from the
+ Library into the modified Library's header files unless such material is
+ limited to (i) numerical parameters; (ii) data structure layouts;
+ (iii) accessors; and (iv) small macros, templates and inline functions of
+ five lines or less in length.
+ .
+ Furthermore, you are not required to apply this additional permission to a
+ modified version of the Library.
+
 License: MIT
  Permission is hereby granted, free of charge, to any person
  obtaining a copy of this software and associated documentation
@@ -1782,6 +2177,15 @@ License: OPL-PSI-1.0
  Licensing Framework section on The National Archives website.
  http://www.nationalarchives.gov.uk/information-management/uk-gov-licensing-framework.htm
 
+License: QT-Commercial
+ Commercial License Usage
+ Licensees holding valid commercial Qt licenses may use this file in
+ accordance with the commercial license agreement provided with the
+ Software or, alternatively, in accordance with the terms contained in
+ a written agreement between you and Digia. For licensing terms and
+ conditions see http://qt.digia.com/licensing. For further information
+ use the contact form at http://qt.digia.com/contact-us.
+
 License: QWT-1.0
  The Qwt library and included programs are provided under the terms
  of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) with the following
@@ -1816,19 +2220,21 @@ License: QWT-1.0
  the Qwt project (http://qwt.sf.net).
 
 License: Zlib
- This software is provided 'as-is', without any express or implied
- warranty.  In no event will the authors be held liable for any damages
- arising from the use of this software.
+ This software is provided 'as-is', without any express or implied warranty. In
+ no event will the authors be held liable for any damages arising from the use
+ of this software.
  .
  Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- .
- 1. The origin of this software must not be misrepresented; you must not
-    claim that you wrote the original software. If you use this software
-    in a product, an acknowledgment in the product documentation would be
-    appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
-    misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
+ including commercial applications, and to alter it and redistribute it freely,
+ subject to the following restrictions:
+ .
+     1. The origin of this software must not be misrepresented; you must not
+        claim that you wrote the original software. If you use this software in
+        a product, an acknowledgment in the product documentation would be
+        appreciated but is not required.
+ .
+     2. Altered source versions must be plainly marked as such, and must not be
+        misrepresented as being the original software.
+ .
+     3. This notice may not be removed or altered from any source distribution.
 
diff --git a/debian/libqgis-dev.install b/debian/libqgis-dev.install
index 913d472..a6fdc2f 100644
--- a/debian/libqgis-dev.install
+++ b/debian/libqgis-dev.install
@@ -3,6 +3,7 @@ usr/lib/libqgis_core.so
 usr/lib/libqgis_gui.so
 usr/lib/libqgis_analysis.so
 usr/lib/libqgis_networkanalysis.so
+usr/lib/libqgis_server.so
 usr/lib/libqgisgrass.so
 usr/lib/libqgispython.so
 usr/share/qgis/FindQGIS.cmake
diff --git a/debian/qgis-common.install b/debian/qgis-common.install
index a36c3e3..5836131 100644
--- a/debian/qgis-common.install
+++ b/debian/qgis-common.install
@@ -7,6 +7,8 @@ usr/share/qgis/doc/INSTALL
 usr/share/qgis/doc/INSTALL.html
 usr/share/qgis/doc/SPONSORS
 usr/share/qgis/doc/TRANSLATORS
+usr/share/qgis/doc/contributors.json
+usr/share/qgis/doc/developersmap.html
 usr/share/qgis/doc/favicon.ico
 usr/share/qgis/doc/images
 usr/share/qgis/doc/index.html
diff --git a/debian/qgis-server.install b/debian/qgis-server.install
index 616a8a6..153d784 100644
--- a/debian/qgis-server.install
+++ b/debian/qgis-server.install
@@ -1,3 +1,4 @@
 usr/lib/cgi-bin/qgis_mapserv.fcgi
 usr/lib/cgi-bin/admin.sld
 usr/lib/cgi-bin/wms_metadata.xml
+usr/lib/cgi-bin/schemaExtension.xsd
diff --git a/debian/qgis.install b/debian/qgis.install
index d2be41f..5859614 100644
--- a/debian/qgis.install
+++ b/debian/qgis.install
@@ -19,3 +19,4 @@ usr/share/applications/
 usr/share/mime/packages/
 usr/share/mimelnk/
 usr/share/icons/hicolor/
+usr/share/icons/scalable/
diff --git a/debian/rules b/debian/rules
index 8c01d06..038b456 100755
--- a/debian/rules
+++ b/debian/rules
@@ -39,14 +39,13 @@ QGIS_MAJOR=$(shell sed -ne 's/SET(CPACK_PACKAGE_VERSION_MAJOR "\([0-9]*\)")/\1/p
 QGIS_MINOR=$(shell sed -ne 's/SET(CPACK_PACKAGE_VERSION_MINOR "\([0-9]*\)")/\1/p' CMakeLists.txt)
 QGIS_PATCH=$(shell sed -ne 's/SET(CPACK_PACKAGE_VERSION_PATCH "\([0-9]*\)")/\1/p' CMakeLists.txt)
 QGIS_ABI=$(QGIS_MAJOR).$(QGIS_MINOR).$(QGIS_PATCH)
-GRASS_ABI=$(subst .,,$(shell pkg-config --modversion grass|sed -e "s/\.//g" -e "s/RC/-/"))
 GRASS=grass$(subst .,,$(shell pkg-config --modversion grass|cut -d. -f1,2))
 
 CMAKE_OPTS := \
 	-DBUILDNAME=$(DEB_BUILD_NAME) \
 	-DCMAKE_VERBOSE_MAKEFILE=1 \
 	-DCMAKE_INSTALL_PREFIX=/usr \
-	-DGRASS_PREFIX=/usr/lib/grass64 \
+	-DGRASS_PREFIX=/usr/lib/$(GRASS) \
 	-DBINDINGS_GLOBAL_INSTALL=TRUE \
 	-DPEDANTIC=TRUE \
 	-DWITH_QSPATIALITE=TRUE \
@@ -137,7 +136,7 @@ $(2): $(1)
 		-e "s#\{QT_PLUGIN_DIR\}#$(QT_PLUGIN_DIR)#g" \
 		-e "s/\{QGIS_ABI\}/$(QGIS_ABI)/g" \
 		-e "s/\{GRASS\}/$(GRASS)/g" \
-		-e "s/\{GRASS_ABI\}/$(GRASS_ABI)/g" $$^ >$$@
+		$$^ >$$@
 
 templates:: $(2)
 
@@ -152,7 +151,7 @@ cleantemplates:
 	$(MAKE) -f debian/rules templateclean
 	$(MAKE) -f debian/rules debian/control debian/compat
 
-binary build clean install:
+binary binary-arch binary-indep build build-arch build-indep clean install install-arch install-indep:
 	dh $@ --with python2 --parallel --builddirectory=debian/build
 
 override_dh_clean: cleantemplates
@@ -243,6 +242,7 @@ override_dh_install:
 	-find $(CURDIR)/debian/tmp/usr/share/qgis/resources/cpt-city-qgis-min/ -name COPYING.xml -delete
 	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/doc/LICENSE
 	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/python/plugins/db_manager/LICENSE
+	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/python/plugins/MetaSearch/LICENSE.txt
 
 	# Man pages are installed by dh_installman
 	$(RM) $(CURDIR)/debian/tmp/usr/man/man1/qgis.1
@@ -267,7 +267,7 @@ override_dh_compress:
 	dh_compress --exclude=pdf
 
 override_dh_makeshlibs:
-	dh_makeshlibs -Xqgis-plugin-grass -Xlibqgis-customwidgets$(QGIS_ABI) -- -c0 -v$(QGIS_VERSION)
+	dh_makeshlibs -Xqgis-plugin-grass -Xlibqgis-customwidgets -- -c0 -v$(QGIS_VERSION)
 
 override_dh_shlibdeps:
 	dh_shlibdeps -l/usr/lib/$(GRASS)/lib
diff --git a/debian/upstream/metadata b/debian/upstream/metadata
new file mode 100644
index 0000000..98ff99b
--- /dev/null
+++ b/debian/upstream/metadata
@@ -0,0 +1,10 @@
+---
+Bug-Database: http://hub.qgis.org/projects/quantum-gis/issues
+Bug-Submit: http://hub.qgis.org/projects/quantum-gis/issues/new
+Contact: qgis-developer at lists.osgeo.org
+Donation: http://qgis.org/en/site/getinvolved/donations.html
+Name: QGIS
+Registration: https://www2.osgeo.org/cgi-bin/ldap_create_user.py
+Repository: https://github.com/qgis/QGIS.git
+Repository-Browse: https://github.com/qgis/QGIS
+Screenshots: http://qgis.org/en/site/about/screenshots.html
diff --git a/debian/watch b/debian/watch
index 6c00bb9..917e0e3 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,2 +1,3 @@
 version=3
+opts="dversionmangle=s/\+(debian|dfsg|ds|deb)\d*$//,uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/" \
 http://qgis.org/downloads/ (?:.*/)?(?:rel|v|qgis)[\-\_](\d[\d\-\.]+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
diff --git a/doc/CODING.html b/doc/CODING.html
index 2cdb69c..d376e5c 100644
--- a/doc/CODING.html
+++ b/doc/CODING.html
@@ -1375,7 +1375,7 @@ add to our test class:
 
 <div class="code"><PRE>
 QTEST_MAIN(TestQgsRasterLayer)
-#include "moc_testqgsrasterlayer.cxx"
+#include "testqgsrasterlayer.moc"
 </PRE></div>
 
 <P>
diff --git a/doc/CODING.t2t b/doc/CODING.t2t
index 2da8721..6d8a320 100644
--- a/doc/CODING.t2t
+++ b/doc/CODING.t2t
@@ -1047,7 +1047,7 @@ add to our test class:
 
 ```
 QTEST_MAIN(TestQgsRasterLayer)
-#include "moc_testqgsrasterlayer.cxx"
+#include "testqgsrasterlayer.moc"
 ```
 
 The purpose of these two lines is to signal to Qt's moc that his is a QtTest
diff --git a/doc/INSTALL.html b/doc/INSTALL.html
index 7a176d1..f096101 100644
--- a/doc/INSTALL.html
+++ b/doc/INSTALL.html
@@ -77,13 +77,13 @@ label{  background-color: #FFFFCC;
 <DIV CLASS="header" ID="header">
 <H1>QGIS</H1>
 <H2>Building QGIS from source - step by step</H2>
-<H3>Thursday February 12, 2015</H3>
+<H3>Wednesday February 25, 2015</H3>
 </DIV>
 
 <DIV CLASS="body" ID="body">
 <P>
-Last Updated: Thursday February 12, 2015
-Last Change : Monday November 24, 2014
+Last Updated: Wednesday February 25, 2015
+Last Change : Wednesday February 25, 2015
 </P>
 <DIV CLASS="toc">
 
@@ -326,13 +326,17 @@ sudo apt-get update
 <TD><CODE>apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fc [...]
 </TR>
 <TR>
+<TD>vivid</TD>
+<TD><CODE>apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fc [...]
+</TR>
+<TR>
 <TD>sid</TD>
 <TD><CODE>apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools pyqt4.qsci-dev python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-de [...]
 </TR>
 </TABLE>
 
 <P>
-(extracted from the respective control files in <CODE>debian/</CODE>)
+(extracted from the control.in file in <CODE>debian/</CODE>)
 </P>
 
 <A NAME="toc7"></A>
diff --git a/doc/TRANSLATORS b/doc/TRANSLATORS
index fd81af1..81cde9c 100644
--- a/doc/TRANSLATORS
+++ b/doc/TRANSLATORS
@@ -2,10 +2,10 @@
 
 <tr><td><img src="qrc:/images/flags/de.png"></td><td>German</td><td><div title="finished:13174 unfinished:1 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho</td></tr>
 <tr><td><img src="qrc:/images/flags/gl.png"></td><td>Galician</td><td><div title="finished:13174 unfinished:1 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Xan Vieiro</td></tr>
-<tr><td><img src="qrc:/images/flags/nb.png"></td><td>Norwegian Bokmal</td><td><div title="finished:13174 unfinished:1 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>James Stott, Maléne Peterson</td></tr>
+<tr><td><img src="qrc:/images/flags/nb.png"></td><td>Bokmal, Norwegian</td><td><div title="finished:13174 unfinished:1 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>James Stott, Maléne Peterson</td></tr>
 <tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:13174 unfinished:1 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar</td></tr>
 <tr><td><img src="qrc:/images/flags/sv.png"></td><td>Swedish</td><td><div title="finished:13174 unfinished:1 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Lars Luthman, Magnus Homann, Victor Axbom</td></tr>
-<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:13174 unfinished:0 untranslated:1" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Stéphane Brunner, Olivier Dalang, Nicolas Damien, Michael Douchin, Régis Haubourg, Matthias Khun, Sylvain Maillard, Jean-Roc Morreale, Mehdi Semchaoui, Harrissou Sant-anna</td></tr>
+<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:13174 unfinished:0 untranslated:1" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu</td></tr>
 <tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:13174 unfinished:0 untranslated:1" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros </td></tr>
 <tr><td><img src="qrc:/images/flags/nl.png"></td><td>Dutch</td><td><div title="finished:13172 unfinished:1 untranslated:2" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp</td></tr>
 <tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:13170 unfinished:1 untranslated:4" class="bartodo"><div class="bardone" style="width:99px">100.0</div></div></td><td>Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon</td></tr>
@@ -17,12 +17,12 @@
 <tr><td><img src="qrc:/images/flags/hu.png"></td><td>Hungarian</td><td><div title="finished:12398 unfinished:5 untranslated:772" class="bartodo"><div class="bardone" style="width:94px">94.1</div></div></td><td>Zoltan Siki</td></tr>
 <tr><td><img src="qrc:/images/flags/ro.png"></td><td>Romanian</td><td><div title="finished:12311 unfinished:4 untranslated:860" class="bartodo"><div class="bardone" style="width:93px">93.5</div></div></td><td>Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar</td></tr>
 <tr><td><img src="qrc:/images/flags/da.png"></td><td>Danish</td><td><div title="finished:12273 unfinished:4 untranslated:898" class="bartodo"><div class="bardone" style="width:93px">93.2</div></div></td><td>Jacob Overgaard Madsen, Bo Victor Thomsen</td></tr>
-<tr><td><img src="qrc:/images/flags/zh-Hans.png"></td><td></td><td><div title="finished:12197 unfinished:3 untranslated:975" class="bartodo"><div class="bardone" style="width:92px">92.6</div></div></td><td>(orphaned)</td></tr>
+<tr><td><img src="qrc:/images/flags/zh.png"></td><td>Chinese simplified</td><td><div title="finished:12197 unfinished:3 untranslated:975" class="bartodo"><div class="bardone" style="width:92px">92.6</div></div></td><td>Calvin Ngei, Lisashen</td></tr>
 <tr><td><img src="qrc:/images/flags/zh_CN.png"></td><td>Chinese (China)</td><td><div title="finished:12183 unfinished:2 untranslated:990" class="bartodo"><div class="bardone" style="width:92px">92.5</div></div></td><td>Calvin Ngei, Zhang Jun, Richard Xie</td></tr>
 <tr><td><img src="qrc:/images/flags/ko.png"></td><td>Korean</td><td><div title="finished:12087 unfinished:2 untranslated:1086" class="bartodo"><div class="bardone" style="width:91px">91.7</div></div></td><td>OSGeo Korean Chapter</td></tr>
 <tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:12044 unfinished:25 untranslated:1106" class="bartodo"><div class="bardone" style="width:91px">91.5</div></div></td><td>Alexander Bruy, Artem Popov</td></tr>
 <tr><td><img src="qrc:/images/flags/vi.png"></td><td>Vietnamese</td><td><div title="finished:12045 unfinished:14 untranslated:1116" class="bartodo"><div class="bardone" style="width:91px">91.5</div></div></td><td>Phan Anh, Bùi Hữu Mạnh</td></tr>
-<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan (Province of China))</td><td><div title="finished:11994 unfinished:5 untranslated:1176" class="bartodo"><div class="bardone" style="width:91px">91.1</div></div></td><td>Nung-yao Lin</td></tr>
+<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan, Province of China)</td><td><div title="finished:11994 unfinished:5 untranslated:1176" class="bartodo"><div class="bardone" style="width:91px">91.1</div></div></td><td>Nung-yao Lin</td></tr>
 <tr><td><img src="qrc:/images/flags/cs.png"></td><td>Czech</td><td><div title="finished:11848 unfinished:5 untranslated:1322" class="bartodo"><div class="bardone" style="width:89px">89.9</div></div></td><td>Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček</td></tr>
 <tr><td><img src="qrc:/images/flags/hi.png"></td><td>Hindi</td><td><div title="finished:11373 unfinished:3 untranslated:1799" class="bartodo"><div class="bardone" style="width:86px">86.3</div></div></td><td>Harish Kumar Solanki</td></tr>
 <tr><td><img src="qrc:/images/flags/id.png"></td><td>Indonesian</td><td><div title="finished:10759 unfinished:63 untranslated:2353" class="bartodo"><div class="bardone" style="width:81px">81.9</div></div></td><td>Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa</td></tr>
diff --git a/doc/developersmap.html b/doc/developersmap.html
index f589904..fadae1f 100644
--- a/doc/developersmap.html
+++ b/doc/developersmap.html
@@ -27,6 +27,7 @@
     var map = L.map('developers-map').fitBounds(geojson.getBounds());
     developersMapTiles.addTo(map);
     geojson.addTo(map);
+    map.setZoom(1);
   });
   </script>
 </body>
diff --git a/doc/linux.t2t b/doc/linux.t2t
index b5f63ef..ce4c0e2 100644
--- a/doc/linux.t2t
+++ b/doc/linux.t2t
@@ -49,9 +49,10 @@ sudo apt-get update
 | precise | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xau [...]
 | trusty | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn [...]
 | utopic | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn [...]
+| vivid | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn- [...]
 | sid | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools pyqt4.qsci-dev python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-de [...]
 
-(extracted from the respective control files in ``debian/``)
+(extracted from the control.in file in ``debian/``)
 
 
 == Setup ccache (Optional) ==
diff --git a/doc/news.html b/doc/news.html
index 06d9dff..9fe34fc 100644
--- a/doc/news.html
+++ b/doc/news.html
@@ -77,13 +77,13 @@ label{  background-color: #FFFFCC;
 <DIV CLASS="header" ID="header">
 <H1>QGIS News</H1>
 <H2>Change history for the QGIS Project</H2>
-<H3>Friday February 20, 2015</H3>
+<H3>Wednesday February 25, 2015</H3>
 </DIV>
 
 <DIV CLASS="toc">
 
   <OL>
-  <LI><A HREF="#toc1">What's new in Version 2.8.0 'Wien'?</A>
+  <LI><A HREF="#toc1">What's new in Version 2.8 'Wien'?</A>
   <LI><A HREF="#toc2">What's new in Version 2.6.0 'Brighton'?</A>
   <LI><A HREF="#toc3">What's new in Version 2.4.0 'Chugiak'?</A>
   <LI><A HREF="#toc4">Whats new in Version 2.2.0 'Valmiera'?</A>
@@ -112,44 +112,44 @@ label{  background-color: #FFFFCC;
 </DIV>
 <DIV CLASS="body" ID="body">
 <P>
-Last Updated: Friday February 20, 2015
-Last Change : Friday February 20, 2015
+Last Updated: Wednesday February 25, 2015
+Last Change : Wednesday February 25, 2015
 </P>
 
 <A NAME="toc1"></A>
-<H1>1. What's new in Version 2.8.0 'Wien'?</H1>
+<H1>1. What's new in Version 2.8 'Wien'?</H1>
 
 <P>
 This is a minor release increment with the following feature:
 </P>
 
 <UL>
-<LI>Long term release (maintained for a year)
-<LI>>1000 issues flagged by static analysis tools fixed
-<LI>new code commits and pull requests are now automatically tests against our testing framework.
-<LI>more responsive browser
-<LI>support for contextual WMS legend graphics
-<LI>custom prefixes for joins
-<LI>creation of memory layers in core
-<LI>field calc bar in attribute table
-<LI>dxf export improvements
-<LI>advanced digitizing tools
-<LI>improved snapping
-<LI>better simplify tool
-<LI>Qt5 support
-<LI>Bookmark import/export
-<LI>composer gui improvements
-<LI>grid improvements
-<LI>raster image fill type
-<LI>live heatmap renderer
-<LI>multiple styles per layer
-<LI>rotation of map canvas
-<LI>improved date defined symbology UI
-<LI>new algorithms in processing
-<LI>expressions extentable with custom functions
-<LI>comments in expressions
-<LI>QGIS server improvements: better caching, layer style support, value
-  relations, DescribeLayer, python plugins
+<LI>QGIS 2.8 is the basis for a long term release (which will be maintained for a year).
+<LI>>1000 issues which were flagged by static analysis tools have been fixed.
+<LI>New code commits and pull requests are now automatically tested against our testing framework.
+<LI>More responsive QGIS Browser thanks to multithreading support.
+<LI>Support for contextual WMS legend graphics.
+<LI>Custom prefixes for joins.
+<LI>Creation of memory layers is now a core feature.
+<LI>New field calculator bar in attribute table.
+<LI>DXF export improvements.
+<LI>Advanced digitizing tools.
+<LI>Improved snapping options and behaviour.
+<LI>Better simplify tool - including support for on the fly reprojection being enabled.
+<LI>Qt5 support (optional - default packages are still currently built against Qt4).
+<LI>Spatial bookmark import/export.
+<LI>Composer user interface improvements.
+<LI>Grid overlay improvements for composer maps.
+<LI>Raster image fill type.
+<LI>Live heatmap renderer.
+<LI>You can now use multiple styles per layer.
+<LI>Rotation of map canvas is now supported.
+<LI>Improved user interface for data defined symbology.
+<LI>New algorithms in processing.
+<LI>Expressions are now extendable with custom python functions.
+<LI>Comments are now supported in expressions.
+<LI>QGIS server improvements: better caching, layer style support, value relations,
+  DescribeLayer, python plugins.
 </UL>
 
 <A NAME="toc2"></A>
diff --git a/doc/news.t2t b/doc/news.t2t
index b242bb8..bab7b60 100644
--- a/doc/news.t2t
+++ b/doc/news.t2t
@@ -38,7 +38,7 @@ Change history for the QGIS Project
 Last Updated: %%date(%A %B %d, %Y)
 Last Change : %%mtime(%A %B %d, %Y)
 
-= What's new in Version 2.8.0 'Wien'? =
+= What's new in Version 2.8 'Wien'? =
 
 This is a minor release increment with the following feature:
 - QGIS 2.8 is the basis for a long term release (which will be maintained for a year).
@@ -56,16 +56,17 @@ This is a minor release increment with the following feature:
 - Qt5 support (optional - default packages are still currently built against Qt4).
 - Spatial bookmark import/export.
 - Composer user interface improvements.
-- Grid overlay improvements for composer maps. 
+- Grid overlay improvements for composer maps.
 - Raster image fill type.
 - Live heatmap renderer.
 - You can now use multiple styles per layer.
-- Rotation of map canvas (disabled by default, activate in settings) is now supported.
+- Rotation of map canvas is now supported.
 - Improved user interface for data defined symbology.
 - New algorithms in processing.
 - Expressions are now extendable with custom python functions.
 - Comments are now supported in expressions.
-- QGIS server improvements: better caching, layer style support, value relations, DescribeLayer, python plugins.
+- QGIS server improvements: better caching, layer style support, value relations,
+  DescribeLayer, python plugins.
 -
 
 
diff --git a/i18n/qgis_de.ts b/i18n/qgis_de.ts
index 1a4e67a..7b1a1eb 100644
--- a/i18n/qgis_de.ts
+++ b/i18n/qgis_de.ts
@@ -402,7 +402,7 @@ Zum Überprüfen Ergebnisdialog öffnen.</translation>
     </message>
     <message>
         <source>Select directory</source>
-        <translation type="unfinished">Verzeichnis wählen</translation>
+        <translation>Verzeichnis wählen</translation>
     </message>
 </context>
 <context>
@@ -609,11 +609,11 @@ Zum Überprüfen Ergebnisdialog öffnen.</translation>
     </message>
     <message>
         <source>GEOS geoprocessing error: One or more input features have invalid geometry.</source>
-        <translation>GEOS-Verarbeitungsfehler: Ein oder mehrere Eingabeobjekte haben ungültige Geometrien</translation>
+        <translation>GEOS-Verarbeitungsfehler: Ein oder mehrere Eingabeobjekte haben ungültige Geometrien.</translation>
     </message>
     <message>
         <source>Feature geometry error: One or more output features ignored due to invalid geometry.</source>
-        <translation>Objektgeometriefehler: Ein oder mehrere Objekte wegen ungültiger Geometrie ignoriert</translation>
+        <translation>Objektgeometriefehler: Ein oder mehrere Objekte wegen ungültiger Geometrie ignoriert.</translation>
     </message>
 </context>
 <context>
@@ -7641,7 +7641,7 @@ im Installationsverzeichnis nicht erlaubt ist</translation>
     <name>Intersection</name>
     <message>
         <source>Feature geometry error: One or more output features ignored due to invalid geometry.</source>
-        <translation>Objektgeometriefehler: Ein oder mehrere Objekte wegen ungültiger Geometrie ignoriert</translation>
+        <translation>Objektgeometriefehler: Ein oder mehrere Objekte wegen ungültiger Geometrie ignoriert.</translation>
     </message>
     <message>
         <source>Input layer</source>
@@ -8970,7 +8970,7 @@ Funktioniert auf allen ändernbaren Layern</translation>
     </message>
     <message>
         <source>&Snapping Options...</source>
-        <translation>Fangoptionen (&S)</translation>
+        <translation>Fangoptionen (&S)...</translation>
     </message>
     <message>
         <source>Zoom &Full</source>
@@ -8994,7 +8994,7 @@ Funktioniert auf allen ändernbaren Layern</translation>
     </message>
     <message>
         <source>&Properties...</source>
-        <translation>Eigenschaften... (&P)</translation>
+        <translation>Eigenschaften (&P)...</translation>
     </message>
     <message>
         <source>&Project Properties...</source>
@@ -9912,6 +9912,10 @@ Mehr Informationen.im Protokoll.</translation>
         <source>Overwrite %s?</source>
         <translation>%s überschreiben?</translation>
     </message>
+    <message>
+        <source>Name cannot contain '/'</source>
+        <translation>Name darf kein '/' enthalten</translation>
+    </message>
 </context>
 <context>
     <name>NotSupportedDbType</name>
@@ -25609,7 +25613,7 @@ Vorhandene Dateien werden hier aufgelistet und gewählte geladen.</translation>
     </message>
     <message>
         <source>Save the current script into the users function file folder.</source>
-        <translation>Aktuelle Skript im Verzeichnis für Benutzerfunktionen ablegen</translation>
+        <translation>Aktuelle Skript im Verzeichnis für Benutzerfunktionen ablegen.</translation>
     </message>
     <message>
         <source>Save file</source>
@@ -43225,7 +43229,7 @@ standard deviation ×</source>
     </message>
     <message>
         <source>A widget to define the scale.</source>
-        <translation>Ein Bedienelement zur Maßstabsfestlegung</translation>
+        <translation>Ein Bedienelement zur Maßstabsfestlegung.</translation>
     </message>
 </context>
 <context>
diff --git a/i18n/qgis_en.ts b/i18n/qgis_en.ts
index ad13a90..cbf3648 100644
--- a/i18n/qgis_en.ts
+++ b/i18n/qgis_en.ts
@@ -9920,6 +9920,10 @@ See the log for more information.</translation>
         <source>Overwrite %s?</source>
         <translation>Overwrite %s?</translation>
     </message>
+    <message>
+        <source>Name cannot contain '/'</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>NotSupportedDbType</name>
diff --git a/images/developers/essen-2012.jpg b/images/developers/essen-2012.jpg
deleted file mode 100644
index 97ba683..0000000
Binary files a/images/developers/essen-2012.jpg and /dev/null differ
diff --git a/images/developers/essen-2014.jpg b/images/developers/essen-2014.jpg
new file mode 100644
index 0000000..8dc2e74
Binary files /dev/null and b/images/developers/essen-2014.jpg differ
diff --git a/images/flags/sr at latin.png b/images/flags/sr at latin.png
deleted file mode 100644
index 9439a5b..0000000
Binary files a/images/flags/sr at latin.png and /dev/null differ
diff --git a/images/flags/zh.png b/images/flags/zh.png
new file mode 100644
index 0000000..8914414
Binary files /dev/null and b/images/flags/zh.png differ
diff --git a/images/images.qrc b/images/images.qrc
index fee2bf8..8020247 100644
--- a/images/images.qrc
+++ b/images/images.qrc
@@ -1,6 +1,6 @@
 <RCC>
     <qresource prefix="/images">
-        <file alias="last-hackfest.jpg">developers/essen-2012.jpg</file>
+        <file alias="last-hackfest.jpg">developers/essen-2014.jpg</file>
         <file>flags/af.png</file>
         <file>flags/ar.png</file>
         <file>flags/bg.png</file>
@@ -469,7 +469,6 @@
         <file>themes/default/mActionHighlightFeature.svg</file>
         <file>themes/default/mActionScaleHighlightFeature.svg</file>
         <file>themes/default/mActionPanHighlightFeature.svg</file>
-        <file>flags/sr at latin.png</file>
         <file>themes/default/cadtools/construction.png</file>
         <file>themes/default/cadtools/delta.png</file>
         <file>themes/default/cadtools/cad.png</file>
@@ -479,6 +478,7 @@
         <file>themes/default/mIconSuccess.png</file>
         <file>themes/default/bubble.svg</file>
         <file>themes/default/mIconClear.png</file>
+        <file>flags/zh.png</file>
     </qresource>
     <qresource prefix="/images/tips">
         <file alias="symbol_levels.png">qgis_tips/symbol_levels.png</file>
diff --git a/python/analysis/raster/qgsrastercalcnode.sip b/python/analysis/raster/qgsrastercalcnode.sip
index ce9175d..0db4eff 100644
--- a/python/analysis/raster/qgsrastercalcnode.sip
+++ b/python/analysis/raster/qgsrastercalcnode.sip
@@ -35,7 +35,8 @@ class QgsRasterCalcNode
       opLE,         // <=
       opAND,
       opOR,
-      opSIGN    //change sign
+      opSIGN,       // change sign
+      opNONE,
     };
 
     QgsRasterCalcNode();
diff --git a/python/core/qgis.sip b/python/core/qgis.sip
index 288b526..152bf8e 100644
--- a/python/core/qgis.sip
+++ b/python/core/qgis.sip
@@ -129,6 +129,8 @@ class QGis
     static UnitType fromLiteral( QString  literal, QGis::UnitType defaultType = UnknownUnit );
     //! Provides translated version of the type value
     static QString tr( QGis::UnitType unit );
+    //! Provides type value from translated version
+    static UnitType fromTr( QString literal, QGis::UnitType defaultType = UnknownUnit );
     //! Returns the conversion factor between the specified units
     static double fromUnitToUnitFactor( QGis::UnitType fromUnit, QGis::UnitType toUnit );
 
diff --git a/python/core/qgsgeometry.sip b/python/core/qgsgeometry.sip
index 6c6050a..4b90b25 100644
--- a/python/core/qgsgeometry.sip
+++ b/python/core/qgsgeometry.sip
@@ -113,7 +113,7 @@ class QgsGeometry
     QGis::GeometryType type() const;
 
     /** Returns true if wkb of the geometry is of WKBMulti* type */
-    bool isMultipart();
+    bool isMultipart() const;
 
     /** compare geometries using GEOS */
     bool isGeosEqual( QgsGeometry & );
diff --git a/python/gui/qgsattributedialog.sip b/python/gui/qgsattributedialog.sip
index ee7ebed..6030790 100644
--- a/python/gui/qgsattributedialog.sip
+++ b/python/gui/qgsattributedialog.sip
@@ -48,7 +48,16 @@ class QgsAttributeDialog : QDialog
      */
     void setHighlight( QgsHighlight *h );
 
-    QDialog *dialog();
+    /**
+     * @brief Returns reference to self. Only here for legacy compliance
+     *
+     * @return this
+     *
+     * @deprecated Do not use. Just use this object itself. Or QgsAttributeForm if you want to embed.
+     */
+    QDialog *dialog() /Deprecated/;
+
+    QgsAttributeForm *attributeForm();
 
     const QgsFeature* feature();
 
diff --git a/python/plugins/MetaSearch/dialogs/newconnectiondialog.py b/python/plugins/MetaSearch/dialogs/newconnectiondialog.py
index 973ed1f..2e5342b 100644
--- a/python/plugins/MetaSearch/dialogs/newconnectiondialog.py
+++ b/python/plugins/MetaSearch/dialogs/newconnectiondialog.py
@@ -57,6 +57,11 @@ class NewConnectionDialog(QDialog, BASE_CLASS):
                                 self.tr('Both Name and URL must be provided'))
             return
 
+        if '/' in conn_name:
+            QMessageBox.warning(self, self.tr('Save connection'),
+                                self.tr('Name cannot contain \'/\''))
+            return
+
         if conn_name is not None:
             key = '/MetaSearch/%s' % conn_name
             keyurl = '%s/url' % key
diff --git a/python/plugins/MetaSearch/resources/connections-default.xml b/python/plugins/MetaSearch/resources/connections-default.xml
index fcf7602..e4c792d 100644
--- a/python/plugins/MetaSearch/resources/connections-default.xml
+++ b/python/plugins/MetaSearch/resources/connections-default.xml
@@ -7,5 +7,5 @@
     <csw name="Nationaal Georegister (Nederland)" url="http://www.nationaalgeoregister.nl/geonetwork/srv/eng/csw"/>
     <csw name="RNDT - Repertorio Nazionale dei Dati Territoriali - Servizio di ricerca" url="http://www.rndt.gov.it/RNDT/CSW"/>
     <csw name="UK Location Catalogue Publishing Service" url="http://csw.data.gov.uk/geonetwork/srv/en/csw"/>
-    <csw name="UNEP/GRID-Geneva Metadata Catalog" url="http://metadata.grid.unep.ch:8080/geonetwork/srv/eng/csw"/>
+    <csw name="UNEP GRID-Geneva Metadata Catalog" url="http://metadata.grid.unep.ch:8080/geonetwork/srv/eng/csw"/>
 </qgsCSWConnections>
diff --git a/python/plugins/processing/algs/qgis/SelectByLocation.py b/python/plugins/processing/algs/qgis/SelectByLocation.py
index 1131952..f828ab4 100644
--- a/python/plugins/processing/algs/qgis/SelectByLocation.py
+++ b/python/plugins/processing/algs/qgis/SelectByLocation.py
@@ -67,8 +67,8 @@ class SelectByLocation(GeoAlgorithm):
         filename = self.getParameterValue(self.INPUT)
         inputLayer = dataobjects.getObjectFromUri(filename)
         method = self.getParameterValue(self.METHOD)
-        filename = self.getParameterValue(self.INTERSECT)
-        selectLayer = dataobjects.getObjectFromUri(filename)
+        filename2 = self.getParameterValue(self.INTERSECT)
+        selectLayer = dataobjects.getObjectFromUri(filename2)
         predicates = self.getParameterValue(self.PREDICATE)
 
         oldSelection = set(inputLayer.selectedFeaturesIds())
diff --git a/scripts/release.pl b/scripts/release.pl
index 26fbea6..7966ed6 100755
--- a/scripts/release.pl
+++ b/scripts/release.pl
@@ -13,127 +13,192 @@ use warnings;
 use Getopt::Long;
 use Pod::Usage;
 
-my $newmajor;
-my $newminor;
-my $releasename;
+my $dryrun;
+
+sub updateCMakeLists($$$$) {
+	my($major,$minor,$patch,$release) = @_;
+
+	if( $dryrun ) {
+		print "DRYRUN: Update CMakeLists.txt to $major.$minor.$patch ($release)\n";
+		return;
+	}
+
+	rename "CMakeLists.txt", "CMakeLists.txt.orig" or die "cannot rename CMakeLists.txt: $!";
+	open I, "CMakeLists.txt.orig";
+	open O, ">CMakeLists.txt" or die "cannot create CMakeLists.txt: $!";
+	while(<I>) {
+		s/SET\(CPACK_PACKAGE_VERSION_MAJOR "(\d+)"\)/SET(CPACK_PACKAGE_VERSION_MAJOR "$major")/;
+		s/SET\(CPACK_PACKAGE_VERSION_MINOR "(\d+)"\)/SET(CPACK_PACKAGE_VERSION_MINOR "$minor")/;
+		s/SET\(CPACK_PACKAGE_VERSION_PATCH "(\d+)"\)/SET(CPACK_PACKAGE_VERSION_PATCH "$patch")/;
+		s/SET\(RELEASE_NAME "(.+)"\)/SET(RELEASE_NAME "$release")/;
+		print O;
+	}
+	close O;
+	close I;
+}
+
+sub run($$) {
+	my($cmd, $errmsg) = @_;
+	if( $dryrun ) {
+		print "DRYRUN: $cmd\n";
+	} elsif( system($cmd) != 0 ) {
+		print STDERR "error: $errmsg [$?]";
+		exit 1;
+	}
+}
+
+my $newreleasename;
 my $help;
+my $domajor;
+my $dominor;
+my $dopoint;
 
 my $result = GetOptions(
-		"major" => \$newmajor,
-		"minor" => \$newminor,
-		"releasename=s" => \$releasename,
-		"help" => \$help
+		"major" => \$domajor,
+		"minor" => \$dominor,
+		"point" => \$dopoint,
+		"releasename=s" => \$newreleasename,
+		"help" => \$help,
+		"dryrun" => \$dryrun,
 	);
 
-$releasename = shift @ARGV;
+pod2usage(1) if $help;
 
-pod2usage(1) if $help or !defined $releasename;
+my $i = 0;
+$i++ if defined $domajor;
+$i++ if defined $dominor;
+$i++ if defined $dopoint;
+pod2usage("Exactly one of -major, -minor or -point expected") if $i!=1;
+pod2usage("Release name for major and minor releases expected") if !$dopoint && !defined $newreleasename;
+pod2usage("No CMakeLists.txt in current directory") unless -r "CMakeLists.txt";
 
 my $major;
 my $minor;
+my $patch;
+my $releasename;
 open F, "CMakeLists.txt";
 while(<F>) {
         if(/SET\(CPACK_PACKAGE_VERSION_MAJOR "(\d+)"\)/) {
                 $major = $1;
         } elsif(/SET\(CPACK_PACKAGE_VERSION_MINOR "(\d+)"\)/) {
                 $minor = $1;
+        } elsif(/SET\(CPACK_PACKAGE_VERSION_PATCH "(\d+)"\)/) {
+                $patch = $1;
+	} elsif(/SET\(RELEASE_NAME \"(.*)\"\)/) {
+		$releasename = $1;
         }
 }
 close F;
 
-if( defined $newmajor ) {
-	die "New major must be equal or greater than old major $major" if $newmajor <= $major;
-	$newminor = 0 unless defined $newminor;
+my $branch = `git rev-parse --abbrev-ref HEAD 2>/dev/null`;
+$branch =~ s/\s+$//;
+pod2usage("Not on a branch") unless $branch;
+pod2usage("Current branch is $branch. master or a release branch expected") if $branch !~ /^(master|release-(\d+)_(\d+))$/;
+pod2usage("Version mismatch ($2.$3 in branch $branch vs. $major.$minor in CMakeLists.txt)") if $branch ne "master" && ( $major != $2 || $minor != $3 );
+pod2usage("Release name Master expected on master branch" ) if $branch eq "master" && $releasename ne "Master";
+
+if( $branch eq "master" ) {
+	pod2usage("No point releases on master branch") if $dopoint;
+	pod2usage("No new release name for major/minor release") unless $newreleasename || $newreleasename eq $releasename;
 } else {
-	$newmajor = $major;
+	pod2usage("Only point releases on release branches") if !$dopoint;
+	pod2usage("New release names only for new minor releases") if $newreleasename;
+	$newreleasename = $releasename;
 }
 
-if( defined $newminor ) {
-	die "New minor must be greater than current minor $minor" if $newmajor==$major && $newminor<=$minor;
-} else {
+my $newmajor;
+my $newminor;
+my $newpatch;
+if( $domajor ) {
+	$newmajor = $major + 1;
+	$newminor = 0;
+	$newpatch = 0;
+} elsif( $dominor ) {
+	$newmajor = $major;
 	$newminor = $minor + 1;
+	$newpatch = 0;
+} elsif( $dopoint ) {
+	$newmajor = $major;
+	$newminor = $minor;
+	$newpatch = $patch + 1;
+} else {
+	pod2usage("No version change");
 }
 
-sub updateCMakeLists {
-	my($major,$minor,$release) = @_;
-
-	rename "CMakeLists.txt", "CMakeLists.txt.orig" or die "cannot rename CMakeLists.txt: $!";
-	open I, "CMakeLists.txt.orig";
-	open O, ">CMakeLists.txt" or die "cannot create CMakeLists.txt: $!";
-	while(<I>) {
-		s/SET\(CPACK_PACKAGE_VERSION_MAJOR "(\d+)"\)/SET(CPACK_PACKAGE_VERSION_MAJOR "$major")/;
-		s/SET\(CPACK_PACKAGE_VERSION_MINOR "(\d+)"\)/SET(CPACK_PACKAGE_VERSION_MINOR "$minor")/;
-		s/SET\(RELEASE_NAME "(.+)"\)/SET(RELEASE_NAME "$release")/;
-		print O;
-	}
-	close O;
-	close I;
-}
+pod2usage("Splash images/splash/splash-$newmajor.$newminor.png not found") unless -r "images/splash/splash-$newmajor.$newminor.png";
+pod2usage("NSIS image ms-windows/Installer-Files/WelcomeFinishPage-$newmajor.$newminor.bmp not found") unless -r "ms-windows/Installer-Files/WelcomeFinishPage-$newmajor.$newminor.bmp";
 
 print "Last pull rebase...\n";
-system( "git pull --rebase" ) == 0 or die "git pull rebase failed";
+run( "git pull --rebase", "git pull rebase failed" );
 
 my $release = "$newmajor.$newminor";
+my $version = "$release.$newpatch";
 my $relbranch = "release-${newmajor}_${newminor}";
-my $reltag = "final-${newmajor}_${newminor}_0";
+my $reltag = "final-${newmajor}_${newminor}_${newpatch}";
 
-print "Pulling transifex translations...\n";
-system( "scripts/pull_ts.sh" ) == 0 or die "pull_ts.sh failed";
-system( "git add i18n/*.ts" ) == 0 or die "adding translations failed";
-system( "git commit -a -m \"translation update to $release from transifex\"") == 0 or die "could not commit translation updates";
+unless( $dopoint ) {
+	print "Pulling transifex translations...\n";
+	run( "scripts/pull_ts.sh", "pull_ts.sh failed" );
+	run( "git add i18n/*.ts", "adding translations failed" );
+	run( "git commit -a -m \"translation update for $release from transifex\"", "could not commit translation updates" );
+}
 
 print "Updating changelog...\n";
-system( "scripts/create_changelog.sh" ) == 0 or die "create_changelog.sh failed";
-system( "git commit -a -m \"changelog update for $release\"") == 0 or die "could not commit changelog update";
-
-print "Creating branch...\n";
-system( "git checkout -b $relbranch" ) == 0 or die "git checkout release branch failed";
-updateCMakeLists($newmajor,$newminor,$releasename);
+run( "scripts/create_changelog.sh", "create_changelog.sh failed" );
 
-print "Updating branch...\n";
-system( "dch -r ''" ) == 0 or die "dch failed";
-system( "dch --newversion $newmajor.$newminor.0 'Release of $release'" ) == 0 or die "dch failed";
-system( "cp debian/changelog /tmp" ) == 0 or die "backup changelog failed";
+unless( $dopoint ) {
+	run( "git commit -a -m \"changelog update for $release\"", "could not commit changelog update" );
 
-if( -f "images/splash/splash-release.png" ) {
-	system( "cp -v images/splash/splash-release.png images/splash/splash.png" ) == 0 or die "splash png switch failed";
-} else {
-	print "WARNING: NO images/splash/splash-release.png\n";
+	print "Creating and checking out branch...\n";
+	run( "git checkout -b $relbranch", "git checkout release branch failed" );
 }
 
-if( -f "images/splash/splash-release.xcf.bz2" ) {
-	system( "cp -v images/splash/splash-release.xcf.bz2 images/splash/splash.xcf.bz2" ) == 0 or die "splash xcf switch failed";
-} else {
-	print "WARNING: NO images/splash/splash-release.xcf.bz2\n";
-}
+updateCMakeLists($newmajor,$newminor,$newpatch,$releasename);
 
-if( -f "ms-windows/Installer-Files/WelcomeFinishPage-release.bmp" ) {
-	system( "cp -v ms-windows/Installer-Files/WelcomeFinishPage-release.bmp ms-windows/Installer-Files/WelcomeFinishPage.bmp" ) == 0 or die "installer bitmap switch failed";
+print "Updating version...\n";
+run( "dch -r ''", "dch failed" );
+run( "dch --newversion $version 'Release of $version'", "dch failed" );
+run( "cp debian/changelog /tmp", "backup changelog failed" );
+
+unless( $dopoint ) {
+	run( "cp -v images/splash/splash-$newmajor.$newminor.png images/splash/splash.png", "splash png switch failed" );
+	run( "cp -v ms-windows/Installer-Files/WelcomeFinishPage-$newmajor.$newminor.bmp ms-windows/Installer-Files/WelcomeFinishPage.bmp", "installer bitmap switch failed" );
+
+	if( -f "images/splash/splash-release.xcf.bz2" ) {
+		run( "cp -v images/splash/splash-$newmajor.$newminor.xcf.bz2 images/splash/splash.xcf.bz2", "splash xcf switch failed" );
+	} else {
+		print "WARNING: NO images/splash/splash-release.xcf.bz2\n";
+	}
+
+	run( "git commit -a -m 'Release of $release ($releasename)'", "release commit failed" );
+	run( "git tag $reltag -m 'Version $release'", "tag failed" );
 } else {
-	print "WARNING: NO ms-windows/Installer-Files/WelcomeFinishPage-release.bmp\n";
+	run( "git commit -a -m 'Release of $version'", "release commit failed" );
+	run( "git tag $reltag -m 'Version $version'", "tag failed" );
 }
 
-system( "git commit -a -m 'Release of $release ($releasename)'" ) == 0 or die "release commit failed";
-system( "git tag $reltag -m 'Version $release'" ) == 0 or die "tag failed";
-
 print "Producing archive...\n";
-system( "git archive --format tar --prefix=qgis-$release.0/ $reltag | bzip2 -c >qgis-$release.0.tar.bz2" ) == 0 or die "git archive failed";
-system( "md5sum qgis-$newmajor.$newminor.0.tar.bz2 >qgis-$release.0.tar.bz2.md5" ) == 0 or die "md5sum failed";
-
-$newminor++;
+run( "git archive --format tar --prefix=qgis-$version/ $reltag | bzip2 -c >qgis-$version.tar.bz2", "git archive failed" );
+run( "md5sum qgis-$version.tar.bz2 >qgis-$version.tar.bz2.md5", "md5sum failed" );
+
+unless( $dopoint ) {
+	$newminor++;
+
+	print "Updating master...\n";
+	run( "git checkout master", "checkout master failed" );
+	updateCMakeLists($newmajor,$newminor,0,"Master");
+	run( "cp /tmp/changelog debian", "restore changelog failed" );
+	run( "dch -r ''", "dch failed" );
+	run( "dch --newversion $newmajor.$newminor.0 'New development version $newmajor.$newminor after branch of $release'", "dch failed" );
+	run( "git commit -a -m 'Bump version to $newmajor.$newminor'", "bump version failed" );
+}
 
-print "Updating master...\n";
-system( "git checkout master" ) == 0 or die "checkout master failed";
-updateCMakeLists($newmajor,$newminor,"Master");
-system( "cp /tmp/changelog debian" ) == 0 or die "restore changelog failed";
-system("dch -r ''" ) == 0 or die "dch failed";
-system( "dch --newversion $newmajor.$newminor.0 'New development version $newmajor.$newminor after branch of $release'" ) == 0 or die "dch failed";
-system( "git commit -a -m 'Bump version to $newmajor.$newminor'" ) == 0 or die "bump version failed";
+my $topush = ($dopoint ? "" : "master ") . "$relbranch $reltag";
 
 print "Push dry-run...\n";
-system( "git push -n origin master $relbranch $reltag" ) == 0 or die "git push -n failed";
+run( "git push -n origin $topush", "push dry run failed" );
+print "Now manually push and upload the tarballs :\n\tgit push origin $topush\n\trsync qgis-$version.tar.bz2* qgis.org:/var/www/downloads/\n\n";
 
-print "Now manually push and upload the tarballs :\n\tgit push origin master $relbranch $reltag\n\trsync qgis-$release.0.tar.bz2* qgis.org:/var/www/downloads/\n\n";
 
 =head1 NAME
 
@@ -141,10 +206,12 @@ release.pl - create a new release
 
 =head1 SYNOPSIS
 
-release.pl [options] releasename
+release.pl {{-major|-minor} -releasename=releasename|-point}
 
   Options:
-    -major=newmajor     new major number for release (defaults to current major version number)
-    -minor=newminor     new minor number for release (defaults to current minor + 1 or 0 when major version number was increased)
-			next master will become minor + 1
+    -major              do a new major release
+    -minor              do a new minor release
+    -point              do a new point release
+    -releasename=name   new release name for master/minor release
+    -dryrun             just echo but don't run any commands
 =cut
diff --git a/scripts/tsstat.pl b/scripts/tsstat.pl
index 8674699..2f8116a 100755
--- a/scripts/tsstat.pl
+++ b/scripts/tsstat.pl
@@ -35,61 +35,62 @@ my @lang;
 
 # translator names here as a hash where the key is the lang_country code used for the ts file name
 my $translators= {
-	af => '',
-	ar => 'Ichaouia Amine, Hosham Munier',
-	bg => 'Захари Савов, Jordan Tzvetkov',
-	bs => 'Almir Karabegovic',
-	ca => 'Albert F, Pau Reguant Ridó, Xavier Roijals',
-	cs => 'Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček',
-	da => 'Jacob Overgaard Madsen, Bo Victor Thomsen',
-	de => 'Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho',
-	es => 'Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo',
-	el => 'Theodoros Vakkas, Ioannis Tsimpiris, Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves',
-	et => 'Veiko Viil',
-	eu => 'Asier Sarasua Garmendia, Irantzu Alvarez',
-	fa => 'Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan',
-	fi => 'Kari Salovaara, Marko Järvenpää',
-	fr => 'Stéphane Brunner, Olivier Dalang, Nicolas Damien, Michael Douchin, Régis Haubourg, Matthias Khun, Sylvain Maillard, Jean-Roc Morreale, Mehdi Semchaoui, Harrissou Sant-anna',
-	gl => 'Xan Vieiro',
-	hi => 'Harish Kumar Solanki',
-	hu => 'Zoltan Siki',
-	hr => 'Zoran Jankovic',
-	is => 'Ásta Kristín Óladóttir, Thordur Ivarsson',
-	id => 'Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa',
-	it => 'Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon',
-	ja => 'BABA Yoshihiko, Yoichi Kayama, Minoru Akagi, Takayuki Nuimura, Takayuki Mizutani, Norihiro Yamate',
-	ka => 'Shota Murtskhvaladze, George Machitidze',
-	km => 'Khoem Sokhem',
-	ko => 'OSGeo Korean Chapter',
-	lo => 'Anousak Souphavanh, Soukanh Lathsavong',
-	lv => 'Maris Nartiss, Pēteris Brūns',
-	lt => 'Paulius Litvinas, Tomas Straupis, Kestas M',
-	ml => 'Vinayan Parameswaran',
-	mn => 'Bayarmaa Enkhtur',
-	mr => '',
-	nb => 'James Stott, Maléne Peterson',
-	nl => 'Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp',
-	pl => 'Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok',
-	pt_BR => 'Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros ',
-	pt_PT => 'Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar',
-	ro => 'Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar',
-	ru => 'Alexander Bruy, Artem Popov',
-	sk => 'Lubos Balazovic, Jana Kormanikova, Ivan Mincik',
-	sl => 'Jože Detečnik, Dejan Gregor, Jaka Kranjc',
-	sq => '',
+	'af' => '',
+	'ar' => 'Ichaouia Amine, Hosham Munier',
+	'bg' => 'Захари Савов, Jordan Tzvetkov',
+	'bs' => 'Almir Karabegovic',
+	'ca' => 'Albert F, Pau Reguant Ridó, Xavier Roijals',
+	'cs' => 'Jan Helebrant, Martin Landa, Peter Antolik, Martin Dzurov, Stanislav Horáček',
+	'da' => 'Jacob Overgaard Madsen, Bo Victor Thomsen',
+	'de' => 'Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho',
+	'es' => 'Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo',
+	'el' => 'Theodoros Vakkas, Ioannis Tsimpiris, Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves',
+	'et' => 'Veiko Viil',
+	'eu' => 'Asier Sarasua Garmendia, Irantzu Alvarez',
+	'fa' => 'Mola Pahnadayan, Masoud Pashotan , Masoud Erfanyan',
+	'fi' => 'Kari Salovaara, Marko Järvenpää',
+	'fr' => 'Arnaud Morvan, Augustin Roche, Jean-Roc Morreale, Loïc Buscoz, Marc-André Saia, Mathieu Bossaert, Mayeul Kauffmann, Médéric Ribreux, Michael Douchin, Nicolas Rochard, Robin Prest, DelazJ, Stéphane Possamai, Sylvain Badey, Sylvain_M, Sylvain Maillard, Xavier Tardieu',
+	'gl' => 'Xan Vieiro',
+	'hi' => 'Harish Kumar Solanki',
+	'hu' => 'Zoltan Siki',
+	'hr' => 'Zoran Jankovic',
+	'is' => 'Ásta Kristín Óladóttir, Thordur Ivarsson',
+	'id' => 'Emir Hartato, Muhammad Iqnaul Haq Siregar, Trias Aditya, Januar V. Simarmata, I Made Anombawa',
+	'it' => 'Roberto Angeletti, Michele Beneventi, Marco Braida, Stefano Campus, Luca Casagrande, Paolo Cavallini, Giuliano Curti, Luca Delucchi, Alessandro Fanna, Michele Ferretti, Matteo Ghetta, Anne Gishla, Maurizio Napolitano, Flavio Rigolon',
+	'ja' => 'BABA Yoshihiko, Yoichi Kayama, Minoru Akagi, Takayuki Nuimura, Takayuki Mizutani, Norihiro Yamate',
+	'ka' => 'Shota Murtskhvaladze, George Machitidze',
+	'km' => 'Khoem Sokhem',
+	'ko' => 'OSGeo Korean Chapter',
+	'lo' => 'Anousak Souphavanh, Soukanh Lathsavong',
+	'lv' => 'Maris Nartiss, Pēteris Brūns',
+	'lt' => 'Paulius Litvinas, Tomas Straupis, Kestas M',
+	'ml' => 'Vinayan Parameswaran',
+	'mn' => 'Bayarmaa Enkhtur',
+	'mr' => '',
+	'nb' => 'James Stott, Maléne Peterson',
+	'nl' => 'Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk, Diethard Jansen, Willem Hoffmans, Dick Groskamp',
+	'pl' => 'Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Łoskot, Tomasz Paul, Andrzej Świąder, Radosław Pasiok',
+	'pt_BR' => 'Sidney Schaberle Goveia, Arthur Nanni, Marcelo Soares Souza, Narcélio de Sá Pereira Filho, Leônidas Descovi Filho, Felipe Sodré Barros ',
+	'pt_PT' => 'Giovanni Manghi, Joana Simões, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva, Ricardo Sena, Leandro Infantini, João Gaspar',
+	'ro' => 'Sorin Călinică, Lonut Losifescu-Enescu, Bogdan Pacurar',
+	'ru' => 'Alexander Bruy, Artem Popov',
+	'sk' => 'Lubos Balazovic, Jana Kormanikova, Ivan Mincik',
+	'sl' => 'Jože Detečnik, Dejan Gregor, Jaka Kranjc',
+	'sq' => '',
 	'sr at latin' => 'Goran Ivanković',
-	sr => 'Goran Ivanković',
-	sv => 'Lars Luthman, Magnus Homann, Victor Axbom',
-	sw => '',
-	ta => '',
-	te => '',
-	th => 'Man Chao',
-        tl => 'Kathrina Gregana',
-	tr => 'Osman Yalçın YILMAZ, Omur Saygin',
-	uk => 'Alexander Bruy',
-	vi => 'Phan Anh, Bùi Hữu Mạnh',
-	zh_CN => 'Calvin Ngei, Zhang Jun, Richard Xie',
-	zh_TW => 'Nung-yao Lin',
+	'sr' => 'Goran Ivanković',
+	'sv' => 'Lars Luthman, Magnus Homann, Victor Axbom',
+	'sw' => '',
+	'ta' => '',
+	'te' => '',
+	'th' => 'Man Chao',
+        'tl' => 'Kathrina Gregana',
+	'tr' => 'Osman Yalçın YILMAZ, Omur Saygin',
+	'uk' => 'Alexander Bruy',
+	'vi' => 'Phan Anh, Bùi Hữu Mạnh',
+	'zh_CN' => 'Calvin Ngei, Zhang Jun, Richard Xie',
+	'zh-Hans' => 'Calvin Ngei, Lisashen',
+	'zh_TW' => 'Nung-yao Lin',
 };
 
 my $maxn;
@@ -106,6 +107,14 @@ for my $i (<i18n/qgis_*.ts>) {
 		$charset = " (latin)";
 		$langcode = $1;
 	}
+	if( $langcode =~ /(.*)\-Hans/ ) {
+                $charset = " simplified";
+                $langcode = $1;
+        }
+	if( $langcode =~ /(.*)\-Hant/ ) {
+                $charset = " traditional";
+                $langcode = $1;
+        }
 	my $name;
 	if($langcode =~ /(.*)_(.*)/) {
 		my $lang = code2language(lc $1);
diff --git a/src/analysis/raster/qgsrastercalcnode.cpp b/src/analysis/raster/qgsrastercalcnode.cpp
index 7ae8920..c8fe9de 100644
--- a/src/analysis/raster/qgsrastercalcnode.cpp
+++ b/src/analysis/raster/qgsrastercalcnode.cpp
@@ -20,7 +20,7 @@ QgsRasterCalcNode::QgsRasterCalcNode()
     , mLeft( 0 )
     , mRight( 0 )
     , mNumber( 0 )
-    , mOperator( opPLUS ) //not used
+    , mOperator( opNONE )
 {
 }
 
@@ -29,7 +29,7 @@ QgsRasterCalcNode::QgsRasterCalcNode( double number )
     , mLeft( 0 )
     , mRight( 0 )
     , mNumber( number )
-    , mOperator( opPLUS ) //not used
+    , mOperator( opNONE )
 {
 }
 
@@ -48,8 +48,10 @@ QgsRasterCalcNode::QgsRasterCalcNode( const QString& rasterName )
     , mRight( 0 )
     , mNumber( 0 )
     , mRasterName( rasterName )
-    , mOperator( opPLUS ) //not used
+    , mOperator( opNONE )
 {
+  if ( mRasterName.startsWith( '"' ) && mRasterName.endsWith( '"' ) )
+    mRasterName = mRasterName.mid( 1, mRasterName.size() - 2 );
 }
 
 QgsRasterCalcNode::~QgsRasterCalcNode()
diff --git a/src/analysis/raster/qgsrastercalcnode.h b/src/analysis/raster/qgsrastercalcnode.h
index 0bad294..7fc5e7f 100644
--- a/src/analysis/raster/qgsrastercalcnode.h
+++ b/src/analysis/raster/qgsrastercalcnode.h
@@ -57,7 +57,8 @@ class ANALYSIS_EXPORT QgsRasterCalcNode
       opLE,         // <=
       opAND,
       opOR,
-      opSIGN    //change sign
+      opSIGN,       // change sign
+      opNONE,
     };
 
     QgsRasterCalcNode();
diff --git a/src/analysis/raster/qgsrastercalculator.cpp b/src/analysis/raster/qgsrastercalculator.cpp
index 22c195d..d719ce6 100644
--- a/src/analysis/raster/qgsrastercalculator.cpp
+++ b/src/analysis/raster/qgsrastercalculator.cpp
@@ -160,7 +160,6 @@ int QgsRasterCalculator::processCalculation( QProgressDialog* p )
   QgsRasterMatrix resultMatrix;
 
   //read / write line by line
-  bool encounteredError = false;
   for ( int i = 0; i < mNumOutputRows; ++i )
   {
     if ( p )
@@ -179,11 +178,11 @@ int QgsRasterCalculator::processCalculation( QProgressDialog* p )
     {
       double sourceTransformation[6];
       GDALRasterBandH sourceRasterBand = mInputRasterBands[bufferIt.key()];
-      if ( !GDALGetGeoTransform( GDALGetBandDataset( sourceRasterBand ), sourceTransformation ) )
+      if ( GDALGetGeoTransform( GDALGetBandDataset( sourceRasterBand ), sourceTransformation ) != CE_None )
       {
-        encounteredError = true;
-        break;
+        qWarning( "GDALGetGeoTransform failed!" );
       }
+
       //the function readRasterPart calls GDALRasterIO (and ev. does some conversion if raster transformations are not the same)
       readRasterPart( targetGeoTransform, 0, i, mNumOutputColumns, 1, sourceTransformation, sourceRasterBand, bufferIt.value()->data() );
     }
@@ -249,11 +248,11 @@ int QgsRasterCalculator::processCalculation( QProgressDialog* p )
     GDALClose( *datasetIt );
   }
 
-  if (( p && p->wasCanceled() ) || encounteredError )
+  if ( p && p->wasCanceled() )
   {
     //delete the dataset without closing (because it is faster)
     GDALDeleteDataset( outputDriver, TO8F( mOutputFile ) );
-    return encounteredError ? 1 : 3;
+    return 3;
   }
   GDALClose( outputDataset );
   CPLFree( resultScanLine );
diff --git a/src/app/composer/qgscomposerattributetablewidget.cpp b/src/app/composer/qgscomposerattributetablewidget.cpp
index 83a783a..e6c02fe 100644
--- a/src/app/composer/qgscomposerattributetablewidget.cpp
+++ b/src/app/composer/qgscomposerattributetablewidget.cpp
@@ -28,8 +28,7 @@
 #include "qgsexpressionbuilderdialog.h"
 #include "qgsproject.h"
 #include "qgsrelationmanager.h"
-#include <QColorDialog>
-#include <QFontDialog>
+#include "qgisgui.h"
 
 QgsComposerAttributeTableWidget::QgsComposerAttributeTableWidget( QgsComposerAttributeTableV2* table, QgsComposerFrame* frame )
     : QgsComposerItemBaseWidget( 0, table )
@@ -283,29 +282,20 @@ void QgsComposerAttributeTableWidget::on_mMarginSpinBox_valueChanged( double d )
 void QgsComposerAttributeTableWidget::on_mHeaderFontPushButton_clicked()
 {
   if ( !mComposerTable )
-  {
     return;
-  }
 
   bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->headerFont(), this, tr( "Select Font" ), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->headerFont(), this, tr( "Select Font" ) );
-#endif
-  if ( ok )
+  QFont newFont = QgisGui::getFont( ok, mComposerTable->headerFont(), tr( "Select Font" ) );
+  if ( !ok )
   {
-    QgsComposition* composition = mComposerTable->composition();
+    QgsComposition *composition = mComposerTable->composition();
     if ( composition )
-    {
       composition->beginMultiFrameCommand( mComposerTable, tr( "Table header font" ) );
-    }
+
     mComposerTable->setHeaderFont( newFont );
+
     if ( composition )
-    {
       composition->endMultiFrameCommand();
-    }
   }
 }
 
@@ -336,24 +326,17 @@ void QgsComposerAttributeTableWidget::on_mContentFontPushButton_clicked()
   }
 
   bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->contentFont(), this, tr( "Select Font" ), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->contentFont(), this, tr( "Select Font" ) );
-#endif
+  QFont newFont = QgisGui::getFont( ok, mComposerTable->contentFont(), tr( "Select Font" ) );
   if ( ok )
   {
     QgsComposition* composition = mComposerTable->composition();
     if ( composition )
-    {
       composition->beginMultiFrameCommand( mComposerTable, tr( "Table content font" ) );
-    }
+
     mComposerTable->setContentFont( newFont );
+
     if ( composition )
-    {
       composition->endMultiFrameCommand();
-    }
   }
 }
 
diff --git a/src/app/composer/qgscomposerlabelwidget.cpp b/src/app/composer/qgscomposerlabelwidget.cpp
index 48f7201..723dafb 100644
--- a/src/app/composer/qgscomposerlabelwidget.cpp
+++ b/src/app/composer/qgscomposerlabelwidget.cpp
@@ -91,12 +91,7 @@ void QgsComposerLabelWidget::on_mFontButton_clicked()
   if ( mComposerLabel )
   {
     bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-    // Native Mac dialog works only for Qt Carbon
-    QFont newFont = QFontDialog::getFont( &ok, mComposerLabel->font(), this, QString(), QFontDialog::DontUseNativeDialog );
-#else
-    QFont newFont = QFontDialog::getFont( &ok, mComposerLabel->font(), this );
-#endif
+    QFont newFont = QgisGui::getFont( ok, mComposerLabel->font() );
     if ( ok )
     {
       mComposerLabel->beginCommand( tr( "Label font changed" ) );
diff --git a/src/app/composer/qgscomposerlegendwidget.cpp b/src/app/composer/qgscomposerlegendwidget.cpp
index 38e9e46..6224ac5 100644
--- a/src/app/composer/qgscomposerlegendwidget.cpp
+++ b/src/app/composer/qgscomposerlegendwidget.cpp
@@ -23,9 +23,7 @@
 #include "qgscomposeritemwidget.h"
 #include "qgscomposermap.h"
 #include "qgscomposition.h"
-#include <QFontDialog>
-#include <QColorDialog>
-#include <QInputDialog>
+#include "qgisgui.h"
 
 #include "qgisapp.h"
 #include "qgsapplication.h"
@@ -41,6 +39,7 @@
 #include "qgsvectorlayer.h"
 
 #include <QMessageBox>
+#include <QInputDialog>
 
 
 
@@ -369,12 +368,7 @@ void QgsComposerLegendWidget::on_mTitleFontButton_clicked()
   if ( mLegend )
   {
     bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-    // Native Mac dialog works only for Qt Carbon
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::Title ).font(), this, QString(), QFontDialog::DontUseNativeDialog );
-#else
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::Title ).font(), this );
-#endif
+    QFont newFont = QgisGui::getFont( ok, mLegend->style( QgsComposerLegendStyle::Title ).font() );
     if ( ok )
     {
       mLegend->beginCommand( tr( "Title font changed" ) );
@@ -391,12 +385,7 @@ void QgsComposerLegendWidget::on_mGroupFontButton_clicked()
   if ( mLegend )
   {
     bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-    // Native Mac dialog works only for Qt Carbon
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::Group ).font(), this, QString(), QFontDialog::DontUseNativeDialog );
-#else
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::Group ).font(), this );
-#endif
+    QFont newFont = QgisGui::getFont( ok, mLegend->style( QgsComposerLegendStyle::Group ).font() );
     if ( ok )
     {
       mLegend->beginCommand( tr( "Legend group font changed" ) );
@@ -413,12 +402,7 @@ void QgsComposerLegendWidget::on_mLayerFontButton_clicked()
   if ( mLegend )
   {
     bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-    // Native Mac dialog works only for Qt Carbon
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::Subgroup ).font(), this, QString(), QFontDialog::DontUseNativeDialog );
-#else
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::Subgroup ).font(), this );
-#endif
+    QFont newFont = QgisGui::getFont( ok, mLegend->style( QgsComposerLegendStyle::Subgroup ).font() );
     if ( ok )
     {
       mLegend->beginCommand( tr( "Legend layer font changed" ) );
@@ -435,12 +419,7 @@ void QgsComposerLegendWidget::on_mItemFontButton_clicked()
   if ( mLegend )
   {
     bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-    // Native Mac dialog works only for Qt Carbon
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::SymbolLabel ).font(), this, QString(), QFontDialog::DontUseNativeDialog );
-#else
-    QFont newFont = QFontDialog::getFont( &ok, mLegend->style( QgsComposerLegendStyle::SymbolLabel ).font(), this );
-#endif
+    QFont newFont = QgisGui::getFont( ok, mLegend->style( QgsComposerLegendStyle::SymbolLabel ).font() );
     if ( ok )
     {
       mLegend->beginCommand( tr( "Legend item font changed" ) );
diff --git a/src/app/composer/qgscomposermapwidget.cpp b/src/app/composer/qgscomposermapwidget.cpp
index 360e020..770e4bd 100644
--- a/src/app/composer/qgscomposermapwidget.cpp
+++ b/src/app/composer/qgscomposermapwidget.cpp
@@ -27,7 +27,6 @@
 #include "qgsmaprenderer.h"
 #include "qgsstylev2.h"
 #include "qgssymbolv2.h"
-//#include "qgssymbolv2propertiesdialog.h"
 #include "qgssymbolv2selectordialog.h"
 #include "qgssymbollayerv2utils.h"
 #include "qgsvectorlayer.h"
@@ -39,8 +38,8 @@
 #include "qgsgenericprojectionselector.h"
 #include "qgsproject.h"
 #include "qgsvisibilitypresets.h"
-#include <QColorDialog>
-#include <QFontDialog>
+#include "qgisgui.h"
+
 #include <QMessageBox>
 
 QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap )
@@ -2086,12 +2085,7 @@ void QgsComposerMapWidget::on_mAnnotationFontButton_clicked()
   }
 
   bool ok;
-#if defined(Q_OS_MAC) && QT_VERSION >= 0x040500 && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  QFont newFont = QFontDialog::getFont( &ok, grid->annotationFont(), this, QString(), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &ok, grid->annotationFont(), this );
-#endif
+  QFont newFont = QgisGui::getFont( ok, grid->annotationFont() );
   if ( ok )
   {
     mComposerMap->beginCommand( tr( "Annotation font changed" ) );
diff --git a/src/app/composer/qgscomposerscalebarwidget.cpp b/src/app/composer/qgscomposerscalebarwidget.cpp
index 8df40de..52879ec 100644
--- a/src/app/composer/qgscomposerscalebarwidget.cpp
+++ b/src/app/composer/qgscomposerscalebarwidget.cpp
@@ -310,13 +310,7 @@ void QgsComposerScaleBarWidget::on_mFontButton_clicked()
   }
 
   bool dialogAccepted;
-  QFont oldFont = mComposerScaleBar->font();
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  QFont newFont = QFontDialog::getFont( &dialogAccepted, oldFont, this, QString(), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &dialogAccepted, oldFont, this );
-#endif
+  QFont newFont = QgisGui::getFont( dialogAccepted, mComposerScaleBar->font() );
   if ( dialogAccepted )
   {
     mComposerScaleBar->beginCommand( tr( "Scalebar font changed" ) );
diff --git a/src/app/composer/qgscomposertablewidget.cpp b/src/app/composer/qgscomposertablewidget.cpp
index 68e7683..bf736af 100644
--- a/src/app/composer/qgscomposertablewidget.cpp
+++ b/src/app/composer/qgscomposertablewidget.cpp
@@ -24,8 +24,7 @@
 #include "qgsmaplayerregistry.h"
 #include "qgsvectorlayer.h"
 #include "qgsexpressionbuilderdialog.h"
-#include <QColorDialog>
-#include <QFontDialog>
+#include "qgisgui.h"
 
 QgsComposerTableWidget::QgsComposerTableWidget( QgsComposerAttributeTable* table ): QgsComposerItemBaseWidget( 0, table ), mComposerTable( table )
 {
@@ -215,12 +214,7 @@ void QgsComposerTableWidget::on_mHeaderFontPushButton_clicked()
   }
 
   bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->headerFont(), this, tr( "Select Font" ), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->headerFont(), this, tr( "Select Font" ) );
-#endif
+  QFont newFont = QgisGui::getFont( ok, mComposerTable->headerFont(), tr( "Select Font" ) );
   if ( ok )
   {
     mComposerTable->beginCommand( tr( "Table header font" ) );
@@ -250,12 +244,7 @@ void QgsComposerTableWidget::on_mContentFontPushButton_clicked()
   }
 
   bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->contentFont(), this, tr( "Select Font" ), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &ok, mComposerTable->contentFont(), this, tr( "Select Font" ) );
-#endif
+  QFont newFont = QgisGui::getFont( ok, mComposerTable->contentFont(), tr( "Select Font" ) );
   if ( ok )
   {
     mComposerTable->beginCommand( tr( "Table content font" ) );
diff --git a/src/app/gps/qgsgpsinformationwidget.cpp b/src/app/gps/qgsgpsinformationwidget.cpp
index ffdd20b..31abc34 100644
--- a/src/app/gps/qgsgpsinformationwidget.cpp
+++ b/src/app/gps/qgsgpsinformationwidget.cpp
@@ -136,28 +136,28 @@ QgsGPSInformationWidget::QgsGPSInformationWidget( QgsMapCanvas * thepCanvas, QWi
                               );
 
   // grids, axes
-  QwtPolarGrid * mypSatellitesGrid = new QwtPolarGrid();
-  mypSatellitesGrid->setGridAttribute( QwtPolarGrid::AutoScaling, false );   // This fixes the issue of autoscaling on the Radius grid. It is ON by default AND is separate from the scaleData.doAutoScale in QwtPolarPlot::setScale(), etc. THIS IS VERY TRICKY!
-  mypSatellitesGrid->setPen( QPen( Qt::black ) );
+  mpSatellitesGrid = new QwtPolarGrid();
+  mpSatellitesGrid->setGridAttribute( QwtPolarGrid::AutoScaling, false );   // This fixes the issue of autoscaling on the Radius grid. It is ON by default AND is separate from the scaleData.doAutoScale in QwtPolarPlot::setScale(), etc. THIS IS VERY TRICKY!
+  mpSatellitesGrid->setPen( QPen( Qt::black ) );
   QPen minorPen( Qt::gray );  // moved outside of for loop; NOTE setting the minor pen isn't necessary if the minor grids aren't shown
   for ( int scaleId = 0; scaleId < QwtPolar::ScaleCount; scaleId++ )
   {
-    //mypSatellitesGrid->showGrid( scaleId );
-    //mypSatellitesGrid->showMinorGrid(scaleId);
-    mypSatellitesGrid->setMinorGridPen( scaleId, minorPen );
+    //mpSatellitesGrid->showGrid( scaleId );
+    //mpSatellitesGrid->showMinorGrid(scaleId);
+    mpSatellitesGrid->setMinorGridPen( scaleId, minorPen );
   }
-//  mypSatellitesGrid->setAxisPen( QwtPolar::AxisAzimuth, QPen( Qt::black ) );
-
-  mypSatellitesGrid->showAxis( QwtPolar::AxisAzimuth, true );
-  mypSatellitesGrid->showAxis( QwtPolar::AxisLeft, false ); //alt axis
-  mypSatellitesGrid->showAxis( QwtPolar::AxisRight, false );//alt axis
-  mypSatellitesGrid->showAxis( QwtPolar::AxisTop, false );//alt axis
-  mypSatellitesGrid->showAxis( QwtPolar::AxisBottom, false );//alt axis
-  mypSatellitesGrid->showGrid( QwtPolar::ScaleAzimuth, false ); // hide the grid; just show ticks at edge
-  mypSatellitesGrid->showGrid( QwtPolar::ScaleRadius, true );
-//  mypSatellitesGrid->showMinorGrid( QwtPolar::ScaleAzimuth, true );
-  mypSatellitesGrid->showMinorGrid( QwtPolar::ScaleRadius, true );   // for 22.5, 67.5 degree circles
-  mypSatellitesGrid->attach( mpSatellitesWidget );
+//  mpSatellitesGrid->setAxisPen( QwtPolar::AxisAzimuth, QPen( Qt::black ) );
+
+  mpSatellitesGrid->showAxis( QwtPolar::AxisAzimuth, true );
+  mpSatellitesGrid->showAxis( QwtPolar::AxisLeft, false ); //alt axis
+  mpSatellitesGrid->showAxis( QwtPolar::AxisRight, false );//alt axis
+  mpSatellitesGrid->showAxis( QwtPolar::AxisTop, false );//alt axis
+  mpSatellitesGrid->showAxis( QwtPolar::AxisBottom, false );//alt axis
+  mpSatellitesGrid->showGrid( QwtPolar::ScaleAzimuth, false ); // hide the grid; just show ticks at edge
+  mpSatellitesGrid->showGrid( QwtPolar::ScaleRadius, true );
+//  mpSatellitesGrid->showMinorGrid( QwtPolar::ScaleAzimuth, true );
+  mpSatellitesGrid->showMinorGrid( QwtPolar::ScaleRadius, true );   // for 22.5, 67.5 degree circles
+  mpSatellitesGrid->attach( mpSatellitesWidget );
 
   //QwtLegend *legend = new QwtLegend;
   //mpSatellitesWidget->insertLegend(legend, QwtPolarPlot::BottomLegend);
@@ -253,8 +253,12 @@ QgsGPSInformationWidget::~QgsGPSInformationWidget()
     disconnectGps();
   }
 
-  if ( mpMapMarker )
-    delete mpMapMarker;
+  delete mpMapMarker;
+  delete mpRubberBand;
+
+#if (WITH_QWTPOLAR)
+  delete mpSatellitesGrid;
+#endif
 
   QSettings mySettings;
   mySettings.setValue( "/gps/lastPort", mCboDevices->itemData( mCboDevices->currentIndex() ).toString() );
@@ -303,10 +307,6 @@ QgsGPSInformationWidget::~QgsGPSInformationWidget()
     mySettings.setValue( "/gps/panMode", "none" );
   }
 
-  if ( mpRubberBand )
-  {
-    delete mpRubberBand;
-  }
 }
 
 void QgsGPSInformationWidget::on_mSpinTrackWidth_valueChanged( int theValue )
diff --git a/src/app/gps/qgsgpsinformationwidget.h b/src/app/gps/qgsgpsinformationwidget.h
index de2f67c..05605f0 100644
--- a/src/app/gps/qgsgpsinformationwidget.h
+++ b/src/app/gps/qgsgpsinformationwidget.h
@@ -25,6 +25,7 @@
 #include <qwt_plot_curve.h>
 #if (WITH_QWTPOLAR)
 #include <qwt_polar_plot.h>
+#include <qwt_polar_grid.h>
 #include <qwt_polar_marker.h>
 #endif
 
@@ -89,6 +90,7 @@ class QgsGPSInformationWidget: public QWidget, private Ui::QgsGPSInformationWidg
     QwtPlotCurve * mpCurve;
 #if (WITH_QWTPOLAR)
     QwtPolarPlot * mpSatellitesWidget;
+    QwtPolarGrid *mpSatellitesGrid;
     QList< QwtPolarMarker * > mMarkerList;
 #endif
     void createRubberBand();
diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp
index a839704..062d7ba 100644
--- a/src/app/qgisapp.cpp
+++ b/src/app/qgisapp.cpp
@@ -3883,6 +3883,7 @@ void QgisApp::newMemoryLayer()
     layers << newLayer;
 
     QgsMapLayerRegistry::instance()->addMapLayers( layers );
+    newLayer->startEditing();
   }
 }
 
diff --git a/src/app/qgsbookmarks.cpp b/src/app/qgsbookmarks.cpp
index 54f4b84..cb076f0 100644
--- a/src/app/qgsbookmarks.cpp
+++ b/src/app/qgsbookmarks.cpp
@@ -265,7 +265,10 @@ void QgsBookmarks::zoomToBookmark()
 
 void QgsBookmarks::importFromXML()
 {
-  QString fileName = QFileDialog::getOpenFileName( this, tr( "Import Bookmarks" ), ".",
+  QSettings settings;
+
+  QString lastUsedDir = settings.value( "/Bookmark/LastUsedDirectory", QVariant() ).toString();
+  QString fileName = QFileDialog::getOpenFileName( this, tr( "Import Bookmarks" ), lastUsedDir,
                      tr( "XML files (*.xml *XML)" ) );
   if ( fileName.isEmpty() )
   {
@@ -296,21 +299,21 @@ void QgsBookmarks::importFromXML()
   for ( int i = 0;i < nodeList.count(); i++ )
   {
     QDomNode bookmark = nodeList.at( i );
-    QDomElement name = bookmark.firstChildElement( "Name" );
-    QDomElement prjname = bookmark.firstChildElement( "Project" );
-    QDomElement xmin = bookmark.firstChildElement( "xMin" );
-    QDomElement xmax = bookmark.firstChildElement( "xMax" );
-    QDomElement ymin = bookmark.firstChildElement( "yMin" );
-    QDomElement ymax = bookmark.firstChildElement( "yMax" );
-    QDomElement srid = bookmark.firstChildElement( "SRID" );
+    QDomElement name = bookmark.firstChildElement( "name" );
+    QDomElement prjname = bookmark.firstChildElement( "project" );
+    QDomElement xmin = bookmark.firstChildElement( "xmin" );
+    QDomElement xmax = bookmark.firstChildElement( "xmax" );
+    QDomElement ymin = bookmark.firstChildElement( "ymin" );
+    QDomElement ymax = bookmark.firstChildElement( "ymax" );
+    QDomElement srid = bookmark.firstChildElement( "sr_id" );
 
     queries += "INSERT INTO tbl_bookmarks(bookmark_id,name,project_name,xmin,ymin,xmax,ymax,projection_srid)"
                "  VALUES (NULL,"
                "'" + name.text() + "',"
                "'" + prjname.text() + "',"
                + xmin.text() + ","
-               + xmax.text() + ","
                + ymin.text() + ","
+               + xmax.text() + ","
                + ymax.text() + ","
                + srid.text() + ");";
   }
@@ -338,7 +341,10 @@ void QgsBookmarks::importFromXML()
 
 void QgsBookmarks::exportToXML()
 {
-  QString fileName = QFileDialog::getSaveFileName( this, tr( "Export bookmarks" ), ".",
+  QSettings settings;
+
+  QString lastUsedDir = settings.value( "/Bookmark/LastUsedDirectory", QVariant() ).toString();
+  QString fileName = QFileDialog::getSaveFileName( this, tr( "Export bookmarks" ), lastUsedDir,
                      tr( "XML files( *.xml *.XML )" ) );
   if ( fileName.isEmpty() )
   {
@@ -358,6 +364,10 @@ void QgsBookmarks::exportToXML()
   int rowCount = lstBookmarks->model()->rowCount();
   int colCount = lstBookmarks->model()->columnCount();
 
+  QList<QString> headerList;
+  headerList << "id" << "name" << "project" << "xmin"
+  << "ymin" << "xmax" << "ymax" << "sr_id";
+
   for ( int i = 0; i < rowCount; ++i )
   {
     QDomElement bookmark = doc.createElement( "bookmark" );
@@ -369,8 +379,8 @@ void QgsBookmarks::exportToXML()
       {
         QString value = idx.data( Qt::DisplayRole ).toString();
         QDomText idText = doc.createTextNode( value );
-        QVariant header = lstBookmarks->model()->headerData( j, Qt::Horizontal );
-        QDomElement id = doc.createElement( header.toString() );
+        QString header = headerList.at( j );
+        QDomElement id = doc.createElement( header );
         id.appendChild( idText );
         bookmark.appendChild( id );
       }
@@ -388,4 +398,6 @@ void QgsBookmarks::exportToXML()
   out.setCodec( "UTF - 8" );
   doc.save( out, 2 );
   f.close();
+
+  settings.setValue( "/Bookmark/LastUsedDirectory", QFileInfo( fileName ).path() );
 }
diff --git a/src/app/qgsdecorationgriddialog.cpp b/src/app/qgsdecorationgriddialog.cpp
index 0ee68b0..3d92375 100644
--- a/src/app/qgsdecorationgriddialog.cpp
+++ b/src/app/qgsdecorationgriddialog.cpp
@@ -25,9 +25,8 @@
 #include "qgssymbolv2.h"
 #include "qgssymbolv2selectordialog.h"
 #include "qgisapp.h"
+#include "qgisgui.h"
 
-#include <QFontDialog>
-#include <QColorDialog>
 #include <QSettings>
 
 QgsDecorationGridDialog::QgsDecorationGridDialog( QgsDecorationGrid& deco, QWidget* parent )
@@ -275,12 +274,7 @@ void QgsDecorationGridDialog::on_mPbtnUpdateFromLayer_clicked()
 void QgsDecorationGridDialog::on_mAnnotationFontButton_clicked()
 {
   bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  QFont newFont = QFontDialog::getFont( &ok, mDeco.gridAnnotationFont(), 0, QString(), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &ok, mDeco.gridAnnotationFont() );
-#endif
+  QFont newFont = QgisGui::getFont( ok, mDeco.gridAnnotationFont() );
   if ( ok )
   {
     mDeco.setGridAnnotationFont( newFont );
diff --git a/src/app/qgsdiagramproperties.cpp b/src/app/qgsdiagramproperties.cpp
index 2e651e7..7add3a7 100644
--- a/src/app/qgsdiagramproperties.cpp
+++ b/src/app/qgsdiagramproperties.cpp
@@ -30,9 +30,8 @@
 #include "qgsvectordataprovider.h"
 #include "qgsfeatureiterator.h"
 #include "qgscolordialog.h"
+#include "qgisgui.h"
 
-#include <QColorDialog>
-#include <QFontDialog>
 #include <QList>
 #include <QMessageBox>
 #include <QSettings>
@@ -494,7 +493,7 @@ void QgsDiagramProperties::on_mDisplayDiagramsGroupBox_toggled( bool checked )
 void QgsDiagramProperties::on_mDiagramFontButton_clicked()
 {
   bool ok;
-  mDiagramFont = QFontDialog::getFont( &ok, mDiagramFont );
+  mDiagramFont = QgisGui::getFont( ok, mDiagramFont );
 }
 
 
diff --git a/src/app/qgsfeatureaction.cpp b/src/app/qgsfeatureaction.cpp
index aa5a375..261f899 100644
--- a/src/app/qgsfeatureaction.cpp
+++ b/src/app/qgsfeatureaction.cpp
@@ -163,8 +163,10 @@ bool QgsFeatureAction::addFeature( const QgsAttributeMap& defaultAttributes, boo
     mFeature.setAttribute( idx, v );
   }
 
-  // show the dialog to enter attribute values
-  bool isDisabledAttributeValuesDlg = settings.value( "/qgis/digitizing/disable_enter_attribute_values_dialog", false ).toBool();
+  //show the dialog to enter attribute values
+  //only show if enabled in settings and layer has fields
+  bool isDisabledAttributeValuesDlg = ( fields.count() == 0 ) || settings.value( "/qgis/digitizing/disable_enter_attribute_values_dialog", false ).toBool();
+
   // override application-wide setting with any layer setting
   switch ( mLayer->featureFormSuppress() )
   {
diff --git a/src/app/qgslabeldialog.cpp b/src/app/qgslabeldialog.cpp
index f5a49cb..5478b9c 100644
--- a/src/app/qgslabeldialog.cpp
+++ b/src/app/qgslabeldialog.cpp
@@ -21,9 +21,9 @@
 #include "qgslabel.h"
 #include "qgslabelattributes.h"
 #include "qgslogger.h"
+#include "qgisgui.h"
 
 #include <QColorDialog>
-#include <QFontDialog>
 #include <QTabWidget>
 #include <QDoubleValidator>
 
@@ -277,12 +277,7 @@ void QgsLabelDialog::changeFont( void )
 
   qreal fontSize = mFont.pointSizeF();
   bool resultFlag;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for Qt Carbon
-  mFont = QFontDialog::getFont( &resultFlag, mFont, 0, QString(), QFontDialog::DontUseNativeDialog );
-#else
-  mFont = QFontDialog::getFont( &resultFlag, mFont );
-#endif
+  QFont newFont = QgisGui::getFont( resultFlag, mFont );
   if ( !resultFlag )
     return;
 
diff --git a/src/app/qgslabelinggui.cpp b/src/app/qgslabelinggui.cpp
index fa49683..8d54d42 100644
--- a/src/app/qgslabelinggui.cpp
+++ b/src/app/qgslabelinggui.cpp
@@ -36,12 +36,6 @@
 #include "qgssvgselectorwidget.h"
 
 #include <QCheckBox>
-#include <QColorDialog>
-#include <QFileDialog>
-#include <QFontDialog>
-#include <QTextEdit>
-#include <QApplication>
-#include <QMessageBox>
 #include <QSettings>
 
 
diff --git a/src/app/qgsmeasuredialog.cpp b/src/app/qgsmeasuredialog.cpp
index 1638c7b..c4267bc 100644
--- a/src/app/qgsmeasuredialog.cpp
+++ b/src/app/qgsmeasuredialog.cpp
@@ -43,14 +43,14 @@ QgsMeasureDialog::QgsMeasureDialog( QgsMeasureTool* tool, Qt::WindowFlags f )
   mMeasureArea = tool->measureArea();
   mTotal = 0.;
 
-  mUnitsCombo->addItem( tr( "Meters" ) );
-  mUnitsCombo->addItem( tr( "Feet" ) );
-  mUnitsCombo->addItem( tr( "Degrees" ) );
-  mUnitsCombo->addItem( tr( "Nautical Miles" ) );
+  mUnitsCombo->addItem( QGis::tr( QGis::Meters ) );
+  mUnitsCombo->addItem( QGis::tr( QGis::Feet ) );
+  mUnitsCombo->addItem( QGis::tr( QGis::Degrees ) );
+  mUnitsCombo->addItem( QGis::tr( QGis::NauticalMiles ) );
 
   QSettings settings;
-  QString units = settings.value( "/qgis/measure/displayunits", "meters" ).toString();
-  mUnitsCombo->setCurrentIndex( mUnitsCombo->findText( units, Qt::MatchFixedString ) );
+  QString units = settings.value( "/qgis/measure/displayunits", QGis::toLiteral( QGis::Meters ) ).toString();
+  mUnitsCombo->setCurrentIndex( mUnitsCombo->findText( QGis::tr( QGis::fromLiteral( units ) ), Qt::MatchFixedString ) );
 
   updateSettings();
 
@@ -66,7 +66,7 @@ void QgsMeasureDialog::updateSettings()
   mDecimalPlaces = settings.value( "/qgis/measure/decimalplaces", "3" ).toInt();
   mCanvasUnits = mTool->canvas()->mapUnits();
   // Configure QgsDistanceArea
-  mDisplayUnits = QGis::fromLiteral( mUnitsCombo->currentText().toLower() );
+  mDisplayUnits = QGis::fromTr( mUnitsCombo->currentText() );
   mDa.setSourceCrs( mTool->canvas()->mapSettings().destinationCrs().srsid() );
   mDa.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) );
   // Only use ellipsoidal calculation when project wide transformation is enabled.
@@ -92,7 +92,7 @@ void QgsMeasureDialog::updateSettings()
 
 void QgsMeasureDialog::unitsChanged( const QString &units )
 {
-  mDisplayUnits = QGis::fromLiteral( units.toLower() );
+  mDisplayUnits = QGis::fromTr( units );
   mTable->clear();
   mTotal = 0.;
   updateUi();
@@ -350,4 +350,3 @@ void QgsMeasureDialog::convertMeasurement( double &measure, QGis::UnitType &u, b
   mDa.convertMeasurement( measure, myUnits, mDisplayUnits, isArea );
   u = myUnits;
 }
-
diff --git a/src/app/qgsrastercalcdialog.cpp b/src/app/qgsrastercalcdialog.cpp
index ffcd63b..8eee6a5 100644
--- a/src/app/qgsrastercalcdialog.cpp
+++ b/src/app/qgsrastercalcdialog.cpp
@@ -296,15 +296,12 @@ bool QgsRasterCalcDialog::expressionValid() const
 
 bool QgsRasterCalcDialog::filePathValid() const
 {
-  QString outputPath = QFileInfo( mOutputLayerLineEdit->text() ).absolutePath();
-  if ( QFileInfo( outputPath ).isWritable() )
-  {
-    return true;
-  }
-  else
-  {
+  QString outputPath = mOutputLayerLineEdit->text();
+  if ( outputPath.isEmpty() )
     return false;
-  }
+
+  outputPath = QFileInfo( outputPath ).absolutePath();
+  return QFileInfo( outputPath ).isWritable();
 }
 
 void QgsRasterCalcDialog::on_mRasterBandsListWidget_itemDoubleClicked( QListWidgetItem* item )
diff --git a/src/core/qgis.cpp b/src/core/qgis.cpp
index 44ac527..0b10f41 100644
--- a/src/core/qgis.cpp
+++ b/src/core/qgis.cpp
@@ -120,6 +120,18 @@ QString QGis::tr( QGis::UnitType unit )
   return QCoreApplication::translate( "QGis::UnitType", qPrintable( toLiteral( unit ) ) );
 }
 
+QGis::UnitType QGis::fromTr( QString literal, QGis::UnitType defaultType )
+{
+  for ( unsigned int i = 0; i < ( sizeof( qgisUnitTypes ) / sizeof( qgisUnitTypes[0] ) ); i++ )
+  {
+    if ( literal == QGis::tr( static_cast<UnitType>( i ) ) )
+    {
+      return static_cast<UnitType>( i );
+    }
+  }
+  return defaultType;
+}
+
 double QGis::fromUnitToUnitFactor( QGis::UnitType fromUnit, QGis::UnitType toUnit )
 {
 #define DEGREE_TO_METER 111319.49079327358
diff --git a/src/core/qgis.h b/src/core/qgis.h
index cc5a9b7..eac17a2 100644
--- a/src/core/qgis.h
+++ b/src/core/qgis.h
@@ -246,6 +246,8 @@ class CORE_EXPORT QGis
     static UnitType fromLiteral( QString  literal, QGis::UnitType defaultType = UnknownUnit );
     //! Provides translated version of the type value
     static QString tr( QGis::UnitType unit );
+    //! Provides type value from translated version
+    static UnitType fromTr( QString literal, QGis::UnitType defaultType = UnknownUnit );
     //! Returns the conversion factor between the specified units
     static double fromUnitToUnitFactor( QGis::UnitType fromUnit, QGis::UnitType toUnit );
 
diff --git a/src/core/qgsdistancearea.cpp b/src/core/qgsdistancearea.cpp
index 30a4d23..87f27da 100644
--- a/src/core/qgsdistancearea.cpp
+++ b/src/core/qgsdistancearea.cpp
@@ -1026,8 +1026,7 @@ QString QgsDistanceArea::textUnit( double value, int decimals, QGis::UnitType u,
       //intentional fall-through
     default:
       QgsDebugMsg( QString( "Error: not picked up map units - actual value = %1" ).arg( u ) );
-  };
-
+  }
 
   return QLocale::system().toString( value, 'f', decimals ) + unitLabel;
 }
diff --git a/src/core/qgsgeometry.cpp b/src/core/qgsgeometry.cpp
index 3e13dbf..81753c4 100644
--- a/src/core/qgsgeometry.cpp
+++ b/src/core/qgsgeometry.cpp
@@ -679,7 +679,7 @@ QGis::GeometryType QgsGeometry::type() const
   }
 }
 
-bool QgsGeometry::isMultipart()
+bool QgsGeometry::isMultipart() const
 {
   if ( mDirtyWkb )
     exportGeosToWkb();
diff --git a/src/core/qgsgeometry.h b/src/core/qgsgeometry.h
index 3a8e5af..46f4a7f 100644
--- a/src/core/qgsgeometry.h
+++ b/src/core/qgsgeometry.h
@@ -155,7 +155,7 @@ class CORE_EXPORT QgsGeometry
     QGis::GeometryType type() const;
 
     /** Returns true if wkb of the geometry is of WKBMulti* type */
-    bool isMultipart();
+    bool isMultipart() const;
 
     /** compare geometries using GEOS */
     bool isGeosEqual( QgsGeometry & );
diff --git a/src/core/qgssnappingutils.cpp b/src/core/qgssnappingutils.cpp
index cbb0dcd..9f96f5f 100644
--- a/src/core/qgssnappingutils.cpp
+++ b/src/core/qgssnappingutils.cpp
@@ -206,7 +206,8 @@ QgsPointLocator::Match QgsSnappingUtils::snapToMap( const QPoint& point, QgsPoin
 
 QgsPointLocator::Match QgsSnappingUtils::snapToMap( const QgsPoint& pointMap, QgsPointLocator::MatchFilter* filter )
 {
-  Q_ASSERT( mMapSettings.hasValidSettings() );
+  if ( !mMapSettings.hasValidSettings() )
+    return QgsPointLocator::Match();
 
   if ( mSnapToMapMode == SnapCurrentLayer )
   {
diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp
index ee84444..15137d6 100644
--- a/src/core/qgsvectorlayer.cpp
+++ b/src/core/qgsvectorlayer.cpp
@@ -1758,7 +1758,7 @@ QgsAttributeEditorElement* QgsVectorLayer::attributeEditorElementFromDomElement(
     for ( int i = 0; i < childNodeList.size(); i++ )
     {
       QDomElement childElem = childNodeList.at( i ).toElement();
-      QgsAttributeEditorElement* myElem = attributeEditorElementFromDomElement( childElem, container );
+      QgsAttributeEditorElement *myElem = attributeEditorElementFromDomElement( childElem, container );
       if ( myElem )
         container->addChildElement( myElem );
     }
@@ -1768,7 +1768,7 @@ QgsAttributeEditorElement* QgsVectorLayer::attributeEditorElementFromDomElement(
   else if ( elem.tagName() == "attributeEditorField" )
   {
     QString name = elem.attribute( "name" );
-    int idx = *( dataProvider()->fieldNameMap() ).find( name );
+    int idx = fieldNameIndex( name );
     newElement = new QgsAttributeEditorField( name, idx, parent );
   }
   else if ( elem.tagName() == "attributeEditorRelation" )
diff --git a/src/gui/qgisgui.cpp b/src/gui/qgisgui.cpp
index 16cbdfb..0c4fe6b 100644
--- a/src/gui/qgisgui.cpp
+++ b/src/gui/qgisgui.cpp
@@ -15,11 +15,11 @@
 #include "qgisgui.h"
 
 #include <QSettings>
-#include <QObject> //for tr
 #include <QImageWriter>
 #include "qgsencodingfiledialog.h"
 #include "qgslogger.h"
-#include <memory> //for auto_ptr
+
+#include <QFontDialog>
 
 
 namespace QgisGui
@@ -188,4 +188,17 @@ namespace QgisGui
     return createFileFilter_( longName, glob );
   }
 
+  QFont getFont( bool &ok, const QFont &initial, const QString &title )
+  {
+    // parent is intentionally not set to 'this' as
+    // that would make it follow the style sheet font
+    // see also #12233 and #4937
+#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
+    // Native Mac dialog works only for Qt Carbon
+    return QFontDialog::getFont( &ok, initial, 0, title, QFontDialog::DontUseNativeDialog );
+#else
+    return QFontDialog::getFont( &ok, initial, 0, title );
+#endif
+  }
+
 } // end of QgisGui namespace
diff --git a/src/gui/qgisgui.h b/src/gui/qgisgui.h
index db6d7e6..14597f3 100644
--- a/src/gui/qgisgui.h
+++ b/src/gui/qgisgui.h
@@ -19,6 +19,8 @@
 #include <QPair>
 #include <QStringList>
 
+class QFont;
+
 /** \ingroup gui
  * /namespace QgisGui
  * The QgisGui namespace contains constants and helper functions used throughout the QGIS GUI.
@@ -100,6 +102,14 @@ namespace QgisGui
    */
   QString GUI_EXPORT createFileFilter_( QString const &format );
 
+  /**
+   * Show font selection dialog
+   * @param ok true on ok, false on cancel
+   * @param initial initial font
+   * @param title optional dialog title
+   * @return QFont the selected fon
+   */
+  QFont GUI_EXPORT getFont( bool &ok, const QFont &initial, const QString &title = QString() );
 }
 
 #endif
diff --git a/src/gui/qgsattributeform.cpp b/src/gui/qgsattributeform.cpp
index 9c938f0..d91f03e 100644
--- a/src/gui/qgsattributeform.cpp
+++ b/src/gui/qgsattributeform.cpp
@@ -571,7 +571,7 @@ QWidget* QgsAttributeForm::createWidgetFromDef( const QgsAttributeEditorElement
       if ( !fieldDef )
         break;
 
-      int fldIdx = fieldDef->idx();
+      int fldIdx = vl->fieldNameIndex( fieldDef->name() );
       if ( fldIdx < vl->pendingFields().count() && fldIdx >= 0 )
       {
         const QString widgetType = mLayer->editorWidgetV2( fldIdx );
diff --git a/src/gui/qgsmaptoolzoom.cpp b/src/gui/qgsmaptoolzoom.cpp
index bc47967..49df93d 100644
--- a/src/gui/qgsmaptoolzoom.cpp
+++ b/src/gui/qgsmaptoolzoom.cpp
@@ -109,12 +109,13 @@ void QgsMapToolZoom::canvasReleaseEvent( QMouseEvent * e )
     const QSize& canvasSize = mapSettings.outputSize();
     double sfx = ( double )zoomRectSize.width() / canvasSize.width();
     double sfy = ( double )zoomRectSize.height() / canvasSize.height();
+    double sf = qMax( sfx, sfy );
 
     const QgsMapToPixel* m2p = mCanvas->getCoordinateTransform();
     QgsPoint c = m2p->toMapCoordinates( mZoomRect.center() );
 
     mCanvas->setCenter( c );
-    mCanvas->zoomByFactor( std::max( sfx, sfy ) );
+    mCanvas->zoomByFactor( mZoomOut ? 1.0 / sf : sf );
 
     mCanvas->refresh();
   }
diff --git a/src/gui/symbology-ng/qgspointdisplacementrendererwidget.cpp b/src/gui/symbology-ng/qgspointdisplacementrendererwidget.cpp
index bcdba1b..448e8b7 100644
--- a/src/gui/symbology-ng/qgspointdisplacementrendererwidget.cpp
+++ b/src/gui/symbology-ng/qgspointdisplacementrendererwidget.cpp
@@ -23,8 +23,7 @@
 #include "qgssymbolv2selectordialog.h"
 #include "qgssymbollayerv2utils.h"
 #include "qgsvectorlayer.h"
-#include <QColorDialog>
-#include <QFontDialog>
+#include "qgisgui.h"
 
 QgsRendererV2Widget* QgsPointDisplacementRendererWidget::create( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
 {
@@ -215,12 +214,7 @@ void QgsPointDisplacementRendererWidget::on_mLabelFontButton_clicked()
   }
 
   bool ok;
-#if defined(Q_OS_MAC) && defined(QT_MAC_USE_COCOA)
-  // Native Mac dialog works only for QT Carbon
-  QFont newFont = QFontDialog::getFont( &ok, mRenderer->labelFont(), 0, tr( "Label Font" ), QFontDialog::DontUseNativeDialog );
-#else
-  QFont newFont = QFontDialog::getFont( &ok, mRenderer->labelFont(), 0, tr( "Label Font" ) );
-#endif
+  QFont newFont = QgisGui::getFont( ok, mRenderer->labelFont(), tr( "Label Font" ) );
   if ( ok )
   {
     mRenderer->setLabelFont( newFont );
diff --git a/src/providers/oracle/qgsoracleprovider.cpp b/src/providers/oracle/qgsoracleprovider.cpp
index 6d716b1..7ae2351 100644
--- a/src/providers/oracle/qgsoracleprovider.cpp
+++ b/src/providers/oracle/qgsoracleprovider.cpp
@@ -694,9 +694,10 @@ bool QgsOracleProvider::loadFields()
 
       if ( !mHasSpatialIndex )
       {
-        mHasSpatialIndex = qry.exec( QString( "SELECT %2 FROM %1 WHERE sdo_filter(%2,mdsys.sdo_geometry(2003,NULL,NULL,mdsys.sdo_elem_info_array(1,1003,3),mdsys.sdo_ordinate_array(1,1,-1,-1)))='TRUE'" )
+        mHasSpatialIndex = qry.exec( QString( "SELECT %2 FROM %1 WHERE sdo_filter(%2,mdsys.sdo_geometry(2003,%3,NULL,mdsys.sdo_elem_info_array(1,1003,3),mdsys.sdo_ordinate_array(1,1,-1,-1)))='TRUE'" )
                                      .arg( mQuery )
-                                     .arg( quotedIdentifier( mGeometryColumn ) ) );
+                                     .arg( quotedIdentifier( mGeometryColumn ) )
+                                     .arg( mSrid < 1 ? "NULL" : QString::number( mSrid ) ) );
         if ( !mHasSpatialIndex )
         {
           QgsMessageLog::logMessage( tr( "No spatial index on column %1.%2.%3 found - expect poor performance." )
diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp
index 4721501..580c2da 100644
--- a/src/providers/wms/qgswmsprovider.cpp
+++ b/src/providers/wms/qgswmsprovider.cpp
@@ -559,7 +559,7 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, in
     //t.start();
 
   }
-  else if ( mSettings.mMaxWidth != 0 && mSettings.mMaxHeight != 0 )
+  else
   {
     mTileReqNo++;
 
@@ -598,7 +598,7 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, in
 
       tileMode = mTileLayer->tileMode;
     }
-    else
+    else if ( mSettings.mMaxWidth != 0 && mSettings.mMaxHeight != 0 )
     {
       static QgsWmtsTileMatrix tempTm;
       tempTm.topLeft      = QgsPoint( mLayerExtent.xMinimum(), mLayerExtent.yMaximum() );
@@ -610,6 +610,11 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, in
 
       tileMode = WMSC;
     }
+    else
+    {
+      QgsDebugMsg( "empty tile size" );
+      return mCachedImage;
+    }
 
     QgsDebugMsg( QString( "layer extent: %1,%2 %3x%4" )
                  .arg( qgsDoubleToString( mLayerExtent.xMinimum() ) )
@@ -831,10 +836,6 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, in
                       );
 #endif
   }
-  else
-  {
-    QgsDebugMsg( "empty tile size" );
-  }
 
   return mCachedImage;
 }

-- 
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