[gnome-maps] placeBubble: Use icons instead of labels



commit 8be56ef470485c2593e32a1b1097723d34132b31
Author: James Westman <james flyingpimonster net>
Date:   Fri Aug 7 18:43:29 2020 -0500

    placeBubble: Use icons instead of labels
    
    - Remove the "extended content" button. All data is shown.
    - Use icons instead of labels. This makes it look nicer and makes it easier to
    find the information you're looking for.
    - Improve margins, alignment, etc. around the rows.
    - Improve the strings for a couple tags. Instead of "Toilets: Yes", for example,
    we now have "Toilets available". Same with wheelchair and internet_access.
    - Some minor code cleanup.

 .../hicolor/16x16/apps/map-marker-symbolic.svg     |  74 +++++
 .../hicolor/16x16/apps/mountain-symbolic.svg       |   5 +
 .../hicolor/16x16/apps/no-toilets-symbolic.svg     |  44 +++
 .../hicolor/16x16/apps/no-wheelchair-symbolic.svg  |  43 +++
 .../16x16/apps/phone-oldschool-symbolic.svg        |  41 +++
 .../hicolor/16x16/apps/toilets-symbolic.svg        |  47 +++
 .../16x16/apps/wheelchair-limited-symbolic.svg     |  44 +++
 .../hicolor/16x16/apps/wheelchair-symbolic.svg     |   8 +
 data/ui/place-bubble.ui                            |  78 +----
 src/place.js                                       |  53 ----
 src/placeBubble.js                                 | 325 +++++++++++++--------
 src/translations.js                                |  45 ---
 12 files changed, 524 insertions(+), 283 deletions(-)
---
diff --git a/data/icons/private/hicolor/16x16/apps/map-marker-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/map-marker-symbolic.svg
new file mode 100644
index 00000000..4d5a6b17
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/map-marker-symbolic.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb";
+   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";
+   width="16"
+   viewBox="0 0 16 16"
+   version="1.1"
+   id="svg7384"
+   height="16">
+  <metadata
+     id="metadata90">
+    <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>Gnome Symbolic Icon Theme</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <title
+     id="title9167">Gnome Symbolic Icon Theme</title>
+  <defs
+     id="defs7386">
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient7212">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop7214" />
+    </linearGradient>
+  </defs>
+  <g
+     transform="translate(-380.00852,79.9875)"
+     style="display:inline"
+     id="layer1" />
+  <g
+     transform="translate(-621.00872,446.9875)"
+     style="display:inline"
+     id="layer9" />
+  <g
+     transform="translate(-621.00872,446.9875)"
+     style="display:inline"
+     id="g7628" />
+  <g
+     transform="translate(-380.00852,-120.0125)"
+     id="layer13">
+    <path
+       d="m 388.00867,121.00914 c -2.76142,0 -5,2.23858 -5,5 0,0.17259 0.0142,0.33191 0.0312,0.5 
0.0137,0.16725 0.0358,0.33617 0.0625,0.5 0.57248,3.51444 2.9063,6.00336 4.9063,8.00336 2,-2 4.33372,-4.48892 
4.9062,-8.00336 0.0267,-0.16383 0.0488,-0.33275 0.0625,-0.5 0.0171,-0.16809 0.0312,-0.32741 0.0312,-0.5 
0,-2.76142 -2.23858,-5 -5,-5 z m 0,3 c 1.10457,0 2,0.89543 2,2 0,1.10457 -0.89543,2 -2,2 -1.10457,0 
-2,-0.89543 -2,-2 0,-1.10457 0.89543,-2 2,-2 z"
+       id="path5874-9"
+       
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
 />
+  </g>
+  <g
+     transform="translate(-380.00852,79.9875)"
+     style="display:inline"
+     id="g6387" />
+  <g
+     transform="translate(-380.00852,79.9875)"
+     style="display:inline"
+     id="layer10" />
+  <g
+     transform="translate(-380.00852,79.9875)"
+     id="layer12" />
+  <g
+     transform="translate(-380.00852,79.9875)"
+     style="display:inline"
+     id="layer11" />
+</svg>
diff --git a/data/icons/private/hicolor/16x16/apps/mountain-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/mountain-symbolic.svg
new file mode 100644
index 00000000..ab3daf84
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/mountain-symbolic.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="16" height="16">
+    <g fill="#2e3436">
+        <path d="M0 14h10.286L4.747 5.297zM8.933 2.766L6.857 6.57 11.571 14H16z" style="marker:none"/>
+    </g>
+</svg>
diff --git a/data/icons/private/hicolor/16x16/apps/no-toilets-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/no-toilets-symbolic.svg
new file mode 100644
index 00000000..de9a2668
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/no-toilets-symbolic.svg
@@ -0,0 +1,44 @@
+<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' 
sodipodi:docname='no-toilets-symbolic.svg' height='16' id='svg7384' 
xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' 
xmlns:osb='http://www.openswatchbook.org/uri/2009/osb' 
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' 
inkscape:version='1.0 (4035a4fb49, 2020-05-01)' version='1.1' viewBox='0 0 16.010088 16' width='16.010088' 
xmlns='http://www.w3.org/2000/svg'>
+  <metadata id='metadata90'>
+    <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>Gnome Symbolic Icon Theme</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='true' bordercolor='#666666' 
borderopacity='1' inkscape:current-layer='layer13' inkscape:cx='-487.48695' inkscape:cy='343.73006' 
inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' 
id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='56,310.597' inkscape:object-nodes='true' 
inkscape:object-paths='true' objecttolerance='10' pagecolor='#ebebeb' inkscape:pageopacity='1' 
inkscape:pageshadow='2' showborder='false' showgrid='true' showguides='false' inkscape:snap-bbox='true' 
inkscape:snap-bbox-edge-midpoints='true' inkscape:snap-bbox-midpoints='true' inkscape:snap-global='true' 
inkscape:snap-grids='true' inkscape:snap-intersection-paths='true' inkscape:snap-nodes='true' 
inkscape:snap-others='false' inkscape:snap-to-guides='true' inkscape:window-height='1205' 
inkscape:window-maximized='0' inkscape:window-width='1558' inkscape:window-x='26' inkscape:window-y='23' 
 inkscape:zoom='16'>
+    <inkscape:grid empspacing='4' enabled='true' id='grid4866' originx='-680' originy='-100' 
snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/>
+    <inkscape:grid dotted='true' empspacing='4' id='grid2980' originx='-680' originy='-100' spacingx='0.5' 
spacingy='0.5' type='xygrid'/>
+  </sodipodi:namedview>
+  <title id='title9167'>Gnome Symbolic Icon Theme</title>
+  <defs id='defs7386'>
+    <linearGradient id='linearGradient7212' osb:paint='solid'>
+      <stop id='stop7214' offset='0' style='stop-color:#000000;stop-opacity:1;'/>
+    </linearGradient>
+  </defs>
+  <g inkscape:groupmode='layer' id='layer1' inkscape:label='ui' style='display:inline' 
transform='translate(-680,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer21' inkscape:label='legacy' transform='translate(-680,-100)'/>
+  <g inkscape:groupmode='layer' id='layer9' inkscape:label='shapes' style='display:inline' 
transform='translate(-921.0002,467)'/>
+  <g inkscape:groupmode='layer' id='g7628' inkscape:label='other' style='display:inline' 
transform='translate(-921.0002,467)'/>
+  <g inkscape:groupmode='layer' id='layer19' inkscape:label='multimedia' transform='translate(-680,-100)'/>
+  <g inkscape:groupmode='layer' id='layer13' inkscape:label='maps' transform='translate(-680,-100)'>
+    <path d='m 686,102.04474 a 1.9999999,1.9999999 0 0 1 -2,2 1.9999999,1.9999999 0 0 1 -2,-2 
1.9999999,1.9999999 0 0 1 2,-2 1.9999999,1.9999999 0 0 1 2,2' id='circle5592' 
style='color:#000000;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.811746;marker:none;enable-background:accumulate'/>
+    <path d='m 695,102.04474 a 1.9999999,1.9999999 0 0 1 -2,2 1.9999999,1.9999999 0 0 1 -2,-2 
1.9999999,1.9999999 0 0 1 2,-2 1.9999999,1.9999999 0 0 1 2,2' id='circle5594' 
style='color:#000000;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.811746;marker:none;enable-background:accumulate'/>
+    
+    <path d='m 688,101 v 8.08594 l 1,1 V 101 Z m -4.08594,4 3.08594,3.08594 v -2.04688 C 687,105.46293 
686.53706,105 685.96094,105 Z m 8.09375,0 c -0.57612,0 -0.94683,0.47036 -1.03906,1.03906 l -0.83984,5.17578 
1.83789,1.83789 H 692 v 0.0332 l 1.70703,1.70703 a 1,1 0 0 1 0.084,0.0996 C 693.9152,114.79968 694,114.65755 
694,114.49023 v -1.4375 h 0.96094 c 0.57612,0 1.13126,-0.47036 1.03906,-1.03906 l -0.96875,-5.97461 C 
694.93902,105.47036 694.56831,105 693.99219,105 Z m -10.65429,0.26758 C 681.13938,105.45757 681,105.7286 
681,106.03906 v 4.42188 c 0,0.56222 0.44328,1.00959 1,1.03125 v 2.51562 c 0,0.54955 0.44264,0.99219 
0.99219,0.99219 h 2.01562 C 685.55736,115 686,114.55736 686,114.00781 v -2.51562 c 0.42311,-0.0165 
0.77851,-0.28057 0.92578,-0.65235 z M 688,111.91406 V 115 h 1 v -2.08594 z' id='rect5598' 
style='fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.683005;stroke-linecap:square;stop-color:#000000'/>
+    <path d='M 682.0293 101 A 1 1 0 0 0 681.29297 101.29297 A 1 1 0 0 0 681.29297 102.70703 L 693.29297 
114.70703 A 1 1 0 0 0 694.70703 114.70703 A 1 1 0 0 0 694.70703 113.29297 L 682.70703 101.29297 A 1 1 0 0 0 
682.0293 101 z ' id='path2282' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-mar
 
gin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1;opacity:1'/>
+  </g>
+  <g inkscape:groupmode='layer' id='layer11' inkscape:label='graphics' style='display:inline' 
transform='translate(-680,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer14' inkscape:label='food-drink' transform='translate(-680,-100)'/>
+  <g inkscape:groupmode='layer' id='g6387' inkscape:label='devices' style='display:inline' 
transform='translate(-680,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer18' inkscape:label='text' transform='translate(-680,-100)'/>
+  <g inkscape:groupmode='layer' id='layer17' inkscape:label='weather' transform='translate(-680,-100)'/>
+  <g inkscape:groupmode='layer' id='layer16' inkscape:label='camera' transform='translate(-680,-100)'/>
+  <g inkscape:groupmode='layer' id='layer10' inkscape:label='body' style='display:inline' 
transform='translate(-680,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer15' inkscape:label='animals' transform='translate(-680,-100)'/>
+  <g inkscape:groupmode='layer' id='layer12' inkscape:label='alert' transform='translate(-680,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer20' inkscape:label='accessibility' 
transform='translate(-680,-100)'/>
+</svg>
diff --git a/data/icons/private/hicolor/16x16/apps/no-wheelchair-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/no-wheelchair-symbolic.svg
new file mode 100644
index 00000000..46f6ddd1
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/no-wheelchair-symbolic.svg
@@ -0,0 +1,43 @@
+<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' 
sodipodi:docname='no-wheelchair-symbolic.svg' height='16' id='svg7384' 
xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' 
xmlns:osb='http://www.openswatchbook.org/uri/2009/osb' 
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' 
inkscape:version='1.0 (4035a4fb49, 2020-05-01)' version='1.1' viewBox='0 0 16 16' width='16' 
xmlns='http://www.w3.org/2000/svg'>
+  <metadata id='metadata90'>
+    <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>Gnome Symbolic Icon Theme</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='true' bordercolor='#666666' 
borderopacity='1' inkscape:current-layer='layer20' inkscape:cx='82.58603' inkscape:cy='21.619635' 
inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' 
id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='56,310.597' inkscape:object-nodes='true' 
inkscape:object-paths='true' objecttolerance='10' pagecolor='#ebebeb' inkscape:pageopacity='1' 
inkscape:pageshadow='2' showborder='false' showgrid='false' showguides='false' inkscape:snap-bbox='true' 
inkscape:snap-bbox-edge-midpoints='true' inkscape:snap-bbox-midpoints='true' inkscape:snap-global='true' 
inkscape:snap-grids='true' inkscape:snap-intersection-paths='true' inkscape:snap-nodes='true' 
inkscape:snap-others='false' inkscape:snap-to-guides='true' inkscape:window-height='1205' 
inkscape:window-maximized='0' inkscape:window-width='1558' inkscape:window-x='26' inkscape:window-y='23' i
 nkscape:zoom='8'>
+    <inkscape:grid empspacing='4' enabled='true' id='grid4866' originx='-320' originy='-60.011276' 
snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/>
+    <inkscape:grid dotted='true' empspacing='4' id='grid2980' originx='-320' originy='-60.011276' 
spacingx='0.5' spacingy='0.5' type='xygrid'/>
+  </sodipodi:namedview>
+  <title id='title9167'>Gnome Symbolic Icon Theme</title>
+  <defs id='defs7386'>
+    <linearGradient id='linearGradient7212' osb:paint='solid'>
+      <stop id='stop7214' offset='0' style='stop-color:#000000;stop-opacity:1;'/>
+    </linearGradient>
+  </defs>
+  <g inkscape:groupmode='layer' id='layer1' inkscape:label='ui' style='display:inline' 
transform='translate(-320,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer21' inkscape:label='legacy' transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer9' inkscape:label='shapes' style='display:inline' 
transform='translate(-561.0002,506.98872)'/>
+  <g inkscape:groupmode='layer' id='g7628' inkscape:label='other' style='display:inline' 
transform='translate(-561.0002,506.98872)'/>
+  <g inkscape:groupmode='layer' id='layer19' inkscape:label='multimedia' 
transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer13' inkscape:label='maps' transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer11' inkscape:label='graphics' style='display:inline' 
transform='translate(-320,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer14' inkscape:label='food-drink' 
transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='g6387' inkscape:label='devices' style='display:inline' 
transform='translate(-320,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer18' inkscape:label='text' transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer17' inkscape:label='weather' 
transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer16' inkscape:label='camera' transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer10' inkscape:label='body' style='display:inline' 
transform='translate(-320,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer15' inkscape:label='animals' 
transform='translate(-320,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer12' inkscape:label='alert' transform='translate(-320,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer20' inkscape:label='accessibility' 
transform='translate(-320,-60.011276)'>
+    
+    <path d='M 322.0293 61 A 1 1 0 0 0 321.29297 61.292969 A 1 1 0 0 0 321.29297 62.707031 L 333.29297 
74.707031 A 1 1 0 0 0 334.70703 74.707031 A 1 1 0 0 0 334.70703 73.292969 L 322.70703 61.292969 A 1 1 0 0 0 
322.0293 61 z ' id='path2259' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margi
 
n:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1;opacity:1'/>
+    <path d='m 325.95117,60.125 c -0.7546,0.01863 -1.43443,0.460522 -1.75781,1.142578 C 323.99013,61.45691 
323.8748,61.722241 323.875,62 v 0.5 c 2.8e-4,0.127168 0.0248,0.253116 0.0723,0.371094 l 4.06946,6.236495 c 
0.1517,0.379505 0.51904,0.628525 0.92773,0.628906 L 331.18164,71 l 2.04407,3.189545 c 0.14643,0.389846 
0.40785,0.81017 0.82429,0.810455 h 0.825 c 0.55228,0 1,-0.447715 1,-1 0,-0.552285 -0.44772,-1 -1,-1 h 
-0.80664 l -1.25781,-3.351562 C 332.66412,69.258592 332.29144,69.000285 331.875,69 h -3.32227 l -0.40039,-1 H 
331 c 0.55228,0 1,-0.447715 1,-1 0,-0.552285 -0.44772,-1 -1,-1 h -3.64844 l -0.7832,-1.958984 C 
327.41697,63.789489 327.99932,63.010098 328,62.125 c 0,-1.104569 -0.89543,-2 -2,-2 -0.0163,-1.99e-4 
-0.0326,-1.99e-4 -0.0488,0 z' id='path5524' sodipodi:nodetypes='ccccccccccssscccccssscccccc' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures
 
:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;
 
stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000'/>
+    <path d='m 322.85352,66.671875 c -0.26143,0.246837 -0.49717,0.520341 -0.70508,0.814453 l 
1.39844,1.398438 c 0.17837,-0.318524 0.3935,-0.613781 0.6621,-0.857422 z m -1.26954,1.839844 c 
-0.16408,0.394345 -0.27846,0.812639 -0.34179,1.248047 l 2.20508,2.205078 c -0.21018,-0.441258 
-0.33789,-0.930413 -0.33789,-1.455078 0,-0.147076 0.0268,-0.286105 0.0449,-0.427735 z m -0.32812,2.851562 c 
0.36594,2.236262 2.13874,4.00906 4.375,4.375 z m 7.71094,1.421875 c -0.24323,0.26863 -0.53719,0.483808 
-0.85547,0.66211 l 1.37305,1.373046 c 0.28889,-0.212878 0.55529,-0.454242 0.79687,-0.720703 z m 
-3.9375,0.761719 2.20312,2.203125 c 0.43456,-0.06509 0.84868,-0.183193 1.23828,-0.351562 l -1.55859,-1.558594 
c -0.14167,0.01812 -0.28062,0.04492 -0.42773,0.04492 -0.52468,-10e-7 -1.01382,-0.127709 -1.45508,-0.337891 z' 
id='path7499-7' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-li
 
gatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.92844;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:aut
 o;text-rendering:auto;enable-background:accumulate'/>
+  </g>
+</svg>
diff --git a/data/icons/private/hicolor/16x16/apps/phone-oldschool-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/phone-oldschool-symbolic.svg
new file mode 100644
index 00000000..dcc3f2da
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/phone-oldschool-symbolic.svg
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' 
sodipodi:docname='phone-oldschool-symbolic.svg' height='16' id='svg7384' 
xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' 
xmlns:osb='http://www.openswatchbook.org/uri/2009/osb' 
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' 
inkscape:version='1.0 (4035a4fb49, 2020-05-01)' version='1.1' viewBox='0 0 16 16' width='16' 
xmlns='http://www.w3.org/2000/svg'>
+  <metadata id='metadata90'>
+    <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>Gnome Symbolic Icon Theme</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='true' bordercolor='#666666' 
borderopacity='1' inkscape:current-layer='g6387' inkscape:cx='12.51305' inkscape:cy='5.73006' 
inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' 
id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='56,310.597' inkscape:object-nodes='true' 
inkscape:object-paths='true' objecttolerance='10' pagecolor='#ebebeb' inkscape:pageopacity='1' 
inkscape:pageshadow='2' showborder='false' showgrid='true' showguides='false' inkscape:snap-bbox='true' 
inkscape:snap-bbox-edge-midpoints='true' inkscape:snap-bbox-midpoints='true' inkscape:snap-global='true' 
inkscape:snap-grids='true' inkscape:snap-intersection-paths='true' inkscape:snap-nodes='true' 
inkscape:snap-others='false' inkscape:snap-to-guides='true' inkscape:window-height='1205' 
inkscape:window-maximized='0' inkscape:window-width='1558' inkscape:window-x='26' inkscape:window-y='23' 
inksca
 pe:zoom='16'>
+    <inkscape:grid empspacing='4' enabled='true' id='grid4866' originx='-180' originy='-438' 
snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/>
+    <inkscape:grid dotted='true' empspacing='4' id='grid2980' originx='-180' originy='-438' spacingx='0.5' 
spacingy='0.5' type='xygrid'/>
+  </sodipodi:namedview>
+  <title id='title9167'>Gnome Symbolic Icon Theme</title>
+  <defs id='defs7386'>
+    <linearGradient id='linearGradient7212' osb:paint='solid'>
+      <stop id='stop7214' offset='0' style='stop-color:#000000;stop-opacity:1;'/>
+    </linearGradient>
+  </defs>
+  <g inkscape:groupmode='layer' id='layer1' inkscape:label='ui' style='display:inline' 
transform='translate(-180,-238)'/>
+  <g inkscape:groupmode='layer' id='layer21' inkscape:label='legacy' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='layer9' inkscape:label='shapes' style='display:inline' 
transform='translate(-421.0002,129)'/>
+  <g inkscape:groupmode='layer' id='g7628' inkscape:label='other' style='display:inline' 
transform='translate(-421.0002,129)'/>
+  <g inkscape:groupmode='layer' id='layer19' inkscape:label='multimedia' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='layer13' inkscape:label='maps' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='layer11' inkscape:label='graphics' style='display:inline' 
transform='translate(-180,-238)'/>
+  <g inkscape:groupmode='layer' id='layer14' inkscape:label='food-drink' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='g6387' inkscape:label='devices' style='display:inline' 
transform='translate(-180,-238)'>
+    <path inkscape:connector-curvature='0' d='m 190.99415,240 c -0.554,0 -1,0.446 -1,1 v 1.5 1.5 c 0,0.554 
0.446,1 1,1 h 0.71094 c -0.66833,2.26605 -2.44489,4.04261 -4.71094,4.71094 V 249 c 0,-0.554 -0.446,-1 -1,-1 h 
-1.5 -1.5 c -0.554,0 -1,0.446 -1,1 v 1.5 a 2.5,2.5 0 0 0 2.5,2.5 h 0.5 c 5.50508,0 10,-4.49492 10,-10 v -0.5 
a 2.5,2.5 0 0 0 -2.5,-2.5 z' id='path1026' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baselin
 
e;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new'/>
+    
+  </g>
+  <g inkscape:groupmode='layer' id='layer18' inkscape:label='text' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='layer17' inkscape:label='weather' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='layer16' inkscape:label='camera' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='layer10' inkscape:label='body' style='display:inline' 
transform='translate(-180,-238)'/>
+  <g inkscape:groupmode='layer' id='layer15' inkscape:label='animals' transform='translate(-180,-438)'/>
+  <g inkscape:groupmode='layer' id='layer12' inkscape:label='alert' transform='translate(-180,-238)'/>
+  <g inkscape:groupmode='layer' id='layer20' inkscape:label='accessibility' 
transform='translate(-180,-438)'/>
+</svg>
diff --git a/data/icons/private/hicolor/16x16/apps/toilets-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/toilets-symbolic.svg
new file mode 100644
index 00000000..06abf130
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/toilets-symbolic.svg
@@ -0,0 +1,47 @@
+<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' 
sodipodi:docname='toilets-symbolic.svg' height='16' id='svg7384' 
xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' 
xmlns:osb='http://www.openswatchbook.org/uri/2009/osb' 
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' 
inkscape:version='1.0 (4035a4fb49, 2020-05-01)' version='1.1' viewBox='0 0 16.010075 16' width='16.010075' 
xmlns='http://www.w3.org/2000/svg'>
+  <metadata id='metadata90'>
+    <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>Gnome Symbolic Icon Theme</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='true' bordercolor='#666666' 
borderopacity='1' inkscape:current-layer='layer13' inkscape:cx='-467.48695' inkscape:cy='343.73006' 
inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' 
id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='56,310.597' inkscape:object-nodes='true' 
inkscape:object-paths='true' objecttolerance='10' pagecolor='#ebebeb' inkscape:pageopacity='1' 
inkscape:pageshadow='2' showborder='false' showgrid='true' showguides='false' inkscape:snap-bbox='true' 
inkscape:snap-bbox-edge-midpoints='true' inkscape:snap-bbox-midpoints='true' inkscape:snap-global='true' 
inkscape:snap-grids='true' inkscape:snap-intersection-paths='true' inkscape:snap-nodes='true' 
inkscape:snap-others='false' inkscape:snap-to-guides='true' inkscape:window-height='1205' 
inkscape:window-maximized='0' inkscape:window-width='1558' inkscape:window-x='26' inkscape:window-y='23' 
 inkscape:zoom='16'>
+    <inkscape:grid empspacing='4' enabled='true' id='grid4866' originx='-660.00002' originy='-100' 
snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/>
+    <inkscape:grid dotted='true' empspacing='4' id='grid2980' originx='-660.00002' originy='-100' 
spacingx='0.5' spacingy='0.5' type='xygrid'/>
+  </sodipodi:namedview>
+  <title id='title9167'>Gnome Symbolic Icon Theme</title>
+  <defs id='defs7386'>
+    <linearGradient id='linearGradient7212' osb:paint='solid'>
+      <stop id='stop7214' offset='0' style='stop-color:#000000;stop-opacity:1;'/>
+    </linearGradient>
+  </defs>
+  <g inkscape:groupmode='layer' id='layer1' inkscape:label='ui' style='display:inline' 
transform='translate(-660,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer21' inkscape:label='legacy' transform='translate(-660,-100)'/>
+  <g inkscape:groupmode='layer' id='layer9' inkscape:label='shapes' style='display:inline' 
transform='translate(-901.0002,467)'/>
+  <g inkscape:groupmode='layer' id='g7628' inkscape:label='other' style='display:inline' 
transform='translate(-901.0002,467)'/>
+  <g inkscape:groupmode='layer' id='layer19' inkscape:label='multimedia' transform='translate(-660,-100)'/>
+  <g inkscape:groupmode='layer' id='layer13' inkscape:label='maps' transform='translate(-660,-100)'>
+    <path d='m 666,102.04474 a 1.9999999,1.9999999 0 0 1 -2,2 1.9999999,1.9999999 0 0 1 -2,-2 
1.9999999,1.9999999 0 0 1 2,-2 1.9999999,1.9999999 0 0 1 2,2' id='circle5567' 
style='color:#000000;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.811746;marker:none;enable-background:accumulate'/>
+    <path d='m 675,102.04474 a 1.9999999,1.9999999 0 0 1 -2,2 1.9999999,1.9999999 0 0 1 -2,-2 
1.9999999,1.9999999 0 0 1 2,-2 1.9999999,1.9999999 0 0 1 2,2' id='circle5575' 
style='color:#000000;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.811746;marker:none;enable-background:accumulate'/>
+    
+    <path d='m 662.03994,105 h 3.92012 c 0.57612,0 1.03994,0.46382 1.03994,1.03994 v 4.42012 c 0,0.57612 
-0.46382,1.03994 -1.03994,1.03994 h -3.92012 C 661.46382,111.5 661,111.03618 661,110.46006 v -4.42012 C 
661,105.46382 661.46382,105 662.03994,105 Z' id='rect5577' 
style='fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.683005;stroke-linecap:square;stop-color:#000000'/>
+    <path d='m 662.99197,108.5 h 2.01606 c 0.54955,0 0.99197,0.44242 0.99197,0.99197 v 4.51606 C 
666,114.55758 665.55758,115 665.00803,115 h -2.01606 C 662.44242,115 662,114.55758 662,114.00803 v -4.51606 c 
0,-0.54955 0.44242,-0.99197 0.99197,-0.99197 z' id='rect5579' 
style='fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.557671;stroke-linecap:square;stop-color:#000000'/>
+    <path d='m 672.50887,108.5 h 0.98226 c 0.28191,0 0.50887,0.22696 0.50887,0.50887 v 5.48226 C 
674,114.77304 673.77304,115 673.49113,115 h -0.98226 C 672.22696,115 672,114.77304 672,114.49113 v -5.48226 c 
0,-0.28191 0.22696,-0.50887 0.50887,-0.50887 z' id='rect5581' 
style='fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.557671;stroke-linecap:square;stop-color:#000000'/>
+    <path d='m 672.00869,105 h 1.98262 c 0.57612,0 0.94771,0.47125 1.03994,1.03994 L 676,112.01323 c 
0.0922,0.5687 -0.46382,1.03994 -1.03994,1.03994 h -3.92012 c -0.57612,0 -1.13217,-0.47124 -1.03994,-1.03994 l 
0.96875,-5.97329 C 671.06098,105.47125 671.43257,105 672.00869,105 Z' id='rect5583' 
sodipodi:nodetypes='sssssssss' 
style='fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.683005;stroke-linecap:square;stop-color:#000000'/>
+    <path d='m 668,101 h 1 v 14 h -1 z' id='rect5588' 
style='fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.683005;stroke-linecap:square;stop-color:#000000'/>
+  </g>
+  <g inkscape:groupmode='layer' id='layer11' inkscape:label='graphics' style='display:inline' 
transform='translate(-660,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer14' inkscape:label='food-drink' transform='translate(-660,-100)'/>
+  <g inkscape:groupmode='layer' id='g6387' inkscape:label='devices' style='display:inline' 
transform='translate(-660,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer18' inkscape:label='text' transform='translate(-660,-100)'/>
+  <g inkscape:groupmode='layer' id='layer17' inkscape:label='weather' transform='translate(-660,-100)'/>
+  <g inkscape:groupmode='layer' id='layer16' inkscape:label='camera' transform='translate(-660,-100)'/>
+  <g inkscape:groupmode='layer' id='layer10' inkscape:label='body' style='display:inline' 
transform='translate(-660,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer15' inkscape:label='animals' transform='translate(-660,-100)'/>
+  <g inkscape:groupmode='layer' id='layer12' inkscape:label='alert' transform='translate(-660,99.999998)'/>
+  <g inkscape:groupmode='layer' id='layer20' inkscape:label='accessibility' 
transform='translate(-660,-100)'/>
+</svg>
diff --git a/data/icons/private/hicolor/16x16/apps/wheelchair-limited-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/wheelchair-limited-symbolic.svg
new file mode 100644
index 00000000..ae2fdd03
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/wheelchair-limited-symbolic.svg
@@ -0,0 +1,44 @@
+<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' 
sodipodi:docname='wheelchair-limited-symbolic.svg' height='16' id='svg7384' 
xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' 
xmlns:osb='http://www.openswatchbook.org/uri/2009/osb' 
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:svg='http://www.w3.org/2000/svg' 
inkscape:version='1.0 (4035a4fb49, 2020-05-01)' version='1.1' viewBox='0 0 16 16' width='16' 
xmlns='http://www.w3.org/2000/svg'>
+  <metadata id='metadata90'>
+    <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>Gnome Symbolic Icon Theme</dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='true' bordercolor='#666666' 
borderopacity='1' inkscape:current-layer='layer20' inkscape:cx='42.586335' inkscape:cy='21.619635' 
inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' 
id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='56,310.597' inkscape:object-nodes='true' 
inkscape:object-paths='true' objecttolerance='10' pagecolor='#ebebeb' inkscape:pageopacity='1' 
inkscape:pageshadow='2' showborder='false' showgrid='false' showguides='false' inkscape:snap-bbox='true' 
inkscape:snap-bbox-edge-midpoints='true' inkscape:snap-bbox-midpoints='true' inkscape:snap-global='true' 
inkscape:snap-grids='true' inkscape:snap-intersection-paths='true' inkscape:snap-nodes='true' 
inkscape:snap-others='false' inkscape:snap-to-guides='true' inkscape:window-height='1205' 
inkscape:window-maximized='0' inkscape:window-width='1558' inkscape:window-x='26' inkscape:window-y='23' 
 inkscape:zoom='8'>
+    <inkscape:grid empspacing='4' enabled='true' id='grid4866' originx='-359.99969' originy='-60.011276' 
snapvisiblegridlinesonly='true' spacingx='1px' spacingy='1px' type='xygrid' visible='true'/>
+    <inkscape:grid dotted='true' empspacing='4' id='grid2980' originx='-359.99969' originy='-60.011276' 
spacingx='0.5' spacingy='0.5' type='xygrid'/>
+  </sodipodi:namedview>
+  <title id='title9167'>Gnome Symbolic Icon Theme</title>
+  <defs id='defs7386'>
+    <linearGradient id='linearGradient7212' osb:paint='solid'>
+      <stop id='stop7214' offset='0' style='stop-color:#000000;stop-opacity:1;'/>
+    </linearGradient>
+  </defs>
+  <g inkscape:groupmode='layer' id='layer1' inkscape:label='ui' style='display:inline' 
transform='translate(-359.99969,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer21' inkscape:label='legacy' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer9' inkscape:label='shapes' style='display:inline' 
transform='translate(-600.99989,506.98872)'/>
+  <g inkscape:groupmode='layer' id='g7628' inkscape:label='other' style='display:inline' 
transform='translate(-600.99989,506.98872)'/>
+  <g inkscape:groupmode='layer' id='layer19' inkscape:label='multimedia' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer13' inkscape:label='maps' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer11' inkscape:label='graphics' style='display:inline' 
transform='translate(-359.99969,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer14' inkscape:label='food-drink' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='g6387' inkscape:label='devices' style='display:inline' 
transform='translate(-359.99969,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer18' inkscape:label='text' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer17' inkscape:label='weather' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer16' inkscape:label='camera' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer10' inkscape:label='body' style='display:inline' 
transform='translate(-359.99969,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer15' inkscape:label='animals' 
transform='translate(-359.99969,-60.011276)'/>
+  <g inkscape:groupmode='layer' id='layer12' inkscape:label='alert' 
transform='translate(-359.99969,139.98872)'/>
+  <g inkscape:groupmode='layer' id='layer20' inkscape:label='accessibility' 
transform='translate(-359.99969,-60.011276)'>
+    
+    <path d='M 364.875 61 A 1 1 0 0 0 363.875 62 L 363.875 62.5 A 1.0001 1.0001 0 0 0 363.94727 62.871094 L 
366.94727 70.371094 A 1.0001 1.0001 0 0 0 367.875 71 L 371.18164 71 L 372.43945 74.351562 A 1.0001 1.0001 0 0 
0 373.375 75 L 374.875 75 A 1 1 0 0 0 375.875 74 A 1 1 0 0 0 374.875 73 L 374.06836 73 L 372.81055 69.648438 
A 1.0001 1.0001 0 0 0 371.875 69 L 368.55273 69 L 365.875 62.306641 L 365.875 62 A 1 1 0 0 0 364.875 61 z ' 
id='path2261' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal
 
;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1;opacity:1'/>
+    <path d='m 368,62.125 a 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 2,2 0 0 1 2,2' id='circle5478' 
style='fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1'/>
+    <path inkscape:connector-curvature='0' d='m 364.25139,65.707031 c -1.8082,0.847059 -3.06968,2.682233 
-3.06968,4.802263 0,2.917436 2.38578,5.303205 5.3032,5.303206 1.93137,-10e-7 3.58118,-1.067756 
4.48963,-2.627121 l -0.49153,-1.229755 h -0.95666 c -0.5392,1.140537 -1.68743,1.928437 -3.04144,1.928438 
-1.87524,-10e-7 -3.37478,-1.499537 -3.37478,-3.374768 0,-1.31102 0.74115,-2.42521 1.82297,-2.984936 z' 
id='path5481' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientatio
 
n:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:0.3;fill-rule:nonzero;stroke:none;stroke-width:1.92844;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate'/>
+    <path d='M 367 66 A 1 1 0 0 0 366 67 A 1 1 0 0 0 367 68 L 371 68 A 1 1 0 0 0 372 67 A 1 1 0 0 0 371 66 L 
367 66 z ' id='path2265' 
style='color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-b
 
lend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1;opacity:1'/>
+  </g>
+</svg>
diff --git a/data/icons/private/hicolor/16x16/apps/wheelchair-symbolic.svg 
b/data/icons/private/hicolor/16x16/apps/wheelchair-symbolic.svg
new file mode 100644
index 00000000..be789b79
--- /dev/null
+++ b/data/icons/private/hicolor/16x16/apps/wheelchair-symbolic.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="16" height="16.012">
+    <g fill="#2e3436">
+        <path d="M5 7.037a4.5 4.5 0 00-3.658 2.74 4.506 4.506 0 00.977 4.905 4.506 4.506 0 004.904.976A4.5 
4.5 0 009.963 12h-2.02a2.494 2.494 0 01-4.21 1.268A2.494 2.494 0 015 9.057z" 
style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1"
 color="#000" font-weight="400" font-family="sans-serif" overflow="visible"/>
+        <path d="M10 7L9 5H7S6 5 6 6v3c0 2 2 2 2 2h2z"/>
+        <path d="M9 9a1 1 0 100 2h1.434l2.709 4.514a1 1 0 101.715-1.028L11.567 9zM8.99 4.99a1 1 0 00-.697 
1.717L9.586 8H13a1 1 0 100-2h-2.586l-.707-.707a1 1 0 00-.716-.303z" 
style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1"
 color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill-rule="evenodd"/>
+        <path d="M10 2a2 2 0 01-2 2 2 2 0 01-2-2 2 2 0 012-2 2 2 0 012 2z"/>
+    </g>
+</svg>
diff --git a/data/ui/place-bubble.ui b/data/ui/place-bubble.ui
index 5d0d2cce..0704a78d 100644
--- a/data/ui/place-bubble.ui
+++ b/data/ui/place-bubble.ui
@@ -2,10 +2,11 @@
 <!-- Generated with glade 3.18.1 -->
 <interface>
   <requires lib="gtk+" version="3.12"/>
-  <object class="GtkGrid" id="grid-content">
+  <object class="GtkGrid" id="main-grid">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="column-spacing">12</property>
+    <property name="row-spacing">6</property>
     <child>
       <object class="HdyAvatar" id="contact-avatar">
         <property name="visible">False</property>
@@ -19,85 +20,30 @@
       </packing>
     </child>
     <child>
-      <object class="GtkBox">
-        <property name="visible">True</property>
-        <child>
-          <object class="GtkLabel" id="label-title">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">start</property>
-            <property name="expand">True</property>
-            <property name="use_markup">True</property>
-            <style>
-              <class name="bubble-title"/>
-            </style>
-          </object>
-        </child>
-        <child>
-          <object class="GtkToggleButton" id="expand-button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="valign">GTK_ALIGN_START</property>
-            <property name="halign">GTK_ALIGN_CENTER</property>
-            <property name="tooltip-text" translatable="yes" comments="Translators: This is a tooltip">Show 
more information</property>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="icon-name">view-more-symbolic</property>
-                <property name="pixel_size">16</property>
-              </object>
-            </child>
-            <style>
-              <class name="image-button"/>
-              <class name="circular"/>
-              <class name="flat"/>
-            </style>
-          </object>
-        </child>
-      </object>
-      <packing>
-        <property name="left-attach">1</property>
-        <property name="top-attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkBox" id="box-content">
+      <object class="GtkLabel" id="label-title">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="orientation">vertical</property>
+        <property name="halign">start</property>
+        <property name="expand">True</property>
         <style>
-          <class name="bubble-content"/>
+          <class name="bubble-title"/>
         </style>
       </object>
       <packing>
         <property name="left-attach">1</property>
-        <property name="top-attach">1</property>
+        <property name="top-attach">0</property>
       </packing>
     </child>
     <child>
-      <object class="GtkRevealer" id="content-revealer">
+      <object class="GtkBox" id="place-details">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="halign">start</property>
-        <property name="vexpand">True</property>
-        <property name="margin-top">5</property>
-        <child>
-          <object class="GtkGrid" id="expanded-content">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">start</property>
-            <property name="vexpand">True</property>
-            <property name="column-spacing">5</property>
-            <style>
-              <class name="bubble-content"/>
-            </style>
-          </object>
-        </child>
+        <property name="orientation">vertical</property>
       </object>
       <packing>
-        <property name="left-attach">1</property>
-        <property name="top-attach">2</property>
+        <property name="left-attach">0</property>
+        <property name="top-attach">1</property>
+        <property name="width">2</property>
       </packing>
     </child>
   </object>
diff --git a/src/place.js b/src/place.js
index 675e3320..f9134363 100644
--- a/src/place.js
+++ b/src/place.js
@@ -27,7 +27,6 @@ const GObject = imports.gi.GObject;
 
 const Location = imports.location;
 const Overpass = imports.overpass;
-const Translations = imports.translations;
 const Utils = imports.utils;
 
 // Matches coordinates string in 'Decimal Degrees' format
@@ -192,18 +191,10 @@ class Place extends Geocode.Place {
         this._internetAccess = v;
     }
 
-    get openingHoursTranslated() {
-        return Translations.translateOpeningHours(this._openingHours);
-    }
-
     get internetAccess() {
         return this._internetAccess;
     }
 
-    get internetAccessTranslated() {
-        return Translations.translateInternetAccess(this._internetAccess);
-    }
-
     set religion(v) {
         this._religion = v;
     }
@@ -212,10 +203,6 @@ class Place extends Geocode.Place {
         return this._religion;
     }
 
-    get religionTranslated() {
-        return Translations.translateReligion(this._religion);
-    }
-
     set toilets(v) {
         this._toilets = v;
     }
@@ -224,10 +211,6 @@ class Place extends Geocode.Place {
         return this._toilets;
     }
 
-    get toiletsTranslated() {
-        return Translations.translateYesNo(this._toilets);
-    }
-
     set note(v) {
         this._note = v;
     }
@@ -244,10 +227,6 @@ class Place extends Geocode.Place {
         return this._wheelchair;
     }
 
-    get wheelchairTranslated() {
-        return this._translateWheelchair(this._wheelchair);
-    }
-
     get initialZoom() {
         return this._initialZoom;
     }
@@ -260,38 +239,6 @@ class Place extends Geocode.Place {
         this._prefilled = prefilled;
     }
 
-    _translateWheelchair(string) {
-        switch(string) {
-            /* Translators:
-             * This means wheelchairs have full unrestricted access.
-             */
-            case 'yes': return _("yes");
-
-            /* Translators:
-             * This means wheelchairs have partial access (e.g some areas
-             * can be accessed and others not, areas requiring assistance
-             * by someone pushing up a steep gradient).
-             */
-            case 'limited': return _("limited");
-
-            /* Translators:
-             * This means wheelchairs have no unrestricted access
-             * (e.g. stair only access).
-             */
-            case 'no': return _("no");
-
-            /* Translators:
-             * This means that the way or area is designated or purpose built
-             * for wheelchairs (e.g. elevators designed for wheelchair access
-             * only). This is rarely used.
-             */
-            case 'designated': return _("designated");
-
-            default: return null;
-        }
-    }
-
-
     toJSON() {
         let bounding_box = null;
 
diff --git a/src/placeBubble.js b/src/placeBubble.js
index 5d44139c..bab3e4bf 100644
--- a/src/placeBubble.js
+++ b/src/placeBubble.js
@@ -34,6 +34,7 @@ const Place = imports.place;
 const PlaceBubbleImage = imports.placeBubbleImage;
 const PlaceFormatter = imports.placeFormatter;
 const PlaceStore = imports.placeStore;
+const Translations = imports.translations;
 const Utils = imports.utils;
 const Wikipedia = imports.wikipedia;
 
@@ -52,13 +53,10 @@ var PlaceBubble = GObject.registerClass({
 }, class PlaceBubble extends MapBubble.MapBubble {
 
     _init(params) {
-        let ui = Utils.getUIObject('place-bubble', [ 'box-content',
-                                                     'grid-content',
+        let ui = Utils.getUIObject('place-bubble', [ 'main-grid',
+                                                     'place-details',
                                                      'contact-avatar',
-                                                     'label-title',
-                                                     'expand-button',
-                                                     'expanded-content',
-                                                     'content-revealer']);
+                                                     'label-title']);
         params.buttons = (MapBubble.Button.ROUTE |
                           MapBubble.Button.SEND_TO);
 
@@ -73,11 +71,8 @@ var PlaceBubble = GObject.registerClass({
         this.loading = true;
 
         this._title = ui.labelTitle;
-        this._boxContent = ui.boxContent;
-        this._expandButton = ui.expandButton;
-        this._expandedContent = ui.expandedContent;
-        this._revealer = ui.contentRevealer;
         this._contactAvatar = ui.contactAvatar;
+        this._placeDetails = ui.placeDetails;
 
         /* Set up contact avatar */
         if (this.place instanceof ContactPlace.ContactPlace) {
@@ -110,9 +105,7 @@ var PlaceBubble = GObject.registerClass({
         } else {
             this._populate(this.place);
         }
-        this.content.add(ui.gridContent);
-
-        this._initExpandButton();
+        this.content.add(ui.mainGrid);
     }
 
     _onInfoAdded() {
@@ -130,117 +123,233 @@ var PlaceBubble = GObject.registerClass({
         return Format.vprintf('https://%s.wikipedia.org/wiki/%s', [ lang, article ]);
     }
 
-    /*
-     * Create an array of all content to be showed when expanding the place
-     * bubble
-     */
-    _createExpandedContent(place) {
-        let expandedContent = [];
+    _createContent(formatter, place) {
+        let content = [];
 
-        if (place.population) {
-            /* TODO: this is a bit of a work-around to re-interpret the population,
-             * stored as a string into an integer to convert back to a locale-
-             * formatted string. Ideally it should be kept as an integer value
-             * in the Place class. But this will also need to be handled by the
-             * PlaceStore, possible in a backwards-compatible way
-             */
-            expandedContent.push({ label: _("Population:"),
-                                   info: parseInt(place.population).toLocaleString() });
+        let address = formatter.rows.map((row) => {
+            row = row.map(function(prop) {
+                return GLib.markup_escape_text(place[prop], -1);
+            });
+            return row.join(', ');
+        });
+        if (address.length > 0) {
+            content.push({ label: _("Address"),
+                           icon: 'map-marker-symbolic',
+                           info: address.join('\n') });
         }
 
-        if (place.location.altitude > 0) {
-            let alt  = place.location.altitude;
-            expandedContent.push({ label: _("Altitude:"),
-                                   info: Utils.prettyDistance(alt, true) });
+        if (place.website) {
+            content.push({ label: _("Website"),
+                           icon: 'web-browser-symbolic',
+                           info: GLib.markup_escape_text(place.website, -1),
+                           linkUrl: place.website });
+        }
+
+        if (place.phone) {
+            let phone = { label: _("Phone number"),
+                          icon: 'phone-oldschool-symbolic',
+                          info: GLib.markup_escape_text(place.phone, -1) };
+
+            if (Utils.uriSchemeSupported('tel')) {
+                phone.linkUrl = 'tel:%s'.format(place.phone);
+            }
+
+            content.push(phone);
         }
 
         if (place.openingHours) {
-            expandedContent.push({ label: _("Opening hours:"),
-                                   info: place.openingHoursTranslated });
+            content.push({ label: _("Opening hours"),
+                           icon: 'emoji-recent-symbolic',
+                           info: Translations.translateOpeningHours(place.openingHours) });
         }
 
-        if (place.internetAccess) {
-            expandedContent.push({ label: _("Internet access:"),
-                                   info: place.internetAccessTranslated });
+        switch(place.internetAccess) {
+            case 'yes':
+                /* Translators:
+                 * There is public internet access but the particular kind is unknown.
+                 */
+                content.push({ info: _("Public internet access"),
+                               icon: 'network-wireless-signal-excellent-symbolic' });
+                break;
+
+            case 'no':
+                /* Translators:
+                 * no internet access is offered in a place where
+                 * someone might expect it.
+                 */
+                content.push({ info: _("No internet access"),
+                               icon: 'network-wireless-offline-symbolic' });
+                break;
+
+            case 'wlan':
+                /* Translators:
+                 * This means a WLAN Hotspot, also known as wireless, wifi or Wi-Fi.
+                 */
+                content.push({ info: _("Public Wi-Fi"),
+                               icon: 'network-wireless-signal-excellent-symbolic' });
+                break;
+
+            case 'wired':
+                /* Translators:
+                 * This means a a place where you can plug in your laptop with ethernet.
+                 */
+                content.push({ info: _("Wired internet access"),
+                               icon: 'network-wired-symbolic' });
+                break;
+
+            case 'terminal':
+                /* Translators:
+                 * Like internet cafe or library where the computer is given.
+                 */
+                content.push({ info: _("Computers available for use"),
+                               icon: 'computer-symbolic' });
+                break;
+
+            case 'service':
+                /* Translators:
+                 * This means there is personnel which helps you in case of problems.
+                 */
+                content.push({ info: _("Internet assistance available"),
+                               icon: 'computer-symbolic' });
+                break;
         }
 
-        if (place.religion) {
-            expandedContent.push({ label: _("Religion:"),
-                                   info: place.religionTranslated });
+        if (place.toilets === 'no') {
+            content.push({ info: _("No toilets available"),
+                           icon: 'no-toilets-symbolic' });
+        } else if (place.toilets === 'yes') {
+            content.push({ info: _("Toilets available"),
+                           icon: 'toilets-symbolic' });
         }
 
-        if (place.toilets) {
-            expandedContent.push({ label: _("Toilets:"),
-                                   info: place.toiletsTranslated });
+        switch(place.wheelchair) {
+            case 'yes':
+                /* Translators:
+                 * This means wheelchairs have full unrestricted access.
+                 */
+                content.push({ info: _("Wheelchair accessible"),
+                               icon: 'wheelchair-symbolic' });
+                break;
+
+            case 'limited':
+                /* Translators:
+                 * This means wheelchairs have partial access (e.g some areas
+                 * can be accessed and others not, areas requiring assistance
+                 * by someone pushing up a steep gradient).
+                 */
+                content.push({ info: _("Limited wheelchair accessibility"),
+                               icon: 'wheelchair-limited-symbolic'  });
+                break;
+
+            case 'no':
+                /* Translators:
+                 * This means wheelchairs have no unrestricted access
+                 * (e.g. stair only access).
+                 */
+                content.push({ info: _("Not wheelchair accessible"),
+                               icon: 'no-wheelchair-symbolic'  });
+                break;
+
+            case 'designated':
+                /* Translators:
+                 * This means that the way or area is designated or purpose built
+                 * for wheelchairs (e.g. elevators designed for wheelchair access
+                 * only). This is rarely used.
+                 */
+                content.push({ info: _("Designated for wheelchair users"),
+                               icon: 'wheelchair-symbolic'  });
+                break;
         }
 
-        if (place.wheelchair) {
-            expandedContent.push({ label: _("Wheelchair access:"),
-                                   info: place.wheelchairTranslated });
+        if (place.population) {
+            /* TODO: this is a bit of a work-around to re-interpret the population,
+             * stored as a string into an integer to convert back to a locale-
+             * formatted string. Ideally it should be kept as an integer value
+             * in the Place class. But this will also need to be handled by the
+             * PlaceStore, possible in a backwards-compatible way
+             */
+            content.push({ label: _("Population"),
+                           icon: 'system-users-symbolic',
+                           info: parseInt(place.population).toLocaleString() });
         }
 
-        if (place.phone) {
-            if (Utils.uriSchemeSupported('tel')) {
-                expandedContent.push({ label: _("Phone:"),
-                                       linkText: place.phone,
-                                       linkUrl: 'tel:%s'.format(place.phone) });
-            } else {
-                expandedContent.push({ label: _("Phone:"),
-                                       info: place.phone });
-            }
+        if (place.location.altitude > 0) {
+            let alt  = place.location.altitude;
+            content.push({ label: _("Altitude"),
+                           icon: 'mountain-symbolic',
+                           info: Utils.prettyDistance(alt, true) });
+        }
+
+        if (place.religion) {
+            content.push({ label: _("Religion:"),
+                           info: Translations.translateReligion(place.religion) });
         }
 
         if (place.wiki) {
             let link = this._formatWikiLink(place.wiki);
-            expandedContent.push({ linkText: _("Wikipedia"),
-                                   linkUrl: link});
+            content.push({ info: _("Wikipedia"),
+                           linkUrl: link});
         }
 
-        return expandedContent;
+        return content;
     }
 
-    _attachContent(content, expandedContent) {
-        content.forEach((info) => {
-            let label = new Gtk.Label({ label: info,
-                                        visible: true,
-                                        use_markup: true,
-                                        halign: Gtk.Align.START });
-            this._boxContent.pack_start(label, false, true, 0);
-        });
-
-        expandedContent.forEach(({ label, linkUrl, linkText, info }, row) => {
-            let widget;
-
-            if (label) {
-                widget = new Gtk.Label({ label: label.italics(),
-                                         visible: true,
-                                         use_markup: true,
-                                         yalign: 0,
-                                         halign: Gtk.Align.START });
-                this._expandedContent.attach(widget, 0, row, 1, 1);
+    _attachContent(content) {
+        content.forEach(({ label, icon, linkUrl, info }) => {
+            let separator = new Gtk.Separator({ visible: true });
+            separator.get_style_context().add_class('no-margin-separator');
+            this._placeDetails.add(separator);
+
+            let box = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL,
+                                    visible: true,
+                                    marginStart: 18,
+                                    marginEnd: 18,
+                                    marginTop: 6,
+                                    marginBottom: 6,
+                                    spacing: 12 });
+
+            if (icon) {
+                let widget = new Gtk.Image({ icon_name: icon,
+                                             visible: true,
+                                             xalign: 1,
+                                             valign: Gtk.Align.START,
+                                             halign: Gtk.Align.END });
+
+                if (label) {
+                    widget.tooltip_markup = label;
+                }
+
+                box.add(widget);
+            } else if (label) {
+                let widget = new Gtk.Label({ label: label.italics(),
+                                             visible: true,
+                                             use_markup: true,
+                                             yalign: 0,
+                                             halign: Gtk.Align.END });
+                box.add(widget);
             }
 
             if (linkUrl) {
                 let uri = GLib.markup_escape_text(linkUrl, -1);
-                /* double-escape the tooltip text, as GTK+ treats it as markup */
+                /* double-escape the tooltip text, as GTK treats it as markup */
                 let tooltipText = GLib.markup_escape_text(uri, -1);
                 info = '<a href="%s" title="%s">%s</a>'.format(uri,
                                                                tooltipText,
-                                                               linkText);
+                                                               info);
             }
 
-            widget = new Gtk.Label({ label: info,
-                                     visible: true,
-                                     use_markup: true,
-                                     max_width_chars: 25,
-                                     wrap: true,
-                                     halign: Gtk.Align.START });
-
-            if(label)
-                this._expandedContent.attach(widget, 1, row, 1, 1);
-            else
-                // Expand over both columns if this row has no label
-                this._expandedContent.attach(widget, 0, row, 2, 1);
+            let widget = new Gtk.Label({ label: info,
+                                         visible: true,
+                                         use_markup: true,
+                                         max_width_chars: 30,
+                                         wrap: true,
+                                         xalign: 0,
+                                         hexpand: true,
+                                         halign: Gtk.Align.FILL });
+
+            box.add(widget);
+
+            this._placeDetails.add(box);
         });
     }
 
@@ -250,30 +359,17 @@ var PlaceBubble = GObject.registerClass({
         // refresh place view
         this._clearView();
 
-        let content = formatter.rows.map((row) => {
-            row = row.map(function(prop) {
-                return GLib.markup_escape_text(place[prop], -1);
-            });
-            return row.join(', ');
-        });
-        let expandedContent = this._createExpandedContent(place);
-
-        this._attachContent(content, expandedContent);
+        let content = this._createContent(formatter, place);
+        this._attachContent(content);
 
         this._contactAvatar.text = formatter.title;
 
-        let title = GLib.markup_escape_text(formatter.title, -1);
-        if (place.website) {
-            let uri = GLib.markup_escape_text(place.website, -1);
-            this._title.label = '<a href="%s">%s</a>'.format(uri, title);
-        } else {
-            this._title.label = title;
-        }
-        this._expandButton.visible = expandedContent.length > 0;
-        this.loading = false;
+        this._title.label = formatter.title;
 
         if (place.wiki)
             this._requestWikipediaThumbnail(place.wiki);
+
+        this.loading = false;
     }
 
     _requestWikipediaThumbnail(wiki) {
@@ -287,16 +383,7 @@ var PlaceBubble = GObject.registerClass({
 
     // clear the view widgets to be able to re-populate an updated place
     _clearView() {
-        this._boxContent.get_children().forEach((child) => child.destroy());
-        this._expandedContent.get_children().forEach((child) => child.destroy());
-    }
-
-    _initExpandButton() {
-        let image = this._expandButton.get_child();
-
-        this._expandButton.connect('clicked', (function() {
-            this._revealer.reveal_child = !this._revealer.child_revealed;
-        }).bind(this));
+        this._placeDetails.get_children().forEach((child) => child.destroy());
     }
 
     // Loads the HdyAvatar image for contact places
diff --git a/src/translations.js b/src/translations.js
index 73c0c7ce..ee44cf0c 100644
--- a/src/translations.js
+++ b/src/translations.js
@@ -321,43 +321,6 @@ function _translateOpeningHoursTime(string) {
     }
 }
 
-function translateInternetAccess(string) {
-    switch(string) {
-    /* Translators:
-     * There is public internet access but the particular kind is unknown.
-     */
-    case 'yes': return _("yes");
-
-    /* Translators:
-     * no internet access is offered in a place where
-     * someone might expect it.
-     */
-    case 'no': return _("no");
-
-    /* Translators:
-     * This means a WLAN Hotspot, also know as wireless, wifi or Wi-Fi.
-     */
-    case 'wlan': return _("Wi-Fi");
-
-    /* Translators:
-     * This means a a place where you can plug in your laptop with ethernet.
-     */
-    case 'wired': return _("wired");
-
-    /* Translators:
-     * Like internet cafe or library where the computer is given.
-     */
-    case 'terminal': return _("terminal");
-
-    /* Translators:
-     * This means there is personnel which helps you in case of problems.
-     */
-    case 'service': return _("service");
-
-    default: return null;
-    }
-}
-
 function translateReligion(string) {
     switch(string) {
     case 'animist': return _("Animism");
@@ -385,11 +348,3 @@ function translateReligion(string) {
     default: return null;
     }
 }
-
-function translateYesNo(string) {
-    switch(string) {
-    case 'yes': return _("yes");
-    case 'no': return _("no");
-    default: return null;
-    }
-}


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