[shotwell] map: marker display follows page



commit 9817d86f41e394bdbfe3830af0365e4a540aaadd
Author: Andreas Brauchli <a brauchli elementarea net>
Date:   Sat Aug 20 12:28:22 2016 +0200

    map: marker display follows page
    
    Instead of following the current selection, the map now follows the page.
    Thus, all marker pins now remain on the map when the selection changes.
    
    Introduce a new highlighted state (different from the selected state.)
    The highlighted visible state takes priority over the selected state.
    
    A marker group is shown as selected when it contains a selected marker.
    
    When clicking on a marker group, all grouped photos (and only those) will
    be selected in the library window.

 .../scalable/actions/gps-marker-highlighted.svg    | 414 +++++++++++++++++
 .../actions/gps-markers-many-highlighted.svg       | 510 +++++++++++++++++++++
 src/MapWidget.vala                                 | 185 +++++---
 src/Properties.vala                                |   7 +-
 src/Resources.vala                                 |   2 +
 5 files changed, 1047 insertions(+), 71 deletions(-)
---
diff --git a/data/icons/hicolor/scalable/actions/gps-marker-highlighted.svg 
b/data/icons/hicolor/scalable/actions/gps-marker-highlighted.svg
new file mode 100644
index 00000000..1df387a2
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/gps-marker-highlighted.svg
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="28.742239"
+   height="38.981468"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="gps-marker-highlighted.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3887">
+      <stop
+         id="stop3889"
+         offset="0"
+         style="stop-color:#ff573f;stop-opacity:1;" />
+      <stop
+         id="stop3891"
+         offset="1"
+         style="stop-color:#b71111;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3857">
+      <stop
+         style="stop-color:#87b5f5;stop-opacity:1;"
+         offset="0"
+         id="stop3859" />
+      <stop
+         style="stop-color:#87b5f5;stop-opacity:0;"
+         offset="1"
+         id="stop3861" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3849">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3851" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3853" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3827">
+      <stop
+         id="stop3829"
+         offset="0"
+         style="stop-color:#50a9ff;stop-opacity:1;" />
+      <stop
+         id="stop3831"
+         offset="1"
+         style="stop-color:#0034a9;stop-opacity:0.92490119;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3821">
+      <stop
+         id="stop3823"
+         offset="0"
+         style="stop-color:#60aaf1;stop-opacity:1;" />
+      <stop
+         id="stop3825"
+         offset="1"
+         style="stop-color:#124cd1;stop-opacity:0.92490119;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3787">
+      <stop
+         style="stop-color:#535353;stop-opacity:1;"
+         offset="0"
+         id="stop3789" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3791" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3765">
+      <stop
+         style="stop-color:#23b3ff;stop-opacity:1;"
+         offset="0"
+         id="stop3767" />
+      <stop
+         style="stop-color:#124cd1;stop-opacity:0.92490119;"
+         offset="1"
+         id="stop3769" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3771"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,324.43662,388.73998)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3793"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3843"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3845"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,394.43662,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3849"
+       id="linearGradient3855"
+       x1="461.5"
+       y1="477.36218"
+       x2="462.5"
+       y2="434.36218"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3857"
+       id="linearGradient3863"
+       x1="444.95898"
+       y1="433.89029"
+       x2="444.95898"
+       y2="454.77341"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3849"
+       id="linearGradient3871"
+       x1="382.17749"
+       y1="377.47879"
+       x2="382.17749"
+       y2="414.47479"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3887"
+       id="linearGradient3885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,270.34295,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3925"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3927"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,324.43662,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3941"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3943"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,324.43662,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3945"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3887"
+       id="linearGradient3947"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,270.34295,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787-3"
+       id="radialGradient3909"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       id="linearGradient3787-3">
+      <stop
+         style="stop-color:#535353;stop-opacity:1;"
+         offset="0"
+         id="stop3789-9" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3791-3" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3803-2"
+       x="-0.096096098"
+       width="1.1921922"
+       y="-0.2882883"
+       height="1.5765766"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.66066066"
+         id="feGaussianBlur3805-5" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765-3"
+       id="linearGradient3911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,324.43662,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <linearGradient
+       id="linearGradient3765-3">
+      <stop
+         style="stop-color:#23ff38;stop-opacity:1"
+         offset="0"
+         id="stop3767-3" />
+      <stop
+         style="stop-color:#124cd1;stop-opacity:0.92490119;"
+         offset="1"
+         id="stop3769-4" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="1.6563125"
+     inkscape:cy="25.125718"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:snap-global="false"
+     fit-margin-left="1"
+     units="px"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1440"
+     inkscape:window-height="836"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2987"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-306.5341px"
+       originy="-506.68832px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+        <cc:license
+           rdf:resource="" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-306.5341,-506.6911)">
+    <g
+       transform="translate(-76.094785,7.3864159e-4)"
+       id="g3042">
+      <g
+         transform="translate(22,75.224057)"
+         id="g3895">
+        <path
+           sodipodi:type="arc"
+           
style="opacity:0.58662612;fill:url(#radialGradient3909);fill-opacity:1;stroke:none;filter:url(#filter3803-2)"
+           id="path3785"
+           sodipodi:cx="374.25"
+           sodipodi:cy="464.11218"
+           sodipodi:rx="8.25"
+           sodipodi:ry="2.75"
+           d="m 382.5,464.11218 a 8.25,2.75 0 0 1 -8.25,2.75 8.25,2.75 0 0 1 -8.25,-2.75 8.25,2.75 0 0 1 
8.25,-2.75 8.25,2.75 0 0 1 8.25,2.75 z"
+           transform="matrix(1.3594635,0,0,1,-133.77921,1)" />
+        <path
+           
style="fill:url(#linearGradient3911);fill-opacity:1;stroke:#0b832d;stroke-width:1;stroke-miterlimit:4;stroke-opacity:0.96862745;stroke-dasharray:none"
+           d="m 375,432.9663 c -5.14414,0 -9.3143,4.17016 -9.3143,9.31432 0,1.76829 0.91939,4.12348 
1.34724,4.82763 0.42786,0.70414 7.79657,17.16494 7.79657,17.16494 0,0 7.58026,-16.29039 8.03775,-17.01109 
0.45749,-0.7207 1.44704,-3.14782 1.44704,-4.98148 0,-5.14416 -4.17016,-9.31432 -9.3143,-9.31432 z"
+           id="path2985"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="sszczss" />
+        <path
+           sodipodi:nodetypes="sszczss"
+           inkscape:connector-curvature="0"
+           id="path3775"
+           d="m 375,434.00353 c -4.50028,0 -8.14847,3.69949 -8.14847,8.26307 0,1.56873 0.80432,3.6581 
1.17861,4.28277 0.3743,0.62468 6.82071,15.22767 6.82071,15.22767 0,0 6.63148,-14.45182 7.03171,-15.09118 
0.40022,-0.63936 1.26591,-2.79256 1.26591,-4.41926 0,-4.56358 -3.64819,-8.26307 -8.14847,-8.26307 z"
+           
style="fill:none;stroke:#69a3f2;stroke-width:1.03512061;stroke-miterlimit:4;stroke-opacity:0.96862745;stroke-dasharray:none"
 />
+        <path
+           transform="matrix(0.23144871,0,0,0.23144871,286.76018,350.69905)"
+           d="m 400,396.11218 a 18.75,18.75 0 0 1 -18.75,18.75 18.75,18.75 0 0 1 -18.75,-18.75 18.75,18.75 0 
0 1 18.75,-18.75 18.75,18.75 0 0 1 18.75,18.75 z"
+           sodipodi:ry="18.75"
+           sodipodi:rx="18.75"
+           sodipodi:cy="396.11218"
+           sodipodi:cx="381.25"
+           id="path3783"
+           
style="fill:#ffffff;fill-opacity:1;stroke:#5e9cf1;stroke-width:4.32061148;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.96862745;stroke-dasharray:none;stroke-dashoffset:0.7"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           
style="fill:#ffffff;fill-opacity:1;stroke:#0b832d;stroke-width:6.2157526;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.96862745;stroke-dasharray:none;stroke-dashoffset:0.7"
+           id="path3779"
+           sodipodi:cx="381.25"
+           sodipodi:cy="396.11218"
+           sodipodi:rx="18.75"
+           sodipodi:ry="18.75"
+           d="m 400,396.11218 a 18.75,18.75 0 0 1 -18.75,18.75 18.75,18.75 0 0 1 -18.75,-18.75 18.75,18.75 0 
0 1 18.75,-18.75 18.75,18.75 0 0 1 18.75,18.75 z"
+           transform="matrix(0.17705667,0,0,0.17705667,307.49715,372.2444)" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/data/icons/hicolor/scalable/actions/gps-markers-many-highlighted.svg 
b/data/icons/hicolor/scalable/actions/gps-markers-many-highlighted.svg
new file mode 100644
index 00000000..99a0b32c
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/gps-markers-many-highlighted.svg
@@ -0,0 +1,510 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="28.74"
+   height="38.98"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="gps-markers-many-highlighted.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4829">
+      <stop
+         id="stop4831"
+         offset="0"
+         style="stop-color:#23ff38;stop-opacity:1" />
+      <stop
+         id="stop4833"
+         offset="1"
+         style="stop-color:#124cd1;stop-opacity:0.92490119;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4823">
+      <stop
+         id="stop4825"
+         offset="0"
+         style="stop-color:#23ff38;stop-opacity:1" />
+      <stop
+         id="stop4827"
+         offset="1"
+         style="stop-color:#124cd1;stop-opacity:0.92490119;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4817">
+      <stop
+         id="stop4819"
+         offset="0"
+         style="stop-color:#23ff38;stop-opacity:1" />
+      <stop
+         id="stop4821"
+         offset="1"
+         style="stop-color:#124cd1;stop-opacity:0.92490119;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3887">
+      <stop
+         id="stop3889"
+         offset="0"
+         style="stop-color:#ff573f;stop-opacity:1;" />
+      <stop
+         id="stop3891"
+         offset="1"
+         style="stop-color:#b71111;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3857">
+      <stop
+         style="stop-color:#87b5f5;stop-opacity:1;"
+         offset="0"
+         id="stop3859" />
+      <stop
+         style="stop-color:#87b5f5;stop-opacity:0;"
+         offset="1"
+         id="stop3861" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3849">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3851" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3853" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3827">
+      <stop
+         id="stop3829"
+         offset="0"
+         style="stop-color:#50a9ff;stop-opacity:1;" />
+      <stop
+         id="stop3831"
+         offset="1"
+         style="stop-color:#0034a9;stop-opacity:0.92490119;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3821">
+      <stop
+         id="stop3823"
+         offset="0"
+         style="stop-color:#60aaf1;stop-opacity:1;" />
+      <stop
+         id="stop3825"
+         offset="1"
+         style="stop-color:#124cd1;stop-opacity:0.92490119;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3787">
+      <stop
+         style="stop-color:#535353;stop-opacity:1;"
+         offset="0"
+         id="stop3789" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3791" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3765">
+      <stop
+         style="stop-color:#23b3ff;stop-opacity:1;"
+         offset="0"
+         id="stop3767" />
+      <stop
+         style="stop-color:#124cd1;stop-opacity:0.92490119;"
+         offset="1"
+         id="stop3769" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3771"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,324.43662,388.73998)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3793"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter3803"
+       x="-0.096096098"
+       width="1.1921922"
+       y="-0.2882883"
+       height="1.5765766"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.66066066"
+         id="feGaussianBlur3805" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3843"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3845"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,394.43662,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3849"
+       id="linearGradient3855"
+       x1="461.5"
+       y1="477.36218"
+       x2="462.5"
+       y2="434.36218"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3857"
+       id="linearGradient3863"
+       x1="444.95898"
+       y1="433.89029"
+       x2="444.95898"
+       y2="454.77341"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3849"
+       id="linearGradient3871"
+       x1="382.17749"
+       y1="377.47879"
+       x2="382.17749"
+       y2="414.47479"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3887"
+       id="linearGradient3885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,270.34295,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3925"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3927"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,324.43662,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3941"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3765"
+       id="linearGradient3943"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,324.43662,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3945"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4817"
+       id="linearGradient3947"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,270.34295,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3506"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4829"
+       id="linearGradient3508"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,270.34295,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3787"
+       id="radialGradient3522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.33333333,0,309.40812)"
+       cx="374.25"
+       cy="464.11218"
+       fx="374.25"
+       fy="464.11218"
+       r="8.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4823"
+       id="linearGradient3524"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13306152,0,0,0.13306152,270.34295,388.73998)"
+       x1="381.42856"
+       y1="335.09586"
+       x2="381.42856"
+       y2="567.15851" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.313708"
+     inkscape:cx="-17.408784"
+     inkscape:cy="24.266563"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:snap-global="false"
+     fit-margin-left="1"
+     units="px"
+     fit-margin-top="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:window-width="1440"
+     inkscape:window-height="836"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2987"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-306.53522px"
+       originy="-506.68905px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+        <cc:license
+           rdf:resource="" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-306.53522,-506.69183)">
+    <g
+       id="g3035"
+       transform="translate(0,75.224057)">
+      <ellipse
+         ry="2.75"
+         rx="8.25"
+         cy="464.11218"
+         cx="374.25"
+         
style="opacity:0.58662612;fill:url(#radialGradient3945);fill-opacity:1;stroke:#none;filter:url(#filter3803)"
+         id="path3873"
+         transform="matrix(1.3594635,0,0,1,-187.87288,1)" />
+      <path
+         
style="fill:url(#linearGradient3947);fill-opacity:1;stroke:#0b832d;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.96862745"
+         d="m 320.90633,432.9663 c -5.14414,0 -9.3143,4.17016 -9.3143,9.31432 0,1.76829 0.91939,4.12348 
1.34724,4.82763 0.42786,0.70414 7.79657,17.16494 7.79657,17.16494 0,0 7.58026,-16.29039 8.03775,-17.01109 
0.45749,-0.7207 1.44704,-3.14782 1.44704,-4.98148 0,-5.14416 -4.17016,-9.31432 -9.3143,-9.31432 z"
+         id="path3875"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="sszczss" />
+      <path
+         sodipodi:nodetypes="sszczss"
+         inkscape:connector-curvature="0"
+         id="path3877"
+         d="m 320.90633,434.00353 c -4.50028,0 -8.14847,3.69949 -8.14847,8.26307 0,1.56873 0.80432,3.6581 
1.17861,4.28277 0.3743,0.62468 6.82071,15.22767 6.82071,15.22767 0,0 6.63148,-14.45182 7.03171,-15.09118 
0.40022,-0.63936 1.26591,-2.79256 1.26591,-4.41926 0,-4.56358 -3.64819,-8.26307 -8.14847,-8.26307 z"
+         
style="fill:none;stroke:#5e9cf1;stroke-width:1.03512061;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <circle
+         r="18.75"
+         cy="396.11218"
+         cx="381.25"
+         transform="matrix(0.23144871,0,0,0.23144871,232.66651,350.69905)"
+         id="path3879"
+         
style="fill:#ffffff;fill-opacity:1;stroke:#5e9cf1;stroke-width:4.32061148;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999999;stroke-opacity:1"
 />
+      <circle
+         r="18.75"
+         cy="396.11218"
+         cx="381.25"
+         
style="fill:#ffffff;fill-opacity:1;stroke:#0b832d;stroke-width:6.2157526;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999999;stroke-opacity:0.96862745"
+         id="path3881"
+         transform="matrix(0.17705667,0,0,0.17705667,253.40348,372.2444)" />
+    </g>
+    <g
+       transform="matrix(0.62943981,0,0,0.62943981,124.11992,251.22885)"
+       id="g3494">
+      <ellipse
+         transform="matrix(1.3594635,0,0,1,-187.87288,1)"
+         id="ellipse3496"
+         
style="opacity:0.58662612;fill:url(#radialGradient3506);fill-opacity:1;stroke:#none;filter:url(#filter3803)"
+         cx="374.25"
+         cy="464.11218"
+         rx="8.25"
+         ry="2.75" />
+      <path
+         sodipodi:nodetypes="sszczss"
+         inkscape:connector-curvature="0"
+         id="path3498"
+         d="m 320.90633,432.9663 c -5.14414,0 -9.3143,4.17016 -9.3143,9.31432 0,1.76829 0.91939,4.12348 
1.34724,4.82763 0.42786,0.70414 7.79657,17.16494 7.79657,17.16494 0,0 7.58026,-16.29039 8.03775,-17.01109 
0.45749,-0.7207 1.44704,-3.14782 1.44704,-4.98148 0,-5.14416 -4.17016,-9.31432 -9.3143,-9.31432 z"
+         
style="fill:url(#linearGradient3508);fill-opacity:1;stroke:#0b832d;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.96862745"
 />
+      <path
+         
style="fill:none;stroke:#5e9cf1;stroke-width:1.03512061;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="m 320.90633,434.00353 c -4.50028,0 -8.14847,3.69949 -8.14847,8.26307 0,1.56873 0.80432,3.6581 
1.17861,4.28277 0.3743,0.62468 6.82071,15.22767 6.82071,15.22767 0,0 6.63148,-14.45182 7.03171,-15.09118 
0.40022,-0.63936 1.26591,-2.79256 1.26591,-4.41926 0,-4.56358 -3.64819,-8.26307 -8.14847,-8.26307 z"
+         id="path3500"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="sszczss" />
+      <circle
+         
style="fill:#ffffff;fill-opacity:1;stroke:#5e9cf1;stroke-width:4.32061148;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999999;stroke-opacity:1"
+         id="circle3502"
+         transform="matrix(0.23144871,0,0,0.23144871,232.66651,350.69905)"
+         cx="381.25"
+         cy="396.11218"
+         r="18.75" />
+      <circle
+         transform="matrix(0.17705667,0,0,0.17705667,253.40348,372.2444)"
+         id="circle3504"
+         
style="fill:#ffffff;fill-opacity:1;stroke:#0b832d;stroke-width:6.2157526;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999999;stroke-opacity:0.96862745"
+         cx="381.25"
+         cy="396.11218"
+         r="18.75" />
+    </g>
+    <g
+       id="g3510"
+       transform="matrix(0.62943981,0,0,0.62943981,113.99492,248.22885)">
+      <ellipse
+         ry="2.75"
+         rx="8.25"
+         cy="464.11218"
+         cx="374.25"
+         
style="opacity:0.58662612;fill:url(#radialGradient3522);fill-opacity:1;stroke:#none;filter:url(#filter3803)"
+         id="ellipse3512"
+         transform="matrix(1.3594635,0,0,1,-187.87288,1)" />
+      <path
+         
style="fill:url(#linearGradient3524);fill-opacity:1;stroke:#0b832d;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.96862745"
+         d="m 320.90633,432.9663 c -5.14414,0 -9.3143,4.17016 -9.3143,9.31432 0,1.76829 0.91939,4.12348 
1.34724,4.82763 0.42786,0.70414 7.79657,17.16494 7.79657,17.16494 0,0 7.58026,-16.29039 8.03775,-17.01109 
0.45749,-0.7207 1.44704,-3.14782 1.44704,-4.98148 0,-5.14416 -4.17016,-9.31432 -9.3143,-9.31432 z"
+         id="path3514"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="sszczss" />
+      <path
+         sodipodi:nodetypes="sszczss"
+         inkscape:connector-curvature="0"
+         id="path3516"
+         d="m 320.90633,434.00353 c -4.50028,0 -8.14847,3.69949 -8.14847,8.26307 0,1.56873 0.80432,3.6581 
1.17861,4.28277 0.3743,0.62468 6.82071,15.22767 6.82071,15.22767 0,0 6.63148,-14.45182 7.03171,-15.09118 
0.40022,-0.63936 1.26591,-2.79256 1.26591,-4.41926 0,-4.56358 -3.64819,-8.26307 -8.14847,-8.26307 z"
+         
style="fill:none;stroke:#5e9cf1;stroke-width:1.03512061;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 />
+      <circle
+         r="18.75"
+         cy="396.11218"
+         cx="381.25"
+         transform="matrix(0.23144871,0,0,0.23144871,232.66651,350.69905)"
+         id="circle3518"
+         
style="fill:#ffffff;fill-opacity:1;stroke:#5e9cf1;stroke-width:4.32061148;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999999;stroke-opacity:1"
 />
+      <circle
+         r="18.75"
+         cy="396.11218"
+         cx="381.25"
+         
style="fill:#ffffff;fill-opacity:1;stroke:#0b832d;stroke-width:6.2157526;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999999;stroke-opacity:0.96862745"
+         id="circle3520"
+         transform="matrix(0.17705667,0,0,0.17705667,253.40348,372.2444)" />
+    </g>
+  </g>
+</svg>
diff --git a/src/MapWidget.vala b/src/MapWidget.vala
index 3c314eb0..2785ac43 100644
--- a/src/MapWidget.vala
+++ b/src/MapWidget.vala
@@ -4,16 +4,43 @@
  * See the COPYING file in this distribution.
  */
 
+private class MarkerImageSet {
+    public float marker_image_width;
+    public float marker_image_height;
+    public Clutter.Image? marker_image;
+    public Clutter.Image? marker_selected_image;
+    public Clutter.Image? marker_highlighted_image;
+}
+
 private abstract class PositionMarker : Object {
+    protected bool _highlighted = false;
     protected bool _selected = false;
+    protected MarkerImageSet image_set;
+
+    protected PositionMarker(Champlain.Marker champlain_marker, MarkerImageSet image_set) {
+        this.champlain_marker = champlain_marker;
+        this.image_set = image_set;
+        champlain_marker.selectable = true;
+        champlain_marker.set_content(image_set.marker_image);
+        float w = image_set.marker_image_width;
+        float h = image_set.marker_image_height;
+        champlain_marker.set_size(w, h);
+        champlain_marker.set_translation(-w * MapWidget.MARKER_IMAGE_HORIZONTAL_PIN_RATIO,
+                                         -h * MapWidget.MARKER_IMAGE_VERTICAL_PIN_RATIO, 0);
+    }
 
     public Champlain.Marker champlain_marker { get; protected set; }
 
     public bool highlighted {
-        get { return champlain_marker.get_selected(); }
+        get {
+            return _highlighted;
+        }
         set {
-            if (value || !_selected)
-                champlain_marker.set_selected(value);
+            if (_highlighted == value)
+                return;
+            _highlighted = value;
+            var base_image = _selected ? image_set.marker_selected_image : image_set.marker_image;
+            champlain_marker.set_content(value ? image_set.marker_highlighted_image : base_image);
         }
     }
     public bool selected {
@@ -21,44 +48,47 @@ private abstract class PositionMarker : Object {
             return _selected;
         }
         set {
+            if (_selected == value)
+                return;
             _selected = value;
+            if (!_highlighted) {
+                var base_image = value ?  image_set.marker_selected_image : image_set.marker_image;
+                champlain_marker.set_content(base_image);
+            }
             champlain_marker.set_selected(value);
         }
     }
 }
 
 private class DataViewPositionMarker : PositionMarker {
-    private Gee.LinkedList<weak DataViewPositionMarker> _data_view_position_markers = new 
Gee.LinkedList<weak DataViewPositionMarker>();
+    private Gee.LinkedList<weak DataViewPositionMarker> _data_view_position_markers =
+            new Gee.LinkedList<weak DataViewPositionMarker>();
 
-    // Geo lookup
-    // public string location_country { get; set; }
-    // public string location_city { get; set; }
     public weak DataView view { get; protected set; }
 
-    public DataViewPositionMarker(DataView view, Champlain.Marker champlain_marker) {
+    public DataViewPositionMarker(DataView view, Champlain.Marker champlain_marker,
+            MarkerImageSet image_set) {
+        base(champlain_marker, image_set);
         this.view = view;
-        champlain_marker.selectable = true;
+
         this._data_view_position_markers.add(this);
-        this.champlain_marker = champlain_marker;
     }
 
     public void bind_mouse_events(MapWidget map_widget) {
         champlain_marker.button_release_event.connect ((event) => {
-            if (event.button > 1 || _selected)
+            if (event.button > 1)
                 return true;
-            champlain_marker.selected = true;
+            selected = true;
             map_widget.select_data_views(_data_view_position_markers);
             return true;
         });
         champlain_marker.enter_event.connect ((event) => {
-            if (!_selected)
-                champlain_marker.selected = true;
+            highlighted = true;
             map_widget.highlight_data_views(_data_view_position_markers);
             return true;
         });
         champlain_marker.leave_event.connect ((event) => {
-            if (!_selected)
-                champlain_marker.selected = false;
+            highlighted = false;
             map_widget.unhighlight_data_views(_data_view_position_markers);
             return true;
         });
@@ -73,21 +103,22 @@ private class MarkerGroup : PositionMarker {
 
     public void bind_mouse_events(MapWidget map_widget) {
         champlain_marker.button_release_event.connect ((event) => {
-            if (event.button > 1 || _selected)
+            if (event.button > 1)
                 return true;
-            champlain_marker.selected = true;
+            selected = true;
+            foreach (var m in _data_view_position_markers) {
+                m.selected = true;
+            }
             map_widget.select_data_views(_data_view_position_markers.read_only_view);
             return true;
         });
         champlain_marker.enter_event.connect ((event) => {
-            if (!_selected)
-                champlain_marker.selected = true;
+            highlighted = true;
             map_widget.highlight_data_views(_data_view_position_markers.read_only_view);
             return true;
         });
         champlain_marker.leave_event.connect ((event) => {
-            if (!_selected)
-                champlain_marker.selected = false;
+            highlighted = false;
             map_widget.unhighlight_data_views(_data_view_position_markers.read_only_view);
             return true;
         });
@@ -97,9 +128,8 @@ private class MarkerGroup : PositionMarker {
         owned get { return _position_markers.read_only_view; }
     }
 
-    public MarkerGroup(Champlain.Marker champlain_marker) {
-        champlain_marker.selectable = true;
-        this.champlain_marker = champlain_marker;
+    public MarkerGroup(Champlain.Marker champlain_marker, MarkerImageSet image_set) {
+        base(champlain_marker, image_set);
     }
 
     public void add_position_marker(PositionMarker marker) {
@@ -160,6 +190,14 @@ private class MarkerGroupRaster : Object {
         }
     }
 
+    public void clear_selection() {
+        lock (position_markers) {
+            foreach (PositionMarker m in position_markers) {
+                m.selected = false;
+            }
+        }
+    }
+
     public unowned PositionMarker? find_position_marker(DataView data_view) {
         if (!data_view_map.has_key(data_view))
             return null;
@@ -203,6 +241,8 @@ private class MarkerGroupRaster : Object {
                     };
                     marker_group = map_widget.create_marker_group(rasterized_gps_coords);
                     marker_group.add_position_marker(cell);
+                    if (cell.selected) // group becomes selected if any contained marker is
+                        marker_group.selected = true;
                     if (cell is DataViewPositionMarker)
                         data_view_map.set(((DataViewPositionMarker) cell).view, marker_group);
                     yg.set(y, marker_group);
@@ -271,16 +311,10 @@ private class MapWidget : Gtk.Bin {
 
     public const float MARKER_IMAGE_HORIZONTAL_PIN_RATIO = 0.5f;
     public const float MARKER_IMAGE_VERTICAL_PIN_RATIO = 0.825f;
-    public float marker_image_width { get; private set; }
-    public float marker_image_height { get; private set; }
-    public float marker_group_image_width { get; private set; }
-    public float marker_group_image_height { get; private set; }
     public float map_edit_lock_image_width { get; private set; }
     public float map_edit_lock_image_height { get; private set; }
-    public Clutter.Image? marker_image { get; private set; }
-    public Clutter.Image? marker_selected_image { get; private set; }
-    public Clutter.Image? marker_group_image { get; private set; }
-    public Clutter.Image? marker_group_selected_image { get; private set; }
+    public MarkerImageSet marker_image_set { get; private set; }
+    public MarkerImageSet marker_group_image_set { get; private set; }
     public const Clutter.Color marker_point_color = { 10, 10, 255, 192 };
 
     public signal void zoom_changed();
@@ -319,9 +353,39 @@ private class MapWidget : Gtk.Bin {
     }
 
     public void set_page(Page page) {
+        bool page_changed = false;
         if (this.page != page) {
             this.page = page;
+            page_changed = true;
+            clear();
+        }
+        ViewCollection view_collection = page.get_view();
+        if (view_collection == null)
+            return;
+
+        if (page_changed) {
             data_view_marker_cache.clear();
+            foreach (DataObject view in view_collection.get_all()) {
+                if (view is DataView)
+                    add_data_view((DataView) view);
+            }
+            show_position_markers();
+        }
+        // In any case, the selection did change..
+        var selected = view_collection.get_selected();
+        if (selected != null) {
+            marker_group_raster.clear_selection();
+            foreach (DataView v in view_collection.get_selected()) {
+
+                var position_marker = marker_group_raster.find_position_marker(v);
+                if (position_marker != null)
+                    position_marker.selected = true;
+                if (position_marker is MarkerGroup) {
+                    DataViewPositionMarker? m = data_view_marker_cache.get(v);
+                    if (m != null)
+                        m.selected = true;
+                }
+            }
         }
     }
 
@@ -538,18 +602,26 @@ private class MapWidget : Gtk.Bin {
 
         // Load icons
         float w, h;
-        marker_image = Resources.get_icon_as_clutter_image(
+        marker_image_set = new MarkerImageSet();
+        marker_group_image_set = new MarkerImageSet();
+        marker_image_set.marker_image = Resources.get_icon_as_clutter_image(
                 Resources.ICON_GPS_MARKER, out w, out h);
-        marker_image_width = w;
-        marker_image_height = h;
-        marker_selected_image = Resources.get_icon_as_clutter_image(
+        marker_image_set.marker_image_width = w;
+        marker_image_set.marker_image_height = h;
+        marker_image_set.marker_selected_image = Resources.get_icon_as_clutter_image(
                 Resources.ICON_GPS_MARKER_SELECTED, out w, out h);
-        marker_group_image = Resources.get_icon_as_clutter_image(
+        marker_image_set.marker_highlighted_image = Resources.get_icon_as_clutter_image(
+                Resources.ICON_GPS_MARKER_HIGHLIGHTED, out w, out h);
+
+        marker_group_image_set.marker_image = Resources.get_icon_as_clutter_image(
                 Resources.ICON_GPS_GROUP_MARKER, out w, out h);
-        marker_group_image_width = w;
-        marker_group_image_height = h;
-        marker_group_selected_image = Resources.get_icon_as_clutter_image(
+        marker_group_image_set.marker_image_width = w;
+        marker_group_image_set.marker_image_height = h;
+        marker_group_image_set.marker_selected_image = Resources.get_icon_as_clutter_image(
                 Resources.ICON_GPS_GROUP_MARKER_SELECTED, out w, out h);
+        marker_group_image_set.marker_highlighted_image = Resources.get_icon_as_clutter_image(
+                Resources.ICON_GPS_GROUP_MARKER_HIGHLIGHTED, out w, out h);
+
         map_edit_locked_image = Resources.get_icon_as_clutter_image(
                 Resources.ICON_MAP_EDIT_LOCKED, out w, out h);
         map_edit_unlocked_image = Resources.get_icon_as_clutter_image(
@@ -565,26 +637,11 @@ private class MapWidget : Gtk.Bin {
         }
     }
 
-    private Champlain.Marker create_champlain_marker(GpsCoords gps_coords, Clutter.Image? marker_image,
-                                                     Clutter.Image? marker_selected_image,
-                                                     float marker_image_width, float marker_image_height) {
+    private Champlain.Marker create_champlain_marker(GpsCoords gps_coords) {
         assert(gps_coords.has_gps > 0);
+
         Champlain.Marker champlain_marker;
-        if (marker_image == null) {
-            // Fall back to the generic champlain marker
-            champlain_marker = new Champlain.Point.full(12, marker_point_color);
-        } else {
-            champlain_marker = new Champlain.Marker();
-            champlain_marker.set_content(marker_image);
-            champlain_marker.set_size(marker_image_width, marker_image_height);
-            champlain_marker.set_translation(-marker_image_width * MARKER_IMAGE_HORIZONTAL_PIN_RATIO,
-                                             -marker_image_height * MARKER_IMAGE_VERTICAL_PIN_RATIO, 0);
-            champlain_marker.notify.connect((o, p) => {
-                Champlain.Marker? m = o as Champlain.Marker;
-                if (p.name == "selected")
-                    m.set_content(m.selected ? marker_selected_image : marker_image);
-            });
-        }
+        champlain_marker = new Champlain.Marker();
         champlain_marker.set_pivot_point(0.5f, 0.5f); // set center of marker
         champlain_marker.set_location(gps_coords.latitude, gps_coords.longitude);
         return champlain_marker;
@@ -597,18 +654,16 @@ private class MapWidget : Gtk.Bin {
         DataSource data_source = view.get_source();
         Positionable p = (Positionable) data_source;
         GpsCoords gps_coords = p.get_gps_coords();
-        Champlain.Marker champlain_marker = create_champlain_marker(gps_coords, marker_image,
-            marker_selected_image, marker_image_width, marker_image_height);
-        position_marker = new DataViewPositionMarker(view, champlain_marker);
+        Champlain.Marker champlain_marker = create_champlain_marker(gps_coords);
+        position_marker = new DataViewPositionMarker(view, champlain_marker, marker_image_set);
         position_marker.bind_mouse_events(this);
         data_view_marker_cache.set(view, position_marker);
         return (owned) position_marker;
     }
 
     internal MarkerGroup create_marker_group(GpsCoords gps_coords) {
-        Champlain.Marker champlain_marker = create_champlain_marker(gps_coords, marker_group_image,
-            marker_group_selected_image, marker_group_image_width, marker_group_image_height);
-        var g = new MarkerGroup(champlain_marker);
+        Champlain.Marker champlain_marker = create_champlain_marker(gps_coords);
+        var g = new MarkerGroup(champlain_marker, marker_group_image_set);
         g.bind_mouse_events(this);
         return (owned) g;
     }
diff --git a/src/Properties.vala b/src/Properties.vala
index 09ccd46c..7c2083d9 100644
--- a/src/Properties.vala
+++ b/src/Properties.vala
@@ -197,7 +197,6 @@ private class BasicProperties : Properties {
         clip_duration = 0.0;
         raw_developer = "";
         raw_assoc = "";
-        map_widget.clear();
     }
 
     protected override void get_single_properties(DataView view) {
@@ -268,8 +267,6 @@ private class BasicProperties : Properties {
             }
             end_time = start_time;
         }
-        map_widget.add_data_view(view);
-
     }
 
     protected override void get_multiple_properties(Gee.Iterable<DataView>? iter) {
@@ -334,14 +331,12 @@ private class BasicProperties : Properties {
 
                 video_count++;
             }
-            map_widget.add_data_view(view);
         }
     }
 
     protected override void get_properties(Page current_page) {
         base.get_properties(current_page);
 
-        map_widget.set_page(current_page);
         if (end_time == 0)
             end_time = start_time;
         if (start_time == 0)
@@ -468,7 +463,7 @@ private class BasicProperties : Properties {
             }
         }
 
-        map_widget.show_position_markers();
+        map_widget.set_page(page);
     }
 }
 
diff --git a/src/Resources.vala b/src/Resources.vala
index 5f324b2a..0bc5bd8b 100644
--- a/src/Resources.vala
+++ b/src/Resources.vala
@@ -83,8 +83,10 @@ along with Shotwell; if not, write to the Free Software Foundation, Inc.,
     public const int ICON_FILTER_UNRATED_OR_BETTER_FIXED_SIZE = 16;
     public const int ICON_ZOOM_SCALE = 16;
     public const string ICON_GPS_MARKER = "gps-marker.svg";
+    public const string ICON_GPS_MARKER_HIGHLIGHTED = "gps-marker-highlighted.svg";
     public const string ICON_GPS_MARKER_SELECTED = "gps-marker-selected.svg";
     public const string ICON_GPS_GROUP_MARKER = "gps-markers-many.svg";
+    public const string ICON_GPS_GROUP_MARKER_HIGHLIGHTED = "gps-markers-many-highlighted.svg";
     public const string ICON_GPS_GROUP_MARKER_SELECTED = "gps-markers-many-selected.svg";
     public const string ICON_MAP_EDIT_LOCKED = "map-edit-locked.svg";
     public const string ICON_MAP_EDIT_UNLOCKED = "map-edit-unlocked.svg";


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]