Compare commits
	
		
			1 Commits
		
	
	
		
			wip/jimmac
			...
			theme-sear
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9ab35786f6 | 
							
								
								
									
										32
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,35 +1,3 @@
 | 
			
		||||
3.29.4
 | 
			
		||||
======
 | 
			
		||||
* Fix "Clear All" for calendar events [Florian; #325]
 | 
			
		||||
* Allow cancelling direct switch operations [Xavier; #315]
 | 
			
		||||
* Support being started by systemd --user [Iain; !137, !138]
 | 
			
		||||
* Support key event forwarding required by some input methods [Carlos; #275]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jasper, Andrea, Florian; #663461, #372, !112,
 | 
			
		||||
  #414, !151]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Andrea Azzarone, Carlos Garnacho, Xavier Johnson, Iain Lane, Florian Müllner,
 | 
			
		||||
  Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Stas Solovey [ru]
 | 
			
		||||
 | 
			
		||||
3.29.3
 | 
			
		||||
======
 | 
			
		||||
* Save creation time in screenshot metadata [Florian; #790481]
 | 
			
		||||
* Improve consistency between ctrl- and middle-click on app icons [Xavier; #316]
 | 
			
		||||
* Add support for font-feature-settings CSS property [Ryan; #34]
 | 
			
		||||
* Adjust to MetaScreen removal [Jonas; #759538]
 | 
			
		||||
* Misc. bug fixes [Florian, Marco, Sam; #298, #788931, #26, #76, !54, #788882,
 | 
			
		||||
  #791233]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Ryan Hendrickson, Xavier Johnson, Florian Müllner, Joe Rabinoff,
 | 
			
		||||
  Sam Spilsbury, Marco Trevisan (Treviño)
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Gun Chleoc [gd], Yi-Jyun Pan [zh_TW], Cédric Valmary [oc], Jordi Mas [ca]
 | 
			
		||||
 | 
			
		||||
3.29.2
 | 
			
		||||
======
 | 
			
		||||
* Guard against untimely keyboard map changes [Carlos; #240]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=GNOME Shell (wayland sync point)
 | 
			
		||||
After=gnome-shell.service
 | 
			
		||||
BindsTo=gnome-shell.service
 | 
			
		||||
Conflicts=gnome-shell-x11.target
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=GNOME Shell (x11 sync point)
 | 
			
		||||
After=gnome-shell.service
 | 
			
		||||
BindsTo=gnome-shell.service
 | 
			
		||||
Conflicts=gnome-shell-wayland.target
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=GNOME Shell
 | 
			
		||||
Wants=gnome-session.service
 | 
			
		||||
After=graphical-session-pre.target gnome-session-bus.target
 | 
			
		||||
PartOf=graphical-session.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=dbus
 | 
			
		||||
ExecStart=@bindir@/gnome-shell
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
BusName=org.gnome.Shell
 | 
			
		||||
@@ -93,23 +93,6 @@ schema = configure_file(
 | 
			
		||||
  install_dir: schemadir
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if have_systemd
 | 
			
		||||
  unitconf = configuration_data()
 | 
			
		||||
  unitconf.set('bindir', bindir)
 | 
			
		||||
 | 
			
		||||
  unit = configure_file(
 | 
			
		||||
    input: 'gnome-shell.service.in',
 | 
			
		||||
    output: 'gnome-shell.service',
 | 
			
		||||
    configuration: unitconf,
 | 
			
		||||
    install_dir: systemduserunitdir
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  units = files('gnome-shell-wayland.target',
 | 
			
		||||
                'gnome-shell-x11.target')
 | 
			
		||||
 | 
			
		||||
  install_data(units, install_dir: systemduserunitdir)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# for unit tests - gnome.compile_schemas() only looks in srcdir
 | 
			
		||||
custom_target('compile-schemas',
 | 
			
		||||
  input: schema,
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
   id="svg7384"
 | 
			
		||||
   height="32"
 | 
			
		||||
   sodipodi:docname="key-layout.svg"
 | 
			
		||||
   inkscape:version="0.92.3 (2405546, 2018-03-11)">
 | 
			
		||||
   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     pagecolor="#ffffff"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
@@ -24,21 +24,17 @@
 | 
			
		||||
     guidetolerance="10"
 | 
			
		||||
     inkscape:pageopacity="0"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:window-width="3440"
 | 
			
		||||
     inkscape:window-height="1376"
 | 
			
		||||
     inkscape:window-width="1919"
 | 
			
		||||
     inkscape:window-height="1011"
 | 
			
		||||
     id="namedview19"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     inkscape:zoom="1"
 | 
			
		||||
     inkscape:cx="46.246852"
 | 
			
		||||
     inkscape:cy="17.474578"
 | 
			
		||||
     inkscape:zoom="14.75"
 | 
			
		||||
     inkscape:cx="1.220339"
 | 
			
		||||
     inkscape:cy="11.842802"
 | 
			
		||||
     inkscape:window-x="0"
 | 
			
		||||
     inkscape:window-y="27"
 | 
			
		||||
     inkscape:window-maximized="1"
 | 
			
		||||
     inkscape:current-layer="svg7384">
 | 
			
		||||
    <inkscape:grid
 | 
			
		||||
       type="xygrid"
 | 
			
		||||
       id="grid861" />
 | 
			
		||||
  </sodipodi:namedview>
 | 
			
		||||
     inkscape:window-y="55"
 | 
			
		||||
     inkscape:window-maximized="0"
 | 
			
		||||
     inkscape:current-layer="svg7384" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata90">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
@@ -96,34 +92,23 @@
 | 
			
		||||
     style="display:inline"
 | 
			
		||||
     id="g4953" />
 | 
			
		||||
  <g
 | 
			
		||||
     style="stroke-width:0.5;enable-background:new"
 | 
			
		||||
     id="g3561"
 | 
			
		||||
     inkscape:label="preferences-desktop-locale"
 | 
			
		||||
     transform="matrix(2,0,0,2,135.99464,-895.9793)">
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:nodetypes="cc"
 | 
			
		||||
       inkscape:connector-curvature="0"
 | 
			
		||||
       id="path3535"
 | 
			
		||||
       d="m -65,450 v 12"
 | 
			
		||||
       style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:#e5e5e5;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:nodetypes="ccccccccc"
 | 
			
		||||
       inkscape:connector-curvature="0"
 | 
			
		||||
       id="path3537"
 | 
			
		||||
       d="m -65,456 h 4 l 1,2 h 5 v -6 h -4 l -1,-2 h -5 z"
 | 
			
		||||
       style="fill:none;fill-rule:evenodd;stroke:#e5e5e5;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="opacity:1;vector-effect:none;fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
 | 
			
		||||
       d="m -65,456 h 4 l 1,2 h 5 v -6 h -4 l -1,-2 h -5 z"
 | 
			
		||||
       id="path3539"
 | 
			
		||||
       inkscape:connector-curvature="0"
 | 
			
		||||
       sodipodi:nodetypes="ccccccccc" />
 | 
			
		||||
     id="g11728"
 | 
			
		||||
     transform="matrix(2,0,0,2,-522.0004,-1086)"
 | 
			
		||||
     style="display:inline;stroke-width:1">
 | 
			
		||||
    <rect
 | 
			
		||||
       style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:0.89050001;marker:none;enable-background:new"
 | 
			
		||||
       id="rect3543"
 | 
			
		||||
       y="448"
 | 
			
		||||
       x="-68"
 | 
			
		||||
       style="fill:none;stroke:none;stroke-width:1"
 | 
			
		||||
       id="rect11724"
 | 
			
		||||
       width="16"
 | 
			
		||||
       height="16"
 | 
			
		||||
       width="16" />
 | 
			
		||||
       x="20"
 | 
			
		||||
       y="326"
 | 
			
		||||
       transform="translate(241.0002,217)" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:#e5e5e5;fill-opacity:1;stroke:none;stroke-width:1"
 | 
			
		||||
       d="m 265.69612,545.23396 c -3.58218,0 -4.66582,1.39975 -4.66582,1.39975 v 10.04946 c 0,0 1.08364,-1.07673 4.66582,-1.07673 2.9161,0 4.47225,1.07673 7.17818,1.07673 2.08923,0 3.19429,-1.39975 3.19429,-1.39975 v -10.04946 c 0,0 -1.14095,1.04084 -3.23018,1.04084 -3.3734,0 -3.97619,-1.04084 -7.14229,-1.04084 z m 2.93145,2.77148 c 1.32876,0 2.375,1.08037 2.375,2.4375 0,1.35713 -1.04624,2.46875 -2.375,2.46875 -1.32876,0 -2.40625,-1.11162 -2.40625,-2.46875 0,-1.35713 1.07749,-2.4375 2.40625,-2.4375 z m -4.5625,0.96875 0.96875,1.03125 -0.9375,-0.0312 0.9375,1 -0.96875,-0.0312 0.96875,1.03125 -1,-0.0312 0.0312,-1 h -0.0312 l 0.0312,-0.9688 h -0.0312 z m 4.5625,0 c -0.794,0 -1.46875,0.6578 -1.46875,1.46875 0,0.81095 0.67475,1.46875 1.46875,1.46875 0.79399,0 1.4375,-0.6578 1.4375,-1.46875 0,-0.81095 -0.64351,-1.46875 -1.4375,-1.46875 z m 4.375,0 v 1 l 0.0312,0.96875 h -0.0312 l 0.0312,1 -1,0.0312 0.96875,-1.03125 -0.96875,0.0312 0.9375,-1 -0.9375,0.0312 z m -7.9375,2.96875 0.96875,1.03125 -1,-0.0312 z m 6.9375,0 0.0312,1 -1,0.0312 z m -5.9375,1 0.96875,1.03125 -1,-0.0312 z m 4.9375,0 0.0312,1 -1,0.0312 z"
 | 
			
		||||
       id="path11726"
 | 
			
		||||
       inkscape:connector-curvature="0"
 | 
			
		||||
       sodipodi:nodetypes="sccssccsssssssccccccccccccsssssccccccccccccccccccccccccccc" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.3 KiB  | 
@@ -13,102 +13,10 @@
 | 
			
		||||
   height="64px"
 | 
			
		||||
   id="svg3393"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   inkscape:version="0.92.3 (2405546, 2018-03-11)"
 | 
			
		||||
   sodipodi:docname="no-notifications.svg">
 | 
			
		||||
   inkscape:version="0.48.5 r10040"
 | 
			
		||||
   sodipodi:docname="New document 2">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs3395">
 | 
			
		||||
    <clipPath
 | 
			
		||||
       id="clipPath6262-0"
 | 
			
		||||
       clipPathUnits="userSpaceOnUse">
 | 
			
		||||
      <rect
 | 
			
		||||
         style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none"
 | 
			
		||||
         id="rect6264-6"
 | 
			
		||||
         width="3.8250003"
 | 
			
		||||
         height="6.3750005"
 | 
			
		||||
         x="26.849981"
 | 
			
		||||
         y="220.75" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <clipPath
 | 
			
		||||
       id="clipPath6258-0"
 | 
			
		||||
       clipPathUnits="userSpaceOnUse">
 | 
			
		||||
      <rect
 | 
			
		||||
         style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none"
 | 
			
		||||
         id="rect6260-6"
 | 
			
		||||
         width="2.8977275"
 | 
			
		||||
         height="5.3129687"
 | 
			
		||||
         x="26.965673"
 | 
			
		||||
         y="221.28162" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <clipPath
 | 
			
		||||
       id="clipPath6254-6"
 | 
			
		||||
       clipPathUnits="userSpaceOnUse">
 | 
			
		||||
      <rect
 | 
			
		||||
         style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:2;marker:none"
 | 
			
		||||
         id="rect6256-6"
 | 
			
		||||
         width="1.876245"
 | 
			
		||||
         height="4.8783236"
 | 
			
		||||
         x="26.998718"
 | 
			
		||||
         y="221.50153" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <clipPath
 | 
			
		||||
       id="clipPath8028-3"
 | 
			
		||||
       clipPathUnits="userSpaceOnUse">
 | 
			
		||||
      <path
 | 
			
		||||
         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
         d="m -73,-30 -7,-7 v -4.5 h 16.5 v 4.5 l -7.5,7 z"
 | 
			
		||||
         id="path8030-6"
 | 
			
		||||
         inkscape:connector-curvature="0"
 | 
			
		||||
         sodipodi:nodetypes="ccccccc" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <clipPath
 | 
			
		||||
       clipPathUnits="userSpaceOnUse"
 | 
			
		||||
       id="clipPath6810-7-87-7">
 | 
			
		||||
      <rect
 | 
			
		||||
         style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
 | 
			
		||||
         id="rect6812-2-4-5"
 | 
			
		||||
         width="14"
 | 
			
		||||
         height="11"
 | 
			
		||||
         x="21"
 | 
			
		||||
         y="281" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <clipPath
 | 
			
		||||
       id="clipPath6262"
 | 
			
		||||
       clipPathUnits="userSpaceOnUse">
 | 
			
		||||
      <rect
 | 
			
		||||
         style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none"
 | 
			
		||||
         id="rect6264"
 | 
			
		||||
         width="3.8250003"
 | 
			
		||||
         height="6.3750005"
 | 
			
		||||
         x="26.849981"
 | 
			
		||||
         y="220.75" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <clipPath
 | 
			
		||||
       id="clipPath6258"
 | 
			
		||||
       clipPathUnits="userSpaceOnUse">
 | 
			
		||||
      <rect
 | 
			
		||||
         style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none"
 | 
			
		||||
         id="rect6260"
 | 
			
		||||
         width="2.8977275"
 | 
			
		||||
         height="5.3129687"
 | 
			
		||||
         x="26.965673"
 | 
			
		||||
         y="221.28162" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <clipPath
 | 
			
		||||
       id="clipPath6254"
 | 
			
		||||
       clipPathUnits="userSpaceOnUse">
 | 
			
		||||
      <rect
 | 
			
		||||
         style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:2;marker:none"
 | 
			
		||||
         id="rect6256"
 | 
			
		||||
         width="1.876245"
 | 
			
		||||
         height="4.8783236"
 | 
			
		||||
         x="26.998718"
 | 
			
		||||
         y="221.50153" />
 | 
			
		||||
    </clipPath>
 | 
			
		||||
    <inkscape:path-effect
 | 
			
		||||
       effect="spiro"
 | 
			
		||||
       id="path-effect3951"
 | 
			
		||||
       is_visible="true" />
 | 
			
		||||
  </defs>
 | 
			
		||||
     id="defs3395" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#ffffff"
 | 
			
		||||
@@ -116,17 +24,17 @@
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.0"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="1"
 | 
			
		||||
     inkscape:cx="125.08157"
 | 
			
		||||
     inkscape:cy="-13.805087"
 | 
			
		||||
     inkscape:zoom="5.5"
 | 
			
		||||
     inkscape:cx="32"
 | 
			
		||||
     inkscape:cy="32"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="true"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:grid-bbox="true"
 | 
			
		||||
     inkscape:window-width="1664"
 | 
			
		||||
     inkscape:window-height="1034"
 | 
			
		||||
     inkscape:window-x="1479"
 | 
			
		||||
     inkscape:window-y="252"
 | 
			
		||||
     inkscape:window-width="697"
 | 
			
		||||
     inkscape:window-height="613"
 | 
			
		||||
     inkscape:window-x="100"
 | 
			
		||||
     inkscape:window-y="77"
 | 
			
		||||
     inkscape:window-maximized="0" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata3398">
 | 
			
		||||
@@ -146,7 +54,7 @@
 | 
			
		||||
     inkscape:groupmode="layer">
 | 
			
		||||
    <g
 | 
			
		||||
       style="display:inline"
 | 
			
		||||
       transform="matrix(4,0,0,4,-79.702662,-0.35415646)"
 | 
			
		||||
       transform="matrix(4,0,0,4,0.29733827,-0.35415646)"
 | 
			
		||||
       id="g19245">
 | 
			
		||||
      <g
 | 
			
		||||
         id="g19247"
 | 
			
		||||
@@ -163,15 +71,15 @@
 | 
			
		||||
         transform="translate(-323.02908,-649.02581)">
 | 
			
		||||
        <path
 | 
			
		||||
           inkscape:connector-curvature="0"
 | 
			
		||||
           d="m 331.9377,653 c 0.0187,0.16677 0.0625,0.32822 0.0625,0.5 0,2.48528 -2.01472,4.5 -4.5,4.5 -0.11769,0 -0.22834,-0.0224 -0.34375,-0.0312 v 2.21875 c 0,1.00412 0.80838,1.8125 1.8125,1.8125 l 1.54511,-5e-5 2,2.04688 2.0625,-2.04688 h 1.61114 c 1.00413,0 1.8125,-0.80838 1.8125,-1.8125 v -5.375 c 0,-1.00412 -0.80837,-1.8125 -1.8125,-1.8125 z"
 | 
			
		||||
           d="m 331.9377,653 c 0.0187,0.16677 0.0625,0.32822 0.0625,0.5 0,2.48528 -2.01472,4.5 -4.5,4.5 -0.11769,0 -0.22834,-0.0224 -0.34375,-0.0312 l 0,2.21875 c 0,1.00412 0.80838,1.8125 1.8125,1.8125 l 1.54511,-5e-5 2,2.04688 2.0625,-2.04688 1.61114,0 c 1.00413,0 1.8125,-0.80838 1.8125,-1.8125 l 0,-5.375 c 0,-1.00412 -0.80837,-1.8125 -1.8125,-1.8125 z"
 | 
			
		||||
           id="path19253"
 | 
			
		||||
           sodipodi:nodetypes="csscsscccssssc"
 | 
			
		||||
           style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#c3c3c3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
 | 
			
		||||
           style="opacity:0.5;color:#000000;fill:#c3c3c3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
 | 
			
		||||
        <path
 | 
			
		||||
           inkscape:connector-curvature="0"
 | 
			
		||||
           d="m 327.5002,650 c -1.933,0 -3.5,1.567 -3.5,3.5 0,1.933 1.567,3.5 3.5,3.5 1.933,0 3.5,-1.567 3.5,-3.5 0,-1.933 -1.567,-3.5 -3.5,-3.5 z m -0.53125,1 h 1.03125 l -0.0625,1.375 a 0.19951718,0.19951718 0 0 0 0,0.0625 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0.125,0.125 0.19951718,0.19951718 0 0 0 0.0312,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 l 1.15625,-0.75 0.5,0.90625 -1.21875,0.625 a 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0312,0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0.0937 0.19951718,0.19951718 0 0 0 0,0.0625 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0.0312,0.0625 0.19951718,0.19951718 0 0 0 0.0312,0.0312 0.19951718,0.19951718 0 0 0 0.0312,0.0312 l 1.25,0.625 -0.53125,0.90625 -1.15625,-0.781 a 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0625,0 0.19951718,0.19951718 0 0 0 -0.125,0.0937 0.19951718,0.19951718 0 0 0 -0.0312,0.0312 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0,0.0625 L 328.0002,656 h -1.03125 l 0.0937,-1.375 a 0.19951718,0.19951718 0 0 0 -0.0312,-0.0937 0.19951718,0.19951718 0 0 0 -0.0312,-0.0625 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0937,0.0312 l -1.1875,0.78125 -0.5,-0.90625 1.25,-0.625 a 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 0,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,-0.0625 0.19951718,0.19951718 0 0 0 -0.0312,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0 l -1.25,-0.625 0.5,-0.90625 1.1875,0.75 a 0.19951718,0.19951718 0 0 0 0.0312,0.0312 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0312,0 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 z"
 | 
			
		||||
           d="m 327.5002,650 c -1.933,0 -3.5,1.567 -3.5,3.5 0,1.933 1.567,3.5 3.5,3.5 1.933,0 3.5,-1.567 3.5,-3.5 0,-1.933 -1.567,-3.5 -3.5,-3.5 z m -0.53125,1 1.03125,0 -0.0625,1.375 a 0.19951718,0.19951718 0 0 0 0,0.0625 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0.125,0.125 0.19951718,0.19951718 0 0 0 0.0312,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 l 1.15625,-0.75 0.5,0.90625 -1.21875,0.625 a 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0312,0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0.0937 0.19951718,0.19951718 0 0 0 0,0.0625 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0.0312,0.0625 0.19951718,0.19951718 0 0 0 0.0312,0.0312 0.19951718,0.19951718 0 0 0 0.0312,0.0312 l 1.25,0.625 -0.53125,0.90625 -1.15625,-0.781 a 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0625,0 0.19951718,0.19951718 0 0 0 -0.125,0.0937 0.19951718,0.19951718 0 0 0 -0.0312,0.0312 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0,0.0625 l 0.0625,1.3751 -1.03125,0 0.0937,-1.375 a 0.19951718,0.19951718 0 0 0 -0.0312,-0.0937 0.19951718,0.19951718 0 0 0 -0.0312,-0.0625 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0937,0.0312 l -1.1875,0.78125 -0.5,-0.90625 1.25,-0.625 a 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 0,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,-0.0625 0.19951718,0.19951718 0 0 0 -0.0312,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0 l -1.25,-0.625 0.5,-0.90625 1.1875,0.75 a 0.19951718,0.19951718 0 0 0 0.0312,0.0312 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0312,0 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 L 326.96895,651 z"
 | 
			
		||||
           id="path19255"
 | 
			
		||||
           style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate" />
 | 
			
		||||
           style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
 | 
			
		||||
      </g>
 | 
			
		||||
      <g
 | 
			
		||||
         id="g19257"
 | 
			
		||||
@@ -202,22 +110,5 @@
 | 
			
		||||
         style="display:inline"
 | 
			
		||||
         transform="translate(-323.02908,-649.02581)" />
 | 
			
		||||
    </g>
 | 
			
		||||
    <g
 | 
			
		||||
       style="opacity:1;vector-effect:none;fill:#bebebe;fill-opacity:1;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;enable-background:new"
 | 
			
		||||
       inkscape:label="preferences-system-notifications"
 | 
			
		||||
       id="g13967"
 | 
			
		||||
       transform="matrix(4,0,0,4,-1044.0008,-2172)">
 | 
			
		||||
      <path
 | 
			
		||||
         inkscape:connector-curvature="0"
 | 
			
		||||
         d="m 268.94244,544.94838 c -2.20914,0 -3.33013,1.5 -4,4 l -1,5 c -0.10831,0.54156 -0.44772,1 -1,1 v 1 h 12 v -1 c -0.55229,0 -0.89169,-0.45844 -1,-1 l -1,-5 c -0.53033,-2.5 -1.79086,-4 -4,-4 z"
 | 
			
		||||
         id="path40220"
 | 
			
		||||
         sodipodi:nodetypes="ccsccccscc"
 | 
			
		||||
         style="opacity:1;vector-effect:none;fill:#bebebe;fill-opacity:1;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;paint-order:normal" />
 | 
			
		||||
      <path
 | 
			
		||||
         inkscape:connector-curvature="0"
 | 
			
		||||
         d="m 269.11822,556.94838 a 1.5,1.5 0 0 0 1.41211,1 1.5,1.5 0 0 0 1.41211,-1 z"
 | 
			
		||||
         id="path40774"
 | 
			
		||||
         style="opacity:1;vector-effect:none;fill:#bebebe;fill-opacity:1;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;paint-order:normal" />
 | 
			
		||||
    </g>
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.1 KiB  | 
@@ -350,19 +350,16 @@ var ShellUserVerifier = new Lang.Class({
 | 
			
		||||
        try {
 | 
			
		||||
            this._clearUserVerifier();
 | 
			
		||||
            this._userVerifier = client.open_reauthentication_channel_finish(result);
 | 
			
		||||
        } catch(e) {
 | 
			
		||||
            if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
 | 
			
		||||
                return;
 | 
			
		||||
            if (e.matches(Gio.DBusError, Gio.DBusError.ACCESS_DENIED) &&
 | 
			
		||||
        } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
 | 
			
		||||
            return;
 | 
			
		||||
        } catch(e if e.matches(Gio.DBusError, Gio.DBusError.ACCESS_DENIED) &&
 | 
			
		||||
                !this._reauthOnly) {
 | 
			
		||||
                // Gdm emits org.freedesktop.DBus.Error.AccessDenied when there
 | 
			
		||||
                // is no session to reauthenticate. Fall back to performing
 | 
			
		||||
                // verification from this login session
 | 
			
		||||
                client.get_user_verifier(this._cancellable,
 | 
			
		||||
                                         this._userVerifierGot.bind(this));
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Gdm emits org.freedesktop.DBus.Error.AccessDenied when there is
 | 
			
		||||
            // no session to reauthenticate. Fall back to performing verification
 | 
			
		||||
            // from this login session
 | 
			
		||||
            client.get_user_verifier(this._cancellable, this._userVerifierGot.bind(this));
 | 
			
		||||
            return;
 | 
			
		||||
        } catch(e) {
 | 
			
		||||
            this._reportInitError('Failed to open reauthentication channel', e);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -377,9 +374,9 @@ var ShellUserVerifier = new Lang.Class({
 | 
			
		||||
        try {
 | 
			
		||||
            this._clearUserVerifier();
 | 
			
		||||
            this._userVerifier = client.get_user_verifier_finish(result);
 | 
			
		||||
        } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
 | 
			
		||||
            return;
 | 
			
		||||
        } catch(e) {
 | 
			
		||||
            if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
 | 
			
		||||
                return;
 | 
			
		||||
            this._reportInitError('Failed to obtain user verifier', e);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -437,9 +434,9 @@ var ShellUserVerifier = new Lang.Class({
 | 
			
		||||
                                                               (obj, result) => {
 | 
			
		||||
               try {
 | 
			
		||||
                   obj.call_begin_verification_for_user_finish(result);
 | 
			
		||||
               } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
 | 
			
		||||
                   return;
 | 
			
		||||
               } catch(e) {
 | 
			
		||||
                   if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
 | 
			
		||||
                       return;
 | 
			
		||||
                   this._reportInitError('Failed to start verification for user', e);
 | 
			
		||||
                   return;
 | 
			
		||||
               }
 | 
			
		||||
@@ -452,9 +449,9 @@ var ShellUserVerifier = new Lang.Class({
 | 
			
		||||
                                                      (obj, result) => {
 | 
			
		||||
               try {
 | 
			
		||||
                   obj.call_begin_verification_finish(result);
 | 
			
		||||
               } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
 | 
			
		||||
                   return;
 | 
			
		||||
               } catch(e) {
 | 
			
		||||
                   if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
 | 
			
		||||
                       return;
 | 
			
		||||
                   this._reportInitError('Failed to start verification', e);
 | 
			
		||||
                   return;
 | 
			
		||||
               }
 | 
			
		||||
 
 | 
			
		||||
@@ -130,7 +130,6 @@
 | 
			
		||||
    <file>ui/status/rfkill.js</file>
 | 
			
		||||
    <file>ui/status/volume.js</file>
 | 
			
		||||
    <file>ui/status/bluetooth.js</file>
 | 
			
		||||
    <file>ui/status/remoteAccess.js</file>
 | 
			
		||||
    <file>ui/status/screencast.js</file>
 | 
			
		||||
    <file>ui/status/system.js</file>
 | 
			
		||||
    <file>ui/status/thunderbolt.js</file>
 | 
			
		||||
 
 | 
			
		||||
@@ -115,11 +115,6 @@ var IBusManager = new Lang.Class({
 | 
			
		||||
                                                         object_path: IBus.PATH_PANEL });
 | 
			
		||||
            this._candidatePopup.setPanelService(this._panelService);
 | 
			
		||||
            this._panelService.connect('update-property', this._updateProperty.bind(this));
 | 
			
		||||
            this._panelService.connect('set-cursor-location', (ps, x, y, w, h) => {
 | 
			
		||||
                let cursorLocation = { x, y, width: w, height: h };
 | 
			
		||||
                this.emit('set-cursor-location', cursorLocation);
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                // IBus versions older than 1.5.10 have a bug which
 | 
			
		||||
                // causes spurious set-content-type emissions when
 | 
			
		||||
 
 | 
			
		||||
@@ -15,8 +15,6 @@ var InputMethod = new Lang.Class({
 | 
			
		||||
        this._purpose = 0;
 | 
			
		||||
        this._enabled = true;
 | 
			
		||||
        this._currentFocus = null;
 | 
			
		||||
        this._currentEvent = null;
 | 
			
		||||
        this._doForwardEvent = false;
 | 
			
		||||
        this._ibus = IBus.Bus.new_async();
 | 
			
		||||
        this._ibus.connect('connected', this._onConnected.bind(this));
 | 
			
		||||
        this._ibus.connect('disconnected', this._clear.bind(this));
 | 
			
		||||
@@ -27,9 +25,6 @@ var InputMethod = new Lang.Class({
 | 
			
		||||
                                                                 this._onSourceChanged.bind(this));
 | 
			
		||||
        this._currentSource = this._inputSourceManager.currentSource;
 | 
			
		||||
 | 
			
		||||
        let deviceManager = Clutter.DeviceManager.get_default();
 | 
			
		||||
        this._virtualDevice = deviceManager.create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE);
 | 
			
		||||
 | 
			
		||||
        if (this._ibus.is_connected())
 | 
			
		||||
            this._onConnected();
 | 
			
		||||
    },
 | 
			
		||||
@@ -69,7 +64,6 @@ var InputMethod = new Lang.Class({
 | 
			
		||||
        this._context.connect('commit-text', this._onCommitText.bind(this));
 | 
			
		||||
        this._context.connect('delete-surrounding-text', this._onDeleteSurroundingText.bind(this));
 | 
			
		||||
        this._context.connect('update-preedit-text', this._onUpdatePreeditText.bind(this));
 | 
			
		||||
        this._context.connect('forward-key-event', this._onForwardKeyEvent.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._updateCapabilities();
 | 
			
		||||
    },
 | 
			
		||||
@@ -102,24 +96,6 @@ var InputMethod = new Lang.Class({
 | 
			
		||||
        this.set_preedit_text(str, pos);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onForwardKeyEvent(context, keyval, keycode, state) {
 | 
			
		||||
        let press = (state & IBus.ModifierType.RELEASE_MASK) == 0;
 | 
			
		||||
 | 
			
		||||
        if (this._currentEvent) {
 | 
			
		||||
            // If we are handling this same event in filter_key_press(),
 | 
			
		||||
            // just let it go through, sending the same event again will
 | 
			
		||||
            // be silenced away because the key counts as pressed.
 | 
			
		||||
            if (this._currentEvent.get_key_symbol() == keyval &&
 | 
			
		||||
                (this._currentEvent.type() == Clutter.EventType.KEY_PRESS) == press) {
 | 
			
		||||
                this._doForwardEvent = true;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._virtualDevice.notify_key(Clutter.get_current_event_time(), keycode,
 | 
			
		||||
                                       press ? Clutter.KeyState.PRESSED : Clutter.KeyState.RELEASED);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    vfunc_focus_in(focus) {
 | 
			
		||||
        this._currentFocus = focus;
 | 
			
		||||
        if (this._context) {
 | 
			
		||||
@@ -221,23 +197,13 @@ var InputMethod = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        if (event.type() == Clutter.EventType.KEY_RELEASE)
 | 
			
		||||
            state |= IBus.ModifierType.RELEASE_MASK;
 | 
			
		||||
 | 
			
		||||
        this._currentEvent = event;
 | 
			
		||||
        this._doForwardEvent = false;
 | 
			
		||||
 | 
			
		||||
        this._context.process_key_event_async(event.get_key_symbol(),
 | 
			
		||||
                                              event.get_key_code() - 8, // Convert XKB keycodes to evcodes
 | 
			
		||||
                                              state, -1, null,
 | 
			
		||||
                                              (context, res) => {
 | 
			
		||||
                                                  try {
 | 
			
		||||
                                                      let retval = context.process_key_event_async_finish(res);
 | 
			
		||||
 | 
			
		||||
                                                      if (this._doForwardEvent)
 | 
			
		||||
                                                          retval = false;
 | 
			
		||||
 | 
			
		||||
                                                      this.notify_key_event(event, retval);
 | 
			
		||||
                                                      this._doForwardEvent = false;
 | 
			
		||||
                                                      this._currentEvent = null;
 | 
			
		||||
                                                  } catch (e) {
 | 
			
		||||
                                                      log('Error processing key on IM: ' + e.message);
 | 
			
		||||
                                                  }
 | 
			
		||||
 
 | 
			
		||||
@@ -40,24 +40,14 @@ const SystemdLoginSessionIface = '<node> \
 | 
			
		||||
<signal name="Lock" /> \
 | 
			
		||||
<signal name="Unlock" /> \
 | 
			
		||||
<property name="Active" type="b" access="read" /> \
 | 
			
		||||
<property name="Class" type="s" access="read" /> \
 | 
			
		||||
<property name="Id" type="s" access="read" /> \
 | 
			
		||||
<method name="SetLockedHint"> \
 | 
			
		||||
    <arg type="b" direction="in"/> \
 | 
			
		||||
</method> \
 | 
			
		||||
</interface> \
 | 
			
		||||
</node>';
 | 
			
		||||
 | 
			
		||||
const SystemdLoginUserIface = '<node> \
 | 
			
		||||
<interface name="org.freedesktop.login1.User"> \
 | 
			
		||||
<property name="Display" type="(so)" access="read" /> \
 | 
			
		||||
<property name="Sessions" type="a(so)" access="read" /> \
 | 
			
		||||
</interface> \
 | 
			
		||||
</node>';
 | 
			
		||||
 | 
			
		||||
const SystemdLoginManager = Gio.DBusProxy.makeProxyWrapper(SystemdLoginManagerIface);
 | 
			
		||||
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
 | 
			
		||||
const SystemdLoginUser = Gio.DBusProxy.makeProxyWrapper(SystemdLoginUserIface);
 | 
			
		||||
 | 
			
		||||
function haveSystemd() {
 | 
			
		||||
    return GLib.access("/run/systemd/seats", 0) >= 0;
 | 
			
		||||
@@ -119,9 +109,6 @@ var LoginManagerSystemd = new Lang.Class({
 | 
			
		||||
        this._proxy = new SystemdLoginManager(Gio.DBus.system,
 | 
			
		||||
                                              'org.freedesktop.login1',
 | 
			
		||||
                                              '/org/freedesktop/login1');
 | 
			
		||||
        this._userProxy = new SystemdLoginUser(Gio.DBus.system,
 | 
			
		||||
                                               'org.freedesktop.login1',
 | 
			
		||||
                                               '/org/freedesktop/login1/user/self');
 | 
			
		||||
        this._proxy.connectSignal('PrepareForSleep',
 | 
			
		||||
                                  this._prepareForSleep.bind(this));
 | 
			
		||||
    },
 | 
			
		||||
@@ -134,31 +121,8 @@ var LoginManagerSystemd = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        let sessionId = GLib.getenv('XDG_SESSION_ID');
 | 
			
		||||
        if (!sessionId) {
 | 
			
		||||
            log('Unset XDG_SESSION_ID, getCurrentSessionProxy() called outside a user session. Asking logind directly.');
 | 
			
		||||
            let [session, objectPath] = this._userProxy.Display;
 | 
			
		||||
            if (session) {
 | 
			
		||||
                log(`Will monitor session ${session}`);
 | 
			
		||||
                sessionId = session;
 | 
			
		||||
            } else {
 | 
			
		||||
                log('Failed to find "Display" session; are we the greeter?');
 | 
			
		||||
 | 
			
		||||
                for (let [session, objectPath] of this._userProxy.Sessions) {
 | 
			
		||||
                    let sessionProxy = new SystemdLoginSession(Gio.DBus.system,
 | 
			
		||||
                                                               'org.freedesktop.login1',
 | 
			
		||||
                                                               objectPath);
 | 
			
		||||
                    log(`Considering ${session}, class=${sessionProxy.Class}`);
 | 
			
		||||
                    if (sessionProxy.Class == 'greeter') {
 | 
			
		||||
                        log(`Yes, will monitor session ${session}`);
 | 
			
		||||
                        sessionId = session;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!sessionId) {
 | 
			
		||||
                    log('No, failed to get session from logind.');
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            log('Unset XDG_SESSION_ID, getCurrentSessionProxy() called outside a user session.');
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._proxy.GetSessionRemote(sessionId, (result, error) => {
 | 
			
		||||
 
 | 
			
		||||
@@ -502,8 +502,7 @@ var CyclerPopup = new Lang.Class({
 | 
			
		||||
    _finish() {
 | 
			
		||||
        let window = this._items[this._selectedIndex];
 | 
			
		||||
        let ws = window.get_workspace();
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWs = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWs = global.screen.get_active_workspace();
 | 
			
		||||
 | 
			
		||||
        if (window.minimized) {
 | 
			
		||||
            Main.wm.skipNextEffect(window.get_compositor_private());
 | 
			
		||||
@@ -573,14 +572,7 @@ var WindowSwitcherPopup = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getWindowList() {
 | 
			
		||||
        let workspace = null;
 | 
			
		||||
 | 
			
		||||
        if (this._settings.get_boolean('current-workspace-only')) {
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
            workspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
 | 
			
		||||
        return getWindows(workspace);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -628,14 +620,7 @@ var WindowCyclerPopup = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getWindows() {
 | 
			
		||||
        let workspace = null;
 | 
			
		||||
 | 
			
		||||
        if (this._settings.get_boolean('current-workspace-only')) {
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
            workspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
 | 
			
		||||
        return getWindows(workspace);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -684,14 +669,8 @@ var AppSwitcher = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        let windowTracker = Shell.WindowTracker.get_default();
 | 
			
		||||
        let settings = new Gio.Settings({ schema_id: 'org.gnome.shell.app-switcher' });
 | 
			
		||||
 | 
			
		||||
        let workspace = null;
 | 
			
		||||
        if (settings.get_boolean('current-workspace-only')) {
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
            workspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
 | 
			
		||||
                                                                       : null;
 | 
			
		||||
        let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
 | 
			
		||||
 | 
			
		||||
        // Construct the AppIcons, add to the popup
 | 
			
		||||
 
 | 
			
		||||
@@ -1862,8 +1862,7 @@ var AppIconMenu = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        // Display the app windows menu items and the separator between windows
 | 
			
		||||
        // of the current desktop and other windows.
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWorkspace = global.screen.get_active_workspace();
 | 
			
		||||
        let separatorShown = windows.length > 0 && windows[0].get_workspace() != activeWorkspace;
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < windows.length; i++) {
 | 
			
		||||
 
 | 
			
		||||
@@ -240,7 +240,7 @@ var Background = new Lang.Class({
 | 
			
		||||
                                        file: null,
 | 
			
		||||
                                        style: null });
 | 
			
		||||
 | 
			
		||||
        this.background = new Meta.Background({ meta_display: global.display });
 | 
			
		||||
        this.background = new Meta.Background({ meta_screen: global.screen });
 | 
			
		||||
        this.background._delegate = this;
 | 
			
		||||
 | 
			
		||||
        this._settings = params.settings;
 | 
			
		||||
@@ -499,12 +499,12 @@ var SystemBackground = new Lang.Class({
 | 
			
		||||
        let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png');
 | 
			
		||||
 | 
			
		||||
        if (_systemBackground == null) {
 | 
			
		||||
            _systemBackground = new Meta.Background({ meta_display: global.display });
 | 
			
		||||
            _systemBackground = new Meta.Background({ meta_screen: global.screen });
 | 
			
		||||
            _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR);
 | 
			
		||||
            _systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.actor = new Meta.BackgroundActor({ meta_display: global.display,
 | 
			
		||||
        this.actor = new Meta.BackgroundActor({ meta_screen: global.screen,
 | 
			
		||||
                                                monitor: 0,
 | 
			
		||||
                                                background: _systemBackground });
 | 
			
		||||
 | 
			
		||||
@@ -538,10 +538,8 @@ var BackgroundSource = new Lang.Class({
 | 
			
		||||
        this._settings = new Gio.Settings({ schema_id: settingsSchema });
 | 
			
		||||
        this._backgrounds = [];
 | 
			
		||||
 | 
			
		||||
        let monitorManager = Meta.MonitorManager.get();
 | 
			
		||||
        this._monitorsChangedId =
 | 
			
		||||
            monitorManager.connect('monitors-changed',
 | 
			
		||||
                                   this._onMonitorsChanged.bind(this));
 | 
			
		||||
        this._monitorsChangedId = global.screen.connect('monitors-changed',
 | 
			
		||||
                                                        this._onMonitorsChanged.bind(this));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onMonitorsChanged() {
 | 
			
		||||
@@ -606,8 +604,7 @@ var BackgroundSource = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    destroy() {
 | 
			
		||||
        let monitorManager = Meta.MonitorManager.get();
 | 
			
		||||
        monitorManager.disconnect(this._monitorsChangedId);
 | 
			
		||||
        global.screen.disconnect(this._monitorsChangedId);
 | 
			
		||||
 | 
			
		||||
        for (let monitorIndex in this._backgrounds) {
 | 
			
		||||
            let background = this._backgrounds[monitorIndex];
 | 
			
		||||
@@ -754,7 +751,7 @@ var BackgroundManager = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _createBackgroundActor() {
 | 
			
		||||
        let background = this._backgroundSource.getBackground(this._monitorIndex);
 | 
			
		||||
        let backgroundActor = new Meta.BackgroundActor({ meta_display: global.display,
 | 
			
		||||
        let backgroundActor = new Meta.BackgroundActor({ meta_screen: global.screen,
 | 
			
		||||
                                                         monitor: this._monitorIndex,
 | 
			
		||||
                                                         background: background.background,
 | 
			
		||||
                                                         vignette: this._vignette,
 | 
			
		||||
 
 | 
			
		||||
@@ -821,8 +821,6 @@ var EventsSection = new Lang.Class({
 | 
			
		||||
        this._desktopSettings.connect('changed', this._reloadEvents.bind(this));
 | 
			
		||||
        this._eventSource = new EmptyEventSource();
 | 
			
		||||
 | 
			
		||||
        this._messageById = new Map();
 | 
			
		||||
 | 
			
		||||
        this.parent();
 | 
			
		||||
 | 
			
		||||
        this._title = new St.Button({ style_class: 'events-section-title',
 | 
			
		||||
@@ -877,32 +875,20 @@ var EventsSection = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._reloading = true;
 | 
			
		||||
 | 
			
		||||
        this._list.destroy_all_children();
 | 
			
		||||
 | 
			
		||||
        let periodBegin = _getBeginningOfDay(this._date);
 | 
			
		||||
        let periodEnd = _getEndOfDay(this._date);
 | 
			
		||||
        let events = this._eventSource.getEvents(periodBegin, periodEnd);
 | 
			
		||||
 | 
			
		||||
        let ids = events.map(e => e.id);
 | 
			
		||||
        this._messageById.forEach((message, id) => {
 | 
			
		||||
            if (ids.includes(id))
 | 
			
		||||
                return;
 | 
			
		||||
            this._messageById.delete(id);
 | 
			
		||||
            this.removeMessage(message);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < events.length; i++) {
 | 
			
		||||
            let event = events[i];
 | 
			
		||||
 | 
			
		||||
            let message = this._messageById.get(event.id);
 | 
			
		||||
            if (!message) {
 | 
			
		||||
                message = new EventMessage(event, this._date);
 | 
			
		||||
                message.connect('close', () => {
 | 
			
		||||
                    this._ignoreEvent(event);
 | 
			
		||||
                });
 | 
			
		||||
                this._messageById.set(event.id, message);
 | 
			
		||||
                this.addMessage(message, false);
 | 
			
		||||
            } else {
 | 
			
		||||
                this.moveMessage(message, i, false);
 | 
			
		||||
            }
 | 
			
		||||
            let message = new EventMessage(event, this._date);
 | 
			
		||||
            message.connect('close', () => {
 | 
			
		||||
                this._ignoreEvent(event);
 | 
			
		||||
            });
 | 
			
		||||
            this.addMessage(message, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._reloading = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -100,7 +100,7 @@ var CloseDialog = new Lang.Class({
 | 
			
		||||
        if (this._dialog != null)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        Meta.disable_unredirect_for_display(global.display);
 | 
			
		||||
        Meta.disable_unredirect_for_screen(global.screen);
 | 
			
		||||
 | 
			
		||||
        this._timeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ALIVE_TIMEOUT,
 | 
			
		||||
            () => {
 | 
			
		||||
@@ -128,7 +128,7 @@ var CloseDialog = new Lang.Class({
 | 
			
		||||
        if (this._dialog == null)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        Meta.enable_unredirect_for_display(global.display);
 | 
			
		||||
        Meta.enable_unredirect_for_screen(global.screen);
 | 
			
		||||
 | 
			
		||||
        GLib.source_remove(this._timeoutId);
 | 
			
		||||
        this._timeoutId = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -85,11 +85,9 @@ var CtrlAltTabManager = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        // And add the windows metacity would show in its Ctrl-Alt-Tab list
 | 
			
		||||
        if (Main.sessionMode.hasWindows && !Main.overview.visible) {
 | 
			
		||||
            let display = global.display;
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
            let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
            let windows = display.get_tab_list(Meta.TabList.DOCKS,
 | 
			
		||||
                                               activeWorkspace);
 | 
			
		||||
            let screen = global.screen;
 | 
			
		||||
            let display = screen.get_display();
 | 
			
		||||
            let windows = display.get_tab_list(Meta.TabList.DOCKS, screen.get_active_workspace ());
 | 
			
		||||
            let windowTracker = Shell.WindowTracker.get_default();
 | 
			
		||||
            let textureCache = St.TextureCache.get_default();
 | 
			
		||||
            for (let i = 0; i < windows.length; i++) {
 | 
			
		||||
@@ -133,7 +131,7 @@ var CtrlAltTabManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _focusWindows(timestamp) {
 | 
			
		||||
        global.display.focus_default_window(timestamp);
 | 
			
		||||
        global.screen.focus_default_window(timestamp);
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								js/ui/dnd.js
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								js/ui/dnd.js
									
									
									
									
									
								
							@@ -280,7 +280,7 @@ var _Draggable = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._touchSequence = sequence;
 | 
			
		||||
        this._grabEvents();
 | 
			
		||||
        global.display.set_cursor(Meta.Cursor.DND_IN_DRAG);
 | 
			
		||||
        global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG);
 | 
			
		||||
 | 
			
		||||
        this._dragX = this._dragStartX = stageX;
 | 
			
		||||
        this._dragY = this._dragStartY = stageY;
 | 
			
		||||
@@ -412,7 +412,7 @@ var _Draggable = new Lang.Class({
 | 
			
		||||
            if (motionFunc) {
 | 
			
		||||
                let result = motionFunc(dragEvent);
 | 
			
		||||
                if (result != DragMotionResult.CONTINUE) {
 | 
			
		||||
                    global.display.set_cursor(DRAG_CURSOR_MAP[result]);
 | 
			
		||||
                    global.screen.set_cursor(DRAG_CURSOR_MAP[result]);
 | 
			
		||||
                    return GLib.SOURCE_REMOVE;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -430,13 +430,13 @@ var _Draggable = new Lang.Class({
 | 
			
		||||
                                                             targY,
 | 
			
		||||
                                                             0);
 | 
			
		||||
                if (result != DragMotionResult.CONTINUE) {
 | 
			
		||||
                    global.display.set_cursor(DRAG_CURSOR_MAP[result]);
 | 
			
		||||
                    global.screen.set_cursor(DRAG_CURSOR_MAP[result]);
 | 
			
		||||
                    return GLib.SOURCE_REMOVE;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            target = target.get_parent();
 | 
			
		||||
        }
 | 
			
		||||
        global.display.set_cursor(Meta.Cursor.DND_IN_DRAG);
 | 
			
		||||
        global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG);
 | 
			
		||||
        return GLib.SOURCE_REMOVE;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -509,7 +509,7 @@ var _Draggable = new Lang.Class({
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    this._dragInProgress = false;
 | 
			
		||||
                    global.display.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
                    global.screen.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
                    this.emit('drag-end', event.get_time(), true);
 | 
			
		||||
                    this._dragComplete();
 | 
			
		||||
                    return true;
 | 
			
		||||
@@ -561,7 +561,7 @@ var _Draggable = new Lang.Class({
 | 
			
		||||
        let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
 | 
			
		||||
 | 
			
		||||
        if (this._actorDestroyed) {
 | 
			
		||||
            global.display.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
            global.screen.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
            if (!this._buttonDown)
 | 
			
		||||
                this._dragComplete();
 | 
			
		||||
            this.emit('drag-end', eventTime, false);
 | 
			
		||||
@@ -620,7 +620,7 @@ var _Draggable = new Lang.Class({
 | 
			
		||||
        if (!this._buttonDown)
 | 
			
		||||
            this._dragComplete();
 | 
			
		||||
 | 
			
		||||
        global.display.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
        global.screen.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onAnimationComplete(dragActor, eventTime) {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,9 +27,9 @@ var EdgeDragAction = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _getMonitorRect(x, y) {
 | 
			
		||||
        let rect = new Meta.Rectangle({ x: x - 1, y: y - 1, width: 1, height: 1 });
 | 
			
		||||
        let monitorIndex = global.display.get_monitor_index_for_rect(rect);
 | 
			
		||||
        let monitorIndex = global.screen.get_monitor_index_for_rect(rect);
 | 
			
		||||
 | 
			
		||||
        return global.display.get_monitor_geometry(monitorIndex);
 | 
			
		||||
        return global.screen.get_monitor_geometry(monitorIndex);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    vfunc_gesture_prepare(action, actor) {
 | 
			
		||||
 
 | 
			
		||||
@@ -697,14 +697,7 @@ var EndSessionDialog = new Lang.Class({
 | 
			
		||||
                if (proxy.State == 'closing')
 | 
			
		||||
                    continue;
 | 
			
		||||
 | 
			
		||||
                let sessionId = GLib.getenv('XDG_SESSION_ID');
 | 
			
		||||
                if (!sessionId)
 | 
			
		||||
                    this._loginManager.getCurrentSessionProxy(currentSessionProxy => {
 | 
			
		||||
                        sessionId = currentSessionProxy.Id;
 | 
			
		||||
                        log(`endSessionDialog: No XDG_SESSION_ID, fetched from logind: ${sessionId}`);
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                if (proxy.Id == sessionId)
 | 
			
		||||
                if (proxy.Id == GLib.getenv('XDG_SESSION_ID'))
 | 
			
		||||
                    continue;
 | 
			
		||||
 | 
			
		||||
                let session = { user: this._userManager.get_user(userName),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 | 
			
		||||
 | 
			
		||||
const FocusCaretTracker = imports.ui.focusCaretTracker;
 | 
			
		||||
const Atspi = imports.gi.Atspi;
 | 
			
		||||
const Clutter = imports.gi.Clutter;
 | 
			
		||||
const Gdk = imports.gi.Gdk;
 | 
			
		||||
@@ -12,7 +13,6 @@ const Signals = imports.signals;
 | 
			
		||||
const St = imports.gi.St;
 | 
			
		||||
const InputSourceManager = imports.ui.status.keyboard;
 | 
			
		||||
 | 
			
		||||
const IBusManager = imports.misc.ibusManager;
 | 
			
		||||
const BoxPointer = imports.ui.boxpointer;
 | 
			
		||||
const Layout = imports.ui.layout;
 | 
			
		||||
const Main = imports.ui.main;
 | 
			
		||||
@@ -261,7 +261,6 @@ var Key = new Lang.Class({
 | 
			
		||||
        this._extended_keyboard = null;
 | 
			
		||||
        this._pressTimeoutId = 0;
 | 
			
		||||
        this._capturedPress = false;
 | 
			
		||||
 | 
			
		||||
        this._capturedEventId = 0;
 | 
			
		||||
        this._unmapId = 0;
 | 
			
		||||
        this._longPress = false;
 | 
			
		||||
@@ -485,79 +484,6 @@ var KeyboardModel = new Lang.Class({
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var FocusTracker = new Lang.Class({
 | 
			
		||||
    Name: 'FocusTracker',
 | 
			
		||||
 | 
			
		||||
    _init() {
 | 
			
		||||
        this._currentWindow = null;
 | 
			
		||||
        this._currentWindowPositionId = 0;
 | 
			
		||||
 | 
			
		||||
        global.display.connect('notify::focus-window', () => {
 | 
			
		||||
            this._setCurrentWindow(global.display.focus_window);
 | 
			
		||||
            this.emit('window-changed', this._currentWindow);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        /* Valid for wayland clients */
 | 
			
		||||
        Main.inputMethod.connect('cursor-location-changed', (o, rect) => {
 | 
			
		||||
            let newRect = { x: rect.get_x(), y: rect.get_y(), width: rect.get_width(), height: rect.get_height() };
 | 
			
		||||
            this._setCurrentRect(newRect);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        this._ibusManager = IBusManager.getIBusManager();
 | 
			
		||||
        this._ibusManager.connect('set-cursor-location', (manager, rect) => {
 | 
			
		||||
            /* Valid for X11 clients only */
 | 
			
		||||
            if (Main.inputMethod.currentFocus)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            this._setCurrentRect(rect);
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    get currentWindow() {
 | 
			
		||||
        return this._currentWindow;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _setCurrentWindow(window) {
 | 
			
		||||
        if (this._currentWindow)
 | 
			
		||||
            this._currentWindow.disconnect(this._currentWindowPositionId);
 | 
			
		||||
 | 
			
		||||
        this._currentWindow = window;
 | 
			
		||||
        if (window) {
 | 
			
		||||
            this._currentWindowPositionId = this._currentWindow.connect('position-changed', () => {
 | 
			
		||||
                if (global.display.get_grab_op() == Meta.GrabOp.NONE)
 | 
			
		||||
                    this.emit('position-changed');
 | 
			
		||||
                else
 | 
			
		||||
                    this.emit('reset');
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _setCurrentRect(rect) {
 | 
			
		||||
        if (this._currentWindow) {
 | 
			
		||||
            let frameRect = this._currentWindow.get_frame_rect();
 | 
			
		||||
            rect.x -= frameRect.x;
 | 
			
		||||
            rect.y -= frameRect.y;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._rect = rect;
 | 
			
		||||
        this.emit('position-changed');
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getCurrentRect() {
 | 
			
		||||
        let rect = { x: this._rect.x, y: this._rect.y,
 | 
			
		||||
                     width: this._rect.width, height: this._rect.height };
 | 
			
		||||
 | 
			
		||||
        if (this._currentWindow) {
 | 
			
		||||
            let frameRect = this._currentWindow.get_frame_rect();
 | 
			
		||||
            rect.x += frameRect.x;
 | 
			
		||||
            rect.y += frameRect.y;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return rect;
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
Signals.addSignalMethods(FocusTracker.prototype);
 | 
			
		||||
 | 
			
		||||
var Keyboard = new Lang.Class({
 | 
			
		||||
    Name: 'Keyboard',
 | 
			
		||||
 | 
			
		||||
@@ -565,10 +491,15 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
        this.actor = null;
 | 
			
		||||
        this._focusInExtendedKeys = false;
 | 
			
		||||
 | 
			
		||||
        this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker();
 | 
			
		||||
        this._focusCaretTracker.connect('focus-changed', this._onFocusChanged.bind(this));
 | 
			
		||||
        this._focusCaretTracker.connect('caret-moved', this._onCaretMoved.bind(this));
 | 
			
		||||
        this._languagePopup = null;
 | 
			
		||||
        this._currentAccessible = null;
 | 
			
		||||
        this._caretTrackingEnabled = false;
 | 
			
		||||
        this._updateCaretPositionId = 0;
 | 
			
		||||
        this._currentFocusWindow = null;
 | 
			
		||||
        this._animFocusedWindow = null;
 | 
			
		||||
        this._delayedAnimFocusWindow = null;
 | 
			
		||||
        this._originalWindowY = null;
 | 
			
		||||
 | 
			
		||||
        this._enableKeyboard = false; // a11y settings value
 | 
			
		||||
        this._enabled = false; // enabled state (by setting or device type)
 | 
			
		||||
@@ -579,14 +510,6 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
        this._lastDeviceId = null;
 | 
			
		||||
        this._suggestions = null;
 | 
			
		||||
 | 
			
		||||
        this._focusTracker = new FocusTracker();
 | 
			
		||||
        this._focusTracker.connect('position-changed', this._onFocusPositionChanged.bind(this));
 | 
			
		||||
        this._focusTracker.connect('reset', () => {
 | 
			
		||||
            this._delayedAnimFocusWindow = null;
 | 
			
		||||
            this._animFocusedWindow = null;
 | 
			
		||||
            this._oskFocusWindow = null;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        Meta.get_backend().connect('last-device-changed', 
 | 
			
		||||
            (backend, deviceId) => {
 | 
			
		||||
                let manager = Clutter.DeviceManager.get_default();
 | 
			
		||||
@@ -609,15 +532,102 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
        this._keyboardRestingId = 0;
 | 
			
		||||
 | 
			
		||||
        Main.layoutManager.connect('monitors-changed', this._relayout.bind(this));
 | 
			
		||||
        //Main.inputMethod.connect('cursor-location-changed', (o, rect) => {
 | 
			
		||||
        //    if (this._keyboardVisible) {
 | 
			
		||||
        //        let currentWindow = global.screen.get_display().focus_window;
 | 
			
		||||
        //        this.setCursorLocation(currentWindow, rect.get_x(), rect.get_y(),
 | 
			
		||||
        //                               rect.get_width(), rect.get_height());
 | 
			
		||||
        //    }
 | 
			
		||||
        //});
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    get visible() {
 | 
			
		||||
        return this._keyboardVisible;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onFocusPositionChanged(focusTracker) {
 | 
			
		||||
        let rect = focusTracker.getCurrentRect();
 | 
			
		||||
        this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height);
 | 
			
		||||
    _setCaretTrackerEnabled(enabled) {
 | 
			
		||||
        if (this._caretTrackingEnabled == enabled)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        this._caretTrackingEnabled = enabled;
 | 
			
		||||
 | 
			
		||||
        if (enabled) {
 | 
			
		||||
            this._focusCaretTracker.registerFocusListener();
 | 
			
		||||
            this._focusCaretTracker.registerCaretListener();
 | 
			
		||||
        } else {
 | 
			
		||||
            this._focusCaretTracker.deregisterFocusListener();
 | 
			
		||||
            this._focusCaretTracker.deregisterCaretListener();
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _updateCaretPosition(accessible) {
 | 
			
		||||
        if (this._updateCaretPositionId)
 | 
			
		||||
            GLib.source_remove(this._updateCaretPositionId);
 | 
			
		||||
        if (!this._keyboardRequested)
 | 
			
		||||
            return;
 | 
			
		||||
        this._updateCaretPositionId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
 | 
			
		||||
            this._updateCaretPositionId = 0;
 | 
			
		||||
 | 
			
		||||
            let currentWindow = global.screen.get_display().focus_window;
 | 
			
		||||
            if (!currentWindow) {
 | 
			
		||||
                this.setCursorLocation(null);
 | 
			
		||||
                return GLib.SOURCE_REMOVE;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            let windowRect = currentWindow.get_frame_rect();
 | 
			
		||||
            let text = accessible.get_text_iface();
 | 
			
		||||
            let component = accessible.get_component_iface();
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                let caretOffset = text.get_caret_offset();
 | 
			
		||||
                let caretRect = text.get_character_extents(caretOffset, Atspi.CoordType.WINDOW);
 | 
			
		||||
                let focusRect = component.get_extents(Atspi.CoordType.WINDOW);
 | 
			
		||||
 | 
			
		||||
                if (caretRect.width == 0 && caretRect.height == 0)
 | 
			
		||||
                    caretRect = focusRect;
 | 
			
		||||
 | 
			
		||||
                this.setCursorLocation(currentWindow, caretRect.x, caretRect.y, caretRect.width, caretRect.height);
 | 
			
		||||
            } catch (e) {
 | 
			
		||||
                log('Error updating caret position for OSK: ' + e.message);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return GLib.SOURCE_REMOVE;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        GLib.Source.set_name_by_id(this._updateCaretPositionId, '[gnome-shell] this._updateCaretPosition');
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _focusIsTextEntry(accessible) {
 | 
			
		||||
        try {
 | 
			
		||||
            let role = accessible.get_role();
 | 
			
		||||
            let stateSet = accessible.get_state_set();
 | 
			
		||||
            return stateSet.contains(Atspi.StateType.EDITABLE) || role == Atspi.Role.TERMINAL;
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
            log('Error determining accessible role: ' + e.message);
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onFocusChanged(caretTracker, event) {
 | 
			
		||||
        let accessible = event.source;
 | 
			
		||||
        if (!this._focusIsTextEntry(accessible))
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let focused = event.detail1 != 0;
 | 
			
		||||
        if (focused) {
 | 
			
		||||
            this._currentAccessible = accessible;
 | 
			
		||||
            this._updateCaretPosition(accessible);
 | 
			
		||||
            this.show(Main.layoutManager.focusIndex);
 | 
			
		||||
        } else if (this._currentAccessible == accessible) {
 | 
			
		||||
            this._currentAccessible = null;
 | 
			
		||||
            this.hide();
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onCaretMoved(caretTracker, event) {
 | 
			
		||||
        let accessible = event.source;
 | 
			
		||||
        if (this._currentAccessible == accessible)
 | 
			
		||||
            this._updateCaretPosition(accessible);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _lastDeviceIsTouchscreen() {
 | 
			
		||||
@@ -640,6 +650,8 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
        if (!this._enabled && !this._keyboardController)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        this._setCaretTrackerEnabled(this._enabled);
 | 
			
		||||
 | 
			
		||||
        if (this._enabled && !this._keyboardController)
 | 
			
		||||
            this._setupKeyboard();
 | 
			
		||||
        else if (!this._enabled)
 | 
			
		||||
@@ -924,11 +936,9 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _relayout() {
 | 
			
		||||
        let monitor = Main.layoutManager.keyboardMonitor;
 | 
			
		||||
 | 
			
		||||
        if (this.actor == null || monitor == null)
 | 
			
		||||
        if (this.actor == null)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let monitor = Main.layoutManager.keyboardMonitor;
 | 
			
		||||
        let maxHeight = monitor.height / 3;
 | 
			
		||||
        this.actor.width = monitor.width;
 | 
			
		||||
        this.actor.height = maxHeight;
 | 
			
		||||
@@ -1017,14 +1027,11 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
        if (!this._keyboardRequested)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (this._currentAccessible)
 | 
			
		||||
            this._updateCaretPosition(this._currentAccessible);
 | 
			
		||||
        Main.layoutManager.keyboardIndex = monitor;
 | 
			
		||||
        this._relayout();
 | 
			
		||||
        Main.layoutManager.showKeyboard();
 | 
			
		||||
 | 
			
		||||
        if (this._delayedAnimFocusWindow) {
 | 
			
		||||
            this._setAnimationWindow(this._delayedAnimFocusWindow);
 | 
			
		||||
            this._delayedAnimFocusWindow = null;
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    hide() {
 | 
			
		||||
@@ -1095,9 +1102,8 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
        window.move_frame(true, frameRect.x, frameRect.y);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _animateWindow(window, show) {
 | 
			
		||||
    _animateWindow(window, show, deltaY) {
 | 
			
		||||
        let windowActor = window.get_compositor_private();
 | 
			
		||||
        let deltaY = Main.layoutManager.keyboardBox.height;
 | 
			
		||||
        if (!windowActor)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
@@ -1118,39 +1124,35 @@ var Keyboard = new Lang.Class({
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _setAnimationWindow(window) {
 | 
			
		||||
        if (this._animFocusedWindow == window)
 | 
			
		||||
    setCursorLocation(window, x, y , w, h) {
 | 
			
		||||
        if (window == this._oskFocusWindow)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (this._animFocusedWindow)
 | 
			
		||||
            this._animateWindow(this._animFocusedWindow, false);
 | 
			
		||||
        if (window)
 | 
			
		||||
            this._animateWindow(window, true);
 | 
			
		||||
        if (this._oskFocusWindow) {
 | 
			
		||||
            let display = global.screen.get_display();
 | 
			
		||||
 | 
			
		||||
        this._animFocusedWindow = window;
 | 
			
		||||
    },
 | 
			
		||||
            if (display.get_grab_op() == Meta.GrabOp.NONE ||
 | 
			
		||||
                display.get_focus_window() != this._oskFocusWindow)
 | 
			
		||||
                this._animateWindow(this._oskFocusWindow, false, this._oskFocusWindowDelta);
 | 
			
		||||
 | 
			
		||||
    setCursorLocation(window, x, y , w, h) {
 | 
			
		||||
        let monitor = Main.layoutManager.keyboardMonitor;
 | 
			
		||||
 | 
			
		||||
        if (window && monitor) {
 | 
			
		||||
            let keyboardHeight = Main.layoutManager.keyboardBox.height;
 | 
			
		||||
            let focusObscured = false;
 | 
			
		||||
 | 
			
		||||
            if (y + h >= monitor.y + monitor.height - keyboardHeight) {
 | 
			
		||||
                if (this._keyboardVisible)
 | 
			
		||||
                    this._setAnimationWindow(window);
 | 
			
		||||
                else
 | 
			
		||||
                    this._delayedAnimFocusWindow = window;
 | 
			
		||||
            } else if (y < keyboardHeight) {
 | 
			
		||||
                this._delayedAnimFocusWindow = null;
 | 
			
		||||
                this._setAnimationWindow(null);
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            this._setAnimationWindow(null);
 | 
			
		||||
            this._oskFocusWindow = null;
 | 
			
		||||
            this._oskFocusWindowDelta = null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._oskFocusWindow = window;
 | 
			
		||||
        if (window) {
 | 
			
		||||
            let monitor = Main.layoutManager.keyboardMonitor;
 | 
			
		||||
            let keyboardHeight = Main.layoutManager.keyboardBox.height;
 | 
			
		||||
            let frameRect = window.get_frame_rect();
 | 
			
		||||
            let windowActor = window.get_compositor_private();
 | 
			
		||||
            let delta = 0;
 | 
			
		||||
 | 
			
		||||
            if (frameRect.y + y + h >= monitor.height - keyboardHeight)
 | 
			
		||||
                delta = keyboardHeight;
 | 
			
		||||
 | 
			
		||||
            this._animateWindow(window, true, delta);
 | 
			
		||||
            this._oskFocusWindow = window;
 | 
			
		||||
            this._oskFocusWindowDelta = delta;
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -109,7 +109,7 @@ var MonitorConstraint = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
            if (!this._workareasChangedId) {
 | 
			
		||||
                this._workareasChangedId =
 | 
			
		||||
                    global.display.connect('workareas-changed', () => {
 | 
			
		||||
                    global.screen.connect('workareas-changed', () => {
 | 
			
		||||
                        if (this._workArea)
 | 
			
		||||
                            this.actor.queue_relayout();
 | 
			
		||||
                    });
 | 
			
		||||
@@ -120,7 +120,7 @@ var MonitorConstraint = new Lang.Class({
 | 
			
		||||
            this._monitorsChangedId = 0;
 | 
			
		||||
 | 
			
		||||
            if (this._workareasChangedId)
 | 
			
		||||
                global.display.disconnect(this._workareasChangedId);
 | 
			
		||||
                global.screen.disconnect(this._workareasChangedId);
 | 
			
		||||
            this._workareasChangedId = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -142,8 +142,7 @@ var MonitorConstraint = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        let rect;
 | 
			
		||||
        if (this._workArea) {
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
            let ws = workspaceManager.get_workspace_by_index(0);
 | 
			
		||||
            let ws = global.screen.get_workspace_by_index(0);
 | 
			
		||||
            rect = ws.get_work_area_for_monitor(index);
 | 
			
		||||
        } else {
 | 
			
		||||
            rect = Main.layoutManager.monitors[index];
 | 
			
		||||
@@ -165,7 +164,7 @@ var Monitor = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    get inFullscreen() {
 | 
			
		||||
        return global.display.get_monitor_in_fullscreen(this.index);
 | 
			
		||||
        return global.screen.get_monitor_in_fullscreen(this.index);
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -260,7 +259,7 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
        global.stage.remove_actor(global.top_window_group);
 | 
			
		||||
        this.uiGroup.add_actor(global.top_window_group);
 | 
			
		||||
 | 
			
		||||
        let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
 | 
			
		||||
        let feedbackGroup = Meta.get_feedback_group_for_screen(global.screen);
 | 
			
		||||
        global.stage.remove_actor(feedbackGroup);
 | 
			
		||||
        this.uiGroup.add_actor(feedbackGroup);
 | 
			
		||||
 | 
			
		||||
@@ -270,19 +269,14 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
        this._bgManagers = [];
 | 
			
		||||
 | 
			
		||||
        // Need to update struts on new workspaces when they are added
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        workspaceManager.connect('notify::n-workspaces',
 | 
			
		||||
                                 this._queueUpdateRegions.bind(this));
 | 
			
		||||
 | 
			
		||||
        let display = global.display;
 | 
			
		||||
        display.connect('restacked',
 | 
			
		||||
                        this._windowsRestacked.bind(this));
 | 
			
		||||
        display.connect('in-fullscreen-changed',
 | 
			
		||||
                        this._updateFullscreen.bind(this));
 | 
			
		||||
 | 
			
		||||
        let monitorManager = Meta.MonitorManager.get();
 | 
			
		||||
        monitorManager.connect('monitors-changed',
 | 
			
		||||
                               this._monitorsChanged.bind(this));
 | 
			
		||||
        global.screen.connect('notify::n-workspaces',
 | 
			
		||||
                              this._queueUpdateRegions.bind(this));
 | 
			
		||||
        global.screen.connect('restacked',
 | 
			
		||||
                              this._windowsRestacked.bind(this));
 | 
			
		||||
        global.screen.connect('monitors-changed',
 | 
			
		||||
                              this._monitorsChanged.bind(this));
 | 
			
		||||
        global.screen.connect('in-fullscreen-changed',
 | 
			
		||||
                              this._updateFullscreen.bind(this));
 | 
			
		||||
        this._monitorsChanged();
 | 
			
		||||
 | 
			
		||||
        // NVIDIA drivers don't preserve FBO contents across
 | 
			
		||||
@@ -325,12 +319,12 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _updateMonitors() {
 | 
			
		||||
        let display = global.display;
 | 
			
		||||
        let screen = global.screen;
 | 
			
		||||
 | 
			
		||||
        this.monitors = [];
 | 
			
		||||
        let nMonitors = display.get_n_monitors();
 | 
			
		||||
        let nMonitors = screen.get_n_monitors();
 | 
			
		||||
        for (let i = 0; i < nMonitors; i++)
 | 
			
		||||
            this.monitors.push(new Monitor(i, display.get_monitor_geometry(i)));
 | 
			
		||||
            this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i)));
 | 
			
		||||
 | 
			
		||||
        if (nMonitors == 0) {
 | 
			
		||||
            this.primaryIndex = this.bottomIndex = -1;
 | 
			
		||||
@@ -339,7 +333,7 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
        } else {
 | 
			
		||||
            // If there are monitors below the primary, then we need
 | 
			
		||||
            // to split primary from bottom.
 | 
			
		||||
            this.primaryIndex = this.bottomIndex = display.get_primary_monitor();
 | 
			
		||||
            this.primaryIndex = this.bottomIndex = screen.get_primary_monitor();
 | 
			
		||||
            for (let i = 0; i < this.monitors.length; i++) {
 | 
			
		||||
                let monitor = this.monitors[i];
 | 
			
		||||
                if (this._isAboveOrBelowPrimary(monitor)) {
 | 
			
		||||
@@ -544,7 +538,7 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    get currentMonitor() {
 | 
			
		||||
        let index = global.display.get_current_monitor();
 | 
			
		||||
        let index = global.screen.get_current_monitor();
 | 
			
		||||
        return this.monitors[index];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -563,8 +557,6 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    get focusMonitor() {
 | 
			
		||||
        if (this.focusIndex < 0)
 | 
			
		||||
            return null;
 | 
			
		||||
        return this.monitors[this.focusIndex];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -917,8 +909,7 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
    getWorkAreaForMonitor(monitorIndex) {
 | 
			
		||||
        // Assume that all workspaces will have the same
 | 
			
		||||
        // struts and pick the first one.
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let ws = workspaceManager.get_workspace_by_index(0);
 | 
			
		||||
        let ws = global.screen.get_workspace_by_index(0);
 | 
			
		||||
        return ws.get_work_area_for_monitor(monitorIndex);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -928,7 +919,7 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
        let [x, y] = actor.get_transformed_position();
 | 
			
		||||
        let [w, h] = actor.get_transformed_size();
 | 
			
		||||
        let rect = new Meta.Rectangle({ x: x, y: y, width: w, height: h });
 | 
			
		||||
        return global.display.get_monitor_index_for_rect(rect);
 | 
			
		||||
        return global.screen.get_monitor_index_for_rect(rect);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    findMonitorForActor(actor) {
 | 
			
		||||
@@ -1061,9 +1052,9 @@ var LayoutManager = new Lang.Class({
 | 
			
		||||
        global.set_stage_input_region(rects);
 | 
			
		||||
        this._isPopupWindowVisible = isPopupMenuVisible;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        for (let w = 0; w < workspaceManager.n_workspaces; w++) {
 | 
			
		||||
            let workspace = workspaceManager.get_workspace_by_index(w);
 | 
			
		||||
        let screen = global.screen;
 | 
			
		||||
        for (let w = 0; w < screen.n_workspaces; w++) {
 | 
			
		||||
            let workspace = screen.get_workspace_by_index(w);
 | 
			
		||||
            workspace.set_builtin_struts(struts);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ var Magnifier = new Lang.Class({
 | 
			
		||||
        this._zoomRegions = [];
 | 
			
		||||
 | 
			
		||||
        // Create small clutter tree for the magnified mouse.
 | 
			
		||||
        let cursorTracker = Meta.CursorTracker.get_for_display(global.display);
 | 
			
		||||
        let cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
 | 
			
		||||
        this._mouseSprite = new Clutter.Texture();
 | 
			
		||||
        Shell.util_cursor_tracker_to_clutter(cursorTracker, this._mouseSprite);
 | 
			
		||||
        this._cursorRoot = new Clutter.Actor();
 | 
			
		||||
@@ -116,10 +116,10 @@ var Magnifier = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        if (isActive != activate) {
 | 
			
		||||
            if (activate) {
 | 
			
		||||
                Meta.disable_unredirect_for_display(global.display);
 | 
			
		||||
                Meta.disable_unredirect_for_screen(global.screen);
 | 
			
		||||
                this.startTrackingMouse();
 | 
			
		||||
            } else {
 | 
			
		||||
                Meta.enable_unredirect_for_display(global.display);
 | 
			
		||||
                Meta.enable_unredirect_for_screen(global.screen);
 | 
			
		||||
                this.stopTrackingMouse();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ const St = imports.gi.St;
 | 
			
		||||
const AccessDialog = imports.ui.accessDialog;
 | 
			
		||||
const AudioDeviceSelection = imports.ui.audioDeviceSelection;
 | 
			
		||||
const Components = imports.ui.components;
 | 
			
		||||
const Config = imports.misc.config;
 | 
			
		||||
const CtrlAltTab = imports.ui.ctrlAltTab;
 | 
			
		||||
const EndSessionDialog = imports.ui.endSessionDialog;
 | 
			
		||||
const Environment = imports.ui.environment;
 | 
			
		||||
@@ -249,26 +250,61 @@ function _initializeUI() {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _findThemeDirByVersion(dir, major, minor, name) {
 | 
			
		||||
    let path;
 | 
			
		||||
    let stylesheet;
 | 
			
		||||
    let subpath;
 | 
			
		||||
 | 
			
		||||
    /* Don't search back to before we introduced this support */
 | 
			
		||||
    let max_minor = (major == 3) ? 28 : 0;
 | 
			
		||||
 | 
			
		||||
    for (let i = minor; i >= max_minor; i = i - 2) {
 | 
			
		||||
        subpath = major + '.' + i;
 | 
			
		||||
        path = GLib.build_filenamev([dir, 'gnome-shell', subpath, 'theme', name]);
 | 
			
		||||
        stylesheet = Gio.file_new_for_path(path);
 | 
			
		||||
 | 
			
		||||
        log('Checking for ' + path);
 | 
			
		||||
 | 
			
		||||
        if (stylesheet.query_exists(null)) {
 | 
			
		||||
            log('Using ' + path);
 | 
			
		||||
            return stylesheet;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    path = GLib.build_filenamev([dir, 'gnome-shell', 'theme', name]);
 | 
			
		||||
    stylesheet = Gio.file_new_for_path(path);
 | 
			
		||||
 | 
			
		||||
    if (stylesheet.query_exists(null)) {
 | 
			
		||||
        log('Using unversioned' + path);
 | 
			
		||||
        return stylesheet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _getStylesheet(name) {
 | 
			
		||||
    let stylesheet;
 | 
			
		||||
 | 
			
		||||
    let [major, minor] = Config.PACKAGE_VERSION.split('.');
 | 
			
		||||
 | 
			
		||||
    // Directories are versioned according to the stable version
 | 
			
		||||
    if ((minor % 2) == 1)
 | 
			
		||||
        minor++;
 | 
			
		||||
 | 
			
		||||
    stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + name);
 | 
			
		||||
    if (stylesheet.query_exists(null))
 | 
			
		||||
    if (stylesheet.query_exists(null)) {
 | 
			
		||||
        log('Using built-in default theme ' + name)
 | 
			
		||||
        return stylesheet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let dataDirs = GLib.get_system_data_dirs();
 | 
			
		||||
    for (let i = 0; i < dataDirs.length; i++) {
 | 
			
		||||
        let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'theme', name]);
 | 
			
		||||
        let stylesheet = Gio.file_new_for_path(path);
 | 
			
		||||
        if (stylesheet.query_exists(null))
 | 
			
		||||
        stylesheet = _findThemeDirByVersion(dataDirs[i], major, minor, name)
 | 
			
		||||
        if (stylesheet != null)
 | 
			
		||||
            return stylesheet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + name);
 | 
			
		||||
    if (stylesheet.query_exists(null))
 | 
			
		||||
        return stylesheet;
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
    return _findThemeDirByVersion(global.datadir, major, minor, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function _getDefaultStylesheet() {
 | 
			
		||||
@@ -429,7 +465,7 @@ function pushModal(actor, params) {
 | 
			
		||||
            log('pushModal: invocation of begin_modal failed');
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        Meta.disable_unredirect_for_display(global.display);
 | 
			
		||||
        Meta.disable_unredirect_for_screen(global.screen);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modalCount += 1;
 | 
			
		||||
@@ -528,7 +564,7 @@ function popModal(actor, timestamp) {
 | 
			
		||||
 | 
			
		||||
    layoutManager.modalEnded();
 | 
			
		||||
    global.end_modal(timestamp);
 | 
			
		||||
    Meta.enable_unredirect_for_display(global.display);
 | 
			
		||||
    Meta.enable_unredirect_for_screen(global.screen);
 | 
			
		||||
    actionMode = Shell.ActionMode.NORMAL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -556,15 +592,14 @@ function openRunDialog() {
 | 
			
		||||
 * and switching out of the overview if it's currently active
 | 
			
		||||
 */
 | 
			
		||||
function activateWindow(window, time, workspaceNum) {
 | 
			
		||||
    let workspaceManager = global.workspace_manager;
 | 
			
		||||
    let activeWorkspaceNum = workspaceManager.get_active_workspace_index();
 | 
			
		||||
    let activeWorkspaceNum = global.screen.get_active_workspace_index();
 | 
			
		||||
    let windowWorkspaceNum = (workspaceNum !== undefined) ? workspaceNum : window.get_workspace().index();
 | 
			
		||||
 | 
			
		||||
    if (!time)
 | 
			
		||||
        time = global.get_current_time();
 | 
			
		||||
 | 
			
		||||
    if (windowWorkspaceNum != activeWorkspaceNum) {
 | 
			
		||||
        let workspace = workspaceManager.get_workspace_by_index(windowWorkspaceNum);
 | 
			
		||||
        let workspace = global.screen.get_workspace_by_index(windowWorkspaceNum);
 | 
			
		||||
        workspace.activate_with_focus(window, time);
 | 
			
		||||
    } else {
 | 
			
		||||
        window.activate(time);
 | 
			
		||||
 
 | 
			
		||||
@@ -96,10 +96,10 @@ var URLHighlighter = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
            let urlId = this._findUrlAtPos(event);
 | 
			
		||||
            if (urlId != -1 && !this._cursorChanged) {
 | 
			
		||||
                global.display.set_cursor(Meta.Cursor.POINTING_HAND);
 | 
			
		||||
                global.screen.set_cursor(Meta.Cursor.POINTING_HAND);
 | 
			
		||||
                this._cursorChanged = true;
 | 
			
		||||
            } else if (urlId == -1) {
 | 
			
		||||
                global.display.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
                global.screen.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
                this._cursorChanged = false;
 | 
			
		||||
            }
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
@@ -110,7 +110,7 @@ var URLHighlighter = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
            if (this._cursorChanged) {
 | 
			
		||||
                this._cursorChanged = false;
 | 
			
		||||
                global.display.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
                global.screen.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
            }
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
@@ -917,7 +917,7 @@ var MessageTray = new Lang.Class({
 | 
			
		||||
        Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
 | 
			
		||||
        Main.layoutManager.trackChrome(this._bannerBin, { affectsInputRegion: true });
 | 
			
		||||
 | 
			
		||||
        global.display.connect('in-fullscreen-changed', this._updateState.bind(this));
 | 
			
		||||
        global.screen.connect('in-fullscreen-changed', this._updateState.bind(this));
 | 
			
		||||
 | 
			
		||||
        Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -116,7 +116,7 @@ var ModalDialog = new Lang.Class({
 | 
			
		||||
        if (onPrimary)
 | 
			
		||||
            this._monitorConstraint.primary = true;
 | 
			
		||||
        else
 | 
			
		||||
            this._monitorConstraint.index = global.display.get_current_monitor();
 | 
			
		||||
            this._monitorConstraint.index = global.screen.get_current_monitor();
 | 
			
		||||
 | 
			
		||||
        this.state = State.OPENING;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -831,10 +831,8 @@ var GtkNotificationDaemon = new Lang.Class({
 | 
			
		||||
                let source;
 | 
			
		||||
                try {
 | 
			
		||||
                    source = this._ensureAppSource(appId);
 | 
			
		||||
                } catch(e) {
 | 
			
		||||
                    if (e instanceof InvalidAppError)
 | 
			
		||||
                        return;
 | 
			
		||||
                    throw e;
 | 
			
		||||
                } catch(e if e instanceof InvalidAppError) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                notifications.forEach(([notificationId, notification]) => {
 | 
			
		||||
@@ -865,12 +863,9 @@ var GtkNotificationDaemon = new Lang.Class({
 | 
			
		||||
        let source;
 | 
			
		||||
        try {
 | 
			
		||||
            source = this._ensureAppSource(appId);
 | 
			
		||||
        } catch(e) {
 | 
			
		||||
            if (e instanceof InvalidAppError) {
 | 
			
		||||
                invocation.return_dbus_error('org.gtk.Notifications.InvalidApp', 'The app by ID "%s" could not be found'.format(appId));
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            throw e;
 | 
			
		||||
        } catch(e if e instanceof InvalidAppError) {
 | 
			
		||||
            invocation.return_dbus_error('org.gtk.Notifications.InvalidApp', 'The app by ID "%s" could not be found'.format(appId));
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let timestamp = GLib.DateTime.new_now_local().to_unix();
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ var OsdMonitorLabel = new Lang.Class({
 | 
			
		||||
        Main.uiGroup.set_child_above_sibling(this._actor, null);
 | 
			
		||||
        this._position();
 | 
			
		||||
 | 
			
		||||
        Meta.disable_unredirect_for_display(global.display);
 | 
			
		||||
        Meta.disable_unredirect_for_screen(global.screen);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _position() {
 | 
			
		||||
@@ -48,7 +48,7 @@ var OsdMonitorLabel = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    destroy() {
 | 
			
		||||
        this._actor.destroy();
 | 
			
		||||
        Meta.enable_unredirect_for_display(global.display);
 | 
			
		||||
        Meta.enable_unredirect_for_screen(global.screen);
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -145,7 +145,7 @@ var OsdWindow = new Lang.Class({
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (!this.actor.visible) {
 | 
			
		||||
            Meta.disable_unredirect_for_display(global.display);
 | 
			
		||||
            Meta.disable_unredirect_for_screen(global.screen);
 | 
			
		||||
            this.actor.show();
 | 
			
		||||
            this.actor.opacity = 0;
 | 
			
		||||
            this.actor.get_parent().set_child_above_sibling(this.actor, null);
 | 
			
		||||
@@ -179,7 +179,7 @@ var OsdWindow = new Lang.Class({
 | 
			
		||||
                           transition: 'easeOutQuad',
 | 
			
		||||
                           onComplete: () => {
 | 
			
		||||
                              this._reset();
 | 
			
		||||
                              Meta.enable_unredirect_for_display(global.display);
 | 
			
		||||
                              Meta.enable_unredirect_for_screen(global.screen);
 | 
			
		||||
                           }
 | 
			
		||||
                         });
 | 
			
		||||
        return GLib.SOURCE_REMOVE;
 | 
			
		||||
 
 | 
			
		||||
@@ -157,7 +157,7 @@ var Overview = new Lang.Class({
 | 
			
		||||
        Main.xdndHandler.connect('drag-begin', this._onDragBegin.bind(this));
 | 
			
		||||
        Main.xdndHandler.connect('drag-end', this._onDragEnd.bind(this));
 | 
			
		||||
 | 
			
		||||
        global.display.connect('restacked', this._onRestacked.bind(this));
 | 
			
		||||
        global.screen.connect('restacked', this._onRestacked.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._windowSwitchTimeoutId = 0;
 | 
			
		||||
        this._windowSwitchTimestamp = 0;
 | 
			
		||||
@@ -286,8 +286,7 @@ var Overview = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        DND.addDragMonitor(this._dragMonitor);
 | 
			
		||||
        // Remember the workspace we started from
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        this._lastActiveWorkspaceIndex = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        this._lastActiveWorkspaceIndex = global.screen.get_active_workspace_index();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onDragEnd(time) {
 | 
			
		||||
@@ -297,8 +296,7 @@ var Overview = new Lang.Class({
 | 
			
		||||
        // we have to go back to where we started and hide
 | 
			
		||||
        // the overview
 | 
			
		||||
        if (this._shown) {
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
            workspaceManager.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time);
 | 
			
		||||
            global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time);
 | 
			
		||||
            this.hide();
 | 
			
		||||
        }
 | 
			
		||||
        this._resetWindowSwitchTimeout();
 | 
			
		||||
@@ -319,9 +317,9 @@ var Overview = new Lang.Class({
 | 
			
		||||
        let display = Gdk.Display.get_default();
 | 
			
		||||
        let deviceManager = display.get_device_manager();
 | 
			
		||||
        let pointer = deviceManager.get_client_pointer();
 | 
			
		||||
        let [gdkScreen, pointerX, pointerY] = pointer.get_position();
 | 
			
		||||
        let [screen, pointerX, pointerY] = pointer.get_position();
 | 
			
		||||
 | 
			
		||||
        pointer.warp(gdkScreen, pointerX, pointerY);
 | 
			
		||||
        pointer.warp(screen, pointerX, pointerY);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onDragMotion(dragEvent) {
 | 
			
		||||
@@ -552,7 +550,7 @@ var Overview = new Lang.Class({
 | 
			
		||||
        this.visibleTarget = true;
 | 
			
		||||
        this._activationTime = GLib.get_monotonic_time() / GLib.USEC_PER_SEC;
 | 
			
		||||
 | 
			
		||||
        Meta.disable_unredirect_for_display(global.display);
 | 
			
		||||
        Meta.disable_unredirect_for_screen(global.screen);
 | 
			
		||||
        this.viewSelector.show();
 | 
			
		||||
 | 
			
		||||
        this._overview.opacity = 0;
 | 
			
		||||
@@ -637,7 +635,7 @@ var Overview = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _hideDone() {
 | 
			
		||||
        // Re-enable unredirection
 | 
			
		||||
        Meta.enable_unredirect_for_display(global.display);
 | 
			
		||||
        Meta.enable_unredirect_for_screen(global.screen);
 | 
			
		||||
 | 
			
		||||
        this.viewSelector.hide();
 | 
			
		||||
        this._desktopFade.hide();
 | 
			
		||||
 
 | 
			
		||||
@@ -265,8 +265,7 @@ var AppMenuButton = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _findTargetApp() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let workspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let workspace = global.screen.get_active_workspace();
 | 
			
		||||
        let tracker = Shell.WindowTracker.get_default();
 | 
			
		||||
        let focusedApp = tracker.focus_app;
 | 
			
		||||
        if (focusedApp && focusedApp.is_on_workspace(workspace))
 | 
			
		||||
@@ -710,7 +709,6 @@ var AggregateMenu = new Lang.Class({
 | 
			
		||||
            this._bluetooth = null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._remoteAccess = new imports.ui.status.remoteAccess.RemoteAccessApplet();
 | 
			
		||||
        this._power = new imports.ui.status.power.Indicator();
 | 
			
		||||
        this._rfkill = new imports.ui.status.rfkill.Indicator();
 | 
			
		||||
        this._volume = new imports.ui.status.volume.Indicator();
 | 
			
		||||
@@ -731,7 +729,6 @@ var AggregateMenu = new Lang.Class({
 | 
			
		||||
        if (this._bluetooth) {
 | 
			
		||||
            this._indicators.add_child(this._bluetooth.indicators);
 | 
			
		||||
        }
 | 
			
		||||
        this._indicators.add_child(this._remoteAccess.indicators);
 | 
			
		||||
        this._indicators.add_child(this._rfkill.indicators);
 | 
			
		||||
        this._indicators.add_child(this._volume.indicators);
 | 
			
		||||
        this._indicators.add_child(this._power.indicators);
 | 
			
		||||
@@ -746,7 +743,6 @@ var AggregateMenu = new Lang.Class({
 | 
			
		||||
        if (this._bluetooth) {
 | 
			
		||||
            this.menu.addMenuItem(this._bluetooth.menu);
 | 
			
		||||
        }
 | 
			
		||||
        this.menu.addMenuItem(this._remoteAccess.menu);
 | 
			
		||||
        this.menu.addMenuItem(this._location.menu);
 | 
			
		||||
        this.menu.addMenuItem(this._rfkill.menu);
 | 
			
		||||
        this.menu.addMenuItem(this._power.menu);
 | 
			
		||||
@@ -800,7 +796,6 @@ var Panel = new Lang.Class({
 | 
			
		||||
        this.actor.connect('get-preferred-height', this._getPreferredHeight.bind(this));
 | 
			
		||||
        this.actor.connect('allocate', this._allocate.bind(this));
 | 
			
		||||
        this.actor.connect('button-press-event', this._onButtonPress.bind(this));
 | 
			
		||||
        this.actor.connect('touch-event', this._onButtonPress.bind(this));
 | 
			
		||||
        this.actor.connect('key-press-event', this._onKeyPress.bind(this));
 | 
			
		||||
 | 
			
		||||
        Main.overview.connect('showing', () => {
 | 
			
		||||
@@ -823,7 +818,7 @@ var Panel = new Lang.Class({
 | 
			
		||||
        global.window_group.connect('actor-removed', this._onWindowActorRemoved.bind(this));
 | 
			
		||||
        global.window_manager.connect('switch-workspace', this._updateSolidStyle.bind(this));
 | 
			
		||||
 | 
			
		||||
        global.display.connect('workareas-changed', () => { this.actor.queue_relayout(); });
 | 
			
		||||
        global.screen.connect('workareas-changed', () => { this.actor.queue_relayout(); });
 | 
			
		||||
        this._updatePanel();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -944,13 +939,8 @@ var Panel = new Lang.Class({
 | 
			
		||||
        if (event.get_source() != actor)
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        let type = event.type();
 | 
			
		||||
        let isPress = type == Clutter.EventType.BUTTON_PRESS;
 | 
			
		||||
        if (!isPress && type != Clutter.EventType.TOUCH_BEGIN)
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        let button = isPress ? event.get_button() : -1;
 | 
			
		||||
        if (isPress && button != 1)
 | 
			
		||||
        let button = event.get_button();
 | 
			
		||||
        if (button != 1)
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        let focusWindow = global.display.focus_window;
 | 
			
		||||
@@ -971,7 +961,8 @@ var Panel = new Lang.Class({
 | 
			
		||||
        if (!allowDrag)
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        global.display.begin_grab_op(dragWindow,
 | 
			
		||||
        global.display.begin_grab_op(global.screen,
 | 
			
		||||
                                     dragWindow,
 | 
			
		||||
                                     Meta.GrabOp.MOVING,
 | 
			
		||||
                                     false, /* pointer grab */
 | 
			
		||||
                                     true, /* frame action */
 | 
			
		||||
@@ -986,7 +977,7 @@ var Panel = new Lang.Class({
 | 
			
		||||
    _onKeyPress(actor, event) {
 | 
			
		||||
        let symbol = event.get_key_symbol();
 | 
			
		||||
        if (symbol == Clutter.KEY_Escape) {
 | 
			
		||||
            global.display.focus_default_window(event.get_time());
 | 
			
		||||
            global.screen.focus_default_window(event.get_time());
 | 
			
		||||
            return Clutter.EVENT_STOP;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -1084,8 +1075,7 @@ var Panel = new Lang.Class({
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        /* Get all the windows in the active workspace that are in the primary monitor and visible */
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWorkspace = global.screen.get_active_workspace();
 | 
			
		||||
        let windows = activeWorkspace.list_windows().filter(metaWindow => {
 | 
			
		||||
            return metaWindow.is_on_primary_monitor() &&
 | 
			
		||||
                   metaWindow.showing_on_its_workspace() &&
 | 
			
		||||
 
 | 
			
		||||
@@ -141,17 +141,8 @@ var PopupBaseMenuItem = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onKeyPressEvent(actor, event) {
 | 
			
		||||
        let state = event.get_state();
 | 
			
		||||
 | 
			
		||||
        // if user has a modifier down (except capslock)
 | 
			
		||||
        // then don't handle the key press here
 | 
			
		||||
        state &= ~Clutter.ModifierType.LOCK_MASK;
 | 
			
		||||
        state &= Clutter.ModifierType.MODIFIER_MASK;
 | 
			
		||||
 | 
			
		||||
        if (state)
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        let symbol = event.get_key_symbol();
 | 
			
		||||
 | 
			
		||||
        if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
 | 
			
		||||
            this.activate(event);
 | 
			
		||||
            return Clutter.EVENT_STOP;
 | 
			
		||||
 
 | 
			
		||||
@@ -172,10 +172,9 @@ var RunDialog = new Lang.Class({
 | 
			
		||||
                    if (name.slice(0, text.length) == text)
 | 
			
		||||
                        results.push(name);
 | 
			
		||||
                }
 | 
			
		||||
            } catch (e) {
 | 
			
		||||
                if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND) &&
 | 
			
		||||
                    !e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_DIRECTORY))
 | 
			
		||||
                    log(e);
 | 
			
		||||
            } catch (e if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND) &&
 | 
			
		||||
                           !e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_DIRECTORY))) {
 | 
			
		||||
                log(e);
 | 
			
		||||
            } finally {
 | 
			
		||||
                return results;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -570,7 +570,7 @@ var ScreenShield = new Lang.Class({
 | 
			
		||||
        this._shortLightbox.connect('shown', this._onShortLightboxShown.bind(this));
 | 
			
		||||
 | 
			
		||||
        this.idleMonitor = Meta.IdleMonitor.get_core();
 | 
			
		||||
        this._cursorTracker = Meta.CursorTracker.get_for_display(global.display);
 | 
			
		||||
        this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
 | 
			
		||||
 | 
			
		||||
        this._syncInhibitor();
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ var ScreencastService = new Lang.Class({
 | 
			
		||||
        let recorder = this._recorders.get(sender);
 | 
			
		||||
        if (!recorder) {
 | 
			
		||||
            recorder = new Shell.Recorder({ stage: global.stage,
 | 
			
		||||
                                            display: global.display });
 | 
			
		||||
                                            screen: global.screen });
 | 
			
		||||
            recorder._watchNameId =
 | 
			
		||||
                Gio.bus_watch_name(Gio.BusType.SESSION, sender, 0, null,
 | 
			
		||||
                                   this._onNameVanished.bind(this));
 | 
			
		||||
 
 | 
			
		||||
@@ -261,7 +261,7 @@ var SelectArea = new Lang.Class({
 | 
			
		||||
                                     onUngrab: this._onUngrab.bind(this) }))
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        global.display.set_cursor(Meta.Cursor.CROSSHAIR);
 | 
			
		||||
        global.screen.set_cursor(Meta.Cursor.CROSSHAIR);
 | 
			
		||||
        Main.uiGroup.set_child_above_sibling(this._group, null);
 | 
			
		||||
        this._group.visible = true;
 | 
			
		||||
    },
 | 
			
		||||
@@ -330,7 +330,7 @@ var SelectArea = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onUngrab() {
 | 
			
		||||
        global.display.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
        global.screen.set_cursor(Meta.Cursor.DEFAULT);
 | 
			
		||||
        this.emit('finished', this._result);
 | 
			
		||||
 | 
			
		||||
        GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -216,14 +216,12 @@ function _step(g, finish, onError) {
 | 
			
		||||
                         if (onError)
 | 
			
		||||
                             onError(err);
 | 
			
		||||
                     });
 | 
			
		||||
    } catch (err if err instanceof StopIteration) {
 | 
			
		||||
        if (finish)
 | 
			
		||||
            finish();
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
        if (err instanceof StopIteration) {
 | 
			
		||||
            if (finish)
 | 
			
		||||
                finish();
 | 
			
		||||
        } else {
 | 
			
		||||
            if (onError)
 | 
			
		||||
                onError(err);
 | 
			
		||||
        }
 | 
			
		||||
        if (onError)
 | 
			
		||||
            onError(err);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -398,7 +398,7 @@ var InputSourceManager = new Lang.Class({
 | 
			
		||||
        return true;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _switchInputSource(display, window, binding) {
 | 
			
		||||
    _switchInputSource(display, screen, window, binding) {
 | 
			
		||||
        if (this._mruSources.length < 2)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,80 +0,0 @@
 | 
			
		||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 | 
			
		||||
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const Meta = imports.gi.Meta;
 | 
			
		||||
 | 
			
		||||
const PanelMenu = imports.ui.panelMenu;
 | 
			
		||||
const PopupMenu = imports.ui.popupMenu;
 | 
			
		||||
 | 
			
		||||
var RemoteAccessApplet = new Lang.Class({
 | 
			
		||||
    Name: 'RemoteAccessApplet',
 | 
			
		||||
    Extends: PanelMenu.SystemIndicator,
 | 
			
		||||
 | 
			
		||||
    _init() {
 | 
			
		||||
        this.parent();
 | 
			
		||||
 | 
			
		||||
        let backend = Meta.get_backend();
 | 
			
		||||
        let controller = backend.get_remote_access_controller();
 | 
			
		||||
 | 
			
		||||
        if (!controller)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        // We can't possibly know about all types of screen sharing on X11, so
 | 
			
		||||
        // showing these controls on X11 might give a false sense of security.
 | 
			
		||||
        // Thus, only enable these controls when using Wayland, where we are
 | 
			
		||||
        // in control of sharing.
 | 
			
		||||
        if (!Meta.is_wayland_compositor())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        this._handles = new Set();
 | 
			
		||||
        this._indicator = null;
 | 
			
		||||
        this._menuSection = null;
 | 
			
		||||
 | 
			
		||||
        controller.connect('new-handle', (controller, handle) => {
 | 
			
		||||
            this._onNewHandle(handle);
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _ensureControls() {
 | 
			
		||||
        if (this._indicator)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        this._indicator = this._addIndicator();
 | 
			
		||||
        this._indicator.icon_name = 'screen-shared-symbolic';
 | 
			
		||||
        this._item =
 | 
			
		||||
            new PopupMenu.PopupSubMenuMenuItem(_("Screen is Being Shared"),
 | 
			
		||||
                                               true);
 | 
			
		||||
        this._item.menu.addAction(_("Turn off"),
 | 
			
		||||
                                  () => {
 | 
			
		||||
                                      for (let handle of this._handles)
 | 
			
		||||
                                            handle.stop();
 | 
			
		||||
                                  });
 | 
			
		||||
        this._item.icon.icon_name = 'screen-shared-symbolic';
 | 
			
		||||
        this.menu.addMenuItem(this._item);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sync() {
 | 
			
		||||
        if (this._handles.size == 0) {
 | 
			
		||||
            this._indicator.visible = false;
 | 
			
		||||
            this._item.actor.visible = false;
 | 
			
		||||
        } else {
 | 
			
		||||
            this._indicator.visible = true;
 | 
			
		||||
            this._item.actor.visible = true;
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onStopped(handle) {
 | 
			
		||||
        this._handles.delete(handle);
 | 
			
		||||
        this._sync();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onNewHandle(handle) {
 | 
			
		||||
        this._handles.add(handle);
 | 
			
		||||
        handle.connect('stopped', this._onStopped.bind(this));
 | 
			
		||||
 | 
			
		||||
        if (this._handles.size == 1) {
 | 
			
		||||
            this._ensureControls();
 | 
			
		||||
            this._sync();
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
@@ -261,7 +261,7 @@ var Indicator = new Lang.Class({
 | 
			
		||||
        item = new PopupMenu.PopupBaseMenuItem({ reactive: false,
 | 
			
		||||
                                                 can_focus: false });
 | 
			
		||||
 | 
			
		||||
        this._settingsAction = this._createActionButton('org.gnome.Settings-symbolic', _("Settings"));
 | 
			
		||||
        this._settingsAction = this._createActionButton('preferences-system-symbolic', _("Settings"));
 | 
			
		||||
        this._settingsAction.connect('clicked', () => { this._onSettingsClicked(); });
 | 
			
		||||
        item.actor.add(this._settingsAction, { expand: true, x_fill: false });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -192,9 +192,7 @@ var SwitcherPopup = new Lang.Class({
 | 
			
		||||
        if (this._keyPressHandler(keysym, action) != Clutter.EVENT_PROPAGATE)
 | 
			
		||||
            return Clutter.EVENT_STOP;
 | 
			
		||||
 | 
			
		||||
        // Note: pressing one of the below keys will destroy the popup only if
 | 
			
		||||
        // that key is not used by the active popup's keyboard shortcut
 | 
			
		||||
        if (keysym == Clutter.Escape || keysym == Clutter.Tab)
 | 
			
		||||
        if (keysym == Clutter.Escape)
 | 
			
		||||
            this.destroy();
 | 
			
		||||
 | 
			
		||||
        return Clutter.EVENT_STOP;
 | 
			
		||||
 
 | 
			
		||||
@@ -200,18 +200,12 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
        let tracker = Shell.WindowTracker.get_default();
 | 
			
		||||
        tracker.connect('startup-sequence-changed', this._queueCheckWorkspaces.bind(this));
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        workspaceManager.connect('notify::n-workspaces',
 | 
			
		||||
                                 this._nWorkspacesChanged.bind(this));
 | 
			
		||||
        global.window_manager.connect('switch-workspace',
 | 
			
		||||
                                      this._queueCheckWorkspaces.bind(this));
 | 
			
		||||
        global.screen.connect('notify::n-workspaces', this._nWorkspacesChanged.bind(this));
 | 
			
		||||
        global.window_manager.connect('switch-workspace', this._queueCheckWorkspaces.bind(this));
 | 
			
		||||
 | 
			
		||||
        global.display.connect('window-entered-monitor',
 | 
			
		||||
                               this._windowEnteredMonitor.bind(this));
 | 
			
		||||
        global.display.connect('window-left-monitor',
 | 
			
		||||
                               this._windowLeftMonitor.bind(this));
 | 
			
		||||
        global.display.connect('restacked',
 | 
			
		||||
                               this._windowsRestacked.bind(this));
 | 
			
		||||
        global.screen.connect('window-entered-monitor', this._windowEnteredMonitor.bind(this));
 | 
			
		||||
        global.screen.connect('window-left-monitor', this._windowLeftMonitor.bind(this));
 | 
			
		||||
        global.screen.connect('restacked', this._windowsRestacked.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._workspaceSettings = this._getWorkspaceSettings();
 | 
			
		||||
        this._workspaceSettings.connect('changed::dynamic-workspaces', this._queueCheckWorkspaces.bind(this));
 | 
			
		||||
@@ -236,7 +230,6 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _checkWorkspaces() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let i;
 | 
			
		||||
        let emptyWorkspaces = [];
 | 
			
		||||
 | 
			
		||||
@@ -264,7 +257,7 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
        let sequences = Shell.WindowTracker.get_default().get_startup_sequences();
 | 
			
		||||
        for (i = 0; i < sequences.length; i++) {
 | 
			
		||||
            let index = sequences[i].get_workspace();
 | 
			
		||||
            if (index >= 0 && index <= workspaceManager.n_workspaces)
 | 
			
		||||
            if (index >= 0 && index <= global.screen.n_workspaces)
 | 
			
		||||
                emptyWorkspaces[index] = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -282,17 +275,17 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        // If we don't have an empty workspace at the end, add one
 | 
			
		||||
        if (!emptyWorkspaces[emptyWorkspaces.length -1]) {
 | 
			
		||||
            workspaceManager.append_new_workspace(false, global.get_current_time());
 | 
			
		||||
            global.screen.append_new_workspace(false, global.get_current_time());
 | 
			
		||||
            emptyWorkspaces.push(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let activeWorkspaceIndex = global.screen.get_active_workspace_index();
 | 
			
		||||
        emptyWorkspaces[activeWorkspaceIndex] = false;
 | 
			
		||||
 | 
			
		||||
        // Delete other empty workspaces; do it from the end to avoid index changes
 | 
			
		||||
        for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
 | 
			
		||||
            if (emptyWorkspaces[i])
 | 
			
		||||
                workspaceManager.remove_workspace(this._workspaces[i], global.get_current_time());
 | 
			
		||||
                global.screen.remove_workspace(this._workspaces[i], global.get_current_time());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._checkWorkspacesId = 0;
 | 
			
		||||
@@ -324,14 +317,14 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
        GLib.Source.set_name_by_id(id, '[gnome-shell] this._queueCheckWorkspaces');
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) {
 | 
			
		||||
    _windowLeftMonitor(metaScreen, monitorIndex, metaWin) {
 | 
			
		||||
        // If the window left the primary monitor, that
 | 
			
		||||
        // might make that workspace empty
 | 
			
		||||
        if (monitorIndex == Main.layoutManager.primaryIndex)
 | 
			
		||||
            this._queueCheckWorkspaces();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) {
 | 
			
		||||
    _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) {
 | 
			
		||||
        // If the window entered the primary monitor, that
 | 
			
		||||
        // might make that workspace non-empty
 | 
			
		||||
        if (monitorIndex == Main.layoutManager.primaryIndex)
 | 
			
		||||
@@ -351,9 +344,8 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _nWorkspacesChanged() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let oldNumWorkspaces = this._workspaces.length;
 | 
			
		||||
        let newNumWorkspaces = workspaceManager.n_workspaces;
 | 
			
		||||
        let newNumWorkspaces = global.screen.n_workspaces;
 | 
			
		||||
 | 
			
		||||
        if (oldNumWorkspaces == newNumWorkspaces)
 | 
			
		||||
            return false;
 | 
			
		||||
@@ -364,7 +356,7 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
            // Assume workspaces are only added at the end
 | 
			
		||||
            for (w = oldNumWorkspaces; w < newNumWorkspaces; w++)
 | 
			
		||||
                this._workspaces[w] = workspaceManager.get_workspace_by_index(w);
 | 
			
		||||
                this._workspaces[w] = global.screen.get_workspace_by_index(w);
 | 
			
		||||
 | 
			
		||||
            for (w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
 | 
			
		||||
                let workspace = this._workspaces[w];
 | 
			
		||||
@@ -378,7 +370,7 @@ var WorkspaceTracker = new Lang.Class({
 | 
			
		||||
            let removedIndex;
 | 
			
		||||
            let removedNum = oldNumWorkspaces - newNumWorkspaces;
 | 
			
		||||
            for (let w = 0; w < oldNumWorkspaces; w++) {
 | 
			
		||||
                let workspace = workspaceManager.get_workspace_by_index(w);
 | 
			
		||||
                let workspace = global.screen.get_workspace_by_index(w);
 | 
			
		||||
                if (this._workspaces[w] != workspace) {
 | 
			
		||||
                    removedIndex = w;
 | 
			
		||||
                    break;
 | 
			
		||||
@@ -722,7 +714,7 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
        this._shellwm.connect('confirm-display-change', this._confirmDisplayChange.bind(this));
 | 
			
		||||
        this._shellwm.connect('create-close-dialog', this._createCloseDialog.bind(this));
 | 
			
		||||
        this._shellwm.connect('create-inhibit-shortcuts-dialog', this._createInhibitShortcutsDialog.bind(this));
 | 
			
		||||
        global.display.connect('restacked', this._syncStacking.bind(this));
 | 
			
		||||
        global.screen.connect('restacked', this._syncStacking.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._workspaceSwitcherPopup = null;
 | 
			
		||||
        this._tilePreview = null;
 | 
			
		||||
@@ -978,8 +970,8 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
        if (Main.sessionMode.hasWorkspaces)
 | 
			
		||||
            this._workspaceTracker = new WorkspaceTracker(this);
 | 
			
		||||
 | 
			
		||||
        global.workspace_manager.override_workspace_layout(Meta.DisplayCorner.TOPLEFT,
 | 
			
		||||
                                                           false, -1, 1);
 | 
			
		||||
        global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
 | 
			
		||||
                                                false, -1, 1);
 | 
			
		||||
 | 
			
		||||
        let gesture = new WorkspaceSwitchAction();
 | 
			
		||||
        gesture.connect('activated', this._actionSwitchWorkspace.bind(this));
 | 
			
		||||
@@ -1009,9 +1001,7 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _actionSwitchWorkspace(action, direction) {
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
            let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
            let newWs = activeWorkspace.get_neighbor(direction);
 | 
			
		||||
            let newWs = global.screen.get_active_workspace().get_neighbor(direction);
 | 
			
		||||
            this.actionMoveWorkspace(newWs);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -1027,10 +1017,8 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
    _switchApp() {
 | 
			
		||||
        let windows = global.get_window_actors().filter(actor => {
 | 
			
		||||
            let win = actor.metaWindow;
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
            let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
            return (!win.is_override_redirect() &&
 | 
			
		||||
                    win.located_on_workspace(activeWorkspace));
 | 
			
		||||
                    win.located_on_workspace(global.screen.get_active_workspace()));
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (windows.length == 0)
 | 
			
		||||
@@ -1054,12 +1042,10 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    insertWorkspace(pos) {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
        if (!Meta.prefs_get_dynamic_workspaces())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        workspaceManager.append_new_workspace(false, global.get_current_time());
 | 
			
		||||
        global.screen.append_new_workspace(false, global.get_current_time());
 | 
			
		||||
 | 
			
		||||
        let windows = global.get_window_actors().map(a => a.meta_window);
 | 
			
		||||
 | 
			
		||||
@@ -1083,9 +1069,9 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        // If the new workspace was inserted before the active workspace,
 | 
			
		||||
        // activate the workspace to which its windows went
 | 
			
		||||
        let activeIndex = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let activeIndex = global.screen.get_active_workspace_index();
 | 
			
		||||
        if (activeIndex >= pos) {
 | 
			
		||||
            let newWs = workspaceManager.get_workspace_by_index(activeIndex + 1);
 | 
			
		||||
            let newWs = global.screen.get_workspace_by_index(activeIndex + 1);
 | 
			
		||||
            this._blockAnimations = true;
 | 
			
		||||
            newWs.activate(global.get_current_time());
 | 
			
		||||
            this._blockAnimations = false;
 | 
			
		||||
@@ -1187,10 +1173,6 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
                yScale = geom.height / actor.height;
 | 
			
		||||
            } else {
 | 
			
		||||
                let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
 | 
			
		||||
                if (!monitor) {
 | 
			
		||||
                    this._minimizeWindowDone();
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                xDest = monitor.x;
 | 
			
		||||
                yDest = monitor.y;
 | 
			
		||||
                if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
 | 
			
		||||
@@ -1266,11 +1248,6 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
                                geom.height / actor.height);
 | 
			
		||||
            } else {
 | 
			
		||||
                let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
 | 
			
		||||
                if (!monitor) {
 | 
			
		||||
                    actor.show();
 | 
			
		||||
                    this._unminimizeWindowDone();
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                actor.set_position(monitor.x, monitor.y);
 | 
			
		||||
                if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
 | 
			
		||||
                    actor.x += monitor.width;
 | 
			
		||||
@@ -1843,7 +1820,7 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
        this._windowMenuManager.showWindowMenuForWindow(window, menu, rect);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _startSwitcher(display, window, binding) {
 | 
			
		||||
    _startSwitcher(display, screen, window, binding) {
 | 
			
		||||
        let constructor = null;
 | 
			
		||||
        switch (binding.get_name()) {
 | 
			
		||||
            case 'switch-applications':
 | 
			
		||||
@@ -1882,15 +1859,15 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
            tabPopup.destroy();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _startA11ySwitcher(display, window, binding) {
 | 
			
		||||
    _startA11ySwitcher(display, screen, window, binding) {
 | 
			
		||||
        Main.ctrlAltTabManager.popup(binding.is_reversed(), binding.get_name(), binding.get_mask());
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _toggleAppMenu(display, window, event, binding) {
 | 
			
		||||
    _toggleAppMenu(display, screen, window, event, binding) {
 | 
			
		||||
        Main.panel.toggleAppMenu();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _toggleCalendar(display, window, event, binding) {
 | 
			
		||||
    _toggleCalendar(display, screen, window, event, binding) {
 | 
			
		||||
        Main.panel.toggleCalendar();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -1903,13 +1880,11 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
            OrigTweener.resumeAllTweens();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _showWorkspaceSwitcher(display, window, binding) {
 | 
			
		||||
        let workspaceManager = display.get_workspace_manager();
 | 
			
		||||
 | 
			
		||||
    _showWorkspaceSwitcher(display, screen, window, binding) {
 | 
			
		||||
        if (!Main.sessionMode.hasWorkspaces)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (workspaceManager.n_workspaces == 1)
 | 
			
		||||
        if (screen.n_workspaces == 1)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let [action,,,target] = binding.get_name().split('-');
 | 
			
		||||
@@ -1928,22 +1903,22 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        if (target == 'last') {
 | 
			
		||||
            direction = Meta.MotionDirection.DOWN;
 | 
			
		||||
            newWs = workspaceManager.get_workspace_by_index(workspaceManager.n_workspaces - 1);
 | 
			
		||||
            newWs = screen.get_workspace_by_index(screen.n_workspaces - 1);
 | 
			
		||||
        } else if (isNaN(target)) {
 | 
			
		||||
            // Prepend a new workspace dynamically
 | 
			
		||||
            if (workspaceManager.get_active_workspace_index() == 0 &&
 | 
			
		||||
            if (screen.get_active_workspace_index() == 0 &&
 | 
			
		||||
                action == 'move' && target == 'up' && this._isWorkspacePrepended == false) {
 | 
			
		||||
                this.insertWorkspace(0);
 | 
			
		||||
                this._isWorkspacePrepended = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            direction = Meta.MotionDirection[target.toUpperCase()];
 | 
			
		||||
            newWs = workspaceManager.get_active_workspace().get_neighbor(direction);
 | 
			
		||||
            newWs = screen.get_active_workspace().get_neighbor(direction);
 | 
			
		||||
        } else if (target > 0) {
 | 
			
		||||
            target--;
 | 
			
		||||
            newWs = workspaceManager.get_workspace_by_index(target);
 | 
			
		||||
            newWs = screen.get_workspace_by_index(target);
 | 
			
		||||
 | 
			
		||||
            if (workspaceManager.get_active_workspace().index() > target)
 | 
			
		||||
            if (screen.get_active_workspace().index() > target)
 | 
			
		||||
                direction = Meta.MotionDirection.UP;
 | 
			
		||||
            else
 | 
			
		||||
                direction = Meta.MotionDirection.DOWN;
 | 
			
		||||
@@ -1976,8 +1951,7 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
        if (!Main.sessionMode.hasWorkspaces)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWorkspace = global.screen.get_active_workspace();
 | 
			
		||||
 | 
			
		||||
        if (activeWorkspace != workspace)
 | 
			
		||||
            workspace.activate(global.get_current_time());
 | 
			
		||||
@@ -1987,8 +1961,7 @@ var WindowManager = new Lang.Class({
 | 
			
		||||
        if (!Main.sessionMode.hasWorkspaces)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWorkspace = global.screen.get_active_workspace();
 | 
			
		||||
 | 
			
		||||
        if (activeWorkspace != workspace) {
 | 
			
		||||
            // This won't have any effect for "always sticky" windows
 | 
			
		||||
 
 | 
			
		||||
@@ -126,15 +126,16 @@ var WindowMenu = new Lang.Class({
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let display = global.display;
 | 
			
		||||
        let nMonitors = display.get_n_monitors();
 | 
			
		||||
        let monitorIndex = window.get_monitor();
 | 
			
		||||
        if (nMonitors > 1 && monitorIndex >= 0) {
 | 
			
		||||
        let screen = global.screen;
 | 
			
		||||
        let nMonitors = screen.get_n_monitors();
 | 
			
		||||
        if (nMonitors > 1) {
 | 
			
		||||
            this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
 | 
			
		||||
 | 
			
		||||
            let monitorIndex = window.get_monitor();
 | 
			
		||||
 | 
			
		||||
            let dir = Meta.ScreenDirection.UP;
 | 
			
		||||
            let upMonitorIndex =
 | 
			
		||||
                display.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
                screen.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
            if (upMonitorIndex != -1) {
 | 
			
		||||
                this.addAction(_("Move to Monitor Up"), () => {
 | 
			
		||||
                    window.move_to_monitor(upMonitorIndex);
 | 
			
		||||
@@ -143,7 +144,7 @@ var WindowMenu = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
            dir = Meta.ScreenDirection.DOWN;
 | 
			
		||||
            let downMonitorIndex =
 | 
			
		||||
                display.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
                screen.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
            if (downMonitorIndex != -1) {
 | 
			
		||||
                this.addAction(_("Move to Monitor Down"), () => {
 | 
			
		||||
                    window.move_to_monitor(downMonitorIndex);
 | 
			
		||||
@@ -152,7 +153,7 @@ var WindowMenu = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
            dir = Meta.ScreenDirection.LEFT;
 | 
			
		||||
            let leftMonitorIndex =
 | 
			
		||||
                display.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
                screen.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
            if (leftMonitorIndex != -1) {
 | 
			
		||||
                this.addAction(_("Move to Monitor Left"), () => {
 | 
			
		||||
                    window.move_to_monitor(leftMonitorIndex);
 | 
			
		||||
@@ -161,7 +162,7 @@ var WindowMenu = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
            dir = Meta.ScreenDirection.RIGHT;
 | 
			
		||||
            let rightMonitorIndex =
 | 
			
		||||
                display.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
                screen.get_monitor_neighbor_index(monitorIndex, dir);
 | 
			
		||||
            if (rightMonitorIndex != -1) {
 | 
			
		||||
                this.addAction(_("Move to Monitor Right"), () => {
 | 
			
		||||
                    window.move_to_monitor(rightMonitorIndex);
 | 
			
		||||
 
 | 
			
		||||
@@ -137,10 +137,8 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
        this._dragSlot = [0, 0, 0, 0];
 | 
			
		||||
        this._stackAbove = null;
 | 
			
		||||
 | 
			
		||||
        this._windowClone._sizeChangedId = this.metaWindow.connect('size-changed',
 | 
			
		||||
            this._onMetaWindowSizeChanged.bind(this));
 | 
			
		||||
        this._windowClone._posChangedId = this.metaWindow.connect('position-changed',
 | 
			
		||||
            this._computeBoundingBox.bind(this));
 | 
			
		||||
        this._windowClone._updateId = this.metaWindow.connect('size-changed',
 | 
			
		||||
            this._onRealWindowSizeChanged.bind(this));
 | 
			
		||||
        this._windowClone._destroyId =
 | 
			
		||||
            this.realWindow.connect('destroy', () => {
 | 
			
		||||
                // First destroy the clone and then destroy everything
 | 
			
		||||
@@ -208,7 +206,8 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    addAttachedDialog(win) {
 | 
			
		||||
        this._doAddAttachedDialog(win, win.get_compositor_private());
 | 
			
		||||
        this._onMetaWindowSizeChanged();
 | 
			
		||||
        this._computeBoundingBox();
 | 
			
		||||
        this.emit('size-changed');
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    hasAttachedDialogs() {
 | 
			
		||||
@@ -217,14 +216,15 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _doAddAttachedDialog(metaWin, realWin) {
 | 
			
		||||
        let clone = new Clutter.Clone({ source: realWin });
 | 
			
		||||
        clone._sizeChangedId = metaWin.connect('size-changed',
 | 
			
		||||
            this._onMetaWindowSizeChanged.bind(this));
 | 
			
		||||
        clone._posChangedId = metaWin.connect('position-changed',
 | 
			
		||||
            this._onMetaWindowSizeChanged.bind(this));
 | 
			
		||||
        clone._updateId = metaWin.connect('size-changed', () => {
 | 
			
		||||
            this._computeBoundingBox();
 | 
			
		||||
            this.emit('size-changed');
 | 
			
		||||
        });
 | 
			
		||||
        clone._destroyId = realWin.connect('destroy', () => {
 | 
			
		||||
            clone.destroy();
 | 
			
		||||
 | 
			
		||||
            this._onMetaWindowSizeChanged();
 | 
			
		||||
            this._computeBoundingBox();
 | 
			
		||||
            this.emit('size-changed');
 | 
			
		||||
        });
 | 
			
		||||
        this.actor.add_child(clone);
 | 
			
		||||
    },
 | 
			
		||||
@@ -321,13 +321,12 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
            else
 | 
			
		||||
                realWindow = child.source;
 | 
			
		||||
 | 
			
		||||
            realWindow.meta_window.disconnect(child._sizeChangedId);
 | 
			
		||||
            realWindow.meta_window.disconnect(child._posChangedId);
 | 
			
		||||
            realWindow.meta_window.disconnect(child._updateId);
 | 
			
		||||
            realWindow.disconnect(child._destroyId);
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onMetaWindowSizeChanged() {
 | 
			
		||||
    _onRealWindowSizeChanged() {
 | 
			
		||||
        this._computeBoundingBox();
 | 
			
		||||
        this.emit('size-changed');
 | 
			
		||||
    },
 | 
			
		||||
@@ -1157,10 +1156,10 @@ var Workspace = new Lang.Class({
 | 
			
		||||
            this._windowRemovedId = this.metaWorkspace.connect('window-removed',
 | 
			
		||||
                                                               this._windowRemoved.bind(this));
 | 
			
		||||
        }
 | 
			
		||||
        this._windowEnteredMonitorId = global.display.connect('window-entered-monitor',
 | 
			
		||||
                                                              this._windowEnteredMonitor.bind(this));
 | 
			
		||||
        this._windowLeftMonitorId = global.display.connect('window-left-monitor',
 | 
			
		||||
                                                           this._windowLeftMonitor.bind(this));
 | 
			
		||||
        this._windowEnteredMonitorId = global.screen.connect('window-entered-monitor',
 | 
			
		||||
                                                             this._windowEnteredMonitor.bind(this));
 | 
			
		||||
        this._windowLeftMonitorId = global.screen.connect('window-left-monitor',
 | 
			
		||||
                                                          this._windowLeftMonitor.bind(this));
 | 
			
		||||
        this._repositionWindowsId = 0;
 | 
			
		||||
 | 
			
		||||
        this.leavingOverview = false;
 | 
			
		||||
@@ -1306,8 +1305,7 @@ var Workspace = new Lang.Class({
 | 
			
		||||
        let area = padArea(this._actualGeometry, padding);
 | 
			
		||||
        let slots = strategy.computeWindowSlots(layout, area);
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let currentWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let currentWorkspace = global.screen.get_active_workspace();
 | 
			
		||||
        let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < slots.length; i++) {
 | 
			
		||||
@@ -1444,26 +1442,34 @@ var Workspace = new Lang.Class({
 | 
			
		||||
    _doRemoveWindow(metaWin) {
 | 
			
		||||
        let win = metaWin.get_compositor_private();
 | 
			
		||||
 | 
			
		||||
        let clone = this._removeWindowClone(metaWin);
 | 
			
		||||
        // find the position of the window in our list
 | 
			
		||||
        let index = this._lookupIndex (metaWin);
 | 
			
		||||
 | 
			
		||||
        if (clone) {
 | 
			
		||||
            // If metaWin.get_compositor_private() returned non-NULL, that
 | 
			
		||||
            // means the window still exists (and is just being moved to
 | 
			
		||||
            // another workspace or something), so set its overviewHint
 | 
			
		||||
            // accordingly. (If it returned NULL, then the window is being
 | 
			
		||||
            // destroyed; we'd like to animate this, but it's too late at
 | 
			
		||||
            // this point.)
 | 
			
		||||
            if (win) {
 | 
			
		||||
                let [stageX, stageY] = clone.actor.get_transformed_position();
 | 
			
		||||
                let [stageWidth, stageHeight] = clone.actor.get_transformed_size();
 | 
			
		||||
                win._overviewHint = {
 | 
			
		||||
                    x: stageX,
 | 
			
		||||
                    y: stageY,
 | 
			
		||||
                    scale: stageWidth / clone.actor.width
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
            clone.destroy();
 | 
			
		||||
        if (index == -1)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let clone = this._windows[index];
 | 
			
		||||
 | 
			
		||||
        this._windows.splice(index, 1);
 | 
			
		||||
        this._windowOverlays.splice(index, 1);
 | 
			
		||||
 | 
			
		||||
        // If metaWin.get_compositor_private() returned non-NULL, that
 | 
			
		||||
        // means the window still exists (and is just being moved to
 | 
			
		||||
        // another workspace or something), so set its overviewHint
 | 
			
		||||
        // accordingly. (If it returned NULL, then the window is being
 | 
			
		||||
        // destroyed; we'd like to animate this, but it's too late at
 | 
			
		||||
        // this point.)
 | 
			
		||||
        if (win) {
 | 
			
		||||
            let [stageX, stageY] = clone.actor.get_transformed_position();
 | 
			
		||||
            let [stageWidth, stageHeight] = clone.actor.get_transformed_size();
 | 
			
		||||
            win._overviewHint = {
 | 
			
		||||
                x: stageX,
 | 
			
		||||
                y: stageY,
 | 
			
		||||
                scale: stageWidth / clone.actor.width
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
        clone.destroy();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // We need to reposition the windows; to avoid shuffling windows
 | 
			
		||||
        // around while the user is interacting with the workspace, we delay
 | 
			
		||||
@@ -1562,13 +1568,13 @@ var Workspace = new Lang.Class({
 | 
			
		||||
        this._doRemoveWindow(metaWin);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) {
 | 
			
		||||
    _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) {
 | 
			
		||||
        if (monitorIndex == this.monitorIndex) {
 | 
			
		||||
            this._doAddWindow(metaWin);
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) {
 | 
			
		||||
    _windowLeftMonitor(metaScreen, monitorIndex, metaWin) {
 | 
			
		||||
        if (monitorIndex == this.monitorIndex) {
 | 
			
		||||
            this._doRemoveWindow(metaWin);
 | 
			
		||||
        }
 | 
			
		||||
@@ -1593,9 +1599,7 @@ var Workspace = new Lang.Class({
 | 
			
		||||
        if (this._windows.length == 0)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        if (this.metaWorkspace != null && this.metaWorkspace != activeWorkspace)
 | 
			
		||||
        if (this.metaWorkspace != null && this.metaWorkspace != global.screen.get_active_workspace())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        // Special case maximized windows, since it doesn't make sense
 | 
			
		||||
@@ -1651,9 +1655,7 @@ var Workspace = new Lang.Class({
 | 
			
		||||
            this._repositionWindowsId = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        if (this.metaWorkspace != null && this.metaWorkspace != activeWorkspace)
 | 
			
		||||
        if (this.metaWorkspace != null && this.metaWorkspace != global.screen.get_active_workspace())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        // Special case maximized windows, since it doesn't make sense
 | 
			
		||||
@@ -1723,8 +1725,7 @@ var Workspace = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    zoomFromOverview() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let currentWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let currentWorkspace = global.screen.get_active_workspace();
 | 
			
		||||
 | 
			
		||||
        this.leavingOverview = true;
 | 
			
		||||
 | 
			
		||||
@@ -1792,8 +1793,8 @@ var Workspace = new Lang.Class({
 | 
			
		||||
            this.metaWorkspace.disconnect(this._windowAddedId);
 | 
			
		||||
            this.metaWorkspace.disconnect(this._windowRemovedId);
 | 
			
		||||
        }
 | 
			
		||||
        global.display.disconnect(this._windowEnteredMonitorId);
 | 
			
		||||
        global.display.disconnect(this._windowLeftMonitorId);
 | 
			
		||||
        global.screen.disconnect(this._windowEnteredMonitorId);
 | 
			
		||||
        global.screen.disconnect(this._windowLeftMonitorId);
 | 
			
		||||
 | 
			
		||||
        if (this._repositionWindowsId > 0) {
 | 
			
		||||
            Mainloop.source_remove(this._repositionWindowsId);
 | 
			
		||||
@@ -1858,9 +1859,6 @@ var Workspace = new Lang.Class({
 | 
			
		||||
        clone.connect('size-changed', () => {
 | 
			
		||||
            this._recalculateWindowPositions(WindowPositionFlags.NONE);
 | 
			
		||||
        });
 | 
			
		||||
        clone.actor.connect('destroy', () => {
 | 
			
		||||
            this._removeWindowClone(clone.metaWindow);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        this.actor.add_actor(clone.actor);
 | 
			
		||||
 | 
			
		||||
@@ -1882,17 +1880,6 @@ var Workspace = new Lang.Class({
 | 
			
		||||
        return [clone, overlay];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _removeWindowClone(metaWin) {
 | 
			
		||||
        // find the position of the window in our list
 | 
			
		||||
        let index = this._lookupIndex (metaWin);
 | 
			
		||||
 | 
			
		||||
        if (index == -1)
 | 
			
		||||
            return null;
 | 
			
		||||
 | 
			
		||||
        this._windowOverlays.splice(index, 1);
 | 
			
		||||
        return this._windows.splice(index, 1).pop();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onShowOverlayClose(windowOverlay) {
 | 
			
		||||
        for (let i = 0; i < this._windowOverlays.length; i++) {
 | 
			
		||||
            let overlay = this._windowOverlays[i];
 | 
			
		||||
@@ -2028,8 +2015,7 @@ var Workspace = new Lang.Class({
 | 
			
		||||
            if (metaWindow.get_monitor() != this.monitorIndex)
 | 
			
		||||
                metaWindow.move_to_monitor(this.monitorIndex);
 | 
			
		||||
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
            let index = this.metaWorkspace ? this.metaWorkspace.index() : workspaceManager.get_active_workspace_index();
 | 
			
		||||
            let index = this.metaWorkspace ? this.metaWorkspace.index() : global.screen.get_active_workspace_index();
 | 
			
		||||
            metaWindow.change_workspace_by_index(index, false);
 | 
			
		||||
            return true;
 | 
			
		||||
        } else if (source.shellWorkspaceLaunch) {
 | 
			
		||||
 
 | 
			
		||||
@@ -47,12 +47,9 @@ var WorkspaceSwitcherPopup = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this.actor.hide();
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        this._workspaceManagerSignals = [];
 | 
			
		||||
        this._workspaceManagerSignals.push(workspaceManager.connect('workspace-added',
 | 
			
		||||
                                                                    this._redisplay.bind(this)));
 | 
			
		||||
        this._workspaceManagerSignals.push(workspaceManager.connect('workspace-removed',
 | 
			
		||||
                                                                    this._redisplay.bind(this)));
 | 
			
		||||
        this._globalSignals = [];
 | 
			
		||||
        this._globalSignals.push(global.screen.connect('workspace-added', this._redisplay.bind(this)));
 | 
			
		||||
        this._globalSignals.push(global.screen.connect('workspace-removed', this._redisplay.bind(this)));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getPreferredHeight(actor, forWidth, alloc) {
 | 
			
		||||
@@ -71,12 +68,11 @@ var WorkspaceSwitcherPopup = new Lang.Class({
 | 
			
		||||
            height += childNaturalHeight * workArea.width / workArea.height;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let spacing = this._itemSpacing * (workspaceManager.n_workspaces - 1);
 | 
			
		||||
        let spacing = this._itemSpacing * (global.screen.n_workspaces - 1);
 | 
			
		||||
        height += spacing;
 | 
			
		||||
        height = Math.min(height, availHeight);
 | 
			
		||||
 | 
			
		||||
        this._childHeight = (height - spacing) / workspaceManager.n_workspaces;
 | 
			
		||||
        this._childHeight = (height - spacing) / global.screen.n_workspaces;
 | 
			
		||||
 | 
			
		||||
        alloc.min_size = height;
 | 
			
		||||
        alloc.natural_size = height;
 | 
			
		||||
@@ -108,11 +104,9 @@ var WorkspaceSwitcherPopup = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _redisplay() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
        this._list.destroy_all_children();
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < workspaceManager.n_workspaces; i++) {
 | 
			
		||||
        for (let i = 0; i < global.screen.n_workspaces; i++) {
 | 
			
		||||
            let indicator = null;
 | 
			
		||||
 | 
			
		||||
           if (i == this._activeWorkspaceIndex && this._direction == Meta.MotionDirection.UP)
 | 
			
		||||
@@ -170,9 +164,8 @@ var WorkspaceSwitcherPopup = new Lang.Class({
 | 
			
		||||
            Mainloop.source_remove(this._timeoutId);
 | 
			
		||||
        this._timeoutId = 0;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        for (let i = 0; i < this._workspaceManagerSignals.length; i++)
 | 
			
		||||
            workspaceManager.disconnect(this._workspaceManagerSignals[i]);
 | 
			
		||||
        for (let i = 0; i < this._globalSignals.length; i++)
 | 
			
		||||
            global.screen.disconnect(this._globalSignals[i]);
 | 
			
		||||
 | 
			
		||||
        this.actor.destroy();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,7 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
        this.realWindow = realWindow;
 | 
			
		||||
        this.metaWindow = realWindow.meta_window;
 | 
			
		||||
 | 
			
		||||
        this.clone._updateId = this.realWindow.connect('notify::position',
 | 
			
		||||
        this.clone._updateId = this.metaWindow.connect('position-changed',
 | 
			
		||||
                                                       this._onPositionChanged.bind(this));
 | 
			
		||||
        this.clone._destroyId = this.realWindow.connect('destroy', () => {
 | 
			
		||||
            // First destroy the clone and then destroy everything
 | 
			
		||||
@@ -153,7 +153,7 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
        let clone = new Clutter.Clone({ source: realDialog });
 | 
			
		||||
        this._updateDialogPosition(realDialog, clone);
 | 
			
		||||
 | 
			
		||||
        clone._updateId = realDialog.connect('notify::position', dialog => {
 | 
			
		||||
        clone._updateId = metaDialog.connect('position-changed', dialog => {
 | 
			
		||||
            this._updateDialogPosition(dialog, clone);
 | 
			
		||||
        });
 | 
			
		||||
        clone._destroyId = realDialog.connect('destroy', () => {
 | 
			
		||||
@@ -171,6 +171,7 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onPositionChanged() {
 | 
			
		||||
        let rect = this.metaWindow.get_frame_rect();
 | 
			
		||||
        this.actor.set_position(this.realWindow.x, this.realWindow.y);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -178,7 +179,7 @@ var WindowClone = new Lang.Class({
 | 
			
		||||
        this.actor.get_children().forEach(child => {
 | 
			
		||||
            let realWindow = child.source;
 | 
			
		||||
 | 
			
		||||
            realWindow.disconnect(child._updateId);
 | 
			
		||||
            realWindow.meta_window.disconnect(child._updateId);
 | 
			
		||||
            realWindow.disconnect(child._destroyId);
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
@@ -303,9 +304,9 @@ var WorkspaceThumbnail = new Lang.Class({
 | 
			
		||||
                                                          this._windowAdded.bind(this));
 | 
			
		||||
        this._windowRemovedId = this.metaWorkspace.connect('window-removed',
 | 
			
		||||
                                                           this._windowRemoved.bind(this));
 | 
			
		||||
        this._windowEnteredMonitorId = global.display.connect('window-entered-monitor',
 | 
			
		||||
                                                              this._windowEnteredMonitor.bind(this));
 | 
			
		||||
        this._windowLeftMonitorId = global.display.connect('window-left-monitor',
 | 
			
		||||
        this._windowEnteredMonitorId = global.screen.connect('window-entered-monitor',
 | 
			
		||||
                                                           this._windowEnteredMonitor.bind(this));
 | 
			
		||||
        this._windowLeftMonitorId = global.screen.connect('window-left-monitor',
 | 
			
		||||
                                                           this._windowLeftMonitor.bind(this));
 | 
			
		||||
 | 
			
		||||
        this.state = ThumbnailState.NORMAL;
 | 
			
		||||
@@ -371,9 +372,18 @@ var WorkspaceThumbnail = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _doRemoveWindow(metaWin) {
 | 
			
		||||
        let clone = this._removeWindowClone(metaWin);
 | 
			
		||||
        if (clone)
 | 
			
		||||
            clone.destroy();
 | 
			
		||||
        let win = metaWin.get_compositor_private();
 | 
			
		||||
 | 
			
		||||
        // find the position of the window in our list
 | 
			
		||||
        let index = this._lookupIndex (metaWin);
 | 
			
		||||
 | 
			
		||||
        if (index == -1)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let clone = this._windows[index];
 | 
			
		||||
        this._windows.splice(index, 1);
 | 
			
		||||
 | 
			
		||||
        clone.destroy();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _doAddWindow(metaWin) {
 | 
			
		||||
@@ -445,13 +455,13 @@ var WorkspaceThumbnail = new Lang.Class({
 | 
			
		||||
        this._doRemoveWindow(metaWin);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) {
 | 
			
		||||
    _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) {
 | 
			
		||||
        if (monitorIndex == this.monitorIndex) {
 | 
			
		||||
            this._doAddWindow(metaWin);
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) {
 | 
			
		||||
    _windowLeftMonitor(metaScreen, monitorIndex, metaWin) {
 | 
			
		||||
        if (monitorIndex == this.monitorIndex) {
 | 
			
		||||
            this._doRemoveWindow(metaWin);
 | 
			
		||||
        }
 | 
			
		||||
@@ -477,8 +487,8 @@ var WorkspaceThumbnail = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this.metaWorkspace.disconnect(this._windowAddedId);
 | 
			
		||||
        this.metaWorkspace.disconnect(this._windowRemovedId);
 | 
			
		||||
        global.display.disconnect(this._windowEnteredMonitorId);
 | 
			
		||||
        global.display.disconnect(this._windowLeftMonitorId);
 | 
			
		||||
        global.screen.disconnect(this._windowEnteredMonitorId);
 | 
			
		||||
        global.screen.disconnect(this._windowLeftMonitorId);
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < this._allWindows.length; i++)
 | 
			
		||||
            this._allWindows[i].disconnect(this._minimizedChangedIds[i]);
 | 
			
		||||
@@ -525,9 +535,6 @@ var WorkspaceThumbnail = new Lang.Class({
 | 
			
		||||
        clone.connect('drag-end', () => {
 | 
			
		||||
            Main.overview.endWindowDrag(clone.metaWindow);
 | 
			
		||||
        });
 | 
			
		||||
        clone.actor.connect('destroy', () => {
 | 
			
		||||
            this._removeWindowClone(clone.metaWindow);
 | 
			
		||||
        });
 | 
			
		||||
        this._contents.add_actor(clone.actor);
 | 
			
		||||
 | 
			
		||||
        if (this._windows.length == 0)
 | 
			
		||||
@@ -540,24 +547,12 @@ var WorkspaceThumbnail = new Lang.Class({
 | 
			
		||||
        return clone;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _removeWindowClone(metaWin) {
 | 
			
		||||
        // find the position of the window in our list
 | 
			
		||||
        let index = this._lookupIndex (metaWin);
 | 
			
		||||
 | 
			
		||||
        if (index == -1)
 | 
			
		||||
            return null;
 | 
			
		||||
 | 
			
		||||
        return this._windows.splice(index, 1).pop();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    activate(time) {
 | 
			
		||||
        if (this.state > ThumbnailState.NORMAL)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        // a click on the already current workspace should go back to the main view
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        if (this.metaWorkspace == activeWorkspace)
 | 
			
		||||
        if (this.metaWorkspace == global.screen.get_active_workspace())
 | 
			
		||||
            Main.overview.hide();
 | 
			
		||||
        else
 | 
			
		||||
            this.metaWorkspace.activate(time);
 | 
			
		||||
@@ -679,19 +674,12 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
            this._updateSwitcherVisibility.bind(this));
 | 
			
		||||
 | 
			
		||||
        Main.layoutManager.connect('monitors-changed', this._rebuildThumbnails.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._switchWorkspaceNotifyId = 0;
 | 
			
		||||
        this._nWorkspacesNotifyId = 0;
 | 
			
		||||
        this._syncStackingId = 0;
 | 
			
		||||
        this._workareasChangedId = 0;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _updateSwitcherVisibility() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
        this.actor.visible =
 | 
			
		||||
            this._settings.get_boolean('dynamic-workspaces') ||
 | 
			
		||||
                workspaceManager.n_workspaces > 1;
 | 
			
		||||
                global.screen.n_workspaces > 1;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _activateThumbnailAtPoint(stageX, stageY, time) {
 | 
			
		||||
@@ -849,8 +837,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
                // to open its first window within some time, as tracked by Shell.WindowTracker.
 | 
			
		||||
                // Here, we only add a very brief timeout to avoid the _immediate_ removal of the
 | 
			
		||||
                // workspace while we wait for the startup sequence to load.
 | 
			
		||||
                let workspaceManager = global.workspace_manager;
 | 
			
		||||
                Main.wm.keepWorkspaceAlive(workspaceManager.get_workspace_by_index(newWorkspaceIndex),
 | 
			
		||||
                Main.wm.keepWorkspaceAlive(global.screen.get_workspace_by_index(newWorkspaceIndex),
 | 
			
		||||
                                           WORKSPACE_KEEP_ALIVE_TIME);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -869,21 +856,18 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _createThumbnails() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
        this._switchWorkspaceNotifyId =
 | 
			
		||||
            global.window_manager.connect('switch-workspace',
 | 
			
		||||
                                          this._activeWorkspaceChanged.bind(this));
 | 
			
		||||
        this._nWorkspacesNotifyId =
 | 
			
		||||
            workspaceManager.connect('notify::n-workspaces',
 | 
			
		||||
                                     this._workspacesChanged.bind(this));
 | 
			
		||||
            global.screen.connect('notify::n-workspaces',
 | 
			
		||||
                                  this._workspacesChanged.bind(this));
 | 
			
		||||
        this._syncStackingId =
 | 
			
		||||
            Main.overview.connect('windows-restacked',
 | 
			
		||||
                                  this._syncStacking.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._workareasChangedId =
 | 
			
		||||
            global.display.connect('workareas-changed',
 | 
			
		||||
                                   this._rebuildThumbnails.bind(this));
 | 
			
		||||
            global.screen.connect('workareas-changed', this._rebuildThumbnails.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._targetScale = 0;
 | 
			
		||||
        this._scale = 0;
 | 
			
		||||
@@ -894,7 +878,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
        for (let key in ThumbnailState)
 | 
			
		||||
            this._stateCounts[ThumbnailState[key]] = 0;
 | 
			
		||||
 | 
			
		||||
        this.addThumbnails(0, workspaceManager.n_workspaces);
 | 
			
		||||
        this.addThumbnails(0, global.screen.n_workspaces);
 | 
			
		||||
 | 
			
		||||
        this._updateSwitcherVisibility();
 | 
			
		||||
    },
 | 
			
		||||
@@ -908,8 +892,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
            this._switchWorkspaceNotifyId = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (this._nWorkspacesNotifyId > 0) {
 | 
			
		||||
            let workspaceManager = global.workspace_manager;
 | 
			
		||||
            workspaceManager.disconnect(this._nWorkspacesNotifyId);
 | 
			
		||||
            global.screen.disconnect(this._nWorkspacesNotifyId);
 | 
			
		||||
            this._nWorkspacesNotifyId = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -919,7 +902,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this._workareasChangedId > 0) {
 | 
			
		||||
            global.display.disconnect(this._workareasChangedId);
 | 
			
		||||
            global.screen.disconnect(this._workareasChangedId);
 | 
			
		||||
            this._workareasChangedId = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -939,10 +922,9 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
    _workspacesChanged() {
 | 
			
		||||
        let validThumbnails =
 | 
			
		||||
            this._thumbnails.filter(t => t.state <= ThumbnailState.NORMAL);
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let oldNumWorkspaces = validThumbnails.length;
 | 
			
		||||
        let newNumWorkspaces = workspaceManager.n_workspaces;
 | 
			
		||||
        let active = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let newNumWorkspaces = global.screen.n_workspaces;
 | 
			
		||||
        let active = global.screen.get_active_workspace_index();
 | 
			
		||||
 | 
			
		||||
        if (newNumWorkspaces > oldNumWorkspaces) {
 | 
			
		||||
            this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
 | 
			
		||||
@@ -950,7 +932,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
            let removedIndex;
 | 
			
		||||
            let removedNum = oldNumWorkspaces - newNumWorkspaces;
 | 
			
		||||
            for (let w = 0; w < oldNumWorkspaces; w++) {
 | 
			
		||||
                let metaWorkspace = workspaceManager.get_workspace_by_index(w);
 | 
			
		||||
                let metaWorkspace = global.screen.get_workspace_by_index(w);
 | 
			
		||||
                if (this._thumbnails[w].metaWorkspace != metaWorkspace) {
 | 
			
		||||
                    removedIndex = w;
 | 
			
		||||
                    break;
 | 
			
		||||
@@ -964,12 +946,10 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    addThumbnails(start, count) {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
        if (!this._ensurePorthole())
 | 
			
		||||
            return;
 | 
			
		||||
        for (let k = start; k < start + count; k++) {
 | 
			
		||||
            let metaWorkspace = workspaceManager.get_workspace_by_index(k);
 | 
			
		||||
            let metaWorkspace = global.screen.get_workspace_by_index(k);
 | 
			
		||||
            let thumbnail = new WorkspaceThumbnail(metaWorkspace);
 | 
			
		||||
            thumbnail.setPorthole(this._porthole.x, this._porthole.y,
 | 
			
		||||
                                  this._porthole.width, this._porthole.height);
 | 
			
		||||
@@ -1155,11 +1135,10 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let themeNode = this.actor.get_theme_node();
 | 
			
		||||
 | 
			
		||||
        let spacing = themeNode.get_length('spacing');
 | 
			
		||||
        let nWorkspaces = workspaceManager.n_workspaces;
 | 
			
		||||
        let nWorkspaces = global.screen.n_workspaces;
 | 
			
		||||
        let totalSpacing = (nWorkspaces - 1) * spacing;
 | 
			
		||||
 | 
			
		||||
        alloc.min_size = totalSpacing;
 | 
			
		||||
@@ -1173,11 +1152,10 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let themeNode = this.actor.get_theme_node();
 | 
			
		||||
 | 
			
		||||
        let spacing = this.actor.get_theme_node().get_length('spacing');
 | 
			
		||||
        let nWorkspaces = workspaceManager.n_workspaces;
 | 
			
		||||
        let nWorkspaces = global.screen.n_workspaces;
 | 
			
		||||
        let totalSpacing = (nWorkspaces - 1) * spacing;
 | 
			
		||||
 | 
			
		||||
        let avail = forHeight - totalSpacing;
 | 
			
		||||
@@ -1208,7 +1186,6 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
        if (this._thumbnails.length == 0) // not visible
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let themeNode = this.actor.get_theme_node();
 | 
			
		||||
 | 
			
		||||
        let portholeWidth = this._porthole.width;
 | 
			
		||||
@@ -1216,7 +1193,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
        let spacing = themeNode.get_length('spacing');
 | 
			
		||||
 | 
			
		||||
        // Compute the scale we'll need once everything is updated
 | 
			
		||||
        let nWorkspaces = workspaceManager.n_workspaces;
 | 
			
		||||
        let nWorkspaces = global.screen.n_workspaces;
 | 
			
		||||
        let totalSpacing = (nWorkspaces - 1) * spacing;
 | 
			
		||||
        let avail = (box.y2 - box.y1) - totalSpacing;
 | 
			
		||||
 | 
			
		||||
@@ -1250,8 +1227,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
        let indicatorY1 = this._indicatorY;
 | 
			
		||||
        let indicatorY2;
 | 
			
		||||
        // when not animating, the workspace position overrides this._indicatorY
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let indicatorWorkspace = !this._animatingIndicator ? activeWorkspace : null;
 | 
			
		||||
        let indicatorWorkspace = !this._animatingIndicator ? global.screen.get_active_workspace() : null;
 | 
			
		||||
        let indicatorThemeNode = this._indicator.get_theme_node();
 | 
			
		||||
 | 
			
		||||
        let indicatorTopFullBorder = indicatorThemeNode.get_padding(St.Side.TOP) + indicatorThemeNode.get_border_width(St.Side.TOP);
 | 
			
		||||
@@ -1342,8 +1318,7 @@ var ThumbnailsBox = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _activeWorkspaceChanged(wm, from, to, direction) {
 | 
			
		||||
        let thumbnail;
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWorkspace = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWorkspace = global.screen.get_active_workspace();
 | 
			
		||||
        for (let i = 0; i < this._thumbnails.length; i++) {
 | 
			
		||||
            if (this._thumbnails[i].metaWorkspace == activeWorkspace) {
 | 
			
		||||
                thumbnail = this._thumbnails[i];
 | 
			
		||||
 
 | 
			
		||||
@@ -91,29 +91,25 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
    Extends: WorkspacesViewBase,
 | 
			
		||||
 | 
			
		||||
    _init(monitorIndex) {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
 | 
			
		||||
        this.parent(monitorIndex);
 | 
			
		||||
 | 
			
		||||
        this._animating = false; // tweening
 | 
			
		||||
        this._scrolling = false; // swipe-scrolling
 | 
			
		||||
        this._animatingScroll = false; // programatically updating the adjustment
 | 
			
		||||
 | 
			
		||||
        let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let activeWorkspaceIndex = global.screen.get_active_workspace_index();
 | 
			
		||||
        this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
 | 
			
		||||
                                                    lower: 0,
 | 
			
		||||
                                                    page_increment: 1,
 | 
			
		||||
                                                    page_size: 1,
 | 
			
		||||
                                                    step_increment: 0,
 | 
			
		||||
                                                    upper: workspaceManager.n_workspaces });
 | 
			
		||||
                                                    upper: global.screen.n_workspaces });
 | 
			
		||||
        this.scrollAdjustment.connect('notify::value',
 | 
			
		||||
                                      this._onScroll.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._workspaces = [];
 | 
			
		||||
        this._updateWorkspaces();
 | 
			
		||||
        this._updateWorkspacesId =
 | 
			
		||||
            workspaceManager.connect('notify::n-workspaces',
 | 
			
		||||
                                     this._updateWorkspaces.bind(this));
 | 
			
		||||
        this._updateWorkspacesId = global.screen.connect('notify::n-workspaces', this._updateWorkspaces.bind(this));
 | 
			
		||||
 | 
			
		||||
        this._overviewShownId =
 | 
			
		||||
            Main.overview.connect('shown', () => {
 | 
			
		||||
@@ -142,8 +138,7 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getActiveWorkspace() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let active = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let active = global.screen.get_active_workspace_index();
 | 
			
		||||
        return this._workspaces[active];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -174,8 +169,7 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _scrollToActive() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let active = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let active = global.screen.get_active_workspace_index();
 | 
			
		||||
 | 
			
		||||
        this._updateWorkspaceActors(true);
 | 
			
		||||
        this._updateScrollAdjustment(active);
 | 
			
		||||
@@ -184,8 +178,7 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
    // Update workspace actors parameters
 | 
			
		||||
    // @showAnimation: iff %true, transition between states
 | 
			
		||||
    _updateWorkspaceActors(showAnimation) {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let active = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let active = global.screen.get_active_workspace_index();
 | 
			
		||||
 | 
			
		||||
        this._animating = showAnimation;
 | 
			
		||||
 | 
			
		||||
@@ -221,8 +214,7 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _updateVisibility() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let active = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let active = global.screen.get_active_workspace_index();
 | 
			
		||||
 | 
			
		||||
        for (let w = 0; w < this._workspaces.length; w++) {
 | 
			
		||||
            let workspace = this._workspaces[w];
 | 
			
		||||
@@ -254,14 +246,13 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _updateWorkspaces() {
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let newNumWorkspaces = workspaceManager.n_workspaces;
 | 
			
		||||
        let newNumWorkspaces = global.screen.n_workspaces;
 | 
			
		||||
 | 
			
		||||
        this.scrollAdjustment.upper = newNumWorkspaces;
 | 
			
		||||
 | 
			
		||||
        let needsUpdate = false;
 | 
			
		||||
        for (let j = 0; j < newNumWorkspaces; j++) {
 | 
			
		||||
            let metaWorkspace = workspaceManager.get_workspace_by_index(j);
 | 
			
		||||
            let metaWorkspace = global.screen.get_workspace_by_index(j);
 | 
			
		||||
            let workspace;
 | 
			
		||||
 | 
			
		||||
            if (j >= this._workspaces.length) { /* added */
 | 
			
		||||
@@ -299,8 +290,7 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
        this.scrollAdjustment.run_dispose();
 | 
			
		||||
        Main.overview.disconnect(this._overviewShownId);
 | 
			
		||||
        global.window_manager.disconnect(this._switchWorkspaceNotifyId);
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        workspaceManager.disconnect(this._updateWorkspacesId);
 | 
			
		||||
        global.screen.disconnect(this._updateWorkspacesId);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    startSwipeScroll() {
 | 
			
		||||
@@ -321,8 +311,7 @@ var WorkspacesView = new Lang.Class({
 | 
			
		||||
        if (this._animatingScroll)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let active = workspaceManager.get_active_workspace_index();
 | 
			
		||||
        let active = global.screen.get_active_workspace_index();
 | 
			
		||||
        let current = Math.round(adj.value);
 | 
			
		||||
 | 
			
		||||
        if (active != current) {
 | 
			
		||||
@@ -604,7 +593,7 @@ var WorkspacesDisplay = new Lang.Class({
 | 
			
		||||
    _getMonitorIndexForEvent(event) {
 | 
			
		||||
        let [x, y] = event.get_coords();
 | 
			
		||||
        let rect = new Meta.Rectangle({ x: x, y: y, width: 1, height: 1 });
 | 
			
		||||
        return global.display.get_monitor_index_for_rect(rect);
 | 
			
		||||
        return global.screen.get_monitor_index_for_rect(rect);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getPrimaryView() {
 | 
			
		||||
@@ -690,8 +679,7 @@ var WorkspacesDisplay = new Lang.Class({
 | 
			
		||||
            this._getMonitorIndexForEvent(event) != this._primaryIndex)
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWs = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWs = global.screen.get_active_workspace();
 | 
			
		||||
        let ws;
 | 
			
		||||
        switch (event.get_scroll_direction()) {
 | 
			
		||||
        case Clutter.ScrollDirection.UP:
 | 
			
		||||
@@ -710,8 +698,7 @@ var WorkspacesDisplay = new Lang.Class({
 | 
			
		||||
    _onKeyPressEvent(actor, event) {
 | 
			
		||||
        if (!this.actor.mapped)
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
        let workspaceManager = global.workspace_manager;
 | 
			
		||||
        let activeWs = workspaceManager.get_active_workspace();
 | 
			
		||||
        let activeWs = global.screen.get_active_workspace();
 | 
			
		||||
        let ws;
 | 
			
		||||
        switch (event.get_key_symbol()) {
 | 
			
		||||
        case Clutter.KEY_Page_Up:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								meson.build
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								meson.build
									
									
									
									
									
								
							@@ -1,12 +1,12 @@
 | 
			
		||||
project('gnome-shell', 'c',
 | 
			
		||||
  version: '3.29.4',
 | 
			
		||||
  version: '3.29.2',
 | 
			
		||||
  meson_version: '>= 0.42.0',
 | 
			
		||||
  license: 'GPLv2+'
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# We depend on a specific version of the libmutter API. The mutter variants of
 | 
			
		||||
# the Cogl and Clutter libraries also use this API version.
 | 
			
		||||
mutter_api_version = '3'
 | 
			
		||||
mutter_api_version = '2'
 | 
			
		||||
 | 
			
		||||
clutter_pc = 'mutter-clutter-' + mutter_api_version
 | 
			
		||||
cogl_pc = 'mutter-cogl-' + mutter_api_version
 | 
			
		||||
@@ -23,7 +23,7 @@ gi_req = '>= 1.49.1'
 | 
			
		||||
gjs_req = '>= 1.47.0'
 | 
			
		||||
gtk_req = '>= 3.15.0'
 | 
			
		||||
json_glib_req = '>= 0.13.2'
 | 
			
		||||
mutter_req = '>= 3.29.4'
 | 
			
		||||
mutter_req = '>= 3.29.2'
 | 
			
		||||
polkit_req = '>= 0.100'
 | 
			
		||||
schemas_req = '>= 3.21.3'
 | 
			
		||||
startup_req = '>= 0.11'
 | 
			
		||||
@@ -59,13 +59,6 @@ servicedir = join_paths(datadir, 'dbus-1', 'services')
 | 
			
		||||
 | 
			
		||||
plugindir = get_variable('BROWSER_PLUGIN_DIR', mozplugindir)
 | 
			
		||||
 | 
			
		||||
# XXX: Once https://github.com/systemd/systemd/issues/9595 is fixed and we can
 | 
			
		||||
# depend on this version, replace with something like:
 | 
			
		||||
# systemduserunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
 | 
			
		||||
#                                                         define_variable: ['prefix', prefix])
 | 
			
		||||
# and uncomment systemd_dep below
 | 
			
		||||
systemduserunitdir = join_paths(prefix, 'lib', 'systemd', 'user')
 | 
			
		||||
 | 
			
		||||
keybindings_dep = dependency('gnome-keybindings', required: false)
 | 
			
		||||
if keybindings_dep.found()
 | 
			
		||||
  keysdir = keybindings_dep.get_pkgconfig_variable('keysdir')
 | 
			
		||||
@@ -124,12 +117,10 @@ else
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if get_option('systemd')
 | 
			
		||||
  libsystemd_dep = dependency('libsystemd')
 | 
			
		||||
  # XXX: see systemduserunitdir
 | 
			
		||||
  # systemd_dep = dependency('systemd')
 | 
			
		||||
  have_systemd = true
 | 
			
		||||
  systemd_dep = dependency('libsystemd')
 | 
			
		||||
  have_systemd = systemd_dep.found()
 | 
			
		||||
else
 | 
			
		||||
  libsystemd_dep = []
 | 
			
		||||
  systemd_dep = []
 | 
			
		||||
  have_systemd = false
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,6 @@ js/ui/status/location.js
 | 
			
		||||
js/ui/status/network.js
 | 
			
		||||
js/ui/status/nightLight.js
 | 
			
		||||
js/ui/status/power.js
 | 
			
		||||
js/ui/status/remoteAccess.js
 | 
			
		||||
js/ui/status/rfkill.js
 | 
			
		||||
js/ui/status/system.js
 | 
			
		||||
js/ui/status/thunderbolt.js
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								po/ca.po
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								po/ca.po
									
									
									
									
									
								
							@@ -10,7 +10,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: HEAD\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2018-03-10 12:32+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-03-10 21:24+0100\n"
 | 
			
		||||
"Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
 | 
			
		||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
 | 
			
		||||
@@ -349,7 +349,7 @@ msgid "There was an error loading the preferences dialog for %s:"
 | 
			
		||||
msgstr "S'ha produït un error en carregar el diàleg de preferències de %s:"
 | 
			
		||||
 | 
			
		||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
 | 
			
		||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
 | 
			
		||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
 | 
			
		||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
 | 
			
		||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
@@ -669,12 +669,12 @@ msgstr "Afegeix als preferits"
 | 
			
		||||
msgid "Show Details"
 | 
			
		||||
msgstr "Mostra els detalls"
 | 
			
		||||
 | 
			
		||||
#: js/ui/appFavorites.js:140
 | 
			
		||||
#: js/ui/appFavorites.js:138
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been added to your favorites."
 | 
			
		||||
msgstr "S'ha afegit %s als preferits."
 | 
			
		||||
 | 
			
		||||
#: js/ui/appFavorites.js:174
 | 
			
		||||
#: js/ui/appFavorites.js:172
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been removed from your favorites."
 | 
			
		||||
msgstr "S'ha suprimit %s dels preferits."
 | 
			
		||||
@@ -869,7 +869,7 @@ msgstr "S'ha desconnectat un dispositiu extern"
 | 
			
		||||
msgid "Open with %s"
 | 
			
		||||
msgstr "Obre amb %s"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
 | 
			
		||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
 | 
			
		||||
msgid "Password:"
 | 
			
		||||
msgstr "Contrasenya:"
 | 
			
		||||
 | 
			
		||||
@@ -957,15 +957,15 @@ msgstr "Cal introduir una contrasenya per connectar-vos a «%s»."
 | 
			
		||||
msgid "Network Manager"
 | 
			
		||||
msgstr "Gestor de connexions de xarxa"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/polkitAgent.js:48
 | 
			
		||||
#: js/ui/components/polkitAgent.js:43
 | 
			
		||||
msgid "Authentication Required"
 | 
			
		||||
msgstr "Cal autenticació"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/polkitAgent.js:76
 | 
			
		||||
#: js/ui/components/polkitAgent.js:71
 | 
			
		||||
msgid "Administrator"
 | 
			
		||||
msgstr "Administrador"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/polkitAgent.js:156
 | 
			
		||||
#: js/ui/components/polkitAgent.js:151
 | 
			
		||||
msgid "Authenticate"
 | 
			
		||||
msgstr "Autentica"
 | 
			
		||||
 | 
			
		||||
@@ -973,7 +973,7 @@ msgstr "Autentica"
 | 
			
		||||
#. * requested authentication was not gained; this can happen
 | 
			
		||||
#. * because of an authentication error (like invalid password),
 | 
			
		||||
#. * for instance.
 | 
			
		||||
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
 | 
			
		||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
 | 
			
		||||
msgid "Sorry, that didn’t work. Please try again."
 | 
			
		||||
msgstr "No ha funcionat. Torneu-ho a provar."
 | 
			
		||||
 | 
			
		||||
@@ -1021,7 +1021,7 @@ msgstr "Afegeix rellotges del món…"
 | 
			
		||||
msgid "World Clocks"
 | 
			
		||||
msgstr "Rellotges del món"
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:227
 | 
			
		||||
#: js/ui/dateMenu.js:225
 | 
			
		||||
msgid "Weather"
 | 
			
		||||
msgstr "El temps"
 | 
			
		||||
 | 
			
		||||
@@ -1029,7 +1029,7 @@ msgstr "El temps"
 | 
			
		||||
#. libgweather for the possible condition strings. If at all
 | 
			
		||||
#. possible, the sentence should match the grammatical case etc. of
 | 
			
		||||
#. the inserted conditions.
 | 
			
		||||
#: js/ui/dateMenu.js:291
 | 
			
		||||
#: js/ui/dateMenu.js:289
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s all day."
 | 
			
		||||
msgstr "%s tot el dia."
 | 
			
		||||
@@ -1038,7 +1038,7 @@ msgstr "%s tot el dia."
 | 
			
		||||
#. libgweather for the possible condition strings. If at all
 | 
			
		||||
#. possible, the sentence should match the grammatical case etc. of
 | 
			
		||||
#. the inserted conditions.
 | 
			
		||||
#: js/ui/dateMenu.js:297
 | 
			
		||||
#: js/ui/dateMenu.js:295
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s, then %s later."
 | 
			
		||||
msgstr "%s, llavors %s més tard."
 | 
			
		||||
@@ -1047,30 +1047,30 @@ msgstr "%s, llavors %s més tard."
 | 
			
		||||
#. libgweather for the possible condition strings. If at all
 | 
			
		||||
#. possible, the sentence should match the grammatical case etc. of
 | 
			
		||||
#. the inserted conditions.
 | 
			
		||||
#: js/ui/dateMenu.js:303
 | 
			
		||||
#: js/ui/dateMenu.js:301
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s, then %s, followed by %s later."
 | 
			
		||||
msgstr "%s, llavors %s, seguit per %s més tard."
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:314
 | 
			
		||||
#: js/ui/dateMenu.js:312
 | 
			
		||||
msgid "Select a location…"
 | 
			
		||||
msgstr "Trieu una ubicació…"
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:317
 | 
			
		||||
#: js/ui/dateMenu.js:315
 | 
			
		||||
msgid "Loading…"
 | 
			
		||||
msgstr "S'està carregant…"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
 | 
			
		||||
#: js/ui/dateMenu.js:323
 | 
			
		||||
#: js/ui/dateMenu.js:321
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Feels like %s."
 | 
			
		||||
msgstr "Sensació tèrmica de %s."
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:326
 | 
			
		||||
#: js/ui/dateMenu.js:324
 | 
			
		||||
msgid "Go online for weather information"
 | 
			
		||||
msgstr "Vés en línia per a informació sobre el temps"
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:328
 | 
			
		||||
#: js/ui/dateMenu.js:326
 | 
			
		||||
msgid "Weather information is currently unavailable"
 | 
			
		||||
msgstr "La informació sobre el temps no està disponible"
 | 
			
		||||
 | 
			
		||||
@@ -1990,17 +1990,16 @@ msgid ""
 | 
			
		||||
"New device has been detected while you were away. Please disconnect and "
 | 
			
		||||
"reconnect the device to start using it."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"El nou dispositiu s'ha detectat mentre estàveu absents. Desconnecteu i "
 | 
			
		||||
"torneu a connectar el dispositiu per a començar a utilitzar-lo."
 | 
			
		||||
"El nou dispositiu s'ha detectat mentre estàveu absents. Desconnecteu i torneu a connectar el dispositiu per a començar a utilitzar-lo."
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/thunderbolt.js:356
 | 
			
		||||
msgid "Thunderbolt authorization error"
 | 
			
		||||
msgstr "S'ha produït un error d'autorització a Thunderbolt"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/thunderbolt.js:357
 | 
			
		||||
#,  javascript-format
 | 
			
		||||
msgid "Could not authorize the Thunderbolt device: %s"
 | 
			
		||||
msgstr "No s'ha pogut autoritzar el dispositiu Thunderbolt: %s"
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Could not authorize the thunderbolt device: %s"
 | 
			
		||||
msgstr "No s'ha pogut autoritzar el dispositiu thunderbolt: %s"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/volume.js:128
 | 
			
		||||
msgid "Volume changed"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										67
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								po/fr.po
									
									
									
									
									
								
							@@ -14,22 +14,22 @@
 | 
			
		||||
# Alain Lojewski <allomervan@gmail.com>, 2014-2018.
 | 
			
		||||
# Erwan Georget <egeorget@opmbx.org>, 2016.
 | 
			
		||||
# Claude Paroz <claude@2xlibre.net>, 2010-2011, 2016.
 | 
			
		||||
# Charles Monzat <superboa@hotmail.fr>, 2016, 2018.
 | 
			
		||||
# Charles Monzat <superboa@hotmail.fr>, 2016.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell master fr\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-04-18 19:30+0200\n"
 | 
			
		||||
"Last-Translator: Charles Monzat <superboa@hotmail.fr>\n"
 | 
			
		||||
"POT-Creation-Date: 2018-03-03 10:22+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-03-01 09:00+0100\n"
 | 
			
		||||
"Last-Translator: Alain Lojewski <allomervan@gmail.com>\n"
 | 
			
		||||
"Language-Team: français <gnomefr@traduc.org>\n"
 | 
			
		||||
"Language: fr\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.7\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.12\n"
 | 
			
		||||
 | 
			
		||||
#: data/50-gnome-shell-system.xml:6
 | 
			
		||||
msgid "System"
 | 
			
		||||
@@ -234,7 +234,7 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.shell.gschema.xml.in:116
 | 
			
		||||
msgid "Keybinding to open the overview"
 | 
			
		||||
msgstr "Combinaison de touches pour ouvrir la vue d’ensemble"
 | 
			
		||||
msgstr "Combinaison de touches pour ouvrir la vue d'ensemble"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.shell.gschema.xml.in:117
 | 
			
		||||
msgid "Keybinding to open the Activities Overview."
 | 
			
		||||
@@ -329,7 +329,7 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.shell.gschema.xml.in:206
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
msgstr "Activer l’empilage des fenêtres déposées sur les bords de l’écran"
 | 
			
		||||
msgstr "Activer l’empilage des fenêtres déposées sur les bords de l'écran"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.shell.gschema.xml.in:214
 | 
			
		||||
msgid "Workspaces are managed dynamically"
 | 
			
		||||
@@ -362,7 +362,7 @@ msgstr ""
 | 
			
		||||
"préférences de %s :"
 | 
			
		||||
 | 
			
		||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
 | 
			
		||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
 | 
			
		||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
 | 
			
		||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
 | 
			
		||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
@@ -682,12 +682,12 @@ msgstr "Ajouter aux favoris"
 | 
			
		||||
msgid "Show Details"
 | 
			
		||||
msgstr "Afficher les détails"
 | 
			
		||||
 | 
			
		||||
#: js/ui/appFavorites.js:140
 | 
			
		||||
#: js/ui/appFavorites.js:138
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been added to your favorites."
 | 
			
		||||
msgstr "%s a été ajouté à vos favoris."
 | 
			
		||||
 | 
			
		||||
#: js/ui/appFavorites.js:174
 | 
			
		||||
#: js/ui/appFavorites.js:172
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been removed from your favorites."
 | 
			
		||||
msgstr "%s a été supprimé de vos favoris."
 | 
			
		||||
@@ -897,7 +897,7 @@ msgstr "Disque externe déconnecté"
 | 
			
		||||
msgid "Open with %s"
 | 
			
		||||
msgstr "Ouvrir avec %s"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
 | 
			
		||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
 | 
			
		||||
msgid "Password:"
 | 
			
		||||
msgstr "Mot de passe :"
 | 
			
		||||
 | 
			
		||||
@@ -985,15 +985,15 @@ msgstr "Un mot de passe est requis pour se connecter à « %s »."
 | 
			
		||||
msgid "Network Manager"
 | 
			
		||||
msgstr "Gestionnaire de réseau"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/polkitAgent.js:48
 | 
			
		||||
#: js/ui/components/polkitAgent.js:43
 | 
			
		||||
msgid "Authentication Required"
 | 
			
		||||
msgstr "Authentification nécessaire"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/polkitAgent.js:76
 | 
			
		||||
#: js/ui/components/polkitAgent.js:71
 | 
			
		||||
msgid "Administrator"
 | 
			
		||||
msgstr "Administrateur"
 | 
			
		||||
 | 
			
		||||
#: js/ui/components/polkitAgent.js:156
 | 
			
		||||
#: js/ui/components/polkitAgent.js:151
 | 
			
		||||
msgid "Authenticate"
 | 
			
		||||
msgstr "S’authentifier"
 | 
			
		||||
 | 
			
		||||
@@ -1001,7 +1001,7 @@ msgstr "S’authentifier"
 | 
			
		||||
#. * requested authentication was not gained; this can happen
 | 
			
		||||
#. * because of an authentication error (like invalid password),
 | 
			
		||||
#. * for instance.
 | 
			
		||||
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
 | 
			
		||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
 | 
			
		||||
msgid "Sorry, that didn’t work. Please try again."
 | 
			
		||||
msgstr "Échec de l’authentification. Essayez à nouveau."
 | 
			
		||||
 | 
			
		||||
@@ -1061,7 +1061,7 @@ msgstr "Ajouter des horloges locales…"
 | 
			
		||||
msgid "World Clocks"
 | 
			
		||||
msgstr "Horloges locales"
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:227
 | 
			
		||||
#: js/ui/dateMenu.js:225
 | 
			
		||||
msgid "Weather"
 | 
			
		||||
msgstr "Météo"
 | 
			
		||||
 | 
			
		||||
@@ -1069,7 +1069,7 @@ msgstr "Météo"
 | 
			
		||||
#. libgweather for the possible condition strings. If at all
 | 
			
		||||
#. possible, the sentence should match the grammatical case etc. of
 | 
			
		||||
#. the inserted conditions.
 | 
			
		||||
#: js/ui/dateMenu.js:291
 | 
			
		||||
#: js/ui/dateMenu.js:289
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s all day."
 | 
			
		||||
msgstr "%s toute la journée."
 | 
			
		||||
@@ -1078,7 +1078,7 @@ msgstr "%s toute la journée."
 | 
			
		||||
#. libgweather for the possible condition strings. If at all
 | 
			
		||||
#. possible, the sentence should match the grammatical case etc. of
 | 
			
		||||
#. the inserted conditions.
 | 
			
		||||
#: js/ui/dateMenu.js:297
 | 
			
		||||
#: js/ui/dateMenu.js:295
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s, then %s later."
 | 
			
		||||
msgstr "%s, puis %s plus tard."
 | 
			
		||||
@@ -1087,30 +1087,30 @@ msgstr "%s, puis %s plus tard."
 | 
			
		||||
#. libgweather for the possible condition strings. If at all
 | 
			
		||||
#. possible, the sentence should match the grammatical case etc. of
 | 
			
		||||
#. the inserted conditions.
 | 
			
		||||
#: js/ui/dateMenu.js:303
 | 
			
		||||
#: js/ui/dateMenu.js:301
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s, then %s, followed by %s later."
 | 
			
		||||
msgstr "%s, puis %s, suivi par %s plus tard."
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:314
 | 
			
		||||
#: js/ui/dateMenu.js:312
 | 
			
		||||
msgid "Select a location…"
 | 
			
		||||
msgstr "Choisir un emplacement…"
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:317
 | 
			
		||||
#: js/ui/dateMenu.js:315
 | 
			
		||||
msgid "Loading…"
 | 
			
		||||
msgstr "Chargement…"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
 | 
			
		||||
#: js/ui/dateMenu.js:323
 | 
			
		||||
#: js/ui/dateMenu.js:321
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Feels like %s."
 | 
			
		||||
msgstr "Température ressentie : %s."
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:326
 | 
			
		||||
#: js/ui/dateMenu.js:324
 | 
			
		||||
msgid "Go online for weather information"
 | 
			
		||||
msgstr "Chercher les informations météorologiques en ligne"
 | 
			
		||||
 | 
			
		||||
#: js/ui/dateMenu.js:328
 | 
			
		||||
#: js/ui/dateMenu.js:326
 | 
			
		||||
msgid "Weather information is currently unavailable"
 | 
			
		||||
msgstr "Les informations météorologiques ne sont pas disponibles actuellement"
 | 
			
		||||
 | 
			
		||||
@@ -1706,7 +1706,7 @@ msgstr "Paramètres de confidentialité"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/location.js:196
 | 
			
		||||
msgid "Location In Use"
 | 
			
		||||
msgstr "Localisation en cours d’utilisation"
 | 
			
		||||
msgstr "Localisation en cours d'utilisation"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/location.js:200
 | 
			
		||||
msgid "Location Disabled"
 | 
			
		||||
@@ -1947,11 +1947,11 @@ msgstr "Reprendre"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/nightLight.js:71
 | 
			
		||||
msgid "Disable Until Tomorrow"
 | 
			
		||||
msgstr "Désactiver jusqu’à demain"
 | 
			
		||||
msgstr "Désactiver jusqu'à demain"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/power.js:61
 | 
			
		||||
msgid "Power Settings"
 | 
			
		||||
msgstr "Paramètres de gestion de l’énergie"
 | 
			
		||||
msgstr "Paramètres de gestion de l'énergie"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/power.js:77
 | 
			
		||||
msgid "Fully Charged"
 | 
			
		||||
@@ -2011,16 +2011,16 @@ msgstr "Mettre en veille"
 | 
			
		||||
msgid "Power Off"
 | 
			
		||||
msgstr "Éteindre"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/thunderbolt.js:294
 | 
			
		||||
#: js/ui/status/thunderbolt.js:272
 | 
			
		||||
msgid "Thunderbolt"
 | 
			
		||||
msgstr "Interface Thunderbolt"
 | 
			
		||||
 | 
			
		||||
#. we are done
 | 
			
		||||
#: js/ui/status/thunderbolt.js:350
 | 
			
		||||
#: js/ui/status/thunderbolt.js:328
 | 
			
		||||
msgid "Unknown Thunderbolt device"
 | 
			
		||||
msgstr "Périphérique Thunderbolt inconnu"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/thunderbolt.js:351
 | 
			
		||||
#: js/ui/status/thunderbolt.js:329
 | 
			
		||||
msgid ""
 | 
			
		||||
"New device has been detected while you were away. Please disconnect and "
 | 
			
		||||
"reconnect the device to start using it."
 | 
			
		||||
@@ -2028,14 +2028,13 @@ msgstr ""
 | 
			
		||||
"Un nouveau périphérique a été détecté pendant votre absence. Veuillez le "
 | 
			
		||||
"débrancher et rebrancher avant de commencer à l’utiliser"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/thunderbolt.js:356
 | 
			
		||||
#: js/ui/status/thunderbolt.js:334
 | 
			
		||||
msgid "Thunderbolt authorization error"
 | 
			
		||||
msgstr "Erreur d’autorisation Thunderbolt"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/thunderbolt.js:357
 | 
			
		||||
#: js/ui/status/thunderbolt.js:335
 | 
			
		||||
#, javascript-format
 | 
			
		||||
#| msgid "Could not authorize the thunderbolt device: %s"
 | 
			
		||||
msgid "Could not authorize the Thunderbolt device: %s"
 | 
			
		||||
msgid "Could not authorize the thunderbolt device: %s"
 | 
			
		||||
msgstr "Impossible d’autoriser le périphérique Thunderbolt : %s"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/volume.js:128
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								po/ru.po
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								po/ru.po
									
									
									
									
									
								
							@@ -12,14 +12,14 @@
 | 
			
		||||
# Valery Kirichenko <valera5505@gmail.com>, 2014.
 | 
			
		||||
# Yuri Myasoedov <ymyasoedov@yandex.ru>, 2012, 2013, 2014.
 | 
			
		||||
# Ivan Komaritsyn <vantu5z@mail.ru>, 2015.
 | 
			
		||||
# Stas Solovey <whats_up@tut.by>, 2011, 2013, 2014, 2015, 2016, 2017, 2018.
 | 
			
		||||
# Stas Solovey <whats_up@tut.by>, 2011, 2013, 2014, 2015, 2016, 2017.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2018-04-19 20:33+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-07-17 00:25+0300\n"
 | 
			
		||||
"POT-Creation-Date: 2018-04-13 18:31+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-04-19 23:31+0300\n"
 | 
			
		||||
"Last-Translator: Stas Solovey <whats_up@tut.by>\n"
 | 
			
		||||
"Language-Team: Русский <gnome-cyr@gnome.org>\n"
 | 
			
		||||
"Language: ru\n"
 | 
			
		||||
@@ -28,7 +28,7 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 | 
			
		||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 | 
			
		||||
"X-Generator: Poedit 2.0.9\n"
 | 
			
		||||
"X-Generator: Poedit 2.0.6\n"
 | 
			
		||||
 | 
			
		||||
#: data/50-gnome-shell-system.xml:6
 | 
			
		||||
msgid "System"
 | 
			
		||||
@@ -364,20 +364,20 @@ msgctxt "button"
 | 
			
		||||
msgid "Sign In"
 | 
			
		||||
msgstr "Войти"
 | 
			
		||||
 | 
			
		||||
#: js/gdm/loginDialog.js:319
 | 
			
		||||
#: js/gdm/loginDialog.js:315
 | 
			
		||||
msgid "Choose Session"
 | 
			
		||||
msgstr "Выбрать сеанс"
 | 
			
		||||
 | 
			
		||||
#. translators: this message is shown below the user list on the
 | 
			
		||||
#. login screen. It can be activated to reveal an entry for
 | 
			
		||||
#. manually entering the username.
 | 
			
		||||
#: js/gdm/loginDialog.js:462
 | 
			
		||||
#: js/gdm/loginDialog.js:458
 | 
			
		||||
msgid "Not listed?"
 | 
			
		||||
msgstr "Нет в списке?"
 | 
			
		||||
 | 
			
		||||
#. Translators: this message is shown below the username entry field
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#: js/gdm/loginDialog.js:891
 | 
			
		||||
#: js/gdm/loginDialog.js:887
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
msgstr "(например, пользователь или %s)"
 | 
			
		||||
@@ -385,12 +385,12 @@ msgstr "(например, пользователь или %s)"
 | 
			
		||||
#. TTLS and PEAP are actually much more complicated, but this complication
 | 
			
		||||
#. is not visible here since we only care about phase2 authentication
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#: js/gdm/loginDialog.js:896 js/ui/components/networkAgent.js:243
 | 
			
		||||
#: js/gdm/loginDialog.js:892 js/ui/components/networkAgent.js:243
 | 
			
		||||
#: js/ui/components/networkAgent.js:261
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "Имя пользователя: "
 | 
			
		||||
 | 
			
		||||
#: js/gdm/loginDialog.js:1234
 | 
			
		||||
#: js/gdm/loginDialog.js:1228
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "Окно входа в систему"
 | 
			
		||||
 | 
			
		||||
@@ -2053,7 +2053,7 @@ msgstr "Ошибка авторизации Thunderbolt"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/thunderbolt.js:357
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Could not authorize the Thunderbolt device: %s"
 | 
			
		||||
msgid "Could not authorize the thunderbolt device: %s"
 | 
			
		||||
msgstr "Не удалось авторизовать устройство Thunderbolt: %s"
 | 
			
		||||
 | 
			
		||||
#: js/ui/status/volume.js:128
 | 
			
		||||
 
 | 
			
		||||
@@ -167,19 +167,22 @@ gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin)
 | 
			
		||||
static gboolean
 | 
			
		||||
gnome_shell_plugin_has_swap_event (GnomeShellPlugin *shell_plugin)
 | 
			
		||||
{
 | 
			
		||||
  MetaPlugin *plugin = META_PLUGIN (shell_plugin);
 | 
			
		||||
  CoglDisplay *cogl_display =
 | 
			
		||||
    cogl_context_get_display (shell_plugin->cogl_context);
 | 
			
		||||
  CoglRenderer *renderer = cogl_display_get_renderer (cogl_display);
 | 
			
		||||
  const char * (* query_extensions_string) (Display *dpy, int screen);
 | 
			
		||||
  Bool (* query_extension) (Display *dpy, int *error, int *event);
 | 
			
		||||
  MetaScreen *screen;
 | 
			
		||||
  Display *xdisplay;
 | 
			
		||||
  int screen_number;
 | 
			
		||||
  const char *glx_extensions;
 | 
			
		||||
 | 
			
		||||
  /* We will only get swap events if Cogl is using GLX */
 | 
			
		||||
  if (cogl_renderer_get_winsys_id (renderer) != COGL_WINSYS_ID_GLX)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  screen = meta_plugin_get_screen (plugin);
 | 
			
		||||
 | 
			
		||||
  xdisplay = clutter_x11_get_default_display ();
 | 
			
		||||
 | 
			
		||||
  query_extensions_string =
 | 
			
		||||
@@ -191,8 +194,9 @@ gnome_shell_plugin_has_swap_event (GnomeShellPlugin *shell_plugin)
 | 
			
		||||
                   &shell_plugin->glx_error_base,
 | 
			
		||||
                   &shell_plugin->glx_event_base);
 | 
			
		||||
 | 
			
		||||
  screen_number = XDefaultScreen (xdisplay);
 | 
			
		||||
  glx_extensions = query_extensions_string (xdisplay, screen_number);
 | 
			
		||||
  glx_extensions =
 | 
			
		||||
    query_extensions_string (xdisplay,
 | 
			
		||||
                             meta_screen_get_screen_number (screen));
 | 
			
		||||
 | 
			
		||||
  return strstr (glx_extensions, "GLX_INTEL_swap_event") != NULL;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ gnome_shell_deps = [
 | 
			
		||||
  canberra_dep, canberra_gtk_dep,
 | 
			
		||||
  polkit_dep,
 | 
			
		||||
  gcr_dep,
 | 
			
		||||
  libsystemd_dep
 | 
			
		||||
  systemd_dep
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
gnome_shell_deps += nm_deps
 | 
			
		||||
 
 | 
			
		||||
@@ -7,8 +7,6 @@
 | 
			
		||||
#include <glib/gi18n-lib.h>
 | 
			
		||||
 | 
			
		||||
#include <meta/display.h>
 | 
			
		||||
#include <meta/meta-workspace-manager.h>
 | 
			
		||||
#include <meta/meta-x11-display.h>
 | 
			
		||||
 | 
			
		||||
#include "shell-app-private.h"
 | 
			
		||||
#include "shell-enum-types.h"
 | 
			
		||||
@@ -360,17 +358,6 @@ find_most_recent_transient_on_same_workspace (MetaDisplay *display,
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaWorkspace *
 | 
			
		||||
get_active_workspace (void)
 | 
			
		||||
{
 | 
			
		||||
  ShellGlobal *global = shell_global_get ();
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (global);
 | 
			
		||||
  MetaWorkspaceManager *workspace_manager =
 | 
			
		||||
    meta_display_get_workspace_manager (display);
 | 
			
		||||
 | 
			
		||||
  return meta_workspace_manager_get_active_workspace (workspace_manager);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * shell_app_activate_window:
 | 
			
		||||
 * @app: a #ShellApp
 | 
			
		||||
@@ -404,8 +391,9 @@ shell_app_activate_window (ShellApp     *app,
 | 
			
		||||
    {
 | 
			
		||||
      GSList *windows_reversed, *iter;
 | 
			
		||||
      ShellGlobal *global = shell_global_get ();
 | 
			
		||||
      MetaDisplay *display = shell_global_get_display (global);
 | 
			
		||||
      MetaWorkspace *active = get_active_workspace ();
 | 
			
		||||
      MetaScreen *screen = shell_global_get_screen (global);
 | 
			
		||||
      MetaDisplay *display = meta_screen_get_display (screen);
 | 
			
		||||
      MetaWorkspace *active = meta_screen_get_active_workspace (screen);
 | 
			
		||||
      MetaWorkspace *workspace = meta_window_get_workspace (window);
 | 
			
		||||
      guint32 last_user_timestamp = meta_display_get_last_user_time (display);
 | 
			
		||||
      MetaWindow *most_recent_transient;
 | 
			
		||||
@@ -698,7 +686,7 @@ shell_app_get_windows (ShellApp *app)
 | 
			
		||||
    {
 | 
			
		||||
      CompareWindowsData data;
 | 
			
		||||
      data.app = app;
 | 
			
		||||
      data.active_workspace = get_active_workspace ();
 | 
			
		||||
      data.active_workspace = meta_screen_get_active_workspace (shell_global_get_screen (shell_global_get ()));
 | 
			
		||||
      app->running_state->windows = g_slist_sort_with_data (app->running_state->windows, shell_app_compare_windows, &data);
 | 
			
		||||
      app->running_state->window_sort_stale = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
@@ -934,11 +922,11 @@ shell_app_on_skip_taskbar_changed (MetaWindow *window,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_app_on_ws_switch (MetaWorkspaceManager *workspace_manager,
 | 
			
		||||
                        int                   from,
 | 
			
		||||
                        int                   to,
 | 
			
		||||
                        MetaMotionDirection   direction,
 | 
			
		||||
                        gpointer              data)
 | 
			
		||||
shell_app_on_ws_switch (MetaScreen         *screen,
 | 
			
		||||
                        int                 from,
 | 
			
		||||
                        int                 to,
 | 
			
		||||
                        MetaMotionDirection direction,
 | 
			
		||||
                        gpointer            data)
 | 
			
		||||
{
 | 
			
		||||
  ShellApp *app = SHELL_APP (data);
 | 
			
		||||
 | 
			
		||||
@@ -1127,12 +1115,12 @@ _shell_app_handle_startup_sequence (ShellApp          *app,
 | 
			
		||||
   */
 | 
			
		||||
  if (starting && shell_app_get_state (app) == SHELL_APP_STATE_STOPPED)
 | 
			
		||||
    {
 | 
			
		||||
      MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
      MetaX11Display *x11_display = meta_display_get_x11_display (display);
 | 
			
		||||
      MetaScreen *screen = shell_global_get_screen (shell_global_get ());
 | 
			
		||||
      MetaDisplay *display = meta_screen_get_display (screen);
 | 
			
		||||
 | 
			
		||||
      shell_app_state_transition (app, SHELL_APP_STATE_STARTING);
 | 
			
		||||
      meta_x11_display_focus_the_no_focus_window (x11_display,
 | 
			
		||||
                                                  sn_startup_sequence_get_timestamp (sequence));
 | 
			
		||||
      meta_display_focus_the_no_focus_window (display, screen,
 | 
			
		||||
                                              sn_startup_sequence_get_timestamp (sequence));
 | 
			
		||||
      app->started_on_workspace = sn_startup_sequence_get_workspace (sequence);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1302,17 +1290,15 @@ shell_app_get_app_info (ShellApp *app)
 | 
			
		||||
static void
 | 
			
		||||
create_running_state (ShellApp *app)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
  MetaWorkspaceManager *workspace_manager =
 | 
			
		||||
    meta_display_get_workspace_manager (display);
 | 
			
		||||
  MetaScreen *screen;
 | 
			
		||||
 | 
			
		||||
  g_assert (app->running_state == NULL);
 | 
			
		||||
 | 
			
		||||
  screen = shell_global_get_screen (shell_global_get ());
 | 
			
		||||
  app->running_state = g_slice_new0 (ShellAppRunningState);
 | 
			
		||||
  app->running_state->refcount = 1;
 | 
			
		||||
  app->running_state->workspace_switch_id =
 | 
			
		||||
    g_signal_connect (workspace_manager, "workspace-switched",
 | 
			
		||||
                      G_CALLBACK (shell_app_on_ws_switch), app);
 | 
			
		||||
    g_signal_connect (screen, "workspace-switched", G_CALLBACK(shell_app_on_ws_switch), app);
 | 
			
		||||
 | 
			
		||||
  app->running_state->session = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
 | 
			
		||||
  g_assert (app->running_state->session != NULL);
 | 
			
		||||
@@ -1363,9 +1349,7 @@ shell_app_update_app_menu (ShellApp   *app,
 | 
			
		||||
static void
 | 
			
		||||
unref_running_state (ShellAppRunningState *state)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
  MetaWorkspaceManager *workspace_manager =
 | 
			
		||||
    meta_display_get_workspace_manager (display);
 | 
			
		||||
  MetaScreen *screen;
 | 
			
		||||
 | 
			
		||||
  g_assert (state->refcount > 0);
 | 
			
		||||
 | 
			
		||||
@@ -1373,7 +1357,8 @@ unref_running_state (ShellAppRunningState *state)
 | 
			
		||||
  if (state->refcount > 0)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_signal_handler_disconnect (workspace_manager, state->workspace_switch_id);
 | 
			
		||||
  screen = shell_global_get_screen (shell_global_get ());
 | 
			
		||||
  g_signal_handler_disconnect (screen, state->workspace_switch_id);
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&state->application_proxy);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,6 @@
 | 
			
		||||
#include <meta/meta-shaped-texture.h>
 | 
			
		||||
#include <meta/meta-cursor-tracker.h>
 | 
			
		||||
#include <meta/meta-settings.h>
 | 
			
		||||
#include <meta/meta-workspace-manager.h>
 | 
			
		||||
#include <meta/meta-x11-display.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYSTEMD
 | 
			
		||||
#include <systemd/sd-journal.h>
 | 
			
		||||
@@ -62,10 +60,9 @@ struct _ShellGlobal {
 | 
			
		||||
  Window stage_xwindow;
 | 
			
		||||
 | 
			
		||||
  MetaDisplay *meta_display;
 | 
			
		||||
  MetaWorkspaceManager *workspace_manager;
 | 
			
		||||
  GdkDisplay *gdk_display;
 | 
			
		||||
  MetaX11Display *x11_display;
 | 
			
		||||
  Display *xdisplay;
 | 
			
		||||
  MetaScreen *meta_screen;
 | 
			
		||||
 | 
			
		||||
  char *session_mode;
 | 
			
		||||
 | 
			
		||||
@@ -99,8 +96,8 @@ enum {
 | 
			
		||||
  PROP_0,
 | 
			
		||||
 | 
			
		||||
  PROP_SESSION_MODE,
 | 
			
		||||
  PROP_SCREEN,
 | 
			
		||||
  PROP_DISPLAY,
 | 
			
		||||
  PROP_WORKSPACE_MANAGER,
 | 
			
		||||
  PROP_SCREEN_WIDTH,
 | 
			
		||||
  PROP_SCREEN_HEIGHT,
 | 
			
		||||
  PROP_STAGE,
 | 
			
		||||
@@ -166,17 +163,17 @@ shell_global_get_property(GObject         *object,
 | 
			
		||||
    case PROP_SESSION_MODE:
 | 
			
		||||
      g_value_set_string (value, shell_global_get_session_mode (global));
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_SCREEN:
 | 
			
		||||
      g_value_set_object (value, global->meta_screen);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_DISPLAY:
 | 
			
		||||
      g_value_set_object (value, global->meta_display);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_WORKSPACE_MANAGER:
 | 
			
		||||
      g_value_set_object (value, global->workspace_manager);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_SCREEN_WIDTH:
 | 
			
		||||
      {
 | 
			
		||||
        int width, height;
 | 
			
		||||
 | 
			
		||||
        meta_display_get_size (global->meta_display, &width, &height);
 | 
			
		||||
        meta_screen_get_size (global->meta_screen, &width, &height);
 | 
			
		||||
        g_value_set_int (value, width);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
@@ -184,7 +181,7 @@ shell_global_get_property(GObject         *object,
 | 
			
		||||
      {
 | 
			
		||||
        int width, height;
 | 
			
		||||
 | 
			
		||||
        meta_display_get_size (global->meta_display, &width, &height);
 | 
			
		||||
        meta_screen_get_size (global->meta_screen, &width, &height);
 | 
			
		||||
        g_value_set_int (value, height);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
@@ -192,10 +189,10 @@ shell_global_get_property(GObject         *object,
 | 
			
		||||
      g_value_set_object (value, global->stage);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_WINDOW_GROUP:
 | 
			
		||||
      g_value_set_object (value, meta_get_window_group_for_display (global->meta_display));
 | 
			
		||||
      g_value_set_object (value, meta_get_window_group_for_screen (global->meta_screen));
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_TOP_WINDOW_GROUP:
 | 
			
		||||
      g_value_set_object (value, meta_get_top_window_group_for_display (global->meta_display));
 | 
			
		||||
      g_value_set_object (value, meta_get_top_window_group_for_screen (global->meta_screen));
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_WINDOW_MANAGER:
 | 
			
		||||
      g_value_set_object (value, global->wm);
 | 
			
		||||
@@ -373,6 +370,13 @@ shell_global_class_init (ShellGlobalClass *klass)
 | 
			
		||||
                                                        "The session mode to use",
 | 
			
		||||
                                                        "user",
 | 
			
		||||
                                                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 | 
			
		||||
  g_object_class_install_property (gobject_class,
 | 
			
		||||
                                   PROP_SCREEN,
 | 
			
		||||
                                   g_param_spec_object ("screen",
 | 
			
		||||
                                                        "Screen",
 | 
			
		||||
                                                        "Metacity screen object for the shell",
 | 
			
		||||
                                                        META_TYPE_SCREEN,
 | 
			
		||||
                                                        G_PARAM_READABLE));
 | 
			
		||||
 | 
			
		||||
  g_object_class_install_property (gobject_class,
 | 
			
		||||
                                   PROP_SCREEN_WIDTH,
 | 
			
		||||
@@ -397,14 +401,6 @@ shell_global_class_init (ShellGlobalClass *klass)
 | 
			
		||||
                                                        META_TYPE_DISPLAY,
 | 
			
		||||
                                                        G_PARAM_READABLE));
 | 
			
		||||
 | 
			
		||||
  g_object_class_install_property (gobject_class,
 | 
			
		||||
                                   PROP_WORKSPACE_MANAGER,
 | 
			
		||||
                                   g_param_spec_object ("workspace-manager",
 | 
			
		||||
                                                        "Workspace manager",
 | 
			
		||||
                                                        "Workspace manager",
 | 
			
		||||
                                                        META_TYPE_WORKSPACE_MANAGER,
 | 
			
		||||
                                                        G_PARAM_READABLE));
 | 
			
		||||
 | 
			
		||||
  g_object_class_install_property (gobject_class,
 | 
			
		||||
                                   PROP_STAGE,
 | 
			
		||||
                                   g_param_spec_object ("stage",
 | 
			
		||||
@@ -568,7 +564,7 @@ focus_window_changed (MetaDisplay *display,
 | 
			
		||||
 | 
			
		||||
  /* If the stage window became unfocused, drop the key focus
 | 
			
		||||
   * on Clutter's side. */
 | 
			
		||||
  if (!meta_stage_is_focused (global->meta_display))
 | 
			
		||||
  if (!meta_stage_is_focused (global->meta_screen))
 | 
			
		||||
    clutter_stage_set_key_focus (global->stage, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -598,14 +594,14 @@ sync_stage_window_focus (ShellGlobal *global)
 | 
			
		||||
  actor = get_key_focused_actor (global);
 | 
			
		||||
 | 
			
		||||
  /* An actor got key focus and the stage needs to be focused. */
 | 
			
		||||
  if (actor != NULL && !meta_stage_is_focused (global->meta_display))
 | 
			
		||||
    meta_focus_stage_window (global->meta_display,
 | 
			
		||||
  if (actor != NULL && !meta_stage_is_focused (global->meta_screen))
 | 
			
		||||
    meta_focus_stage_window (global->meta_screen,
 | 
			
		||||
                             get_current_time_maybe_roundtrip (global));
 | 
			
		||||
 | 
			
		||||
  /* An actor dropped key focus. Focus the default window. */
 | 
			
		||||
  else if (actor == NULL && meta_stage_is_focused (global->meta_display))
 | 
			
		||||
    meta_display_focus_default_window (global->meta_display,
 | 
			
		||||
                                       get_current_time_maybe_roundtrip (global));
 | 
			
		||||
  else if (actor == NULL && meta_stage_is_focused (global->meta_screen))
 | 
			
		||||
    meta_screen_focus_default_window (global->meta_screen,
 | 
			
		||||
                                      get_current_time_maybe_roundtrip (global));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -620,12 +616,12 @@ focus_actor_changed (ClutterStage *stage,
 | 
			
		||||
static void
 | 
			
		||||
sync_input_region (ShellGlobal *global)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = global->meta_display;
 | 
			
		||||
  MetaScreen *screen = global->meta_screen;
 | 
			
		||||
 | 
			
		||||
  if (global->has_modal)
 | 
			
		||||
    meta_set_stage_input_region (display, None);
 | 
			
		||||
    meta_set_stage_input_region (screen, None);
 | 
			
		||||
  else
 | 
			
		||||
    meta_set_stage_input_region (display, global->input_region);
 | 
			
		||||
    meta_set_stage_input_region (screen, global->input_region);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -679,6 +675,17 @@ shell_global_get_stage (ShellGlobal  *global)
 | 
			
		||||
  return global->stage;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * shell_global_get_screen:
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: (transfer none): The default #MetaScreen
 | 
			
		||||
 */
 | 
			
		||||
MetaScreen *
 | 
			
		||||
shell_global_get_screen (ShellGlobal  *global)
 | 
			
		||||
{
 | 
			
		||||
  return global->meta_screen;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * shell_global_get_display:
 | 
			
		||||
 *
 | 
			
		||||
@@ -705,7 +712,7 @@ shell_global_get_window_actors (ShellGlobal *global)
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
 | 
			
		||||
 | 
			
		||||
  for (l = meta_get_window_actors (global->meta_display); l; l = l->next)
 | 
			
		||||
  for (l = meta_get_window_actors (global->meta_screen); l; l = l->next)
 | 
			
		||||
    if (!meta_window_actor_is_destroyed (l->data))
 | 
			
		||||
      filtered = g_list_prepend (filtered, l->data);
 | 
			
		||||
 | 
			
		||||
@@ -831,15 +838,13 @@ entry_cursor_func (StEntry  *entry,
 | 
			
		||||
{
 | 
			
		||||
  ShellGlobal *global = user_data;
 | 
			
		||||
 | 
			
		||||
  meta_display_set_cursor (global->meta_display,
 | 
			
		||||
                           use_ibeam ? META_CURSOR_IBEAM : META_CURSOR_DEFAULT);
 | 
			
		||||
  meta_screen_set_cursor (global->meta_screen, use_ibeam ? META_CURSOR_IBEAM : META_CURSOR_DEFAULT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_shell_global_set_plugin (ShellGlobal *global,
 | 
			
		||||
                          MetaPlugin  *plugin)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display;
 | 
			
		||||
  MetaBackend *backend;
 | 
			
		||||
  MetaSettings *settings;
 | 
			
		||||
 | 
			
		||||
@@ -849,15 +854,13 @@ _shell_global_set_plugin (ShellGlobal *global,
 | 
			
		||||
  global->plugin = plugin;
 | 
			
		||||
  global->wm = shell_wm_new (plugin);
 | 
			
		||||
 | 
			
		||||
  display = meta_plugin_get_display (plugin);
 | 
			
		||||
  global->meta_display = display;
 | 
			
		||||
  global->workspace_manager = meta_display_get_workspace_manager (display);
 | 
			
		||||
  global->x11_display = meta_display_get_x11_display (display);
 | 
			
		||||
  global->xdisplay = meta_x11_display_get_xdisplay (global->x11_display);
 | 
			
		||||
  global->meta_screen = meta_plugin_get_screen (plugin);
 | 
			
		||||
  global->meta_display = meta_screen_get_display (global->meta_screen);
 | 
			
		||||
  global->xdisplay = meta_display_get_xdisplay (global->meta_display);
 | 
			
		||||
 | 
			
		||||
  global->gdk_display = gdk_x11_lookup_xdisplay (global->xdisplay);
 | 
			
		||||
 | 
			
		||||
  global->stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
 | 
			
		||||
  global->stage = CLUTTER_STAGE (meta_get_stage_for_screen (global->meta_screen));
 | 
			
		||||
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    {
 | 
			
		||||
@@ -969,13 +972,13 @@ shell_global_end_modal (ShellGlobal *global,
 | 
			
		||||
 | 
			
		||||
  /* If the stage window is unfocused, ensure that there's no
 | 
			
		||||
   * actor focused on Clutter's side. */
 | 
			
		||||
  if (!meta_stage_is_focused (global->meta_display))
 | 
			
		||||
  if (!meta_stage_is_focused (global->meta_screen))
 | 
			
		||||
    clutter_stage_set_key_focus (global->stage, NULL);
 | 
			
		||||
 | 
			
		||||
  /* An actor dropped key focus. Focus the default window. */
 | 
			
		||||
  else if (get_key_focused_actor (global) && meta_stage_is_focused (global->meta_display))
 | 
			
		||||
    meta_display_focus_default_window (global->meta_display,
 | 
			
		||||
                                       get_current_time_maybe_roundtrip (global));
 | 
			
		||||
  else if (get_key_focused_actor (global) && meta_stage_is_focused (global->meta_screen))
 | 
			
		||||
    meta_screen_focus_default_window (global->meta_screen,
 | 
			
		||||
                                      get_current_time_maybe_roundtrip (global));
 | 
			
		||||
 | 
			
		||||
  sync_input_region (global);
 | 
			
		||||
}
 | 
			
		||||
@@ -1156,8 +1159,9 @@ shell_global_reexec_self (ShellGlobal *global)
 | 
			
		||||
   */
 | 
			
		||||
  pre_exec_close_fds ();
 | 
			
		||||
 | 
			
		||||
  meta_display_close (shell_global_get_display (global),
 | 
			
		||||
                      shell_global_get_current_time (global));
 | 
			
		||||
  meta_display_unmanage_screen (shell_global_get_display (global),
 | 
			
		||||
                                shell_global_get_screen (global),
 | 
			
		||||
                                shell_global_get_current_time (global));
 | 
			
		||||
 | 
			
		||||
  execvp (arr->pdata[0], (char**)arr->pdata);
 | 
			
		||||
  g_warning ("failed to reexec: %s", g_strerror (errno));
 | 
			
		||||
@@ -1242,7 +1246,7 @@ shell_global_notify_error (ShellGlobal  *global,
 | 
			
		||||
 */
 | 
			
		||||
void shell_global_init_xdnd (ShellGlobal *global)
 | 
			
		||||
{
 | 
			
		||||
  Window output_window = meta_get_overlay_window (global->meta_display);
 | 
			
		||||
  Window output_window = meta_get_overlay_window (global->meta_screen);
 | 
			
		||||
  long xdnd_version = 5;
 | 
			
		||||
 | 
			
		||||
  XChangeProperty (global->xdisplay, global->stage_xwindow,
 | 
			
		||||
@@ -1280,7 +1284,7 @@ shell_global_get_pointer (ShellGlobal         *global,
 | 
			
		||||
  ClutterModifierType raw_mods;
 | 
			
		||||
  MetaCursorTracker *tracker;
 | 
			
		||||
 | 
			
		||||
  tracker = meta_cursor_tracker_get_for_display (global->meta_display);
 | 
			
		||||
  tracker = meta_cursor_tracker_get_for_screen (global->meta_screen);
 | 
			
		||||
  meta_cursor_tracker_get_pointer (tracker, x, y, &raw_mods);
 | 
			
		||||
 | 
			
		||||
  *mods = raw_mods & CLUTTER_MODIFIER_MASK;
 | 
			
		||||
@@ -1428,12 +1432,7 @@ shell_global_create_app_launch_context (ShellGlobal *global,
 | 
			
		||||
  gdk_app_launch_context_set_timestamp (context, timestamp);
 | 
			
		||||
 | 
			
		||||
  if (workspace < 0)
 | 
			
		||||
    {
 | 
			
		||||
      MetaWorkspaceManager *workspace_manager = global->workspace_manager;
 | 
			
		||||
 | 
			
		||||
      workspace =
 | 
			
		||||
        meta_workspace_manager_get_active_workspace_index (workspace_manager);
 | 
			
		||||
    }
 | 
			
		||||
    workspace = meta_screen_get_active_workspace_index (global->meta_screen);
 | 
			
		||||
  gdk_app_launch_context_set_desktop (context, workspace);
 | 
			
		||||
 | 
			
		||||
  return (GAppLaunchContext *)context;
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ G_DECLARE_FINAL_TYPE (ShellGlobal, shell_global, SHELL, GLOBAL, GObject)
 | 
			
		||||
ShellGlobal   *shell_global_get                       (void);
 | 
			
		||||
 | 
			
		||||
ClutterStage  *shell_global_get_stage                 (ShellGlobal *global);
 | 
			
		||||
MetaScreen    *shell_global_get_screen                (ShellGlobal *global);
 | 
			
		||||
MetaDisplay   *shell_global_get_display               (ShellGlobal *global);
 | 
			
		||||
GList         *shell_global_get_window_actors         (ShellGlobal *global);
 | 
			
		||||
GSettings     *shell_global_get_settings              (ShellGlobal *global);
 | 
			
		||||
 
 | 
			
		||||
@@ -15,8 +15,8 @@
 | 
			
		||||
#include <gdk/gdk.h>
 | 
			
		||||
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
#include <meta/screen.h>
 | 
			
		||||
#include <meta/meta-cursor-tracker.h>
 | 
			
		||||
#include <meta/display.h>
 | 
			
		||||
#include <meta/compositor-mutter.h>
 | 
			
		||||
 | 
			
		||||
#include "shell-global.h"
 | 
			
		||||
@@ -112,7 +112,7 @@ static void recorder_remove_redraw_timeout (ShellRecorder *recorder);
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  PROP_0,
 | 
			
		||||
  PROP_DISPLAY,
 | 
			
		||||
  PROP_SCREEN,
 | 
			
		||||
  PROP_STAGE,
 | 
			
		||||
  PROP_FRAMERATE,
 | 
			
		||||
  PROP_PIPELINE,
 | 
			
		||||
@@ -670,12 +670,12 @@ recorder_set_stage (ShellRecorder *recorder,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
recorder_set_display (ShellRecorder *recorder,
 | 
			
		||||
                      MetaDisplay   *display)
 | 
			
		||||
recorder_set_screen (ShellRecorder *recorder,
 | 
			
		||||
                     MetaScreen    *screen)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTracker *tracker;
 | 
			
		||||
 | 
			
		||||
  tracker = meta_cursor_tracker_get_for_display (display);
 | 
			
		||||
  tracker = meta_cursor_tracker_get_for_screen (screen);
 | 
			
		||||
 | 
			
		||||
  if (tracker == recorder->cursor_tracker)
 | 
			
		||||
    return;
 | 
			
		||||
@@ -760,8 +760,8 @@ shell_recorder_set_property (GObject      *object,
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_DISPLAY:
 | 
			
		||||
      recorder_set_display (recorder, g_value_get_object (value));
 | 
			
		||||
    case PROP_SCREEN:
 | 
			
		||||
      recorder_set_screen (recorder, g_value_get_object (value));
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_STAGE:
 | 
			
		||||
      recorder_set_stage (recorder, g_value_get_object (value));
 | 
			
		||||
@@ -825,11 +825,11 @@ shell_recorder_class_init (ShellRecorderClass *klass)
 | 
			
		||||
  gobject_class->set_property = shell_recorder_set_property;
 | 
			
		||||
 | 
			
		||||
  g_object_class_install_property (gobject_class,
 | 
			
		||||
                                   PROP_DISPLAY,
 | 
			
		||||
                                   g_param_spec_object ("display",
 | 
			
		||||
                                                        "Display",
 | 
			
		||||
                                                        "Display to record",
 | 
			
		||||
                                                        META_TYPE_DISPLAY,
 | 
			
		||||
                                   PROP_SCREEN,
 | 
			
		||||
                                   g_param_spec_object ("screen",
 | 
			
		||||
                                                        "Screen",
 | 
			
		||||
                                                        "Screen to record",
 | 
			
		||||
                                                        META_TYPE_SCREEN,
 | 
			
		||||
                                                        G_PARAM_WRITABLE));
 | 
			
		||||
 | 
			
		||||
  g_object_class_install_property (gobject_class,
 | 
			
		||||
@@ -1551,7 +1551,7 @@ shell_recorder_record (ShellRecorder  *recorder,
 | 
			
		||||
  recorder_add_update_pointer_timeout (recorder);
 | 
			
		||||
 | 
			
		||||
  /* Disable unredirection while we are recoring */
 | 
			
		||||
  meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ()));
 | 
			
		||||
  meta_disable_unredirect_for_screen (shell_global_get_screen (shell_global_get ()));
 | 
			
		||||
 | 
			
		||||
  /* Set up repaint hook */
 | 
			
		||||
  recorder->repaint_hook_id = clutter_threads_add_repaint_func(recorder_repaint_hook, recorder->stage, NULL);
 | 
			
		||||
@@ -1602,7 +1602,7 @@ shell_recorder_close (ShellRecorder *recorder)
 | 
			
		||||
  recorder->state = RECORDER_STATE_CLOSED;
 | 
			
		||||
 | 
			
		||||
  /* Reenable after the recording */
 | 
			
		||||
  meta_enable_unredirect_for_display (shell_global_get_display (shell_global_get ()));
 | 
			
		||||
  meta_enable_unredirect_for_screen (shell_global_get_screen (shell_global_get ()));
 | 
			
		||||
 | 
			
		||||
  /* Release the refcount we took when we started recording */
 | 
			
		||||
  g_object_unref (recorder);
 | 
			
		||||
 
 | 
			
		||||
@@ -76,7 +76,7 @@ on_screenshot_written (GObject      *source,
 | 
			
		||||
  g_clear_pointer (&priv->filename_used, g_free);
 | 
			
		||||
  g_clear_pointer (&priv->datetime, g_date_time_unref);
 | 
			
		||||
 | 
			
		||||
  meta_enable_unredirect_for_display (shell_global_get_display (priv->global));
 | 
			
		||||
  meta_enable_unredirect_for_screen (shell_global_get_screen (priv->global));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* called in an I/O thread */
 | 
			
		||||
@@ -315,19 +315,19 @@ static void
 | 
			
		||||
grab_screenshot (ClutterActor *stage,
 | 
			
		||||
                 ShellScreenshot *screenshot)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display;
 | 
			
		||||
  MetaScreen *screen;
 | 
			
		||||
  MetaCursorTracker *tracker;
 | 
			
		||||
  int width, height;
 | 
			
		||||
  GTask *result;
 | 
			
		||||
  GSettings *settings;
 | 
			
		||||
  ShellScreenshotPrivate *priv = screenshot->priv;
 | 
			
		||||
 | 
			
		||||
  display = shell_global_get_display (priv->global);
 | 
			
		||||
  meta_display_get_size (display, &width, &height);
 | 
			
		||||
  screen = shell_global_get_screen (priv->global);
 | 
			
		||||
  meta_screen_get_size (screen, &width, &height);
 | 
			
		||||
 | 
			
		||||
  do_grab_screenshot (screenshot, CLUTTER_STAGE (stage), 0, 0, width, height);
 | 
			
		||||
 | 
			
		||||
  if (meta_display_get_n_monitors (display) > 1)
 | 
			
		||||
  if (meta_screen_get_n_monitors (screen) > 1)
 | 
			
		||||
    {
 | 
			
		||||
      cairo_region_t *screen_region = cairo_region_create ();
 | 
			
		||||
      cairo_region_t *stage_region;
 | 
			
		||||
@@ -336,11 +336,10 @@ grab_screenshot (ClutterActor *stage,
 | 
			
		||||
      int i;
 | 
			
		||||
      cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
      for (i = meta_display_get_n_monitors (display) - 1; i >= 0; i--)
 | 
			
		||||
      for (i = meta_screen_get_n_monitors (screen) - 1; i >= 0; i--)
 | 
			
		||||
        {
 | 
			
		||||
          meta_display_get_monitor_geometry (display, i, &monitor_rect);
 | 
			
		||||
          cairo_region_union_rectangle (screen_region,
 | 
			
		||||
                                        (const cairo_rectangle_int_t *) &monitor_rect);
 | 
			
		||||
          meta_screen_get_monitor_geometry (screen, i, &monitor_rect);
 | 
			
		||||
          cairo_region_union_rectangle (screen_region, (const cairo_rectangle_int_t *) &monitor_rect);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      stage_rect.x = 0;
 | 
			
		||||
@@ -375,7 +374,7 @@ grab_screenshot (ClutterActor *stage,
 | 
			
		||||
  if (priv->include_cursor &&
 | 
			
		||||
      !g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY))
 | 
			
		||||
    {
 | 
			
		||||
      tracker = meta_cursor_tracker_get_for_display (display);
 | 
			
		||||
      tracker = meta_cursor_tracker_get_for_screen (screen);
 | 
			
		||||
      _draw_cursor_image (tracker, priv->image, priv->screenshot_area);
 | 
			
		||||
    }
 | 
			
		||||
  g_object_unref (settings);
 | 
			
		||||
@@ -414,8 +413,9 @@ grab_window_screenshot (ClutterActor *stage,
 | 
			
		||||
  ShellScreenshotPrivate *priv = screenshot->priv;
 | 
			
		||||
  GTask *result;
 | 
			
		||||
  GSettings *settings;
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (priv->global);
 | 
			
		||||
  MetaScreen *screen = shell_global_get_screen (priv->global);
 | 
			
		||||
  MetaCursorTracker *tracker;
 | 
			
		||||
  MetaDisplay *display = meta_screen_get_display (screen);
 | 
			
		||||
  MetaWindow *window = meta_display_get_focus_window (display);
 | 
			
		||||
  ClutterActor *window_actor;
 | 
			
		||||
  gfloat actor_x, actor_y;
 | 
			
		||||
@@ -446,7 +446,7 @@ grab_window_screenshot (ClutterActor *stage,
 | 
			
		||||
  settings = g_settings_new (A11Y_APPS_SCHEMA);
 | 
			
		||||
  if (priv->include_cursor && !g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY))
 | 
			
		||||
    {
 | 
			
		||||
      tracker = meta_cursor_tracker_get_for_display (display);
 | 
			
		||||
      tracker = meta_cursor_tracker_get_for_screen (screen);
 | 
			
		||||
      _draw_cursor_image (tracker, priv->image, priv->screenshot_area);
 | 
			
		||||
    }
 | 
			
		||||
  g_object_unref (settings);
 | 
			
		||||
@@ -490,7 +490,7 @@ shell_screenshot_screenshot (ShellScreenshot *screenshot,
 | 
			
		||||
 | 
			
		||||
  stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global));
 | 
			
		||||
 | 
			
		||||
  meta_disable_unredirect_for_display (shell_global_get_display (priv->global));
 | 
			
		||||
  meta_disable_unredirect_for_screen (shell_global_get_screen (priv->global));
 | 
			
		||||
 | 
			
		||||
  g_signal_connect_after (stage, "paint", G_CALLBACK (grab_screenshot), (gpointer)screenshot);
 | 
			
		||||
 | 
			
		||||
@@ -539,7 +539,7 @@ shell_screenshot_screenshot_area (ShellScreenshot *screenshot,
 | 
			
		||||
 | 
			
		||||
  stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global));
 | 
			
		||||
 | 
			
		||||
  meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ()));
 | 
			
		||||
  meta_disable_unredirect_for_screen (shell_global_get_screen (shell_global_get ()));
 | 
			
		||||
 | 
			
		||||
  g_signal_connect_after (stage, "paint", G_CALLBACK (grab_area_screenshot), (gpointer)screenshot);
 | 
			
		||||
 | 
			
		||||
@@ -567,8 +567,9 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot,
 | 
			
		||||
                                    ShellScreenshotCallback callback)
 | 
			
		||||
{
 | 
			
		||||
  ShellScreenshotPrivate *priv = screenshot->priv;
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (priv->global);
 | 
			
		||||
  MetaScreen *screen = shell_global_get_screen (priv->global);
 | 
			
		||||
  ClutterActor *stage;
 | 
			
		||||
  MetaDisplay *display = meta_screen_get_display (screen);
 | 
			
		||||
  MetaWindow *window = meta_display_get_focus_window (display);
 | 
			
		||||
 | 
			
		||||
  if (priv->filename != NULL || !window) {
 | 
			
		||||
@@ -584,7 +585,7 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot,
 | 
			
		||||
 | 
			
		||||
  stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global));
 | 
			
		||||
 | 
			
		||||
  meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ()));
 | 
			
		||||
  meta_disable_unredirect_for_screen (shell_global_get_screen (shell_global_get ()));
 | 
			
		||||
 | 
			
		||||
  g_signal_connect_after (stage, "paint", G_CALLBACK (grab_window_screenshot), (gpointer)screenshot);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -210,13 +210,16 @@ shell_tray_manager_style_changed (StWidget *theme_widget,
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
shell_tray_manager_manage_screen (ShellTrayManager *manager,
 | 
			
		||||
                                  MetaScreen       *screen,
 | 
			
		||||
                                  StWidget         *theme_widget)
 | 
			
		||||
{
 | 
			
		||||
  GdkDisplay *display;
 | 
			
		||||
  GdkScreen *gdk_screen;
 | 
			
		||||
  int screen_number;
 | 
			
		||||
 | 
			
		||||
  display = gdk_display_get_default ();
 | 
			
		||||
  gdk_screen = gdk_display_get_default_screen (display);
 | 
			
		||||
  screen_number = meta_screen_get_screen_number (screen);
 | 
			
		||||
  gdk_screen = gdk_display_get_screen (display, screen_number);
 | 
			
		||||
 | 
			
		||||
  na_tray_manager_manage_screen (manager->priv->na_manager, gdk_screen);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ G_DECLARE_FINAL_TYPE (ShellTrayManager, shell_tray_manager,
 | 
			
		||||
 | 
			
		||||
ShellTrayManager *shell_tray_manager_new          (void);
 | 
			
		||||
void              shell_tray_manager_manage_screen (ShellTrayManager *manager,
 | 
			
		||||
                                                    MetaScreen       *screen,
 | 
			
		||||
                                                    StWidget         *theme_widget);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,6 @@
 | 
			
		||||
#include <meta/group.h>
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
#include <meta/window.h>
 | 
			
		||||
#include <meta/meta-workspace-manager.h>
 | 
			
		||||
 | 
			
		||||
#define SN_API_NOT_YET_FROZEN 1
 | 
			
		||||
#include <libsn/sn.h>
 | 
			
		||||
@@ -588,16 +587,13 @@ shell_window_tracker_on_window_removed (MetaWorkspace   *workspace,
 | 
			
		||||
static void
 | 
			
		||||
load_initial_windows (ShellWindowTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
  MetaWorkspaceManager *workspace_manager =
 | 
			
		||||
    meta_display_get_workspace_manager (display);
 | 
			
		||||
  GList *workspaces;
 | 
			
		||||
  GList *l;
 | 
			
		||||
  GList *workspaces, *iter;
 | 
			
		||||
  MetaScreen *screen = shell_global_get_screen (shell_global_get ());
 | 
			
		||||
  workspaces = meta_screen_get_workspaces (screen);
 | 
			
		||||
 | 
			
		||||
  workspaces = meta_workspace_manager_get_workspaces (workspace_manager);
 | 
			
		||||
  for (l = workspaces; l; l = l->next)
 | 
			
		||||
  for (iter = workspaces; iter; iter = iter->next)
 | 
			
		||||
    {
 | 
			
		||||
      MetaWorkspace *workspace = l->data;
 | 
			
		||||
      MetaWorkspace *workspace = iter->data;
 | 
			
		||||
      GList *windows = meta_workspace_list_windows (workspace);
 | 
			
		||||
      GList *window_iter;
 | 
			
		||||
 | 
			
		||||
@@ -612,18 +608,18 @@ load_initial_windows (ShellWindowTracker *tracker)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_window_tracker_on_n_workspaces_changed (MetaWorkspaceManager *workspace_manager,
 | 
			
		||||
                                              GParamSpec           *pspec,
 | 
			
		||||
                                              gpointer              user_data)
 | 
			
		||||
shell_window_tracker_on_n_workspaces_changed (MetaScreen    *screen,
 | 
			
		||||
                                           GParamSpec    *pspec,
 | 
			
		||||
                                           gpointer       user_data)
 | 
			
		||||
{
 | 
			
		||||
  ShellWindowTracker *self = SHELL_WINDOW_TRACKER (user_data);
 | 
			
		||||
  GList *workspaces;
 | 
			
		||||
  GList *l;
 | 
			
		||||
  GList *workspaces, *iter;
 | 
			
		||||
 | 
			
		||||
  workspaces = meta_workspace_manager_get_workspaces (workspace_manager);
 | 
			
		||||
  for (l = workspaces; l; l = l->next)
 | 
			
		||||
  workspaces = meta_screen_get_workspaces (screen);
 | 
			
		||||
 | 
			
		||||
  for (iter = workspaces; iter; iter = iter->next)
 | 
			
		||||
    {
 | 
			
		||||
      MetaWorkspace *workspace = l->data;
 | 
			
		||||
      MetaWorkspace *workspace = iter->data;
 | 
			
		||||
 | 
			
		||||
      /* This pair of disconnect/connect is idempotent if we were
 | 
			
		||||
       * already connected, while ensuring we get connected for
 | 
			
		||||
@@ -646,20 +642,20 @@ shell_window_tracker_on_n_workspaces_changed (MetaWorkspaceManager *workspace_ma
 | 
			
		||||
static void
 | 
			
		||||
init_window_tracking (ShellWindowTracker *self)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
  MetaWorkspaceManager *workspace_manager =
 | 
			
		||||
    meta_display_get_workspace_manager (display);
 | 
			
		||||
  MetaDisplay *display;
 | 
			
		||||
  MetaScreen *screen = shell_global_get_screen (shell_global_get ());
 | 
			
		||||
 | 
			
		||||
  g_signal_connect (workspace_manager, "notify::n-workspaces",
 | 
			
		||||
  g_signal_connect (screen, "notify::n-workspaces",
 | 
			
		||||
                    G_CALLBACK (shell_window_tracker_on_n_workspaces_changed), self);
 | 
			
		||||
  display = meta_screen_get_display (screen);
 | 
			
		||||
  g_signal_connect (display, "notify::focus-window",
 | 
			
		||||
                    G_CALLBACK (on_focus_window_changed), self);
 | 
			
		||||
 | 
			
		||||
  shell_window_tracker_on_n_workspaces_changed (workspace_manager, NULL, self);
 | 
			
		||||
  shell_window_tracker_on_n_workspaces_changed (screen, NULL, self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_startup_sequence_changed (MetaDisplay           *display,
 | 
			
		||||
on_startup_sequence_changed (MetaScreen            *screen,
 | 
			
		||||
                             SnStartupSequence     *sequence,
 | 
			
		||||
                             ShellWindowTracker    *self)
 | 
			
		||||
{
 | 
			
		||||
@@ -675,13 +671,14 @@ on_startup_sequence_changed (MetaDisplay           *display,
 | 
			
		||||
static void
 | 
			
		||||
shell_window_tracker_init (ShellWindowTracker *self)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
  MetaScreen *screen;
 | 
			
		||||
 | 
			
		||||
  self->window_to_app = g_hash_table_new_full (g_direct_hash, g_direct_equal,
 | 
			
		||||
                                               NULL, (GDestroyNotify) g_object_unref);
 | 
			
		||||
 | 
			
		||||
  screen = shell_global_get_screen (shell_global_get ());
 | 
			
		||||
 | 
			
		||||
  g_signal_connect (display, "startup-sequence-changed",
 | 
			
		||||
  g_signal_connect (G_OBJECT (screen), "startup-sequence-changed",
 | 
			
		||||
                    G_CALLBACK (on_startup_sequence_changed), self);
 | 
			
		||||
 | 
			
		||||
  load_initial_windows (self);
 | 
			
		||||
@@ -798,9 +795,8 @@ GSList *
 | 
			
		||||
shell_window_tracker_get_startup_sequences (ShellWindowTracker *self)
 | 
			
		||||
{
 | 
			
		||||
  ShellGlobal *global = shell_global_get ();
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (global);
 | 
			
		||||
 | 
			
		||||
  return meta_display_get_startup_sequences (display);
 | 
			
		||||
  MetaScreen *screen = shell_global_get_screen (global);
 | 
			
		||||
  return meta_screen_get_startup_sequences (screen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* sn_startup_sequence_ref returns void, so make a
 | 
			
		||||
 
 | 
			
		||||
@@ -205,8 +205,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
 | 
			
		||||
                                                        G_MAXDOUBLE,
 | 
			
		||||
                                                        0.0,
 | 
			
		||||
                                                        ST_PARAM_READWRITE |
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                                                        G_PARAM_EXPLICIT_NOTIFY));
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT));
 | 
			
		||||
  g_object_class_install_property (object_class,
 | 
			
		||||
                                   PROP_UPPER,
 | 
			
		||||
                                   g_param_spec_double ("upper",
 | 
			
		||||
@@ -216,8 +215,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
 | 
			
		||||
                                                        G_MAXDOUBLE,
 | 
			
		||||
                                                        0.0,
 | 
			
		||||
                                                        ST_PARAM_READWRITE |
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                                                        G_PARAM_EXPLICIT_NOTIFY));
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT));
 | 
			
		||||
  g_object_class_install_property (object_class,
 | 
			
		||||
                                   PROP_VALUE,
 | 
			
		||||
                                   g_param_spec_double ("value",
 | 
			
		||||
@@ -227,8 +225,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
 | 
			
		||||
                                                        G_MAXDOUBLE,
 | 
			
		||||
                                                        0.0,
 | 
			
		||||
                                                        ST_PARAM_READWRITE |
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                                                        G_PARAM_EXPLICIT_NOTIFY));
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT));
 | 
			
		||||
  g_object_class_install_property (object_class,
 | 
			
		||||
                                   PROP_STEP_INC,
 | 
			
		||||
                                   g_param_spec_double ("step-increment",
 | 
			
		||||
@@ -238,8 +235,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
 | 
			
		||||
                                                        G_MAXDOUBLE,
 | 
			
		||||
                                                        0.0,
 | 
			
		||||
                                                        ST_PARAM_READWRITE |
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                                                        G_PARAM_EXPLICIT_NOTIFY));
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT));
 | 
			
		||||
  g_object_class_install_property (object_class,
 | 
			
		||||
                                   PROP_PAGE_INC,
 | 
			
		||||
                                   g_param_spec_double ("page-increment",
 | 
			
		||||
@@ -249,8 +245,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
 | 
			
		||||
                                                        G_MAXDOUBLE,
 | 
			
		||||
                                                        0.0,
 | 
			
		||||
                                                        ST_PARAM_READWRITE |
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                                                        G_PARAM_EXPLICIT_NOTIFY));
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT));
 | 
			
		||||
  g_object_class_install_property (object_class,
 | 
			
		||||
                                   PROP_PAGE_SIZE,
 | 
			
		||||
                                   g_param_spec_double ("page-size",
 | 
			
		||||
@@ -260,8 +255,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
 | 
			
		||||
                                                        G_MAXDOUBLE,
 | 
			
		||||
                                                        0.0,
 | 
			
		||||
                                                        ST_PARAM_READWRITE |
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                                                        G_PARAM_EXPLICIT_NOTIFY));
 | 
			
		||||
                                                        G_PARAM_CONSTRUCT));
 | 
			
		||||
  /**
 | 
			
		||||
   * StAdjustment::changed:
 | 
			
		||||
   * @self: the #StAdjustment
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,7 @@ adjustment_value_notify_cb (StAdjustment *adjustment,
 | 
			
		||||
                            GParamSpec   *pspec,
 | 
			
		||||
                            StBoxLayout  *box)
 | 
			
		||||
{
 | 
			
		||||
  clutter_actor_queue_relayout (CLUTTER_ACTOR (box));
 | 
			
		||||
  clutter_actor_queue_redraw (CLUTTER_ACTOR (box));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -490,7 +490,7 @@ st_box_layout_get_paint_volume (ClutterActor       *actor,
 | 
			
		||||
                                ClutterPaintVolume *volume)
 | 
			
		||||
{
 | 
			
		||||
  StBoxLayout *self = ST_BOX_LAYOUT (actor);
 | 
			
		||||
  gdouble x, y, lower, upper;
 | 
			
		||||
  gdouble x, y;
 | 
			
		||||
  StBoxLayoutPrivate *priv = self->priv;
 | 
			
		||||
  StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
 | 
			
		||||
  ClutterActorBox allocation_box;
 | 
			
		||||
@@ -505,42 +505,13 @@ st_box_layout_get_paint_volume (ClutterActor       *actor,
 | 
			
		||||
   * our paint volume on that. */
 | 
			
		||||
  if (priv->hadjustment || priv->vadjustment)
 | 
			
		||||
    {
 | 
			
		||||
      gdouble width, height;
 | 
			
		||||
 | 
			
		||||
      clutter_actor_get_allocation_box (actor, &allocation_box);
 | 
			
		||||
      st_theme_node_get_content_box (theme_node, &allocation_box, &content_box);
 | 
			
		||||
      origin.x = content_box.x1 - allocation_box.x1;
 | 
			
		||||
      origin.y = content_box.y1 - allocation_box.y2;
 | 
			
		||||
      origin.z = 0.f;
 | 
			
		||||
 | 
			
		||||
      if (priv->hadjustment)
 | 
			
		||||
        {
 | 
			
		||||
          g_object_get (priv->hadjustment,
 | 
			
		||||
                        "lower", &lower,
 | 
			
		||||
                        "upper", &upper,
 | 
			
		||||
                        NULL);
 | 
			
		||||
          width = upper - lower;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          width = content_box.x2 - content_box.x1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (priv->vadjustment)
 | 
			
		||||
        {
 | 
			
		||||
          g_object_get (priv->vadjustment,
 | 
			
		||||
                        "lower", &lower,
 | 
			
		||||
                        "upper", &upper,
 | 
			
		||||
                        NULL);
 | 
			
		||||
          height = upper - lower;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          height = content_box.y2 - content_box.y1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      clutter_paint_volume_set_width (volume, width);
 | 
			
		||||
      clutter_paint_volume_set_height (volume, height);
 | 
			
		||||
      clutter_paint_volume_set_width (volume, content_box.x2 - content_box.x1);
 | 
			
		||||
      clutter_paint_volume_set_height (volume, content_box.y2 - content_box.y1);
 | 
			
		||||
    }
 | 
			
		||||
  else if (!CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->get_paint_volume (actor, volume))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 
 | 
			
		||||
@@ -905,13 +905,6 @@ st_entry_unmap (ClutterActor *actor)
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (st_entry_parent_class)->unmap (actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
st_entry_get_paint_volume (ClutterActor       *actor,
 | 
			
		||||
                           ClutterPaintVolume *volume)
 | 
			
		||||
{
 | 
			
		||||
  return clutter_paint_volume_set_from_allocation (volume, actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
st_entry_class_init (StEntryClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -929,7 +922,6 @@ st_entry_class_init (StEntryClass *klass)
 | 
			
		||||
  actor_class->allocate = st_entry_allocate;
 | 
			
		||||
  actor_class->paint = st_entry_paint;
 | 
			
		||||
  actor_class->unmap = st_entry_unmap;
 | 
			
		||||
  actor_class->get_paint_volume = st_entry_get_paint_volume;
 | 
			
		||||
 | 
			
		||||
  actor_class->key_press_event = st_entry_key_press_event;
 | 
			
		||||
  actor_class->key_focus_in = st_entry_key_focus_in;
 | 
			
		||||
 
 | 
			
		||||
@@ -56,15 +56,12 @@ struct _StIconPrivate
 | 
			
		||||
 | 
			
		||||
  CoglPipeline *shadow_pipeline;
 | 
			
		||||
  StShadow     *shadow_spec;
 | 
			
		||||
  ClutterSize   shadow_size;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (StIcon, st_icon, ST_TYPE_WIDGET)
 | 
			
		||||
 | 
			
		||||
static void st_icon_update               (StIcon *icon);
 | 
			
		||||
static gboolean st_icon_update_icon_size (StIcon *icon);
 | 
			
		||||
static void st_icon_update_shadow_pipeline (StIcon *icon);
 | 
			
		||||
static void st_icon_clear_shadow_pipeline (StIcon *icon);
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_ICON_SIZE 48
 | 
			
		||||
 | 
			
		||||
@@ -161,20 +158,20 @@ st_icon_dispose (GObject *gobject)
 | 
			
		||||
static void
 | 
			
		||||
st_icon_paint (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  StIcon *icon = ST_ICON (actor);
 | 
			
		||||
  StIconPrivate *priv = icon->priv;
 | 
			
		||||
  StIconPrivate *priv = ST_ICON (actor)->priv;
 | 
			
		||||
 | 
			
		||||
  st_widget_paint_background (ST_WIDGET (actor));
 | 
			
		||||
 | 
			
		||||
  if (priv->icon_texture)
 | 
			
		||||
    {
 | 
			
		||||
      st_icon_update_shadow_pipeline (icon);
 | 
			
		||||
 | 
			
		||||
      if (priv->shadow_pipeline)
 | 
			
		||||
        {
 | 
			
		||||
          ClutterActorBox allocation;
 | 
			
		||||
          float width, height;
 | 
			
		||||
 | 
			
		||||
          clutter_actor_get_allocation_box (priv->icon_texture, &allocation);
 | 
			
		||||
          clutter_actor_box_get_size (&allocation, &width, &height);
 | 
			
		||||
 | 
			
		||||
          _st_paint_shadow_with_opacity (priv->shadow_spec,
 | 
			
		||||
                                         priv->shadow_pipeline,
 | 
			
		||||
                                         &allocation,
 | 
			
		||||
@@ -192,7 +189,7 @@ st_icon_style_changed (StWidget *widget)
 | 
			
		||||
  StThemeNode *theme_node = st_widget_get_theme_node (widget);
 | 
			
		||||
  StIconPrivate *priv = self->priv;
 | 
			
		||||
 | 
			
		||||
  st_icon_clear_shadow_pipeline (self);
 | 
			
		||||
  g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
 | 
			
		||||
  g_clear_pointer (&priv->shadow_spec, st_shadow_unref);
 | 
			
		||||
 | 
			
		||||
  priv->shadow_spec = st_theme_node_get_shadow (theme_node, "icon-shadow");
 | 
			
		||||
@@ -270,50 +267,22 @@ st_icon_init (StIcon *self)
 | 
			
		||||
  self->priv->shadow_pipeline = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
st_icon_clear_shadow_pipeline (StIcon *icon)
 | 
			
		||||
{
 | 
			
		||||
  StIconPrivate *priv = icon->priv;
 | 
			
		||||
 | 
			
		||||
  g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
 | 
			
		||||
  clutter_size_init (&priv->shadow_size, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
st_icon_update_shadow_pipeline (StIcon *icon)
 | 
			
		||||
{
 | 
			
		||||
  StIconPrivate *priv = icon->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->icon_texture && priv->shadow_spec)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterActorBox box;
 | 
			
		||||
      float width, height;
 | 
			
		||||
  g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
 | 
			
		||||
 | 
			
		||||
      clutter_actor_get_allocation_box (CLUTTER_ACTOR (icon), &box);
 | 
			
		||||
      clutter_actor_box_get_size (&box, &width, &height);
 | 
			
		||||
 | 
			
		||||
      if (priv->shadow_pipeline == NULL ||
 | 
			
		||||
          priv->shadow_size.width != width ||
 | 
			
		||||
          priv->shadow_size.height != height)
 | 
			
		||||
        {
 | 
			
		||||
          st_icon_clear_shadow_pipeline (icon);
 | 
			
		||||
 | 
			
		||||
          priv->shadow_pipeline =
 | 
			
		||||
            _st_create_shadow_pipeline_from_actor (priv->shadow_spec,
 | 
			
		||||
                                                   priv->icon_texture);
 | 
			
		||||
 | 
			
		||||
          if (priv->shadow_pipeline)
 | 
			
		||||
            clutter_size_init (&priv->shadow_size, width, height);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  if (priv->shadow_spec)
 | 
			
		||||
   priv->shadow_pipeline = _st_create_shadow_pipeline_from_actor (priv->shadow_spec, priv->icon_texture);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_pixbuf_changed (ClutterTexture *texture,
 | 
			
		||||
                   StIcon         *icon)
 | 
			
		||||
{
 | 
			
		||||
  st_icon_clear_shadow_pipeline (icon);
 | 
			
		||||
  clutter_actor_queue_redraw (CLUTTER_ACTOR (icon));
 | 
			
		||||
  st_icon_update_shadow_pipeline (icon);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -338,7 +307,7 @@ st_icon_finish_update (StIcon *icon)
 | 
			
		||||
      /* Remove the temporary ref we added */
 | 
			
		||||
      g_object_unref (priv->icon_texture);
 | 
			
		||||
 | 
			
		||||
      st_icon_clear_shadow_pipeline (icon);
 | 
			
		||||
      st_icon_update_shadow_pipeline (icon);
 | 
			
		||||
 | 
			
		||||
      /* "pixbuf-change" is actually a misnomer for "texture-changed" */
 | 
			
		||||
      g_signal_connect_object (priv->icon_texture, "pixbuf-change",
 | 
			
		||||
 
 | 
			
		||||
@@ -432,8 +432,6 @@ _st_create_shadow_pipeline_from_actor (StShadow     *shadow_spec,
 | 
			
		||||
  CoglPipeline *shadow_pipeline = NULL;
 | 
			
		||||
  float width, height;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (clutter_actor_has_allocation (actor), NULL);
 | 
			
		||||
 | 
			
		||||
  clutter_actor_get_size (actor, &width, &height);
 | 
			
		||||
 | 
			
		||||
  if (width == 0 || height == 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -304,13 +304,6 @@ st_scroll_view_pick (ClutterActor       *actor,
 | 
			
		||||
    clutter_actor_paint (priv->vscroll);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
st_scroll_view_get_paint_volume (ClutterActor       *actor,
 | 
			
		||||
                                 ClutterPaintVolume *volume)
 | 
			
		||||
{
 | 
			
		||||
  return clutter_paint_volume_set_from_allocation (volume, actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static double
 | 
			
		||||
get_scrollbar_width (StScrollView *scroll,
 | 
			
		||||
                     gfloat        for_height)
 | 
			
		||||
@@ -800,7 +793,6 @@ st_scroll_view_class_init (StScrollViewClass *klass)
 | 
			
		||||
 | 
			
		||||
  actor_class->paint = st_scroll_view_paint;
 | 
			
		||||
  actor_class->pick = st_scroll_view_pick;
 | 
			
		||||
  actor_class->get_paint_volume = st_scroll_view_get_paint_volume;
 | 
			
		||||
  actor_class->get_preferred_width = st_scroll_view_get_preferred_width;
 | 
			
		||||
  actor_class->get_preferred_height = st_scroll_view_get_preferred_height;
 | 
			
		||||
  actor_class->allocate = st_scroll_view_allocate;
 | 
			
		||||
 
 | 
			
		||||
@@ -780,13 +780,13 @@ st_texture_cache_load (StTextureCache       *cache,
 | 
			
		||||
  if (!texture)
 | 
			
		||||
    {
 | 
			
		||||
      texture = load (cache, key, data, error);
 | 
			
		||||
      if (texture && policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
 | 
			
		||||
      if (texture)
 | 
			
		||||
        g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texture);
 | 
			
		||||
      else
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (texture && policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
 | 
			
		||||
    cogl_object_ref (texture);
 | 
			
		||||
 | 
			
		||||
  cogl_object_ref (texture);
 | 
			
		||||
  return texture;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -402,7 +402,7 @@ st_theme_node_lookup_corner (StThemeNode    *node,
 | 
			
		||||
    return COGL_INVALID_HANDLE;
 | 
			
		||||
 | 
			
		||||
  key = corner_to_string (&corner);
 | 
			
		||||
  texture = st_texture_cache_load (cache, key, ST_TEXTURE_CACHE_POLICY_FOREVER, load_corner, &corner, NULL);
 | 
			
		||||
  texture = st_texture_cache_load (cache, key, ST_TEXTURE_CACHE_POLICY_NONE, load_corner, &corner, NULL);
 | 
			
		||||
 | 
			
		||||
  if (texture)
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user