Compare commits
	
		
			90 Commits
		
	
	
		
			wip/jimmac
			...
			wip/mcrha/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | bd4aac8f49 | ||
|   | 785dd5c5f7 | ||
|   | 71e469a59c | ||
|   | 6d4b9d29b8 | ||
|   | 33f5bb39cd | ||
|   | a1c3900630 | ||
|   | cdaf164c01 | ||
|   | 2bd80579ed | ||
|   | 54039c3552 | ||
|   | b197a1affb | ||
|   | 51655be6a3 | ||
|   | 9697c209c0 | ||
|   | 6ecb0a4546 | ||
|   | 30861d4800 | ||
|   | a23391ea28 | ||
|   | 58e0b80cac | ||
|   | 41dd744b74 | ||
|   | bdf66d7b62 | ||
|   | 4258ae3ec2 | ||
|   | 9b379c49ba | ||
|   | 7e70dd8453 | ||
|   | 2e209a82f9 | ||
|   | ab0ecc469f | ||
|   | 7d75ddf635 | ||
|   | 271e43a1ed | ||
|   | 2702a82896 | ||
|   | 8ad33d8752 | ||
|   | d84bbb8770 | ||
|   | c0c2edf2e1 | ||
|   | de0c3251dd | ||
|   | 0afd600ea4 | ||
|   | 598407b14a | ||
|   | d9bfa16f05 | ||
|   | 03117d65b2 | ||
|   | 5520bb3890 | ||
|   | 4e6b2eb72a | ||
|   | 2e5295b3a9 | ||
|   | 3121c9aa29 | ||
|   | 1ebbd7c768 | ||
|   | 8572bb97c7 | ||
|   | d5ebd8c816 | ||
|   | ed999ce926 | ||
|   | 50b7739076 | ||
|   | 94995e9c1e | ||
|   | fb04dafb0b | ||
|   | d57234bec9 | ||
|   | 38da54fb02 | ||
|   | bbd3275dad | ||
|   | 3a3f9aa008 | ||
|   | 3c54e863e6 | ||
|   | a63ba61194 | ||
|   | ab9710ee7b | ||
|   | 43cef45229 | ||
|   | 8db4f3c67f | ||
|   | 594a070029 | ||
|   | c2e04e3cfa | ||
|   | 293f50e8e5 | ||
|   | df7fea3407 | ||
|   | 563412698a | ||
|   | 2b30146c6c | ||
|   | 0f531d8c44 | ||
|   | 218c87994b | ||
|   | f74c07b9ac | ||
|   | 59edea4bb4 | ||
|   | 4d4d5a0b16 | ||
|   | 03c4930883 | ||
|   | 9593e20425 | ||
|   | 2b1d6e607f | ||
|   | 1dff32e48a | ||
|   | 1e3a174de9 | ||
|   | 7bb84dae80 | ||
|   | 44fcb9e9af | ||
|   | 2d30e310bc | ||
|   | be2d630348 | ||
|   | bea6045aae | ||
|   | ad491e7922 | ||
|   | fedb8e706a | ||
|   | 1be933bc49 | ||
|   | 526bb72f3d | ||
|   | 49c95cff6c | ||
|   | 56a361650c | ||
|   | d4763b157d | ||
|   | d2dc072ba9 | ||
|   | ffaca00594 | ||
|   | 9090b7dc3d | ||
|   | a540fe4130 | ||
|   | 5be61bbb68 | ||
|   | 8e51fee5c1 | ||
|   | 9d6fcfdc85 | ||
|   | 5f5a3b78a5 | 
| @@ -15,8 +15,10 @@ variables: | ||||
|         - merge_requests | ||||
|  | ||||
| check_commit_log: | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v1 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     stage: review | ||||
|     variables: | ||||
|         GIT_DEPTH: "100" | ||||
|     script: | ||||
|         - ./.gitlab-ci/check-commit-log.sh | ||||
|     only: | ||||
| @@ -38,7 +40,7 @@ js_check: | ||||
|         when: on_failure | ||||
|  | ||||
| build: | ||||
|     image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     stage: build | ||||
|     before_script: | ||||
|         - .gitlab-ci/checkout-mutter.sh | ||||
| @@ -56,7 +58,7 @@ build: | ||||
|             - build | ||||
|  | ||||
| test: | ||||
|     image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     stage: test | ||||
|     before_script: | ||||
|         - ninja -C mutter/build install | ||||
| @@ -70,7 +72,7 @@ test: | ||||
|         when: on_failure | ||||
|  | ||||
| test-pot: | ||||
|     image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1 | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||
|     stage: test | ||||
|     before_script: | ||||
|         - ninja -C mutter/build install | ||||
|   | ||||
| @@ -1,19 +0,0 @@ | ||||
| FROM registry.gitlab.gnome.org/gnome/mutter/master:v1 | ||||
|  | ||||
| RUN dnf -y update && dnf -y upgrade && \ | ||||
|     dnf install -y 'dnf-command(copr)' && \ | ||||
|     dnf copr enable -y fmuellner/gnome-shell-ci && \ | ||||
|     dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \ | ||||
|  | ||||
|     # bt only exports HAVE_BLUETOOTH to js, rest are outdated build-requires | ||||
|     dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel \ | ||||
|                   upower-devel python3-devel && \ | ||||
|  | ||||
|     # We'll build mutter ourselves | ||||
|     dnf remove -y --noautoremove mutter mutter-devel && \ | ||||
|  | ||||
|     # Needed for tests | ||||
|     dnf install -y '*/xvfb-run' gdm-lib accountsservice-libs && \ | ||||
|  | ||||
|     dnf clean all && \ | ||||
|     rm -rf /var/cache/dnf | ||||
| @@ -17,15 +17,19 @@ if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then | ||||
|   merge_request_branch=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME | ||||
|  | ||||
|   echo Looking for $merge_request_branch on remote ... | ||||
|   if git fetch $merge_request_remote $merge_request_branch >/dev/null 2>&1; then | ||||
|   if git fetch -q $merge_request_remote $merge_request_branch 2>/dev/null; then | ||||
|     mutter_target=FETCH_HEAD | ||||
|   else | ||||
|     mutter_target=origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME | ||||
|     echo Using $mutter_target instead | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| if [ -z "$mutter_target" ]; then | ||||
|   mutter_target=$(git branch -r -l $shell_branch) | ||||
|   mutter_target=$(git branch -r -l origin/$shell_branch) | ||||
|   mutter_target=${mutter_target:-$(git branch -r -l ${shell_branch#remotes/})} | ||||
|   mutter_target=${mutter_target:-origin/master} | ||||
|   echo Using $mutter_target instead | ||||
| fi | ||||
|  | ||||
| git checkout $mutter_target | ||||
| git checkout -q $mutter_target | ||||
|   | ||||
							
								
								
									
										60
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,63 @@ | ||||
| 3.33.1 | ||||
| ====== | ||||
| * Refine the app menu [Florian; #968] | ||||
| * Refine window preview style [Feichtmeier; !461] | ||||
| * Only emit ::style-changed on actual changes [Carlos; #1153] | ||||
| * Disable emoji on-screen keyboard support on X11 [Florian; #1172] | ||||
| * Fix tablet button mapping overlay [Carlos; #1220] | ||||
| * Don't crash for world clock locations with no timezone [Florian; #1062] | ||||
| * Don't leak old on-screen keyboard layout groups [Carlos; mutter#556] | ||||
| * Fix ellipsization in dialog subtitles/bodies [Marco; !531] | ||||
| * Fix glitch of fullscreen window in workspace switch animation [Jonas D.; !322] | ||||
| * Fix distortion of some image contents [Florian; !525] | ||||
| * Allow dragging unfocused tiled/maximized windows from top bar [Dylan; #679290] | ||||
| * Handle network interface name changes [Fabrice; !534] | ||||
| * Avoid unnecessary style changes when computing :first/:last-child | ||||
|   [Florian; !529] | ||||
| * Misc. bug fixes and cleanups [Florian, Marco, Robert, Georges, Carlos, Simon, | ||||
|   Jonas D.; !487, !441, !502, !503, !504, !506, #822, !551, !512, !509, !511, | ||||
|   #1054, !524, #1065, !331, !540] | ||||
|  | ||||
| Contributors: | ||||
|   Fabrice Bellet, Jonas Dreßler, Feichtmeier, Carlos Garnacho, Robert Mader, | ||||
|   Dylan McCall, Simon McVittie, Florian Müllner, Georges Basile Stavracas Neto, | ||||
|   Marco Trevisan (Treviño) | ||||
|  | ||||
| Translators: | ||||
|   Daniel Mustieles [es], Kukuh Syafaat [id], Fabio Tomat [fur], | ||||
|   Carmen Bianca BAKKER [eo], Dingzhong Chen [zh_CN], Tim Sabsch [de] | ||||
|  | ||||
| 3.32.1 | ||||
| ====== | ||||
| * Fix avatar scaling on login screen [Florian; #1024] | ||||
| * Fix distortion of desktop zoom [Florian; #646] | ||||
| * Fix mouse cursor visibility when using desktop zoom [Florian, Marco; #1020] | ||||
| * Fix screen dimming after wake-up on lock screen [Xiaoguang; #900] | ||||
| * Fix Alt+Esc switcher [Florian; #1064] | ||||
| * Respect struts for popover placement [Andrea; #1102] | ||||
| * Fix app icons updates after theme changes [Florian; #1117] | ||||
| * Fix desktop zoom after resolution changes [Marco; #1120] | ||||
| * Implement stick-to-finger workspace switch overview gestures [Florian; #516] | ||||
| * Make World Clocks offsets relative to local time [Florian; #1157] | ||||
| * Fix top app icon disappearing from dash [Florian; #1053] | ||||
| * Update switch style to match new Adwaita [Jakub; !496] | ||||
| * Ensure CSS units are pixel-aligned when scaling is used [Carlos; #91] | ||||
| * Misc. bug fixes and cleanups [Florian, Jakub, Robert, Alex, Carlos, Phil, | ||||
|   Marco, Benjamin, AsciiWolf, Ray, verdre; !444, #1016, #1018, !449, #1036, | ||||
|   !455, #1094, !440, #1023, #624, #1017, !476, !473, !480, #1130, !485, !481, | ||||
|   !490, !489, #1151, !435, #1160, !482, #1150, #1166, !384] | ||||
|  | ||||
| Contributors: | ||||
|   AsciiWolf, Andrea Azzarone, Benjamin Berg, Carlos Garnacho, Victor Ibragimov, | ||||
|   Robert Mader, Alex Monday, Florian Müllner, Jakub Steiner, Ray Strode, | ||||
|   Marco Trevisan (Treviño), verdre, Xiaoguang Wang, Phil Wyett | ||||
|  | ||||
| Translators: | ||||
|   Victor Ibragimov [tg, af, et, ja], Bruce Cowan [en_GB], Piotr Drąg [tg], | ||||
|   Charles Monzat [fr], Khaled Hosny [ar], Goran Vidović [hr], | ||||
|   Cheng-Chia Tseng [zh_TW], Carmen Bianca BAKKER [eo], Daniel Mustieles [es], | ||||
|   Dušan Kazik [sk] | ||||
|  | ||||
| 3.32.0 | ||||
| ====== | ||||
| * Fix sizing issues in on-screen-keyboard emoji panel [Carlos; !439] | ||||
|   | ||||
| @@ -21,10 +21,8 @@ | ||||
|     <file>noise-texture.png</file> | ||||
|     <file>pad-osd.css</file> | ||||
|     <file>process-working.svg</file> | ||||
|     <file>toggle-off-us.svg</file> | ||||
|     <file>toggle-off-intl.svg</file> | ||||
|     <file>toggle-off-hc.svg</file> | ||||
|     <file>toggle-on-us.svg</file> | ||||
|     <file>toggle-on-intl.svg</file> | ||||
|     <file>toggle-on-hc.svg</file> | ||||
|   </gresource> | ||||
|   | ||||
| @@ -157,18 +157,13 @@ StScrollBar { | ||||
|  | ||||
| /* Switches */ | ||||
| .toggle-switch { | ||||
|   width: 65px; | ||||
|   width: 46px; | ||||
|   height: 22px; | ||||
|   background-size: contain; | ||||
|   background-image: url("resource:///org/gnome/shell/theme/toggle-off-intl.svg"); | ||||
|   &:checked { background-image: url("resource:///org/gnome/shell/theme/toggle-on-intl.svg"); } | ||||
| } | ||||
|  | ||||
|   @each $v in us, intl { | ||||
|     .toggle-switch-#{$v} { | ||||
|       background-image: url("resource:///org/gnome/shell/theme/toggle-off-#{$v}.svg"); | ||||
|       &:checked { background-image: url("resource:///org/gnome/shell/theme/toggle-on-#{$v}.svg"); } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| /* links */ | ||||
| .shell-link { | ||||
|   color: $link_color; | ||||
| @@ -1155,25 +1150,23 @@ StScrollBar { | ||||
| //close buttons | ||||
|  | ||||
| .window-close { | ||||
|   background-color: white; | ||||
|   background-color: $selected_bg_color; | ||||
|   color: white; | ||||
|   border-radius: 24px; | ||||
|   border: 4px solid $selected_bg_color; | ||||
|   box-shadow: inset 0 -4px 0 0 transparentize($selected_bg_color, 0.5); | ||||
|   color: $selected_bg_color; | ||||
|   border: 2px solid $selected_bg_color; | ||||
|   height: 24px; | ||||
|   width: 24px; | ||||
|   -shell-close-overlap: 14px; | ||||
|   -shell-close-overlap: 11px; | ||||
|   box-shadow: -1px 1px 5px 0px transparentize(black, 0.5); | ||||
|  | ||||
|   &:hover { | ||||
|     background-color: $selected_bg_color; | ||||
|     border-color: white; | ||||
|     color: white; | ||||
|     background-color: lighten($selected_bg_color, 5%); | ||||
|     border-color: lighten($selected_bg_color, 5%); | ||||
|   } | ||||
|  | ||||
|   &:active { | ||||
|     background-color: mix(white, $selected_bg_color, 75%); | ||||
|     border-color: $selected_bg_color; | ||||
|     color: $selected_bg_color; | ||||
|     background-color: darken($selected_bg_color, 5%); | ||||
|     border-color: darken($selected_bg_color, 5%); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -1238,13 +1231,14 @@ StScrollBar { | ||||
|   } | ||||
|  | ||||
|   .window-clone-border { | ||||
|     border: 4px solid $selected_bg_color; | ||||
|     border-radius: 4px; | ||||
|     $_bg: transparentize(white, 0.65); | ||||
|     border: 5px solid $_bg; | ||||
|     border-radius: 6px; | ||||
|     // For window decorations with round corners we can't match | ||||
|     // the exact shape when the window is scaled. So apply a shadow | ||||
|     // to fix that case | ||||
|     box-shadow: inset 0px 0px 0px 1px $selected_bg_color; | ||||
|   } | ||||
|     box-shadow: inset 0 0 0 1px $_bg; | ||||
| } | ||||
|   .window-caption { | ||||
|     spacing: 25px; | ||||
|     color: $selected_fg_color; | ||||
|   | ||||
| @@ -10,124 +10,62 @@ | ||||
|    xmlns:xlink="http://www.w3.org/1999/xlink" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    width="65" | ||||
|    width="46" | ||||
|    height="22" | ||||
|    id="svg2857" | ||||
|    viewBox="0 0 46 22" | ||||
|    version="1.1" | ||||
|    inkscape:version="0.48.5 r10040" | ||||
|    sodipodi:docname="toggle-off-us.svg"> | ||||
|    id="svg2751" | ||||
|    inkscape:version="0.92.4 5da689c313, 2019-01-14" | ||||
|    sodipodi:docname="toggle-off-intl.svg"> | ||||
|   <defs | ||||
|      id="defs2859"> | ||||
|     <inkscape:perspective | ||||
|        sodipodi:type="inkscape:persp3d" | ||||
|        inkscape:vp_x="0 : 526.18109 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_z="744.09448 : 526.18109 : 1" | ||||
|        inkscape:persp3d-origin="372.04724 : 350.78739 : 1" | ||||
|        id="perspective2865" /> | ||||
|     <inkscape:perspective | ||||
|        id="perspective2843" | ||||
|        inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | ||||
|        inkscape:vp_z="1 : 0.5 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_x="0 : 0.5 : 1" | ||||
|        sodipodi:type="inkscape:persp3d" /> | ||||
|      id="defs2745"> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient76469-7-7-4" | ||||
|        id="linearGradient38024" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)" | ||||
|        x1="6" | ||||
|        y1="102.95528" | ||||
|        x2="6" | ||||
|        y2="84.505203" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        id="linearGradient76469-7-7-4"> | ||||
|        id="linearGradient3329"> | ||||
|       <stop | ||||
|          style="stop-color:#2e3232;stop-opacity:1" | ||||
|          style="stop-color:#39393a;stop-opacity:1;" | ||||
|          offset="0" | ||||
|          id="stop76471-7-1-5" /> | ||||
|          id="stop3325" /> | ||||
|       <stop | ||||
|          style="stop-color:#3e4545;stop-opacity:1" | ||||
|          style="stop-color:#302f30;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop76473-9-0-0" /> | ||||
|     </linearGradient> | ||||
|     <inkscape:path-effect | ||||
|        effect="spiro" | ||||
|        id="path-effect77541-4" | ||||
|        is_visible="true" /> | ||||
|     <inkscape:path-effect | ||||
|        effect="spiro" | ||||
|        id="path-effect77541-4-0" | ||||
|        is_visible="true" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient37802-8" | ||||
|        id="linearGradient12311-3-1-0-5-4" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)" | ||||
|        x1="610.13782" | ||||
|        y1="501.43866" | ||||
|        x2="610.13782" | ||||
|        y2="492.52756" /> | ||||
|     <linearGradient | ||||
|        id="linearGradient37802-8" | ||||
|        inkscape:collect="always"> | ||||
|       <stop | ||||
|          id="stop37804-1" | ||||
|          offset="0" | ||||
|          style="stop-color:#2c2c2c;stop-opacity:1" /> | ||||
|       <stop | ||||
|          id="stop37806-8" | ||||
|          offset="1" | ||||
|          style="stop-color:#16191a;stop-opacity:1" /> | ||||
|          id="stop3327" /> | ||||
|     </linearGradient> | ||||
|     <linearGradient | ||||
|        y2="492.52756" | ||||
|        x2="610.13782" | ||||
|        y1="501.43866" | ||||
|        x1="610.13782" | ||||
|        gradientTransform="matrix(1.5918367,0,0,0.85714285,-900.56122,-423.92857)" | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient3329" | ||||
|        id="linearGradient3331" | ||||
|        x1="53" | ||||
|        y1="294.42917" | ||||
|        x2="53" | ||||
|        y2="309.80417" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        id="linearGradient13602" | ||||
|        xlink:href="#linearGradient37802-8" | ||||
|        inkscape:collect="always" /> | ||||
|        gradientTransform="translate(-42.760724)" /> | ||||
|   </defs> | ||||
|   <sodipodi:namedview | ||||
|      id="base" | ||||
|      pagecolor="#000000" | ||||
|      pagecolor="#535353" | ||||
|      bordercolor="#666666" | ||||
|      borderopacity="1.0" | ||||
|      inkscape:pageopacity="1" | ||||
|      inkscape:pageshadow="2" | ||||
|      inkscape:zoom="1" | ||||
|      inkscape:cx="-5.0602834" | ||||
|      inkscape:cy="16.473273" | ||||
|      inkscape:cx="-19.436775" | ||||
|      inkscape:cy="-13.499723" | ||||
|      inkscape:document-units="px" | ||||
|      inkscape:current-layer="g37994" | ||||
|      inkscape:current-layer="layer1" | ||||
|      showgrid="false" | ||||
|      inkscape:window-width="2560" | ||||
|      inkscape:window-height="1375" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="27" | ||||
|      inkscape:window-maximized="1" | ||||
|      units="px" | ||||
|      inkscape:pagecheckerboard="true" | ||||
|      borderlayer="true" | ||||
|      inkscape:showpageshadow="false" | ||||
|      inkscape:snap-nodes="false" | ||||
|      inkscape:snap-bbox="true" | ||||
|      showborder="false"> | ||||
|     <inkscape:grid | ||||
|        type="xygrid" | ||||
|        id="grid12954" | ||||
|        empspacing="5" | ||||
|        visible="true" | ||||
|        enabled="true" | ||||
|        snapvisiblegridlinesonly="true" /> | ||||
|        id="grid3298" /> | ||||
|   </sodipodi:namedview> | ||||
|   <metadata | ||||
|      id="metadata2862"> | ||||
|      id="metadata2748"> | ||||
|     <rdf:RDF> | ||||
|       <cc:Work | ||||
|          rdf:about=""> | ||||
| @@ -142,68 +80,24 @@ | ||||
|      inkscape:label="Layer 1" | ||||
|      inkscape:groupmode="layer" | ||||
|      id="layer1" | ||||
|      transform="translate(-444.64286,-781.36218)"> | ||||
|     <g | ||||
|        transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)" | ||||
|        id="g37994"> | ||||
|       <g | ||||
|          id="g37996" | ||||
|          transform="translate(-115,1277)"> | ||||
|         <rect | ||||
|            style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837" | ||||
|            id="rect13475" | ||||
|            width="98" | ||||
|            height="25" | ||||
|            x="644.5" | ||||
|            y="484.61118" | ||||
|            rx="4.7429576" | ||||
|            ry="3.8424656" /> | ||||
|         <rect | ||||
|            ry="3.8424656" | ||||
|            rx="4.7429576" | ||||
|            y="483.5" | ||||
|            x="644.5" | ||||
|            height="25" | ||||
|            width="98" | ||||
|            id="rect38000" | ||||
|            style="color:#000000;fill:url(#linearGradient12311-3-1-0-5-4);fill-opacity:1;fill-rule:nonzero;stroke:#16191a;stroke-width:1.37920942;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" /> | ||||
|       </g> | ||||
|       <g | ||||
|          transform="translate(-49.946213,-1.890275)" | ||||
|          id="g38002"> | ||||
|         <g | ||||
|            transform="translate(-115,1247)" | ||||
|            style="display:inline" | ||||
|            id="g38004"> | ||||
|           <rect | ||||
|              ry="3.7972314" | ||||
|              rx="4.6871223" | ||||
|              y="515.5" | ||||
|              x="694.53046" | ||||
|              height="25" | ||||
|              width="45.969578" | ||||
|              id="rect38006" | ||||
|              style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||||
|           <path | ||||
|              sodipodi:nodetypes="cc" | ||||
|              style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | ||||
|              d="m 699.09675,516.7365 36.86904,0" | ||||
|              id="path38016" | ||||
|              inkscape:path-effect="#path-effect77541-4" | ||||
|              inkscape:original-d="m 699.09675,516.7365 36.86904,0" | ||||
|              inkscape:connector-curvature="0" /> | ||||
|         </g> | ||||
|       </g> | ||||
|       <path | ||||
|          sodipodi:type="arc" | ||||
|          style="color:#000000;fill:none;stroke:#ffffff;stroke-width:2.15627193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" | ||||
|          id="path13479" | ||||
|          sodipodi:cx="16.4375" | ||||
|          sodipodi:cy="10.8125" | ||||
|          sodipodi:rx="4.3125" | ||||
|          sodipodi:ry="4.3125" | ||||
|          d="m 20.75,10.8125 a 4.3125,4.3125 0 1 1 -8.625,0 4.3125,4.3125 0 1 1 8.625,0 z" | ||||
|          transform="matrix(1.4212691,0,0,1.1514287,577.38488,1761.1138)" /> | ||||
|     </g> | ||||
|      transform="translate(0,-291.17916)"> | ||||
|     <rect | ||||
|        style="opacity:1;vector-effect:none;fill:#323233;fill-opacity:1;stroke:#272728;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" | ||||
|        id="rect3296" | ||||
|        width="44.446434" | ||||
|        height="20.910645" | ||||
|        x="0.625" | ||||
|        y="291.71494" | ||||
|        rx="10.455324" | ||||
|        ry="10.073335" /> | ||||
|     <rect | ||||
|        ry="10.455322" | ||||
|        rx="10.455322" | ||||
|        y="291.71494" | ||||
|        x="0.5428465" | ||||
|        height="20.910645" | ||||
|        width="21.142862" | ||||
|        id="rect3300" | ||||
|        style="opacity:1;vector-effect:none;fill:url(#linearGradient3331);fill-opacity:1;stroke:#151515;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" /> | ||||
|   </g> | ||||
| </svg> | ||||
|   | ||||
| Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 3.3 KiB | 
| @@ -1,255 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||||
|  | ||||
| <svg | ||||
|    xmlns:dc="http://purl.org/dc/elements/1.1/" | ||||
|    xmlns:cc="http://creativecommons.org/ns#" | ||||
|    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:xlink="http://www.w3.org/1999/xlink" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    width="65" | ||||
|    height="22" | ||||
|    id="svg2857" | ||||
|    version="1.1" | ||||
|    inkscape:version="0.48.5 r10040" | ||||
|    sodipodi:docname="toggle-on-intl.svg"> | ||||
|   <defs | ||||
|      id="defs2859"> | ||||
|     <inkscape:perspective | ||||
|        sodipodi:type="inkscape:persp3d" | ||||
|        inkscape:vp_x="0 : 526.18109 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_z="744.09448 : 526.18109 : 1" | ||||
|        inkscape:persp3d-origin="372.04724 : 350.78739 : 1" | ||||
|        id="perspective2865" /> | ||||
|     <inkscape:perspective | ||||
|        id="perspective2843" | ||||
|        inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | ||||
|        inkscape:vp_z="1 : 0.5 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_x="0 : 0.5 : 1" | ||||
|        sodipodi:type="inkscape:persp3d" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient76469-7-7-4" | ||||
|        id="linearGradient38024" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)" | ||||
|        x1="6" | ||||
|        y1="102.95528" | ||||
|        x2="6" | ||||
|        y2="84.505203" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        id="linearGradient76469-7-7-4"> | ||||
|       <stop | ||||
|          style="stop-color:#2e3232;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop76471-7-1-5" /> | ||||
|       <stop | ||||
|          style="stop-color:#3e4545;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop76473-9-0-0" /> | ||||
|     </linearGradient> | ||||
|     <inkscape:path-effect | ||||
|        effect="spiro" | ||||
|        id="path-effect77541-4" | ||||
|        is_visible="true" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient37802" | ||||
|        id="linearGradient12311-3-1-0-5" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)" | ||||
|        x1="610.13782" | ||||
|        y1="501.43866" | ||||
|        x2="610.13782" | ||||
|        y2="492.52756" /> | ||||
|     <linearGradient | ||||
|        id="linearGradient37802" | ||||
|        inkscape:collect="always"> | ||||
|       <stop | ||||
|          id="stop37804" | ||||
|          offset="0" | ||||
|          style="stop-color:#2c2c2c;stop-opacity:1" /> | ||||
|       <stop | ||||
|          id="stop37806" | ||||
|          offset="1" | ||||
|          style="stop-color:#16191a;stop-opacity:1" /> | ||||
|     </linearGradient> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient76469-7-7-4-3" | ||||
|        id="linearGradient77680" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1,0,0,1.0322581,717.71949,428.68472)" | ||||
|        x1="6" | ||||
|        y1="102.95528" | ||||
|        x2="6" | ||||
|        y2="84.505203" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        id="linearGradient76469-7-7-4-3"> | ||||
|       <stop | ||||
|          style="stop-color:#2e3232;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop76471-7-1-5-7" /> | ||||
|       <stop | ||||
|          style="stop-color:#3e4545;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop76473-9-0-0-9" /> | ||||
|     </linearGradient> | ||||
|     <inkscape:path-effect | ||||
|        effect="spiro" | ||||
|        id="path-effect77541-4-0" | ||||
|        is_visible="true" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient37802-8" | ||||
|        id="linearGradient12311-3-1-0-5-4" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)" | ||||
|        x1="610.13782" | ||||
|        y1="501.43866" | ||||
|        x2="610.13782" | ||||
|        y2="492.52756" /> | ||||
|     <linearGradient | ||||
|        id="linearGradient37802-8" | ||||
|        inkscape:collect="always"> | ||||
|       <stop | ||||
|          id="stop37804-1" | ||||
|          offset="0" | ||||
|          style="stop-color:#2c2c2c;stop-opacity:1" /> | ||||
|       <stop | ||||
|          id="stop37806-8" | ||||
|          offset="1" | ||||
|          style="stop-color:#16191a;stop-opacity:1" /> | ||||
|     </linearGradient> | ||||
|     <linearGradient | ||||
|        y2="492.52756" | ||||
|        x2="610.13782" | ||||
|        y1="501.43866" | ||||
|        x1="610.13782" | ||||
|        gradientTransform="matrix(1.5918367,0,0,0.85714285,-900.56122,-423.92857)" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        id="linearGradient13602" | ||||
|        xlink:href="#linearGradient37802-8" | ||||
|        inkscape:collect="always" /> | ||||
|   </defs> | ||||
|   <sodipodi:namedview | ||||
|      id="base" | ||||
|      pagecolor="#000000" | ||||
|      bordercolor="#666666" | ||||
|      borderopacity="1.0" | ||||
|      inkscape:pageopacity="1" | ||||
|      inkscape:pageshadow="2" | ||||
|      inkscape:zoom="1" | ||||
|      inkscape:cx="16.760995" | ||||
|      inkscape:cy="21.955673" | ||||
|      inkscape:document-units="px" | ||||
|      inkscape:current-layer="g37994" | ||||
|      showgrid="false" | ||||
|      inkscape:window-width="2560" | ||||
|      inkscape:window-height="1375" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="27" | ||||
|      inkscape:window-maximized="1" | ||||
|      borderlayer="true" | ||||
|      inkscape:showpageshadow="false" | ||||
|      inkscape:snap-nodes="false" | ||||
|      inkscape:snap-bbox="true" | ||||
|      showborder="false"> | ||||
|     <inkscape:grid | ||||
|        type="xygrid" | ||||
|        id="grid12954" | ||||
|        empspacing="5" | ||||
|        visible="true" | ||||
|        enabled="true" | ||||
|        snapvisiblegridlinesonly="true" /> | ||||
|   </sodipodi:namedview> | ||||
|   <metadata | ||||
|      id="metadata2862"> | ||||
|     <rdf:RDF> | ||||
|       <cc:Work | ||||
|          rdf:about=""> | ||||
|         <dc:format>image/svg+xml</dc:format> | ||||
|         <dc:type | ||||
|            rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
|         <dc:title></dc:title> | ||||
|       </cc:Work> | ||||
|     </rdf:RDF> | ||||
|   </metadata> | ||||
|   <g | ||||
|      inkscape:label="Layer 1" | ||||
|      inkscape:groupmode="layer" | ||||
|      id="layer1" | ||||
|      transform="translate(-444.64286,-781.36218)"> | ||||
|     <g | ||||
|        transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)" | ||||
|        id="g37994"> | ||||
|       <g | ||||
|          id="g37996" | ||||
|          transform="translate(-115,1277)"> | ||||
|         <rect | ||||
|            style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837" | ||||
|            id="rect13475" | ||||
|            width="98" | ||||
|            height="25" | ||||
|            x="644.5" | ||||
|            y="484.61118" | ||||
|            rx="4.7429576" | ||||
|            ry="3.8424656" /> | ||||
|         <rect | ||||
|            ry="3.8424656" | ||||
|            rx="4.7429576" | ||||
|            y="483.5" | ||||
|            x="644.5" | ||||
|            height="25" | ||||
|            width="98" | ||||
|            id="rect38000" | ||||
|            style="color:#000000;fill:url(#linearGradient12311-3-1-0-5-4);fill-opacity:1;fill-rule:nonzero;stroke:#16191a;stroke-width:1.37920942;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" /> | ||||
|       </g> | ||||
|       <g | ||||
|          transform="translate(-49.946213,-1.890275)" | ||||
|          id="g38002"> | ||||
|         <g | ||||
|            transform="translate(-115,1247)" | ||||
|            style="display:inline" | ||||
|            id="g38004"> | ||||
|           <rect | ||||
|              ry="3.7972314" | ||||
|              rx="4.6871223" | ||||
|              y="515.5" | ||||
|              x="694.53046" | ||||
|              height="25" | ||||
|              width="45.969578" | ||||
|              id="rect38006" | ||||
|              style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||||
|           <path | ||||
|              sodipodi:nodetypes="cc" | ||||
|              style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | ||||
|              d="m 699.09675,516.7365 36.86904,0" | ||||
|              id="path38016" | ||||
|              inkscape:path-effect="#path-effect77541-4" | ||||
|              inkscape:original-d="m 699.09675,516.7365 36.86904,0" | ||||
|              inkscape:connector-curvature="0" /> | ||||
|         </g> | ||||
|       </g> | ||||
|       <text | ||||
|          xml:space="preserve" | ||||
|          style="font-size:13.79166794px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold" | ||||
|          x="520.29974" | ||||
|          y="1997.0011" | ||||
|          id="text75614" | ||||
|          sodipodi:linespacing="125%" | ||||
|          transform="scale(1.1236771,0.88993537)"><tspan | ||||
|            sodipodi:role="line" | ||||
|            id="tspan75616" | ||||
|            x="520.29974" | ||||
|            y="1997.0011">OFF</tspan></text> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 8.8 KiB | 
| @@ -10,117 +10,69 @@ | ||||
|    xmlns:xlink="http://www.w3.org/1999/xlink" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    width="65" | ||||
|    width="46" | ||||
|    height="22" | ||||
|    id="svg2857" | ||||
|    viewBox="0 0 46 22" | ||||
|    version="1.1" | ||||
|    inkscape:version="0.91 r13725" | ||||
|    id="svg2751" | ||||
|    inkscape:version="0.92.4 5da689c313, 2019-01-14" | ||||
|    sodipodi:docname="toggle-on-intl.svg"> | ||||
|   <defs | ||||
|      id="defs2859"> | ||||
|     <inkscape:perspective | ||||
|        sodipodi:type="inkscape:persp3d" | ||||
|        inkscape:vp_x="0 : 526.18109 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_z="744.09448 : 526.18109 : 1" | ||||
|        inkscape:persp3d-origin="372.04724 : 350.78739 : 1" | ||||
|        id="perspective2865" /> | ||||
|     <inkscape:perspective | ||||
|        id="perspective2843" | ||||
|        inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | ||||
|        inkscape:vp_z="1 : 0.5 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_x="0 : 0.5 : 1" | ||||
|        sodipodi:type="inkscape:persp3d" /> | ||||
|      id="defs2745"> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient77461" | ||||
|        id="linearGradient77551" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)" | ||||
|        x1="1164.7644" | ||||
|        y1="962.93695" | ||||
|        x2="1164.7644" | ||||
|        y2="970.51404" /> | ||||
|     <linearGradient | ||||
|        id="linearGradient77461" | ||||
|        inkscape:collect="always"> | ||||
|        id="linearGradient3329"> | ||||
|       <stop | ||||
|          id="stop77463" | ||||
|          style="stop-color:#39393a;stop-opacity:1;" | ||||
|          offset="0" | ||||
|          style="stop-color:#182f4c;stop-opacity:1" /> | ||||
|          id="stop3325" /> | ||||
|       <stop | ||||
|          id="stop77465" | ||||
|          style="stop-color:#302f30;stop-opacity:1" | ||||
|          offset="1" | ||||
|          style="stop-color:#205b9a;stop-opacity:1" /> | ||||
|          id="stop3327" /> | ||||
|     </linearGradient> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient76469-7-7-4" | ||||
|        id="linearGradient38024" | ||||
|        xlink:href="#linearGradient3329" | ||||
|        id="linearGradient3331" | ||||
|        x1="53" | ||||
|        y1="294.42917" | ||||
|        x2="53" | ||||
|        y2="309.80417" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)" | ||||
|        x1="6" | ||||
|        y1="102.95528" | ||||
|        x2="6" | ||||
|        y2="84.505203" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        id="linearGradient76469-7-7-4"> | ||||
|       <stop | ||||
|          style="stop-color:#2e3232;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop76471-7-1-5" /> | ||||
|       <stop | ||||
|          style="stop-color:#3e4545;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop76473-9-0-0" /> | ||||
|     </linearGradient> | ||||
|     <inkscape:path-effect | ||||
|        effect="spiro" | ||||
|        id="path-effect77541-4" | ||||
|        is_visible="true" /> | ||||
|        gradientTransform="translate(-19)" /> | ||||
|   </defs> | ||||
|   <sodipodi:namedview | ||||
|      id="base" | ||||
|      pagecolor="#000000" | ||||
|      pagecolor="#535353" | ||||
|      bordercolor="#666666" | ||||
|      borderopacity="1.0" | ||||
|      inkscape:pageopacity="1" | ||||
|      inkscape:pageshadow="2" | ||||
|      inkscape:zoom="1" | ||||
|      inkscape:cx="37.410841" | ||||
|      inkscape:cy="16.009314" | ||||
|      inkscape:cx="13.588971" | ||||
|      inkscape:cy="14.124546" | ||||
|      inkscape:document-units="px" | ||||
|      inkscape:current-layer="g37994" | ||||
|      inkscape:current-layer="layer1" | ||||
|      showgrid="false" | ||||
|      inkscape:window-width="2560" | ||||
|      inkscape:window-height="1376" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="27" | ||||
|      inkscape:window-maximized="1" | ||||
|      units="px" | ||||
|      inkscape:pagecheckerboard="true" | ||||
|      borderlayer="true" | ||||
|      inkscape:showpageshadow="false" | ||||
|      inkscape:snap-nodes="false" | ||||
|      inkscape:snap-bbox="true" | ||||
|      showborder="false"> | ||||
|     <inkscape:grid | ||||
|        type="xygrid" | ||||
|        id="grid12954" | ||||
|        empspacing="5" | ||||
|        visible="true" | ||||
|        enabled="true" | ||||
|        snapvisiblegridlinesonly="true" /> | ||||
|        id="grid3298" /> | ||||
|   </sodipodi:namedview> | ||||
|   <metadata | ||||
|      id="metadata2862"> | ||||
|      id="metadata2748"> | ||||
|     <rdf:RDF> | ||||
|       <cc:Work | ||||
|          rdf:about=""> | ||||
|         <dc:format>image/svg+xml</dc:format> | ||||
|         <dc:type | ||||
|            rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
|         <dc:title /> | ||||
|         <dc:title></dc:title> | ||||
|       </cc:Work> | ||||
|     </rdf:RDF> | ||||
|   </metadata> | ||||
| @@ -128,65 +80,24 @@ | ||||
|      inkscape:label="Layer 1" | ||||
|      inkscape:groupmode="layer" | ||||
|      id="layer1" | ||||
|      transform="translate(-444.64286,-781.36218)"> | ||||
|     <g | ||||
|        transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)" | ||||
|        id="g37994"> | ||||
|       <g | ||||
|          id="g37996" | ||||
|          transform="translate(-115,1277)"> | ||||
|         <rect | ||||
|            style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837" | ||||
|            id="rect13475" | ||||
|            width="98" | ||||
|            height="25" | ||||
|            x="644.5" | ||||
|            y="484.61118" | ||||
|            rx="4.7429576" | ||||
|            ry="3.8424656" /> | ||||
|         <rect | ||||
|            ry="3.8424656" | ||||
|            rx="4.7429576" | ||||
|            y="483.5" | ||||
|            x="644.5" | ||||
|            height="25" | ||||
|            width="98" | ||||
|            id="rect38000" | ||||
|            style="color:#000000;fill:url(#linearGradient77551);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||||
|       </g> | ||||
|       <g | ||||
|          transform="translate(2.0625,-2)" | ||||
|          id="g38002"> | ||||
|         <g | ||||
|            transform="translate(-115,1247)" | ||||
|            style="display:inline" | ||||
|            id="g38004"> | ||||
|           <rect | ||||
|              ry="3.7972314" | ||||
|              rx="4.6871223" | ||||
|              y="515.5" | ||||
|              x="694.53046" | ||||
|              height="25" | ||||
|              width="45.969578" | ||||
|              id="rect38006" | ||||
|              style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||||
|           <path | ||||
|              sodipodi:nodetypes="cc" | ||||
|              style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | ||||
|              d="m 699.09675,516.7365 36.86904,0" | ||||
|              id="path38016" | ||||
|              inkscape:path-effect="#path-effect77541-4" | ||||
|              inkscape:original-d="m 699.09675,516.7365 36.86904,0" | ||||
|              inkscape:connector-curvature="0" /> | ||||
|         </g> | ||||
|       </g> | ||||
|       <rect | ||||
|          style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" | ||||
|          id="rect13678" | ||||
|          width="3.0646207" | ||||
|          height="12.414008" | ||||
|          x="554.77728" | ||||
|          y="1767.3566" /> | ||||
|     </g> | ||||
|      transform="translate(0,-291.17916)"> | ||||
|     <rect | ||||
|        style="opacity:1;vector-effect:none;fill:#15539e;fill-opacity:1;stroke:#030e1b;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" | ||||
|        id="rect3296" | ||||
|        width="44.446434" | ||||
|        height="20.910645" | ||||
|        x="0.625" | ||||
|        y="291.71494" | ||||
|        rx="10.455324" | ||||
|        ry="10.073335" /> | ||||
|     <rect | ||||
|        ry="10.455322" | ||||
|        rx="10.455322" | ||||
|        y="291.71494" | ||||
|        x="24.30357" | ||||
|        height="20.910645" | ||||
|        width="21.142862" | ||||
|        id="rect3300" | ||||
|        style="opacity:1;vector-effect:none;fill:url(#linearGradient3331);fill-opacity:1;stroke:#030e1b;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" /> | ||||
|   </g> | ||||
| </svg> | ||||
|   | ||||
| Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 3.3 KiB | 
| @@ -1,207 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||||
|  | ||||
| <svg | ||||
|    xmlns:dc="http://purl.org/dc/elements/1.1/" | ||||
|    xmlns:cc="http://creativecommons.org/ns#" | ||||
|    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:xlink="http://www.w3.org/1999/xlink" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    width="65" | ||||
|    height="22" | ||||
|    id="svg2857" | ||||
|    version="1.1" | ||||
|    inkscape:version="0.91 r13725" | ||||
|    sodipodi:docname="toggle-on-us.svg"> | ||||
|   <defs | ||||
|      id="defs2859"> | ||||
|     <inkscape:perspective | ||||
|        sodipodi:type="inkscape:persp3d" | ||||
|        inkscape:vp_x="0 : 526.18109 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_z="744.09448 : 526.18109 : 1" | ||||
|        inkscape:persp3d-origin="372.04724 : 350.78739 : 1" | ||||
|        id="perspective2865" /> | ||||
|     <inkscape:perspective | ||||
|        id="perspective2843" | ||||
|        inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | ||||
|        inkscape:vp_z="1 : 0.5 : 1" | ||||
|        inkscape:vp_y="0 : 1000 : 0" | ||||
|        inkscape:vp_x="0 : 0.5 : 1" | ||||
|        sodipodi:type="inkscape:persp3d" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient76469-7-7-4" | ||||
|        id="linearGradient38024" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)" | ||||
|        x1="6" | ||||
|        y1="102.95528" | ||||
|        x2="6" | ||||
|        y2="84.505203" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        id="linearGradient76469-7-7-4"> | ||||
|       <stop | ||||
|          style="stop-color:#2e3232;stop-opacity:1" | ||||
|          offset="0" | ||||
|          id="stop76471-7-1-5" /> | ||||
|       <stop | ||||
|          style="stop-color:#3e4545;stop-opacity:1" | ||||
|          offset="1" | ||||
|          id="stop76473-9-0-0" /> | ||||
|     </linearGradient> | ||||
|     <inkscape:path-effect | ||||
|        effect="spiro" | ||||
|        id="path-effect77541-4" | ||||
|        is_visible="true" /> | ||||
|     <linearGradient | ||||
|        id="linearGradient77461-1" | ||||
|        inkscape:collect="always"> | ||||
|       <stop | ||||
|          id="stop77463-1" | ||||
|          offset="0" | ||||
|          style="stop-color:#182f4c;stop-opacity:1" /> | ||||
|       <stop | ||||
|          id="stop77465-4" | ||||
|          offset="1" | ||||
|          style="stop-color:#205b9a;stop-opacity:1" /> | ||||
|     </linearGradient> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient77461-1" | ||||
|        id="linearGradient77551-6-5" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(0.8527367,0,0,0.80554422,-969.41608,-778.00299)" | ||||
|        x1="1164.7644" | ||||
|        y1="962.93695" | ||||
|        x2="1164.7644" | ||||
|        y2="970.51404" /> | ||||
|     <linearGradient | ||||
|        inkscape:collect="always" | ||||
|        xlink:href="#linearGradient77461-1" | ||||
|        id="linearGradient11198" | ||||
|        gradientUnits="userSpaceOnUse" | ||||
|        gradientTransform="matrix(1.3066667,0,0,1,-1066.3709,794.25325)" | ||||
|        x1="1322.5831" | ||||
|        y1="-312.51855" | ||||
|        x2="1322.5831" | ||||
|        y2="-306.53461" /> | ||||
|   </defs> | ||||
|   <sodipodi:namedview | ||||
|      id="base" | ||||
|      pagecolor="#000000" | ||||
|      bordercolor="#666666" | ||||
|      borderopacity="1.0" | ||||
|      inkscape:pageopacity="1" | ||||
|      inkscape:pageshadow="2" | ||||
|      inkscape:zoom="1" | ||||
|      inkscape:cx="-26.798898" | ||||
|      inkscape:cy="5.3753009" | ||||
|      inkscape:document-units="px" | ||||
|      inkscape:current-layer="g37994" | ||||
|      showgrid="false" | ||||
|      inkscape:window-width="2560" | ||||
|      inkscape:window-height="1376" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="27" | ||||
|      inkscape:window-maximized="1" | ||||
|      borderlayer="true" | ||||
|      inkscape:showpageshadow="false" | ||||
|      inkscape:snap-nodes="false" | ||||
|      inkscape:snap-bbox="true" | ||||
|      showborder="false"> | ||||
|     <inkscape:grid | ||||
|        type="xygrid" | ||||
|        id="grid12954" | ||||
|        empspacing="5" | ||||
|        visible="true" | ||||
|        enabled="true" | ||||
|        snapvisiblegridlinesonly="true" /> | ||||
|   </sodipodi:namedview> | ||||
|   <metadata | ||||
|      id="metadata2862"> | ||||
|     <rdf:RDF> | ||||
|       <cc:Work | ||||
|          rdf:about=""> | ||||
|         <dc:format>image/svg+xml</dc:format> | ||||
|         <dc:type | ||||
|            rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
|         <dc:title /> | ||||
|       </cc:Work> | ||||
|     </rdf:RDF> | ||||
|   </metadata> | ||||
|   <g | ||||
|      inkscape:label="Layer 1" | ||||
|      inkscape:groupmode="layer" | ||||
|      id="layer1" | ||||
|      transform="translate(-444.64286,-781.36218)"> | ||||
|     <g | ||||
|        transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)" | ||||
|        id="g37994"> | ||||
|       <g | ||||
|          id="g37996" | ||||
|          transform="translate(-115,1277)"> | ||||
|         <rect | ||||
|            style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837" | ||||
|            id="rect13475" | ||||
|            width="98" | ||||
|            height="25" | ||||
|            x="644.5" | ||||
|            y="484.61118" | ||||
|            rx="4.7429576" | ||||
|            ry="3.8424656" /> | ||||
|         <rect | ||||
|            ry="3.8424656" | ||||
|            rx="4.7429576" | ||||
|            y="483.5" | ||||
|            x="644.5" | ||||
|            height="25" | ||||
|            width="98" | ||||
|            id="rect38000" | ||||
|            style="color:#000000;fill:url(#linearGradient11198);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" /> | ||||
|       </g> | ||||
|       <g | ||||
|          transform="translate(2.0625,-2)" | ||||
|          id="g38002"> | ||||
|         <g | ||||
|            transform="translate(-115,1247)" | ||||
|            style="display:inline" | ||||
|            id="g38004"> | ||||
|           <rect | ||||
|              ry="3.7972314" | ||||
|              rx="4.6871223" | ||||
|              y="515.5" | ||||
|              x="694.53046" | ||||
|              height="25" | ||||
|              width="45.969578" | ||||
|              id="rect38006" | ||||
|              style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||||
|           <path | ||||
|              sodipodi:nodetypes="cc" | ||||
|              style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | ||||
|              d="m 699.09675,516.7365 36.86904,0" | ||||
|              id="path38016" | ||||
|              inkscape:path-effect="#path-effect77541-4" | ||||
|              inkscape:original-d="m 699.09675,516.7365 36.86904,0" | ||||
|              inkscape:connector-curvature="0" /> | ||||
|         </g> | ||||
|       </g> | ||||
|       <text | ||||
|          transform="scale(1.1000946,0.90901274)" | ||||
|          sodipodi:linespacing="125%" | ||||
|          id="text38018" | ||||
|          y="1955.5205" | ||||
|          x="495.94223" | ||||
|          style="font-size:13.29953671px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold" | ||||
|          xml:space="preserve"><tspan | ||||
|            y="1955.5205" | ||||
|            x="495.94223" | ||||
|            id="tspan38020" | ||||
|            sodipodi:role="line">ON</tspan></text> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 7.7 KiB | 
| @@ -325,7 +325,7 @@ var SessionMenuButton = class { | ||||
|                  this._button.remove_style_pseudo_class('active'); | ||||
|         }); | ||||
|  | ||||
|         this._manager = new PopupMenu.PopupMenuManager({ actor: this._button }, | ||||
|         this._manager = new PopupMenu.PopupMenuManager(this._button, | ||||
|                                                        { actionMode: Shell.ActionMode.NONE }); | ||||
|         this._manager.addMenu(this._menu); | ||||
|  | ||||
| @@ -652,7 +652,7 @@ var LoginDialog = GObject.registerClass({ | ||||
|                      bannerAllocation.x2 = Math.floor(centerX - centerGap / 2); | ||||
|                      bannerAllocation.x1 = Math.floor(bannerAllocation.x2 - wideBannerWidth); | ||||
|  | ||||
|                      // figure out how tall it would like to be and try to accomodate | ||||
|                      // figure out how tall it would like to be and try to accommodate | ||||
|                      // but don't let it get too close to the logo | ||||
|                      let [wideMinHeight, wideBannerHeight] = this._bannerView.get_preferred_height(wideBannerWidth); | ||||
|  | ||||
|   | ||||
| @@ -42,8 +42,6 @@ var IntrospectService = class { | ||||
|     } | ||||
|  | ||||
|     _isStandaloneApp(app) { | ||||
|         let windows = app.get_windows(); | ||||
|  | ||||
|         return app.get_windows().some(w => w.transient_for == null); | ||||
|     } | ||||
|  | ||||
| @@ -55,6 +53,11 @@ var IntrospectService = class { | ||||
|        return APP_WHITELIST.includes(sender); | ||||
|     } | ||||
|  | ||||
|     _getSandboxedAppId(app) { | ||||
|         let ids = app.get_windows().map(w => w.get_sandboxed_app_id()); | ||||
|         return ids.find(id => id != null); | ||||
|     } | ||||
|  | ||||
|     _syncRunningApplications() { | ||||
|         let tracker = Shell.WindowTracker.get_default(); | ||||
|         let apps = this._appSystem.get_running(); | ||||
| @@ -76,6 +79,10 @@ var IntrospectService = class { | ||||
|                 newActiveApplication = app.get_id(); | ||||
|             } | ||||
|  | ||||
|             let sandboxedAppId = this._getSandboxedAppId(app); | ||||
|             if (sandboxedAppId) | ||||
|                 appInfo['sandboxed-app-id'] = new GLib.Variant('s', sandboxedAppId); | ||||
|  | ||||
|             newRunningApplications[app.get_id()] = appInfo; | ||||
|         } | ||||
|  | ||||
| @@ -137,6 +144,7 @@ var IntrospectService = class { | ||||
|                 let frameRect = window.get_frame_rect(); | ||||
|                 let title = window.get_title(); | ||||
|                 let wmClass = window.get_wm_class(); | ||||
|                 let sandboxedAppId = window.get_sandboxed_app_id(); | ||||
|  | ||||
|                 windowsList[windowId] = { | ||||
|                     'app-id': GLib.Variant.new('s', app.get_id()), | ||||
| @@ -153,6 +161,10 @@ var IntrospectService = class { | ||||
|  | ||||
|                 if (wmClass != null) | ||||
|                     windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass); | ||||
|  | ||||
|                 if (sandboxedAppId != null) | ||||
|                     windowsList[windowId]['sandboxed-app-id'] = | ||||
|                         GLib.Variant.new('s', sandboxedAppId); | ||||
|             } | ||||
|         } | ||||
|         invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList])); | ||||
|   | ||||
| @@ -88,42 +88,42 @@ const SystemActions = GObject.registerClass({ | ||||
|                             name: C_("search-result", "Power Off"), | ||||
|                             iconName: 'system-shutdown-symbolic', | ||||
|                             // Translators: A list of keywords that match the power-off action, separated by semicolons | ||||
|                             keywords: _("power off;shutdown;reboot;restart").split(';'), | ||||
|                             keywords: _("power off;shutdown;reboot;restart").split(/[; ]/), | ||||
|                             available: false }); | ||||
|         this._actions.set(LOCK_SCREEN_ACTION_ID, | ||||
|                           { // Translators: The name of the lock screen action in search | ||||
|                             name: C_("search-result", "Lock Screen"), | ||||
|                             iconName: 'system-lock-screen-symbolic', | ||||
|                             // Translators: A list of keywords that match the lock screen action, separated by semicolons | ||||
|                             keywords: _("lock screen").split(';'), | ||||
|                             keywords: _("lock screen").split(/[; ]/), | ||||
|                             available: false }); | ||||
|         this._actions.set(LOGOUT_ACTION_ID, | ||||
|                           { // Translators: The name of the logout action in search | ||||
|                             name: C_("search-result", "Log Out"), | ||||
|                             iconName: 'application-exit-symbolic', | ||||
|                             // Translators: A list of keywords that match the logout action, separated by semicolons | ||||
|                             keywords: _("logout;sign off").split(';'), | ||||
|                             keywords: _("logout;log out;sign off").split(/[; ]/), | ||||
|                             available: false }); | ||||
|         this._actions.set(SUSPEND_ACTION_ID, | ||||
|                           { // Translators: The name of the suspend action in search | ||||
|                             name: C_("search-result", "Suspend"), | ||||
|                             iconName: 'media-playback-pause-symbolic', | ||||
|                             // Translators: A list of keywords that match the suspend action, separated by semicolons | ||||
|                             keywords: _("suspend;sleep").split(';'), | ||||
|                             keywords: _("suspend;sleep").split(/[; ]/), | ||||
|                             available: false }); | ||||
|         this._actions.set(SWITCH_USER_ACTION_ID, | ||||
|                           { // Translators: The name of the switch user action in search | ||||
|                             name: C_("search-result", "Switch User"), | ||||
|                             iconName: 'system-switch-user-symbolic', | ||||
|                             // Translators: A list of keywords that match the switch user action, separated by semicolons | ||||
|                             keywords: _("switch user").split(';'), | ||||
|                             keywords: _("switch user").split(/[; ]/), | ||||
|                             available: false }); | ||||
|         this._actions.set(LOCK_ORIENTATION_ACTION_ID, | ||||
|                           { // Translators: The name of the lock orientation action in search | ||||
|                             name: C_("search-result", "Lock Orientation"), | ||||
|                             iconName: '', | ||||
|                             // Translators: A list of keywords that match the lock orientation action, separated by semicolons | ||||
|                             keywords: _("lock orientation;screen;rotation").split(';'), | ||||
|                             keywords: _("lock orientation;screen;rotation").split(/[; ]/), | ||||
|                             available: false }); | ||||
|  | ||||
|         this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); | ||||
| @@ -262,7 +262,7 @@ const SystemActions = GObject.registerClass({ | ||||
|         let results = []; | ||||
|  | ||||
|         for (let [key, {available, keywords}] of this._actions) | ||||
|             if (available && terms.every(t => keywords.some(k => (k.indexOf(t) >= 0)))) | ||||
|             if (available && terms.every(t => keywords.some(k => k.startsWith(t)))) | ||||
|                 results.push(key); | ||||
|  | ||||
|         return results; | ||||
|   | ||||
| @@ -366,7 +366,7 @@ class CloseButton extends St.Button { | ||||
|     } | ||||
|  | ||||
|     _computeBoxPointerOffset() { | ||||
|         if (!this._boxPointer || !this._boxPointer.actor.get_stage()) | ||||
|         if (!this._boxPointer || !this._boxPointer.get_stage()) | ||||
|             return 0; | ||||
|  | ||||
|         let side = this._boxPointer.arrowSide; | ||||
|   | ||||
| @@ -474,12 +474,10 @@ var CyclerList = GObject.registerClass({ | ||||
|     } | ||||
| }); | ||||
|  | ||||
| var CyclerPopup = GObject.registerClass( | ||||
| class CyclerPopup extends SwitcherPopup.SwitcherPopup { | ||||
| var CyclerPopup = GObject.registerClass({ | ||||
|     GTypeFlags: GObject.TypeFlags.ABSTRACT | ||||
| }, class CyclerPopup extends SwitcherPopup.SwitcherPopup { | ||||
|     _init() { | ||||
|         if (new.target === CyclerPopup) | ||||
|             throw new TypeError('Cannot instantiate abstract class ' + new.target.name); | ||||
|  | ||||
|         super._init(); | ||||
|  | ||||
|         this._items = this._getWindows(); | ||||
|   | ||||
| @@ -98,8 +98,8 @@ function clamp(value, min, max) { | ||||
|  | ||||
| class BaseAppView { | ||||
|     constructor(params, gridParams) { | ||||
|         if (new.target === BaseAppView) | ||||
|             throw new TypeError('Cannot instantiate abstract class ' + new.target.name); | ||||
|         if (this.constructor === BaseAppView) | ||||
|             throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`); | ||||
|  | ||||
|         gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE, | ||||
|                                                 columnLimit: MAX_COLUMNS, | ||||
| @@ -414,7 +414,7 @@ var AllView = class AllView extends BaseAppView { | ||||
|         this._refilterApps(); | ||||
|     } | ||||
|  | ||||
|     // Overriden from BaseAppView | ||||
|     // Overridden from BaseAppView | ||||
|     animate(animationDirection, onComplete) { | ||||
|         this._scrollView.reactive = false; | ||||
|         let completionFunc = () => { | ||||
| @@ -1017,7 +1017,7 @@ var FolderView = class FolderView extends BaseAppView { | ||||
|         Util.ensureActorVisibleInScrollView(this.actor, actor); | ||||
|     } | ||||
|  | ||||
|     // Overriden from BaseAppView | ||||
|     // Overridden from BaseAppView | ||||
|     animate(animationDirection) { | ||||
|         this._grid.animatePulse(animationDirection); | ||||
|     } | ||||
| @@ -1081,7 +1081,7 @@ var FolderView = class FolderView extends BaseAppView { | ||||
|  | ||||
|         let contentBox = this.actor.get_theme_node().get_content_box(pageBox); | ||||
|         // We only can show icons inside the collection view boxPointer | ||||
|         // so we have to substract the required padding etc of the boxpointer | ||||
|         // so we have to subtract the required padding etc of the boxpointer | ||||
|         return [(contentBox.x2 - contentBox.x1) - 2 * this._offsetForEachSide, (contentBox.y2 - contentBox.y1) - 2 * this._offsetForEachSide]; | ||||
|     } | ||||
|  | ||||
| @@ -1301,16 +1301,16 @@ var AppFolderPopup = class AppFolderPopup { | ||||
|                                                        x_expand: true, | ||||
|                                                        x_align: St.Align.START }); | ||||
|  | ||||
|         this._boxPointer.actor.style_class = 'app-folder-popup'; | ||||
|         this.actor.add_actor(this._boxPointer.actor); | ||||
|         this._boxPointer.style_class = 'app-folder-popup'; | ||||
|         this.actor.add_actor(this._boxPointer); | ||||
|         this._boxPointer.bin.set_child(this._view.actor); | ||||
|  | ||||
|         this.closeButton = Util.makeCloseButton(this._boxPointer); | ||||
|         this.closeButton.connect('clicked', this.popdown.bind(this)); | ||||
|         this.actor.add_actor(this.closeButton); | ||||
|  | ||||
|         this._boxPointer.actor.bind_property('opacity', this.closeButton, 'opacity', | ||||
|                                              GObject.BindingFlags.SYNC_CREATE); | ||||
|         this._boxPointer.bind_property('opacity', this.closeButton, 'opacity', | ||||
|                                        GObject.BindingFlags.SYNC_CREATE); | ||||
|  | ||||
|         global.focus_manager.add_group(this.actor); | ||||
|  | ||||
| @@ -1479,7 +1479,7 @@ var AppIcon = class AppIcon { | ||||
|         this.actor.connect('popup-menu', this._onKeyboardPopupMenu.bind(this)); | ||||
|  | ||||
|         this._menu = null; | ||||
|         this._menuManager = new PopupMenu.PopupMenuManager(this); | ||||
|         this._menuManager = new PopupMenu.PopupMenuManager(this.actor); | ||||
|  | ||||
|         if (isDraggable) { | ||||
|             this._draggable = DND.makeDraggable(this.actor); | ||||
| @@ -1707,25 +1707,20 @@ var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu { | ||||
|             w => !w.skip_taskbar | ||||
|         ); | ||||
|  | ||||
|         // 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 separatorShown = windows.length > 0 && windows[0].get_workspace() != activeWorkspace; | ||||
|         if (windows.length > 0) | ||||
|             this.addMenuItem( | ||||
|                 /* Translators: This is the heading of a list of open windows */ | ||||
|                 new PopupMenu.PopupSeparatorMenuItem(_("Open Windows")) | ||||
|             ); | ||||
|  | ||||
|         for (let i = 0; i < windows.length; i++) { | ||||
|             let window = windows[i]; | ||||
|             if (!separatorShown && window.get_workspace() != activeWorkspace) { | ||||
|                 this._appendSeparator(); | ||||
|                 separatorShown = true; | ||||
|             } | ||||
|         windows.forEach(window => { | ||||
|             let title = window.title ? window.title | ||||
|                                      : this._source.app.get_name(); | ||||
|             let item = this._appendMenuItem(title); | ||||
|             item.connect('activate', () => { | ||||
|                 this.emit('activate-window', window); | ||||
|             }); | ||||
|         } | ||||
|         }); | ||||
|  | ||||
|         if (!this._source.app.is_window_backed()) { | ||||
|             this._appendSeparator(); | ||||
|   | ||||
| @@ -25,7 +25,7 @@ var BackgroundMenu = class BackgroundMenu extends PopupMenu.PopupMenu { | ||||
| function addBackgroundMenu(actor, layoutManager) { | ||||
|     actor.reactive = true; | ||||
|     actor._backgroundMenu = new BackgroundMenu(layoutManager); | ||||
|     actor._backgroundManager = new PopupMenu.PopupMenuManager({ actor: actor }); | ||||
|     actor._backgroundManager = new PopupMenu.PopupMenuManager(actor); | ||||
|     actor._backgroundManager.addMenu(actor._backgroundMenu); | ||||
|  | ||||
|     function openMenu(x, y) { | ||||
|   | ||||
| @@ -121,7 +121,8 @@ var BarLevel = class { | ||||
|         cr.lineTo(x, (height - barLevelHeight) / 2); | ||||
|         cr.lineTo(x, (height + barLevelHeight) / 2); | ||||
|         cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2); | ||||
|         Clutter.cairo_set_source_color(cr, barLevelActiveColor); | ||||
|         if (this._value > 0) | ||||
|           Clutter.cairo_set_source_color(cr, barLevelActiveColor); | ||||
|         cr.fillPreserve(); | ||||
|         Clutter.cairo_set_source_color(cr, barLevelActiveBorderColor); | ||||
|         cr.setLineWidth(barLevelBorderWidth); | ||||
| @@ -143,17 +144,19 @@ var BarLevel = class { | ||||
|         } | ||||
|  | ||||
|         /* end progress bar arc */ | ||||
|         if (this._value <= this._overdriveStart) | ||||
|             Clutter.cairo_set_source_color(cr, barLevelActiveColor); | ||||
|         else | ||||
|             Clutter.cairo_set_source_color(cr, barLevelOverdriveColor); | ||||
|         cr.arc(endX, height / 2, barLevelBorderRadius, TAU * 3 / 4, TAU * 1 / 4); | ||||
|         cr.lineTo(Math.floor(endX), (height + barLevelHeight) / 2); | ||||
|         cr.lineTo(Math.floor(endX), (height - barLevelHeight) / 2); | ||||
|         cr.lineTo(endX, (height - barLevelHeight) / 2); | ||||
|         cr.fillPreserve(); | ||||
|         cr.setLineWidth(barLevelBorderWidth); | ||||
|         cr.stroke(); | ||||
|         if (this._value > 0) { | ||||
|           if (this._value <= this._overdriveStart) | ||||
|               Clutter.cairo_set_source_color(cr, barLevelActiveColor); | ||||
|           else | ||||
|               Clutter.cairo_set_source_color(cr, barLevelOverdriveColor); | ||||
|           cr.arc(endX, height / 2, barLevelBorderRadius, TAU * 3 / 4, TAU * 1 / 4); | ||||
|           cr.lineTo(Math.floor(endX), (height + barLevelHeight) / 2); | ||||
|           cr.lineTo(Math.floor(endX), (height - barLevelHeight) / 2); | ||||
|           cr.lineTo(endX, (height - barLevelHeight) / 2); | ||||
|           cr.fillPreserve(); | ||||
|           cr.setLineWidth(barLevelBorderWidth); | ||||
|           cr.stroke(); | ||||
|         } | ||||
|  | ||||
|         /* draw overdrive separator */ | ||||
|         if (overdriveActive) { | ||||
|   | ||||
| @@ -33,8 +33,6 @@ var BoxPointer = GObject.registerClass({ | ||||
|     _init(arrowSide, binProperties) { | ||||
|         super._init(); | ||||
|  | ||||
|         this.actor = this; | ||||
|  | ||||
|         this.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); | ||||
|  | ||||
|         this._arrowSide = arrowSide; | ||||
|   | ||||
| @@ -23,20 +23,8 @@ var KeyringDialog = class extends ModalDialog.ModalDialog { | ||||
|         this._content = new Dialog.MessageDialogContent({ icon }); | ||||
|         this.contentLayout.add(this._content); | ||||
|  | ||||
|         // FIXME: Why does this break now? | ||||
|         /* | ||||
|         this.prompt.bind_property('message', this._content, 'title', GObject.BindingFlags.SYNC_CREATE); | ||||
|         this.prompt.bind_property('description', this._content, 'body', GObject.BindingFlags.SYNC_CREATE); | ||||
|         */ | ||||
|         this.prompt.connect('notify::message', () => { | ||||
|             this._content.title = this.prompt.message; | ||||
|         }); | ||||
|         this._content.title = this.prompt.message; | ||||
|  | ||||
|         this.prompt.connect('notify::description', () => { | ||||
|             this._content.body = this.prompt.description; | ||||
|         }); | ||||
|         this._content.body = this.prompt.description; | ||||
|  | ||||
|         this._workSpinner = null; | ||||
|         this._controlTable = null; | ||||
|   | ||||
| @@ -401,7 +401,7 @@ var ChatSource = class extends MessageTray.Source { | ||||
|         if (this._client.is_handling_channel(this._channel)) { | ||||
|             // We are handling the channel, try to pass it to Empathy or Polari | ||||
|             // (depending on the channel type) | ||||
|             // We don't check if either app is availble - mission control will | ||||
|             // We don't check if either app is available - mission control will | ||||
|             // fallback to something else if activation fails | ||||
|  | ||||
|             let target; | ||||
|   | ||||
| @@ -899,7 +899,7 @@ var Dash = class Dash { | ||||
|                 favPos++; | ||||
|         } | ||||
|  | ||||
|         // No drag placeholder means we don't wan't to favorite the app | ||||
|         // No drag placeholder means we don't want to favorite the app | ||||
|         // and we are dragging it to its original position | ||||
|         if (!this._dragPlaceholder) | ||||
|             return true; | ||||
|   | ||||
| @@ -118,7 +118,7 @@ var WorldClocksSection = class WorldClocksSection { | ||||
|             if (!clocks[i].location) | ||||
|                 continue; | ||||
|             let l = world.deserialize(clocks[i].location); | ||||
|             if (l) | ||||
|             if (l && l.get_timezone() != null) | ||||
|                 this._locations.push({ location: l }); | ||||
|         } | ||||
|  | ||||
| @@ -476,10 +476,9 @@ class DateMenuButton extends PanelMenu.Button { | ||||
|         box.add_actor(this._clockDisplay); | ||||
|         box.add_actor(this._indicator.actor); | ||||
|  | ||||
|         this.actor.label_actor = this._clockDisplay; | ||||
|         this.actor.add_actor(box); | ||||
|         this.actor.add_style_class_name ('clock-display'); | ||||
|  | ||||
|         this.label_actor = this._clockDisplay; | ||||
|         this.add_actor(box); | ||||
|         this.add_style_class_name ('clock-display'); | ||||
|  | ||||
|         let layout = new FreezableBinLayout(); | ||||
|         let bin = new St.Widget({ layout_manager: layout }); | ||||
|   | ||||
| @@ -175,10 +175,10 @@ var MessageDialogContent = GObject.registerClass({ | ||||
|             this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`); | ||||
|         }); | ||||
|  | ||||
|         let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE, | ||||
|         let textProps = { ellipsize: Pango.EllipsizeMode.NONE, | ||||
|                           line_wrap: true }; | ||||
|         Object.assign(this._subtitle.clutter_text, textProps); | ||||
|         Object.assign(this._body.clutter_text, textProps); | ||||
|         this._subtitle.clutter_text.set(textProps); | ||||
|         this._body.clutter_text.set(textProps); | ||||
|  | ||||
|         if (!params.hasOwnProperty('style_class')) | ||||
|             params.style_class = 'message-dialog-main-layout'; | ||||
|   | ||||
| @@ -96,6 +96,15 @@ function init() { | ||||
|     Clutter.Actor.prototype.toString = function() { | ||||
|         return St.describe_actor(this); | ||||
|     }; | ||||
|     // Deprecation warning for former JS classes turned into an actor subclass | ||||
|     Object.defineProperty(Clutter.Actor.prototype, 'actor', { | ||||
|         get() { | ||||
|             let klass = this.constructor.name; | ||||
|             let { stack } = new Error(); | ||||
|             log(`Usage of object.actor is deprecated for ${klass}\n${stack}`); | ||||
|             return this; | ||||
|         } | ||||
|     }); | ||||
|  | ||||
|     let origToString = Object.prototype.toString; | ||||
|     Object.prototype.toString = function() { | ||||
|   | ||||
| @@ -272,7 +272,7 @@ var CandidatePopup = class CandidatePopup { | ||||
|  | ||||
|     _setDummyCursorGeometry(x, y, w, h) { | ||||
|         Main.layoutManager.setDummyCursorGeometry(x, y, w, h); | ||||
|         if (this._boxPointer.actor.visible) | ||||
|         if (this._boxPointer.visible) | ||||
|             this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); | ||||
|     } | ||||
|  | ||||
| @@ -285,7 +285,7 @@ var CandidatePopup = class CandidatePopup { | ||||
|         if (isVisible) { | ||||
|             this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); | ||||
|             this._boxPointer.open(BoxPointer.PopupAnimation.NONE); | ||||
|             this._boxPointer.actor.raise_top(); | ||||
|             this._boxPointer.raise_top(); | ||||
|         } else { | ||||
|             this._boxPointer.close(BoxPointer.PopupAnimation.NONE); | ||||
|         } | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class BaseIcon extends St.Bin { | ||||
|                       x_fill: true, | ||||
|                       y_fill: true }); | ||||
|  | ||||
|         this.actor = this; | ||||
|  | ||||
|         this.connect('destroy', this._onDestroy.bind(this)); | ||||
|  | ||||
|         this._box = new St.BoxLayout({ vertical: true }); | ||||
| @@ -188,8 +186,6 @@ var IconGrid = GObject.registerClass({ | ||||
|         super._init({ style_class: 'icon-grid', | ||||
|                       y_align: Clutter.ActorAlign.START }); | ||||
|  | ||||
|         this.actor = this; | ||||
|  | ||||
|         params = Params.parse(params, { rowLimit: null, | ||||
|                                         columnLimit: null, | ||||
|                                         minRows: 1, | ||||
| @@ -844,7 +840,7 @@ var PaginatedIconGrid = GObject.registerClass({ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // Overriden from IconGrid | ||||
|     // Overridden from IconGrid | ||||
|     _getChildrenToAnimate() { | ||||
|         let children = this._getVisibleChildren(); | ||||
|         let firstIndex = this._childrenPerPage * this.currentPage; | ||||
|   | ||||
| @@ -282,11 +282,11 @@ var Key = class Key { | ||||
|                                                        y_fill: true, | ||||
|                                                        x_align: St.Align.START }); | ||||
|         this._boxPointer.hide(); | ||||
|         Main.layoutManager.addChrome(this._boxPointer.actor); | ||||
|         Main.layoutManager.addChrome(this._boxPointer); | ||||
|         this._boxPointer.setPosition(this.keyButton, 0.5); | ||||
|  | ||||
|         // Adds style to existing keyboard style to avoid repetition | ||||
|         this._boxPointer.actor.add_style_class_name('keyboard-subkeys'); | ||||
|         this._boxPointer.add_style_class_name('keyboard-subkeys'); | ||||
|         this._getExtendedKeys(); | ||||
|         this.keyButton._extended_keys = this._extended_keyboard; | ||||
|     } | ||||
| @@ -1049,7 +1049,7 @@ var Keyboard = class Keyboard { | ||||
|         this._a11yApplicationsSettings.connect('changed', this._syncEnabled.bind(this)); | ||||
|         this._lastDeviceId = null; | ||||
|         this._suggestions = null; | ||||
|         this._emojiKeyVisible = true; | ||||
|         this._emojiKeyVisible = Meta.is_wayland_compositor(); | ||||
|  | ||||
|         this._focusTracker = new FocusTracker(); | ||||
|         this._focusTracker.connect('position-changed', this._onFocusPositionChanged.bind(this)); | ||||
| @@ -1144,6 +1144,7 @@ var Keyboard = class Keyboard { | ||||
|             this._keyboardController.disconnect(this._keypadVisibleId); | ||||
|         if (this._focusNotifyId) | ||||
|             global.stage.disconnect(this._focusNotifyId); | ||||
|         this._clearShowIdle(); | ||||
|         this._keyboard = null; | ||||
|         this.actor.destroy(); | ||||
|         this.actor = null; | ||||
| @@ -1162,7 +1163,7 @@ var Keyboard = class Keyboard { | ||||
|         this._keyboardController = new KeyboardController(); | ||||
|  | ||||
|         this._groups = {}; | ||||
|         this._current_page = null; | ||||
|         this._currentPage = null; | ||||
|  | ||||
|         this._suggestions = new Suggestions(); | ||||
|         this.actor.add(this._suggestions.actor, | ||||
| @@ -1202,10 +1203,12 @@ var Keyboard = class Keyboard { | ||||
|         this._keyboardNotifyId = this._keyboardController.connect('active-group', this._onGroupChanged.bind(this)); | ||||
|         this._keyboardGroupsChangedId = this._keyboardController.connect('groups-changed', this._onKeyboardGroupsChanged.bind(this)); | ||||
|         this._keyboardStateId = this._keyboardController.connect('panel-state', this._onKeyboardStateChanged.bind(this)); | ||||
|         this._emojiKeyVisibleId = this._keyboardController.connect('emoji-visible', this._onEmojiKeyVisible.bind(this)); | ||||
|         this._keypadVisibleId = this._keyboardController.connect('keypad-visible', this._onKeypadVisible.bind(this)); | ||||
|         this._focusNotifyId = global.stage.connect('notify::key-focus', this._onKeyFocusChanged.bind(this)); | ||||
|  | ||||
|         if (Meta.is_wayland_compositor()) | ||||
|             this._emojiKeyVisibleId = this._keyboardController.connect('emoji-visible', this._onEmojiKeyVisible.bind(this)); | ||||
|  | ||||
|         this._relayout(); | ||||
|     } | ||||
|  | ||||
| @@ -1227,6 +1230,7 @@ var Keyboard = class Keyboard { | ||||
|         if (!this._showIdleId) { | ||||
|           this._showIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => { | ||||
|               this.show(Main.layoutManager.focusIndex); | ||||
|               this._showIdleId = 0; | ||||
|               return GLib.SOURCE_REMOVE; | ||||
|           }); | ||||
|           GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show'); | ||||
| @@ -1353,7 +1357,7 @@ var Keyboard = class Keyboard { | ||||
|             } else if (switchToLevel == 1) { | ||||
|                 extraButton.connect('long-press', () => { | ||||
|                     this._latched = true; | ||||
|                     this._setCurrentLevelLatched(this._current_page, this._latched); | ||||
|                     this._setCurrentLevelLatched(this._currentPage, this._latched); | ||||
|                 }); | ||||
|             } | ||||
|  | ||||
| @@ -1380,8 +1384,8 @@ var Keyboard = class Keyboard { | ||||
|     } | ||||
|  | ||||
|     _updateCurrentPageVisible() { | ||||
|         if (this._current_page) | ||||
|             this._current_page.visible = !this._emojiActive && !this._keypadVisible; | ||||
|         if (this._currentPage) | ||||
|             this._currentPage.visible = !this._emojiActive && !this._keypadVisible; | ||||
|     } | ||||
|  | ||||
|     _setEmojiActive(active) { | ||||
| @@ -1440,7 +1444,7 @@ var Keyboard = class Keyboard { | ||||
|  | ||||
|     _getGridSlots() { | ||||
|         let numOfHorizSlots = 0, numOfVertSlots; | ||||
|         let rows = this._current_page.get_children(); | ||||
|         let rows = this._currentPage.get_children(); | ||||
|         numOfVertSlots = rows.length; | ||||
|  | ||||
|         for (let i = 0; i < rows.length; ++i) { | ||||
| @@ -1470,7 +1474,12 @@ var Keyboard = class Keyboard { | ||||
|     } | ||||
|  | ||||
|     _onKeyboardGroupsChanged(keyboard) { | ||||
|         this._groups = []; | ||||
|         let nonGroupActors = [this._emojiSelection.actor, this._keypad.actor]; | ||||
|         this._aspectContainer.get_children().filter(c => !nonGroupActors.includes(c)).forEach(c => { | ||||
|             c.destroy(); | ||||
|         }); | ||||
|  | ||||
|         this._groups = {}; | ||||
|         this._onGroupChanged(); | ||||
|     } | ||||
|  | ||||
| @@ -1512,13 +1521,24 @@ var Keyboard = class Keyboard { | ||||
|     _setActiveLayer(activeLevel) { | ||||
|         let activeGroupName = this._keyboardController.getCurrentGroup(); | ||||
|         let layers = this._groups[activeGroupName]; | ||||
|         let currentPage = layers[activeLevel]; | ||||
|  | ||||
|         if (this._current_page != null) { | ||||
|             this._setCurrentLevelLatched(this._current_page, false); | ||||
|             this._current_page.hide(); | ||||
|         if (this._currentPage == currentPage) { | ||||
|             this._updateCurrentPageVisible(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         this._current_page = layers[activeLevel]; | ||||
|         if (this._currentPage != null) { | ||||
|             this._setCurrentLevelLatched(this._currentPage, false); | ||||
|             this._currentPage.disconnect(this._currentPage._destroyID); | ||||
|             this._currentPage.hide(); | ||||
|             delete this._currentPage._destroyID; | ||||
|         } | ||||
|  | ||||
|         this._currentPage = currentPage; | ||||
|         this._currentPage._destroyID = this._currentPage.connect('destroy', () => { | ||||
|             this._currentPage = null; | ||||
|         }); | ||||
|         this._updateCurrentPageVisible(); | ||||
|     } | ||||
|  | ||||
| @@ -1606,18 +1626,6 @@ var Keyboard = class Keyboard { | ||||
|         this.setCursorLocation(null); | ||||
|     } | ||||
|  | ||||
|     _hideSubkeys() { | ||||
|         if (this._subkeysBoxPointer) { | ||||
|             this._subkeysBoxPointer.hide(BoxPointer.PopupAnimation.FULL); | ||||
|             this._subkeysBoxPointer = null; | ||||
|         } | ||||
|         if (this._capturedEventId) { | ||||
|             this.actor.disconnect(this._capturedEventId); | ||||
|             this._capturedEventId = 0; | ||||
|         } | ||||
|         this._capturedPress = false; | ||||
|     } | ||||
|  | ||||
|     resetSuggestions() { | ||||
|         if (this._suggestions) | ||||
|             this._suggestions.clear(); | ||||
|   | ||||
| @@ -216,10 +216,17 @@ var LayoutManager = GObject.registerClass({ | ||||
|         this.uiGroup = new UiActor({ name: 'uiGroup' }); | ||||
|         this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT); | ||||
|  | ||||
|         global.stage.add_child(this.uiGroup); | ||||
|  | ||||
|         global.stage.remove_actor(global.window_group); | ||||
|         this.uiGroup.add_actor(global.window_group); | ||||
|  | ||||
|         global.stage.add_child(this.uiGroup); | ||||
|         // Using addChrome() to add actors to uiGroup will position actors | ||||
|         // underneath the top_window_group. | ||||
|         // To insert actors at the top of uiGroup, we use addTopChrome() or | ||||
|         // add the actor directly using uiGroup.add_actor(). | ||||
|         global.stage.remove_actor(global.top_window_group); | ||||
|         this.uiGroup.add_actor(global.top_window_group); | ||||
|  | ||||
|         this.overviewGroup = new St.Widget({ name: 'overviewGroup', | ||||
|                                              visible: false, | ||||
| @@ -231,7 +238,7 @@ var LayoutManager = GObject.registerClass({ | ||||
|                                                  clip_to_allocation: true, | ||||
|                                                  layout_manager: new Clutter.BinLayout(), | ||||
|                                                }); | ||||
|         this.addChrome(this.screenShieldGroup); | ||||
|         this.addTopChrome(this.screenShieldGroup); | ||||
|  | ||||
|         this.panelBox = new St.BoxLayout({ name: 'panelBox', | ||||
|                                            vertical: true }); | ||||
| @@ -247,7 +254,7 @@ var LayoutManager = GObject.registerClass({ | ||||
|         this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox', | ||||
|                                               reactive: true, | ||||
|                                               track_hover: true }); | ||||
|         this.addChrome(this.keyboardBox); | ||||
|         this.addTopChrome(this.keyboardBox); | ||||
|         this._keyboardHeightNotifyId = 0; | ||||
|  | ||||
|         // A dummy actor that tracks the mouse or text cursor, based on the | ||||
| @@ -255,9 +262,6 @@ var LayoutManager = GObject.registerClass({ | ||||
|         this.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 }); | ||||
|         this.uiGroup.add_actor(this.dummyCursor); | ||||
|  | ||||
|         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); | ||||
|         global.stage.remove_actor(feedbackGroup); | ||||
|         this.uiGroup.add_actor(feedbackGroup); | ||||
| @@ -802,6 +806,16 @@ var LayoutManager = GObject.registerClass({ | ||||
|         this._trackActor(actor, params); | ||||
|     } | ||||
|  | ||||
|     // addTopChrome: | ||||
|     // @actor: an actor to add to the chrome | ||||
|     // @params: (optional) additional params | ||||
|     // | ||||
|     // Like addChrome(), but adds @actor above all windows, including popups. | ||||
|     addTopChrome(actor, params) { | ||||
|         this.uiGroup.add_actor(actor); | ||||
|         this._trackActor(actor, params); | ||||
|     } | ||||
|  | ||||
|     // trackChrome: | ||||
|     // @actor: a descendant of the chrome to begin tracking | ||||
|     // @params: parameters describing how to track @actor | ||||
|   | ||||
| @@ -1272,7 +1272,7 @@ var ZoomRegion = class ZoomRegion { | ||||
|  | ||||
|     /** | ||||
|      * getContrast: | ||||
|      * Retreive the contrast of the magnified view. | ||||
|      * Retrieve the contrast of the magnified view. | ||||
|      * @return  Object containing the contrast for the red, green, | ||||
|      *          and blue channels. | ||||
|      */ | ||||
|   | ||||
| @@ -636,7 +636,7 @@ function _queueBeforeRedraw(workId) { | ||||
|  * initialization as well, under the assumption that new actors | ||||
|  * will need it. | ||||
|  * | ||||
|  * Returns: A string work identifer | ||||
|  * Returns: A string work identifier | ||||
|  */ | ||||
| function initializeDeferredWork(actor, callback, props) { | ||||
|     // Turn into a string so we can use as an object property | ||||
|   | ||||
| @@ -584,7 +584,6 @@ class SourceActor extends St.Widget { | ||||
|         this._source = source; | ||||
|         this._size = size; | ||||
|  | ||||
|         this.actor = this; | ||||
|         this.connect('destroy', () => { | ||||
|             this._source.disconnect(this._iconUpdatedId); | ||||
|             this._actorDestroyed = true; | ||||
|   | ||||
| @@ -224,10 +224,10 @@ var ModalDialog = class { | ||||
|     // can be dismissed by a close call. | ||||
|     // | ||||
|     // The main point of this method is to give some indication to the user | ||||
|     // that the dialog reponse has been acknowledged but will take a few | ||||
|     // that the dialog response has been acknowledged but will take a few | ||||
|     // moments before being processed. | ||||
|     // e.g., if a user clicked "Log Out" then the dialog should go away | ||||
|     // imediately, but the lightbox should remain until the logout is | ||||
|     // immediately, but the lightbox should remain until the logout is | ||||
|     // complete. | ||||
|     _fadeOutDialog(timestamp) { | ||||
|         if (this.state == State.CLOSED || this.state == State.CLOSING) | ||||
|   | ||||
| @@ -369,17 +369,15 @@ class DashSpacer extends St.Widget { | ||||
|     } | ||||
|  | ||||
|     vfunc_get_preferred_width(forHeight) { | ||||
|         let box = this.get_allocation_box(); | ||||
|         let minWidth = super.vfunc_get_preferred_width(forHeight)[0]; | ||||
|         let natWidth = box.x2 - box.x1; | ||||
|         return [minWidth, natWidth]; | ||||
|         if (this._bindConstraint) | ||||
|             return this._bindConstraint.source.get_preferred_width(forHeight); | ||||
|         return super.vfunc_get_preferred_width(forHeight); | ||||
|     } | ||||
|  | ||||
|     vfunc_get_preferred_height(forWidth) { | ||||
|         let box = this.get_allocation_box(); | ||||
|         let minHeight = super.vfunc_get_preferred_height(forWidth)[0]; | ||||
|         let natHeight = box.y2 - box.y1; | ||||
|         return [minHeight, natHeight]; | ||||
|         if (this._bindConstraint) | ||||
|             return this._bindConstraint.source.get_preferred_height(forWidth); | ||||
|         return super.vfunc_get_preferred_height(forWidth); | ||||
|     } | ||||
| }); | ||||
|  | ||||
|   | ||||
| @@ -374,12 +374,12 @@ var PadDiagram = GObject.registerClass({ | ||||
|         svgData += this._cssString(); | ||||
|         svgData += this._wrappingSvgFooter(); | ||||
|  | ||||
|         let handle = new Rsvg.Handle(); | ||||
|         handle.set_base_uri(GLib.path_get_dirname(this._imagePath)); | ||||
|         handle.write(svgData); | ||||
|         handle.close(); | ||||
|         let istream = new Gio.MemoryInputStream(); | ||||
|         istream.add_bytes(new GLib.Bytes(svgData)); | ||||
|  | ||||
|         return handle; | ||||
|         return Rsvg.Handle.new_from_stream_sync(istream, | ||||
|                                                 Gio.File.new_for_path(this._imagePath), | ||||
|                                                 0, null); | ||||
|     } | ||||
|  | ||||
|     _updateDiagramScale() { | ||||
|   | ||||
							
								
								
									
										105
									
								
								js/ui/panel.js
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								js/ui/panel.js
									
									
									
									
									
								
							| @@ -75,6 +75,9 @@ class AppMenu extends PopupMenu.PopupMenu { | ||||
|  | ||||
|         this._windowsChangedId = 0; | ||||
|  | ||||
|         /* Translators: This is the heading of a list of open windows */ | ||||
|         this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem(_("Open Windows"))); | ||||
|  | ||||
|         this._windowSection = new PopupMenu.PopupMenuSection(); | ||||
|         this.addMenuItem(this._windowSection); | ||||
|  | ||||
| @@ -105,6 +108,8 @@ class AppMenu extends PopupMenu.PopupMenu { | ||||
|             }); | ||||
|         }); | ||||
|  | ||||
|         this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); | ||||
|  | ||||
|         this.addAction(_("Quit"), () => { | ||||
|             this._app.request_quit(); | ||||
|         }); | ||||
| @@ -117,7 +122,7 @@ class AppMenu extends PopupMenu.PopupMenu { | ||||
|  | ||||
|     _updateDetailsVisibility() { | ||||
|         let sw = this._appSystem.lookup_app('org.gnome.Software.desktop'); | ||||
|         this._detailsItem.actor.visible = (sw != null); | ||||
|         this._detailsItem.visible = (sw != null); | ||||
|     } | ||||
|  | ||||
|     isEmpty() { | ||||
| @@ -155,7 +160,7 @@ class AppMenu extends PopupMenu.PopupMenu { | ||||
|             }); | ||||
|         }); | ||||
|  | ||||
|         this._newWindowItem.actor.visible = | ||||
|         this._newWindowItem.visible = | ||||
|             app && app.can_open_new_window() && !actions.includes('new-window'); | ||||
|     } | ||||
|  | ||||
| @@ -172,13 +177,6 @@ class AppMenu extends PopupMenu.PopupMenu { | ||||
|                 Main.activateWindow(window, event.get_time()); | ||||
|             }); | ||||
|         }); | ||||
|  | ||||
|         // Add separator between windows of the current desktop and other windows. | ||||
|         let workspaceManager = global.workspace_manager; | ||||
|         let activeWorkspace = workspaceManager.get_active_workspace(); | ||||
|         let pos = windows.findIndex(w => w.get_workspace() != activeWorkspace); | ||||
|         if (pos >= 0) | ||||
|             this._windowSection.addMenuItem(new PopupMenu.PopupSeparatorMenuItem(), pos); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -196,7 +194,7 @@ var AppMenuButton = GObject.registerClass({ | ||||
|     _init(panel) { | ||||
|         super._init(0.0, null, true); | ||||
|  | ||||
|         this.actor.accessible_role = Atk.Role.MENU; | ||||
|         this.accessible_role = Atk.Role.MENU; | ||||
|  | ||||
|         this._startingApps = []; | ||||
|  | ||||
| @@ -206,10 +204,10 @@ var AppMenuButton = GObject.registerClass({ | ||||
|  | ||||
|         let bin = new St.Bin({ name: 'appMenu' }); | ||||
|         bin.connect('style-changed', this._onStyleChanged.bind(this)); | ||||
|         this.actor.add_actor(bin); | ||||
|         this.add_actor(bin); | ||||
|  | ||||
|         this.actor.bind_property("reactive", this.actor, "can-focus", 0); | ||||
|         this.actor.reactive = false; | ||||
|         this.bind_property("reactive", this, "can-focus", 0); | ||||
|         this.reactive = false; | ||||
|  | ||||
|         this._container = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); | ||||
|         bin.set_child(this._container); | ||||
| @@ -265,10 +263,10 @@ var AppMenuButton = GObject.registerClass({ | ||||
|             return; | ||||
|  | ||||
|         this._visible = true; | ||||
|         this.actor.reactive = true; | ||||
|         this.reactive = true; | ||||
|         this.show(); | ||||
|         Tweener.removeTweens(this.actor); | ||||
|         Tweener.addTween(this.actor, | ||||
|         Tweener.removeTweens(this); | ||||
|         Tweener.addTween(this, | ||||
|                          { opacity: 255, | ||||
|                            time: Overview.ANIMATION_TIME, | ||||
|                            transition: 'easeOutQuad' }); | ||||
| @@ -279,9 +277,9 @@ var AppMenuButton = GObject.registerClass({ | ||||
|             return; | ||||
|  | ||||
|         this._visible = false; | ||||
|         this.actor.reactive = false; | ||||
|         Tweener.removeTweens(this.actor); | ||||
|         Tweener.addTween(this.actor, | ||||
|         this.reactive = false; | ||||
|         Tweener.removeTweens(this); | ||||
|         Tweener.addTween(this, | ||||
|                          { opacity: 0, | ||||
|                            time: Overview.ANIMATION_TIME, | ||||
|                            transition: 'easeOutQuad', | ||||
| @@ -404,7 +402,7 @@ var AppMenuButton = GObject.registerClass({ | ||||
|             if (this._targetApp) { | ||||
|                 this._busyNotifyId = this._targetApp.connect('notify::busy', this._sync.bind(this)); | ||||
|                 this._label.set_text(this._targetApp.get_name()); | ||||
|                 this.actor.set_accessible_name(this._targetApp.get_name()); | ||||
|                 this.set_accessible_name(this._targetApp.get_name()); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -422,7 +420,7 @@ var AppMenuButton = GObject.registerClass({ | ||||
|         else | ||||
|             this.stopAnimation(); | ||||
|  | ||||
|         this.actor.reactive = (visible && !isBusy); | ||||
|         this.reactive = (visible && !isBusy); | ||||
|  | ||||
|         this._syncIcon(); | ||||
|         this.menu.setApp(this._targetApp); | ||||
| @@ -461,28 +459,28 @@ var ActivitiesButton = GObject.registerClass( | ||||
| class ActivitiesButton extends PanelMenu.Button { | ||||
|     _init() { | ||||
|         super._init(0.0, null, true); | ||||
|         this.actor.accessible_role = Atk.Role.TOGGLE_BUTTON; | ||||
|         this.accessible_role = Atk.Role.TOGGLE_BUTTON; | ||||
|  | ||||
|         this.actor.name = 'panelActivities'; | ||||
|         this.name = 'panelActivities'; | ||||
|  | ||||
|         /* Translators: If there is no suitable word for "Activities" | ||||
|            in your language, you can use the word for "Overview". */ | ||||
|         this._label = new St.Label({ text: _("Activities"), | ||||
|                                      y_align: Clutter.ActorAlign.CENTER }); | ||||
|         this.actor.add_actor(this._label); | ||||
|         this.add_actor(this._label); | ||||
|  | ||||
|         this.actor.label_actor = this._label; | ||||
|         this.label_actor = this._label; | ||||
|  | ||||
|         this.actor.connect('captured-event', this._onCapturedEvent.bind(this)); | ||||
|         this.actor.connect_after('key-release-event', this._onKeyRelease.bind(this)); | ||||
|         this.connect('captured-event', this._onCapturedEvent.bind(this)); | ||||
|         this.connect_after('key-release-event', this._onKeyRelease.bind(this)); | ||||
|  | ||||
|         Main.overview.connect('showing', () => { | ||||
|             this.actor.add_style_pseudo_class('overview'); | ||||
|             this.actor.add_accessible_state (Atk.StateType.CHECKED); | ||||
|             this.add_style_pseudo_class('overview'); | ||||
|             this.add_accessible_state (Atk.StateType.CHECKED); | ||||
|         }); | ||||
|         Main.overview.connect('hiding', () => { | ||||
|             this.actor.remove_style_pseudo_class('overview'); | ||||
|             this.actor.remove_accessible_state (Atk.StateType.CHECKED); | ||||
|             this.remove_style_pseudo_class('overview'); | ||||
|             this.remove_accessible_state (Atk.StateType.CHECKED); | ||||
|         }); | ||||
|  | ||||
|         this._xdndTimeOut = 0; | ||||
| @@ -535,7 +533,7 @@ class ActivitiesButton extends PanelMenu.Button { | ||||
|         let [x, y, mask] = global.get_pointer(); | ||||
|         let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); | ||||
|  | ||||
|         if (pickedActor == this.actor && Main.overview.shouldToggleByCornerOrButton()) | ||||
|         if (pickedActor == this && Main.overview.shouldToggleByCornerOrButton()) | ||||
|             Main.overview.toggle(); | ||||
|  | ||||
|         Mainloop.source_remove(this._xdndTimeOut); | ||||
| @@ -749,7 +747,7 @@ class AggregateMenu extends PanelMenu.Button { | ||||
|         this.menu.box.set_layout_manager(menuLayout); | ||||
|  | ||||
|         this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' }); | ||||
|         this.actor.add_child(this._indicators); | ||||
|         this.add_child(this._indicators); | ||||
|  | ||||
|         if (Config.HAVE_NETWORKMANAGER) { | ||||
|             this._network = new imports.ui.status.network.NMApplet(); | ||||
| @@ -827,9 +825,6 @@ class Panel extends St.Widget { | ||||
|         super._init({ name: 'panel', | ||||
|                       reactive: true }); | ||||
|  | ||||
|         // For compatibility with extensions that still use the | ||||
|         // this.actor field | ||||
|         this.actor = this; | ||||
|         this.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); | ||||
|  | ||||
|         this._sessionStyle = null; | ||||
| @@ -882,7 +877,7 @@ class Panel extends St.Widget { | ||||
|     } | ||||
|  | ||||
|     vfunc_allocate(box, flags) { | ||||
|         super.vfunc_allocate(box, flags); | ||||
|         this.set_allocation(box, flags); | ||||
|  | ||||
|         let allocWidth = box.x2 - box.x1; | ||||
|         let allocHeight = box.y2 - box.y1; | ||||
| @@ -976,22 +971,11 @@ class Panel extends St.Widget { | ||||
|         if (isPress && button != 1) | ||||
|             return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
|         let focusWindow = global.display.focus_window; | ||||
|         if (!focusWindow) | ||||
|             return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
|         let dragWindow = focusWindow.is_attached_dialog() ? focusWindow.get_transient_for() | ||||
|                                                           : focusWindow; | ||||
|         if (!dragWindow) | ||||
|             return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
|         let rect = dragWindow.get_frame_rect(); | ||||
|         let [stageX, stageY] = event.get_coords(); | ||||
|  | ||||
|         let allowDrag = dragWindow.maximized_vertically && | ||||
|                         stageX > rect.x && stageX < rect.x + rect.width; | ||||
|         let dragWindow = this._getDraggableWindowForPosition(stageX); | ||||
|  | ||||
|         if (!allowDrag) | ||||
|         if (!dragWindow) | ||||
|             return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
|         global.display.begin_grab_op(dragWindow, | ||||
| @@ -1021,7 +1005,7 @@ class Panel extends St.Widget { | ||||
|             return; // menu not supported by current session mode | ||||
|  | ||||
|         let menu = indicator.menu; | ||||
|         if (!indicator.actor.reactive) | ||||
|         if (!indicator.reactive) | ||||
|             return; | ||||
|  | ||||
|         menu.toggle(); | ||||
| @@ -1043,7 +1027,7 @@ class Panel extends St.Widget { | ||||
|             return; | ||||
|  | ||||
|         let menu = indicator.menu; | ||||
|         if (!indicator.actor.reactive) | ||||
|         if (!indicator.reactive) | ||||
|             return; | ||||
|  | ||||
|         menu.close(); | ||||
| @@ -1201,4 +1185,21 @@ class Panel extends St.Widget { | ||||
|                     Main.messageTray.bannerBlocked = isOpen; | ||||
|             }); | ||||
|     } | ||||
|  | ||||
|     _getDraggableWindowForPosition(stageX) { | ||||
|         let workspaceManager = global.workspace_manager; | ||||
|         let workspace = workspaceManager.get_active_workspace() | ||||
|         let allWindowsByStacking = global.display.sort_windows_by_stacking( | ||||
|             workspace.list_windows() | ||||
|         ).reverse(); | ||||
|  | ||||
|         return allWindowsByStacking.find(metaWindow => { | ||||
|             let rect = metaWindow.get_frame_rect(); | ||||
|             return metaWindow.is_on_primary_monitor() && | ||||
|                    metaWindow.showing_on_its_workspace() && | ||||
|                    metaWindow.get_window_type() != Meta.WindowType.DESKTOP && | ||||
|                    metaWindow.maximized_vertically && | ||||
|                    stageX > rect.x && stageX < rect.x + rect.width | ||||
|         }); | ||||
|     } | ||||
| }); | ||||
|   | ||||
| @@ -14,12 +14,11 @@ class ButtonBox extends St.Widget { | ||||
|  | ||||
|         super._init(params); | ||||
|  | ||||
|         this.actor = this; | ||||
|         this._delegate = this; | ||||
|  | ||||
|         this.container = new St.Bin({ y_fill: true, | ||||
|                                       x_fill: true, | ||||
|                                       child: this.actor }); | ||||
|                                       child: this }); | ||||
|  | ||||
|         this.connect('style-changed', this._onStyleChanged.bind(this)); | ||||
|         this.connect('destroy', this._onDestroy.bind(this)); | ||||
| @@ -105,9 +104,9 @@ var Button = GObject.registerClass({ | ||||
|         this.connect('notify::visible', this._onVisibilityChanged.bind(this)); | ||||
|  | ||||
|         if (dontCreateMenu) | ||||
|             this.menu = new PopupMenu.PopupDummyMenu(this.actor); | ||||
|             this.menu = new PopupMenu.PopupDummyMenu(this); | ||||
|         else | ||||
|             this.setMenu(new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0)); | ||||
|             this.setMenu(new PopupMenu.PopupMenu(this, menuAlignment, St.Side.TOP, 0)); | ||||
|     } | ||||
|  | ||||
|     setSensitive(sensitive) { | ||||
| @@ -145,7 +144,7 @@ var Button = GObject.registerClass({ | ||||
|         if (!this.menu) | ||||
|             return; | ||||
|  | ||||
|         if (!this.actor.visible) | ||||
|         if (!this.visible) | ||||
|             this.menu.close(); | ||||
|     } | ||||
|  | ||||
| @@ -155,10 +154,10 @@ var Button = GObject.registerClass({ | ||||
|  | ||||
|         let symbol = event.get_key_symbol(); | ||||
|         if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) { | ||||
|             let group = global.focus_manager.get_group(this.actor); | ||||
|             let group = global.focus_manager.get_group(this); | ||||
|             if (group) { | ||||
|                 let direction = (symbol == Clutter.KEY_Left) ? St.DirectionType.LEFT : St.DirectionType.RIGHT; | ||||
|                 group.navigate_focus(this.actor, direction, false); | ||||
|                 group.navigate_focus(this, direction, false); | ||||
|                 return Clutter.EVENT_STOP; | ||||
|             } | ||||
|         } | ||||
| @@ -167,9 +166,9 @@ var Button = GObject.registerClass({ | ||||
|  | ||||
|     _onOpenStateChanged(menu, open) { | ||||
|         if (open) | ||||
|             this.actor.add_style_pseudo_class('active'); | ||||
|             this.add_style_pseudo_class('active'); | ||||
|         else | ||||
|             this.actor.remove_style_pseudo_class('active'); | ||||
|             this.remove_style_pseudo_class('active'); | ||||
|  | ||||
|         // Setting the max-height won't do any good if the minimum height of the | ||||
|         // menu is higher then the screen; it's useful if part of the menu is | ||||
|   | ||||
| @@ -51,49 +51,64 @@ function arrowIcon(side) { | ||||
|     return arrow; | ||||
| } | ||||
|  | ||||
| var PopupBaseMenuItem = class { | ||||
|     constructor(params) { | ||||
| var PopupBaseMenuItem = GObject.registerClass({ | ||||
|     Properties: { | ||||
|         'active': GObject.ParamSpec.boolean('active', 'active', 'active', | ||||
|                                             GObject.ParamFlags.READWRITE, | ||||
|                                             GObject.TYPE_BOOLEAN, | ||||
|                                             false), | ||||
|         'sensitive': GObject.ParamSpec.boolean('sensitive', 'sensitive', 'sensitive', | ||||
|                                                GObject.ParamFlags.READWRITE, | ||||
|                                                GObject.TYPE_BOOLEAN, | ||||
|                                                true), | ||||
|     }, | ||||
|     Signals: { | ||||
|         'activate': { param_types: [Clutter.Event.$gtype] }, | ||||
|     } | ||||
| }, class PopupBaseMenuItem extends St.BoxLayout { | ||||
|     _init(params) { | ||||
|         params = Params.parse (params, { reactive: true, | ||||
|                                          activate: true, | ||||
|                                          hover: true, | ||||
|                                          style_class: null, | ||||
|                                          can_focus: true | ||||
|                                        }); | ||||
|  | ||||
|         this.actor = new St.BoxLayout({ style_class: 'popup-menu-item', | ||||
|                                         reactive: params.reactive, | ||||
|                                         track_hover: params.reactive, | ||||
|                                         can_focus: params.can_focus, | ||||
|                                         accessible_role: Atk.Role.MENU_ITEM }); | ||||
|         this.actor._delegate = this; | ||||
|         super._init({ style_class: 'popup-menu-item', | ||||
|                       reactive: params.reactive, | ||||
|                       track_hover: params.reactive, | ||||
|                       can_focus: params.can_focus, | ||||
|                       accessible_role: Atk.Role.MENU_ITEM }); | ||||
|         this._delegate = this; | ||||
|  | ||||
|         this._ornament = Ornament.NONE; | ||||
|         this._ornamentLabel = new St.Label({ style_class: 'popup-menu-ornament' }); | ||||
|         this.actor.add(this._ornamentLabel); | ||||
|         this.add(this._ornamentLabel); | ||||
|  | ||||
|         this._parent = null; | ||||
|         this.active = false; | ||||
|         this._active = false; | ||||
|         this._activatable = params.reactive && params.activate; | ||||
|         this._sensitive = true; | ||||
|  | ||||
|         if (!this._activatable) | ||||
|             this.actor.add_style_class_name('popup-inactive-menu-item'); | ||||
|             this.add_style_class_name('popup-inactive-menu-item'); | ||||
|  | ||||
|         if (params.style_class) | ||||
|             this.actor.add_style_class_name(params.style_class); | ||||
|             this.add_style_class_name(params.style_class); | ||||
|  | ||||
|         if (this._activatable) { | ||||
|             this.actor.connect('button-press-event', this._onButtonPressEvent.bind(this)); | ||||
|             this.actor.connect('button-release-event', this._onButtonReleaseEvent.bind(this)); | ||||
|             this.actor.connect('touch-event', this._onTouchEvent.bind(this)); | ||||
|             this.actor.connect('key-press-event', this._onKeyPressEvent.bind(this)); | ||||
|             this.connect('button-press-event', this._onButtonPressEvent.bind(this)); | ||||
|             this.connect('button-release-event', this._onButtonReleaseEvent.bind(this)); | ||||
|             this.connect('touch-event', this._onTouchEvent.bind(this)); | ||||
|             this.connect('key-press-event', this._onKeyPressEvent.bind(this)); | ||||
|         } | ||||
|         if (params.reactive && params.hover) | ||||
|             this.actor.connect('notify::hover', this._onHoverChanged.bind(this)); | ||||
|             this.bind_property('hover', this, 'active', GObject.BindingFlags.SYNC_CREATE); | ||||
|     } | ||||
|  | ||||
|         this.actor.connect('key-focus-in', this._onKeyFocusIn.bind(this)); | ||||
|         this.actor.connect('key-focus-out', this._onKeyFocusOut.bind(this)); | ||||
|         this.actor.connect('destroy', this._onDestroy.bind(this)); | ||||
|     get actor() { | ||||
|         /* This is kept for compatibility with current implementation, and we | ||||
|            don't want to warn here yet since PopupMenu depends on this */ | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     _getTopMenu() { | ||||
| @@ -109,24 +124,24 @@ var PopupBaseMenuItem = class { | ||||
|  | ||||
|     _onButtonPressEvent(actor, event) { | ||||
|         // This is the CSS active state | ||||
|         this.actor.add_style_pseudo_class ('active'); | ||||
|         this.add_style_pseudo_class('active'); | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     } | ||||
|  | ||||
|     _onButtonReleaseEvent(actor, event) { | ||||
|         this.actor.remove_style_pseudo_class ('active'); | ||||
|         this.remove_style_pseudo_class('active'); | ||||
|         this.activate(event); | ||||
|         return Clutter.EVENT_STOP; | ||||
|     } | ||||
|  | ||||
|     _onTouchEvent(actor, event) { | ||||
|         if (event.type() == Clutter.EventType.TOUCH_END) { | ||||
|             this.actor.remove_style_pseudo_class ('active'); | ||||
|             this.remove_style_pseudo_class('active'); | ||||
|             this.activate(event); | ||||
|             return Clutter.EVENT_STOP; | ||||
|         } else if (event.type() == Clutter.EventType.TOUCH_BEGIN) { | ||||
|             // This is the CSS active state | ||||
|             this.actor.add_style_pseudo_class ('active'); | ||||
|             this.add_style_pseudo_class('active'); | ||||
|         } | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     } | ||||
| @@ -151,54 +166,56 @@ var PopupBaseMenuItem = class { | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     } | ||||
|  | ||||
|     _onKeyFocusIn(actor) { | ||||
|         this.setActive(true); | ||||
|     vfunc_key_focus_in() { | ||||
|         super.vfunc_key_focus_in(); | ||||
|         this.active = true; | ||||
|     } | ||||
|  | ||||
|     _onKeyFocusOut(actor) { | ||||
|         this.setActive(false); | ||||
|     } | ||||
|  | ||||
|     _onHoverChanged(actor) { | ||||
|         this.setActive(actor.hover); | ||||
|     vfunc_key_focus_out() { | ||||
|         super.vfunc_key_focus_out(); | ||||
|         this.active = false; | ||||
|     } | ||||
|  | ||||
|     activate(event) { | ||||
|         this.emit('activate', event); | ||||
|     } | ||||
|  | ||||
|     setActive(active) { | ||||
|     get active() { | ||||
|         return this._active; | ||||
|     } | ||||
|  | ||||
|     set active(active) { | ||||
|         let activeChanged = active != this.active; | ||||
|         if (activeChanged) { | ||||
|             this.active = active; | ||||
|             this._active = active; | ||||
|             if (active) { | ||||
|                 this.actor.add_style_class_name('selected'); | ||||
|                 if (this.actor.can_focus) | ||||
|                     this.actor.grab_key_focus(); | ||||
|                 this.add_style_class_name('selected'); | ||||
|                 if (this.can_focus) | ||||
|                     this.grab_key_focus(); | ||||
|             } else { | ||||
|                 this.actor.remove_style_class_name('selected'); | ||||
|                 this.remove_style_class_name('selected'); | ||||
|                 // Remove the CSS active state if the user press the button and | ||||
|                 // while holding moves to another menu item, so we don't paint all items. | ||||
|                 // The correct behaviour would be to set the new item with the CSS | ||||
|                 // active state as well, but button-press-event is not trigered, | ||||
|                 // so we should track it in our own, which would involve some work | ||||
|                 // in the container | ||||
|                 this.actor.remove_style_pseudo_class ('active'); | ||||
|                 this.remove_style_pseudo_class('active'); | ||||
|             } | ||||
|             this.emit('active-changed', active); | ||||
|             this.notify('active'); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     syncSensitive() { | ||||
|         let sensitive = this.getSensitive(); | ||||
|         this.actor.reactive = sensitive; | ||||
|         this.actor.can_focus = sensitive; | ||||
|         this.emit('sensitive-changed'); | ||||
|         let sensitive = this.sensitive; | ||||
|         this.reactive = sensitive; | ||||
|         this.can_focus = sensitive; | ||||
|         this.notify('sensitive'); | ||||
|         return sensitive; | ||||
|     } | ||||
|  | ||||
|     getSensitive() { | ||||
|         let parentSensitive = this._parent ? this._parent.getSensitive() : true; | ||||
|         let parentSensitive = this._parent ? this._parent.sensitive : true; | ||||
|         return this._activatable && this._sensitive && parentSensitive; | ||||
|     } | ||||
|  | ||||
| @@ -210,12 +227,12 @@ var PopupBaseMenuItem = class { | ||||
|         this.syncSensitive(); | ||||
|     } | ||||
|  | ||||
|     destroy() { | ||||
|         this.actor.destroy(); | ||||
|     get sensitive() { | ||||
|         return this.getSensitive(); | ||||
|     } | ||||
|  | ||||
|     _onDestroy() { | ||||
|         this.emit('destroy'); | ||||
|     set sensitive(sensitive) { | ||||
|         this.setSensitive(sensitive); | ||||
|     } | ||||
|  | ||||
|     setOrnament(ornament) { | ||||
| @@ -226,36 +243,38 @@ var PopupBaseMenuItem = class { | ||||
|  | ||||
|         if (ornament == Ornament.DOT) { | ||||
|             this._ornamentLabel.text = '\u2022'; | ||||
|             this.actor.add_accessible_state(Atk.StateType.CHECKED); | ||||
|             this.add_accessible_state(Atk.StateType.CHECKED); | ||||
|         } else if (ornament == Ornament.CHECK) { | ||||
|             this._ornamentLabel.text = '\u2713'; | ||||
|             this.actor.add_accessible_state(Atk.StateType.CHECKED); | ||||
|             this.add_accessible_state(Atk.StateType.CHECKED); | ||||
|         } else if (ornament == Ornament.NONE) { | ||||
|             this._ornamentLabel.text = ''; | ||||
|             this.actor.remove_accessible_state(Atk.StateType.CHECKED); | ||||
|             this.remove_accessible_state(Atk.StateType.CHECKED); | ||||
|         } | ||||
|     } | ||||
| }; | ||||
| Signals.addSignalMethods(PopupBaseMenuItem.prototype); | ||||
| }); | ||||
|  | ||||
| var PopupMenuItem = class extends PopupBaseMenuItem { | ||||
|     constructor(text, params) { | ||||
|         super(params); | ||||
| var PopupMenuItem = GObject.registerClass( | ||||
| class PopupMenuItem extends PopupBaseMenuItem { | ||||
|     _init(text, params) { | ||||
|         super._init(params); | ||||
|  | ||||
|         this.label = new St.Label({ text: text }); | ||||
|         this.actor.add_child(this.label); | ||||
|         this.actor.label_actor = this.label | ||||
|         this.add_child(this.label); | ||||
|         this.label_actor = this.label | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  | ||||
| var PopupSeparatorMenuItem = class extends PopupBaseMenuItem { | ||||
|     constructor(text) { | ||||
|         super({ reactive: false, | ||||
|                 can_focus: false}); | ||||
|  | ||||
| var PopupSeparatorMenuItem = GObject.registerClass( | ||||
| class PopupSeparatorMenuItem extends PopupBaseMenuItem { | ||||
|     _init(text) { | ||||
|         super._init({ reactive: false, | ||||
|                       can_focus: false }); | ||||
|  | ||||
|         this.label = new St.Label({ text: text || '' }); | ||||
|         this.actor.add(this.label); | ||||
|         this.actor.label_actor = this.label; | ||||
|         this.add(this.label); | ||||
|         this.label_actor = this.label; | ||||
|  | ||||
|         this.label.connect('notify::text', | ||||
|                            this._syncVisibility.bind(this)); | ||||
| @@ -264,81 +283,78 @@ var PopupSeparatorMenuItem = class extends PopupBaseMenuItem { | ||||
|         this._separator = new St.Widget({ style_class: 'popup-separator-menu-item', | ||||
|                                           y_expand: true, | ||||
|                                           y_align: Clutter.ActorAlign.CENTER }); | ||||
|         this.actor.add(this._separator, { expand: true }); | ||||
|         this.add(this._separator, { expand: true }); | ||||
|     } | ||||
|  | ||||
|     _syncVisibility() { | ||||
|         this.label.visible = this.label.text != ''; | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  | ||||
| var Switch = class { | ||||
|     constructor(state) { | ||||
|         this.actor = new St.Bin({ style_class: 'toggle-switch', | ||||
|                                   accessible_role: Atk.Role.CHECK_BOX, | ||||
|                                   can_focus: true }); | ||||
|         // Translators: this MUST be either "toggle-switch-us" | ||||
|         // (for toggle switches containing the English words | ||||
|         // "ON" and "OFF") or "toggle-switch-intl" (for toggle | ||||
|         // switches containing "◯" and "|"). Other values will | ||||
|         // simply result in invisible toggle switches. | ||||
|         this.actor.add_style_class_name(_("toggle-switch-us")); | ||||
| var Switch = GObject.registerClass( | ||||
| class Switch extends St.Bin { | ||||
|     _init(state) { | ||||
|         super._init({ style_class: 'toggle-switch', | ||||
|                       accessible_role: Atk.Role.CHECK_BOX, | ||||
|                       can_focus: true }); | ||||
|         this.setToggleState(state); | ||||
|     } | ||||
|  | ||||
|     setToggleState(state) { | ||||
|         if (state) | ||||
|             this.actor.add_style_pseudo_class('checked'); | ||||
|             this.add_style_pseudo_class('checked'); | ||||
|         else | ||||
|             this.actor.remove_style_pseudo_class('checked'); | ||||
|             this.remove_style_pseudo_class('checked'); | ||||
|         this.state = state; | ||||
|     } | ||||
|  | ||||
|     toggle() { | ||||
|         this.setToggleState(!this.state); | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  | ||||
| var PopupSwitchMenuItem = class extends PopupBaseMenuItem { | ||||
|     constructor(text, active, params) { | ||||
|         super(params); | ||||
| var PopupSwitchMenuItem = GObject.registerClass({ | ||||
|     Signals: { 'toggled': { param_types: [GObject.TYPE_BOOLEAN] }, }, | ||||
| }, | ||||
| class PopupSwitchMenuItem extends PopupBaseMenuItem { | ||||
|     _init(text, active, params) { | ||||
|         super._init(params); | ||||
|  | ||||
|         this.label = new St.Label({ text: text }); | ||||
|         this._switch = new Switch(active); | ||||
|  | ||||
|         this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM; | ||||
|         this.accessible_role = Atk.Role.CHECK_MENU_ITEM; | ||||
|         this.checkAccessibleState(); | ||||
|         this.actor.label_actor = this.label; | ||||
|         this.label_actor = this.label; | ||||
|  | ||||
|         this.actor.add_child(this.label); | ||||
|         this.add_child(this.label); | ||||
|  | ||||
|         this._statusBin = new St.Bin({ x_align: St.Align.END }); | ||||
|         this.actor.add(this._statusBin, { expand: true, x_align: St.Align.END }); | ||||
|         this.add(this._statusBin, { expand: true, x_align: St.Align.END }); | ||||
|  | ||||
|         this._statusLabel = new St.Label({ text: '', | ||||
|                                            style_class: 'popup-status-menu-item' | ||||
|                                          }); | ||||
|         this._statusBin.child = this._switch.actor; | ||||
|         this._statusBin.child = this._switch; | ||||
|     } | ||||
|  | ||||
|     setStatus(text) { | ||||
|         if (text != null) { | ||||
|             this._statusLabel.text = text; | ||||
|             this._statusBin.child = this._statusLabel; | ||||
|             this.actor.reactive = false; | ||||
|             this.actor.accessible_role = Atk.Role.MENU_ITEM; | ||||
|             this.reactive = false; | ||||
|             this.accessible_role = Atk.Role.MENU_ITEM; | ||||
|         } else { | ||||
|             this._statusBin.child = this._switch.actor; | ||||
|             this.actor.reactive = true; | ||||
|             this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM; | ||||
|             this._statusBin.child = this._switch; | ||||
|             this.reactive = true; | ||||
|             this.accessible_role = Atk.Role.CHECK_MENU_ITEM; | ||||
|         } | ||||
|         this.checkAccessibleState(); | ||||
|     } | ||||
|  | ||||
|     activate(event) { | ||||
|         if (this._switch.actor.mapped) { | ||||
|         if (this._switch.mapped) | ||||
|             this.toggle(); | ||||
|         } | ||||
|  | ||||
|         // we allow pressing space to toggle the switch | ||||
|         // without closing the menu | ||||
| @@ -365,29 +381,30 @@ var PopupSwitchMenuItem = class extends PopupBaseMenuItem { | ||||
|     } | ||||
|  | ||||
|     checkAccessibleState() { | ||||
|         switch (this.actor.accessible_role) { | ||||
|         switch (this.accessible_role) { | ||||
|         case Atk.Role.CHECK_MENU_ITEM: | ||||
|             if (this._switch.state) | ||||
|                 this.actor.add_accessible_state (Atk.StateType.CHECKED); | ||||
|                 this.add_accessible_state(Atk.StateType.CHECKED); | ||||
|             else | ||||
|                 this.actor.remove_accessible_state (Atk.StateType.CHECKED); | ||||
|                 this.remove_accessible_state(Atk.StateType.CHECKED); | ||||
|             break; | ||||
|         default: | ||||
|             this.actor.remove_accessible_state (Atk.StateType.CHECKED); | ||||
|             this.remove_accessible_state(Atk.StateType.CHECKED); | ||||
|         } | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  | ||||
| var PopupImageMenuItem = class extends PopupBaseMenuItem { | ||||
|     constructor(text, icon, params) { | ||||
|         super(params); | ||||
| var PopupImageMenuItem = GObject.registerClass( | ||||
| class PopupImageMenuItem extends PopupBaseMenuItem { | ||||
|     _init(text, icon, params) { | ||||
|         super._init(params); | ||||
|  | ||||
|         this._icon = new St.Icon({ style_class: 'popup-menu-icon', | ||||
|                                    x_align: Clutter.ActorAlign.END }); | ||||
|         this.actor.add_child(this._icon); | ||||
|         this.add_child(this._icon); | ||||
|         this.label = new St.Label({ text: text }); | ||||
|         this.actor.add_child(this.label); | ||||
|         this.actor.label_actor = this.label; | ||||
|         this.add_child(this.label); | ||||
|         this.label_actor = this.label; | ||||
|  | ||||
|         this.setIcon(icon); | ||||
|     } | ||||
| @@ -399,12 +416,12 @@ var PopupImageMenuItem = class extends PopupBaseMenuItem { | ||||
|         else | ||||
|             this._icon.icon_name = icon; | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  | ||||
| var PopupMenuBase = class { | ||||
|     constructor(sourceActor, styleClass) { | ||||
|         if (new.target === PopupMenuBase) | ||||
|             throw new TypeError('Cannot instantiate abstract class ' + new.target.name); | ||||
|         if (this.constructor === PopupMenuBase) | ||||
|             throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`); | ||||
|  | ||||
|         this.sourceActor = sourceActor; | ||||
|         this._parent = null; | ||||
| @@ -443,13 +460,21 @@ var PopupMenuBase = class { | ||||
|     } | ||||
|  | ||||
|     getSensitive() { | ||||
|         let parentSensitive = this._parent ? this._parent.getSensitive() : true; | ||||
|         let parentSensitive = this._parent ? this._parent.sensitive : true; | ||||
|         return this._sensitive && parentSensitive; | ||||
|     } | ||||
|  | ||||
|     setSensitive(sensitive) { | ||||
|         this._sensitive = sensitive; | ||||
|         this.emit('sensitive-changed'); | ||||
|         this.emit('notify::sensitive'); | ||||
|     } | ||||
|  | ||||
|     get sensitive() { | ||||
|         return this.getSensitive(); | ||||
|     } | ||||
|  | ||||
|     set sensitive(sensitive) { | ||||
|         this.setSensitive(sensitive); | ||||
|     } | ||||
|  | ||||
|     _sessionUpdated() { | ||||
| @@ -485,7 +510,7 @@ var PopupMenuBase = class { | ||||
|             app.activate(); | ||||
|         }); | ||||
|  | ||||
|         menuItem.actor.visible = Main.sessionMode.allowSettings; | ||||
|         menuItem.visible = Main.sessionMode.allowSettings; | ||||
|         this._settingsActions[desktopFile] = menuItem; | ||||
|  | ||||
|         return menuItem; | ||||
| @@ -494,7 +519,7 @@ var PopupMenuBase = class { | ||||
|     _setSettingsVisibility(visible) { | ||||
|         for (let id in this._settingsActions) { | ||||
|             let item = this._settingsActions[id]; | ||||
|             item.actor.visible = visible; | ||||
|             item.visible = visible; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -517,16 +542,17 @@ var PopupMenuBase = class { | ||||
|  | ||||
|     _subMenuActiveChanged(submenu, submenuItem) { | ||||
|         if (this._activeMenuItem && this._activeMenuItem != submenuItem) | ||||
|             this._activeMenuItem.setActive(false); | ||||
|             this._activeMenuItem.active = false; | ||||
|         this._activeMenuItem = submenuItem; | ||||
|         this.emit('active-changed', submenuItem); | ||||
|     } | ||||
|  | ||||
|     _connectItemSignals(menuItem) { | ||||
|         menuItem._activeChangeId = menuItem.connect('active-changed', (menuItem, active) => { | ||||
|         menuItem._activeChangeId = menuItem.connect('notify::active', (menuItem) => { | ||||
|             let active = menuItem.active; | ||||
|             if (active && this._activeMenuItem != menuItem) { | ||||
|                 if (this._activeMenuItem) | ||||
|                     this._activeMenuItem.setActive(false); | ||||
|                     this._activeMenuItem.active = false; | ||||
|                 this._activeMenuItem = menuItem; | ||||
|                 this.emit('active-changed', menuItem); | ||||
|             } else if (!active && this._activeMenuItem == menuItem) { | ||||
| @@ -534,8 +560,8 @@ var PopupMenuBase = class { | ||||
|                 this.emit('active-changed', null); | ||||
|             } | ||||
|         }); | ||||
|         menuItem._sensitiveChangeId = menuItem.connect('sensitive-changed', () => { | ||||
|             let sensitive = menuItem.getSensitive(); | ||||
|         menuItem._sensitiveChangeId = menuItem.connect('notify::sensitive', () => { | ||||
|             let sensitive = menuItem.sensitive; | ||||
|             if (!sensitive && this._activeMenuItem == menuItem) { | ||||
|                 if (!this.actor.navigate_focus(menuItem.actor, | ||||
|                                                St.DirectionType.TAB_FORWARD, | ||||
| @@ -551,7 +577,7 @@ var PopupMenuBase = class { | ||||
|             this.itemActivated(BoxPointer.PopupAnimation.FULL); | ||||
|         }); | ||||
|  | ||||
|         menuItem._parentSensitiveChangeId = this.connect('sensitive-changed', () => { | ||||
|         menuItem._parentSensitiveChangeId = this.connect('notify::sensitive', () => { | ||||
|             menuItem.syncSensitive(); | ||||
|         }); | ||||
|  | ||||
| @@ -603,7 +629,7 @@ var PopupMenuBase = class { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         menuItem.actor.show(); | ||||
|         menuItem.show(); | ||||
|     } | ||||
|  | ||||
|     moveMenuItem(menuItem, position) { | ||||
| @@ -650,8 +676,8 @@ var PopupMenuBase = class { | ||||
|             let parentClosingId = this.connect('menu-closed', () => { | ||||
|                 menuItem.emit('menu-closed'); | ||||
|             }); | ||||
|             let subMenuSensitiveChangedId = this.connect('sensitive-changed', () => { | ||||
|                 menuItem.emit('sensitive-changed'); | ||||
|             let subMenuSensitiveChangedId = this.connect('notify::sensitive', () => { | ||||
|                 menuItem.emit('notify::sensitive'); | ||||
|             }); | ||||
|  | ||||
|             menuItem.connect('destroy', () => { | ||||
| @@ -857,9 +883,9 @@ var PopupMenu = class extends PopupMenuBase { | ||||
|  | ||||
|     close(animate) { | ||||
|         if (this._activeMenuItem) | ||||
|             this._activeMenuItem.setActive(false); | ||||
|             this._activeMenuItem.active = false; | ||||
|  | ||||
|         if (this._boxPointer.actor.visible) { | ||||
|         if (this._boxPointer.visible) { | ||||
|             this._boxPointer.close(animate, () => { | ||||
|                 this.emit('menu-closed'); | ||||
|             }); | ||||
| @@ -890,6 +916,10 @@ var PopupDummyMenu = class { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     get sensitive() { | ||||
|         return this.getSensitive(); | ||||
|     } | ||||
|  | ||||
|     open() { this.emit('open-state-changed', true); } | ||||
|     close() { this.emit('open-state-changed', false); } | ||||
|     toggle() {} | ||||
| @@ -929,7 +959,11 @@ var PopupSubMenu = class extends PopupMenuBase { | ||||
|     } | ||||
|  | ||||
|     getSensitive() { | ||||
|         return this._sensitive && this.sourceActor._delegate.getSensitive(); | ||||
|         return this._sensitive && this.sourceActor.sensitive; | ||||
|     } | ||||
|  | ||||
|     get sensitive() { | ||||
|         return this.getSensitive(); | ||||
|     } | ||||
|  | ||||
|     open(animate) { | ||||
| @@ -996,7 +1030,7 @@ var PopupSubMenu = class extends PopupMenuBase { | ||||
|         this.emit('open-state-changed', false); | ||||
|  | ||||
|         if (this._activeMenuItem) | ||||
|             this._activeMenuItem.setActive(false); | ||||
|             this._activeMenuItem.active = false; | ||||
|  | ||||
|         if (animate && this._needsScrollbar()) | ||||
|             animate = false; | ||||
| @@ -1028,7 +1062,7 @@ var PopupSubMenu = class extends PopupMenuBase { | ||||
|  | ||||
|         if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) { | ||||
|             this.close(BoxPointer.PopupAnimation.FULL); | ||||
|             this.sourceActor._delegate.setActive(true); | ||||
|             this.sourceActor._delegate.active = true; | ||||
|             return Clutter.EVENT_STOP; | ||||
|         } | ||||
|  | ||||
| @@ -1059,25 +1093,26 @@ var PopupMenuSection = class extends PopupMenuBase { | ||||
|     close() { this.emit('open-state-changed', false); } | ||||
| }; | ||||
|  | ||||
| var PopupSubMenuMenuItem = class extends PopupBaseMenuItem { | ||||
|     constructor(text, wantIcon) { | ||||
|         super(); | ||||
| var PopupSubMenuMenuItem = GObject.registerClass( | ||||
| class PopupSubMenuMenuItem extends PopupBaseMenuItem { | ||||
|     _init(text, wantIcon) { | ||||
|         super._init(); | ||||
|  | ||||
|         this.actor.add_style_class_name('popup-submenu-menu-item'); | ||||
|         this.add_style_class_name('popup-submenu-menu-item'); | ||||
|  | ||||
|         if (wantIcon) { | ||||
|             this.icon = new St.Icon({ style_class: 'popup-menu-icon' }); | ||||
|             this.actor.add_child(this.icon); | ||||
|             this.add_child(this.icon); | ||||
|         } | ||||
|  | ||||
|         this.label = new St.Label({ text: text, | ||||
|                                     y_expand: true, | ||||
|                                     y_align: Clutter.ActorAlign.CENTER }); | ||||
|         this.actor.add_child(this.label); | ||||
|         this.actor.label_actor = this.label; | ||||
|         this.add_child(this.label); | ||||
|         this.label_actor = this.label; | ||||
|  | ||||
|         let expander = new St.Bin({ style_class: 'popup-menu-item-expander' }); | ||||
|         this.actor.add(expander, { expand: true }); | ||||
|         this.add(expander, { expand: true }); | ||||
|  | ||||
|         this._triangle = arrowIcon(St.Side.RIGHT); | ||||
|         this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 }); | ||||
| @@ -1086,11 +1121,12 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem { | ||||
|                                             y_align: Clutter.ActorAlign.CENTER }); | ||||
|         this._triangleBin.add_child(this._triangle); | ||||
|  | ||||
|         this.actor.add_child(this._triangleBin); | ||||
|         this.actor.add_accessible_state (Atk.StateType.EXPANDABLE); | ||||
|         this.add_child(this._triangleBin); | ||||
|         this.add_accessible_state(Atk.StateType.EXPANDABLE); | ||||
|  | ||||
|         this.menu = new PopupSubMenu(this.actor, this._triangle); | ||||
|         this.menu = new PopupSubMenu(this, this._triangle); | ||||
|         this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this)); | ||||
|         this.connect('destroy', () => { this.menu.destroy(); }); | ||||
|     } | ||||
|  | ||||
|     _setParent(parent) { | ||||
| @@ -1107,24 +1143,18 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem { | ||||
|  | ||||
|     _subMenuOpenStateChanged(menu, open) { | ||||
|         if (open) { | ||||
|             this.actor.add_style_pseudo_class('open'); | ||||
|             this.add_style_pseudo_class('open'); | ||||
|             this._getTopMenu()._setOpenedSubMenu(this.menu); | ||||
|             this.actor.add_accessible_state (Atk.StateType.EXPANDED); | ||||
|             this.actor.add_style_pseudo_class('checked'); | ||||
|             this.add_accessible_state(Atk.StateType.EXPANDED); | ||||
|             this.add_style_pseudo_class('checked'); | ||||
|         } else { | ||||
|             this.actor.remove_style_pseudo_class('open'); | ||||
|             this.remove_style_pseudo_class('open'); | ||||
|             this._getTopMenu()._setOpenedSubMenu(null); | ||||
|             this.actor.remove_accessible_state (Atk.StateType.EXPANDED); | ||||
|             this.actor.remove_style_pseudo_class('checked'); | ||||
|             this.remove_accessible_state (Atk.StateType.EXPANDED); | ||||
|             this.remove_style_pseudo_class('checked'); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     destroy() { | ||||
|         this.menu.destroy(); | ||||
|  | ||||
|         super.destroy(); | ||||
|     } | ||||
|  | ||||
|     setSubmenuShown(open) { | ||||
|         if (open) | ||||
|             this.menu.open(BoxPointer.PopupAnimation.FULL); | ||||
| @@ -1162,7 +1192,7 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem { | ||||
|     _onButtonReleaseEvent(actor) { | ||||
|         // Since we override the parent, we need to manage what the parent does | ||||
|         // with the active style class | ||||
|         this.actor.remove_style_pseudo_class ('active'); | ||||
|         this.remove_style_pseudo_class('active'); | ||||
|         this._setOpenState(!this._getOpenState()); | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     } | ||||
| @@ -1171,12 +1201,12 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem { | ||||
|         if (event.type() == Clutter.EventType.TOUCH_END) { | ||||
|             // Since we override the parent, we need to manage what the parent does | ||||
|             // with the active style class | ||||
|             this.actor.remove_style_pseudo_class ('active'); | ||||
|             this.remove_style_pseudo_class('active'); | ||||
|             this._setOpenState(!this._getOpenState()); | ||||
|         } | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  | ||||
| /* Basic implementation of a menu manager. | ||||
|  * Call addMenu to add menus | ||||
| @@ -1186,7 +1216,7 @@ var PopupMenuManager = class { | ||||
|         grabParams = Params.parse(grabParams, | ||||
|                                   { actionMode: Shell.ActionMode.POPUP }); | ||||
|         this._owner = owner; | ||||
|         this._grabHelper = new GrabHelper.GrabHelper(owner.actor, grabParams); | ||||
|         this._grabHelper = new GrabHelper.GrabHelper(owner, grabParams); | ||||
|         this._menus = []; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -148,7 +148,7 @@ function addContextMenu(entry, params) { | ||||
|  | ||||
|     entry.menu = new EntryMenu(entry); | ||||
|     entry.menu.isPassword = params.isPassword; | ||||
|     entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry }, | ||||
|     entry._menuManager = new PopupMenu.PopupMenuManager(entry, | ||||
|                                                         { actionMode: params.actionMode }); | ||||
|     entry._menuManager.addMenu(entry.menu); | ||||
|  | ||||
|   | ||||
| @@ -39,7 +39,7 @@ class ATIndicator extends PanelMenu.Button { | ||||
|                                            icon_name: 'preferences-desktop-accessibility-symbolic' })); | ||||
|         this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); | ||||
|  | ||||
|         this.actor.add_child(this._hbox); | ||||
|         this.add_child(this._hbox); | ||||
|  | ||||
|         this._a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA }); | ||||
|         this._a11ySettings.connect('changed::' + KEY_ALWAYS_SHOW, this._queueSyncMenuVisibility.bind(this)); | ||||
| @@ -86,7 +86,7 @@ class ATIndicator extends PanelMenu.Button { | ||||
|         let alwaysShow = this._a11ySettings.get_boolean(KEY_ALWAYS_SHOW); | ||||
|         let items = this.menu._getMenuItems(); | ||||
|  | ||||
|         this.actor.visible = alwaysShow || items.some(f => !!f.state); | ||||
|         this.visible = alwaysShow || items.some(f => !!f.state); | ||||
|  | ||||
|         return GLib.SOURCE_REMOVE; | ||||
|     } | ||||
| @@ -112,38 +112,22 @@ class ATIndicator extends PanelMenu.Button { | ||||
|  | ||||
|     _buildItem(string, schema, key) { | ||||
|         let settings = new Gio.Settings({ schema_id: schema }); | ||||
|         settings.connect('changed::'+key, () => { | ||||
|         let widget = this._buildItemExtended(string, | ||||
|             settings.get_boolean(key), | ||||
|             settings.is_writable(key), | ||||
|             enabled => settings.set_boolean(key, enabled)); | ||||
|  | ||||
|         settings.connect('changed::' + key, () => { | ||||
|             widget.setToggleState(settings.get_boolean(key)); | ||||
|  | ||||
|             this._queueSyncMenuVisibility(); | ||||
|         }); | ||||
|  | ||||
|         let widget = this._buildItemExtended(string, | ||||
|             settings.get_boolean(key), | ||||
|             settings.is_writable(key), | ||||
|             enabled => settings.set_boolean(key, enabled)); | ||||
|         return widget; | ||||
|     } | ||||
|  | ||||
|     _buildHCItem() { | ||||
|         let interfaceSettings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); | ||||
|         interfaceSettings.connect('changed::' + KEY_GTK_THEME, () => { | ||||
|             let value = interfaceSettings.get_string(KEY_GTK_THEME); | ||||
|             if (value == HIGH_CONTRAST_THEME) { | ||||
|                 highContrast.setToggleState(true); | ||||
|             } else { | ||||
|                 highContrast.setToggleState(false); | ||||
|                 gtkTheme = value; | ||||
|             } | ||||
|  | ||||
|             this._queueSyncMenuVisibility(); | ||||
|         }); | ||||
|         interfaceSettings.connect('changed::' + KEY_ICON_THEME, () => { | ||||
|             let value = interfaceSettings.get_string(KEY_ICON_THEME); | ||||
|             if (value != HIGH_CONTRAST_THEME) | ||||
|                 iconTheme = value; | ||||
|         }); | ||||
|  | ||||
|         let gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME); | ||||
|         let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME); | ||||
|         let hasHC = (gtkTheme == HIGH_CONTRAST_THEME); | ||||
| @@ -164,19 +148,30 @@ class ATIndicator extends PanelMenu.Button { | ||||
|                     interfaceSettings.reset(KEY_ICON_THEME); | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|         interfaceSettings.connect('changed::' + KEY_GTK_THEME, () => { | ||||
|             let value = interfaceSettings.get_string(KEY_GTK_THEME); | ||||
|             if (value == HIGH_CONTRAST_THEME) { | ||||
|                 highContrast.setToggleState(true); | ||||
|             } else { | ||||
|                 highContrast.setToggleState(false); | ||||
|                 gtkTheme = value; | ||||
|             } | ||||
|  | ||||
|             this._queueSyncMenuVisibility(); | ||||
|         }); | ||||
|  | ||||
|         interfaceSettings.connect('changed::' + KEY_ICON_THEME, () => { | ||||
|             let value = interfaceSettings.get_string(KEY_ICON_THEME); | ||||
|             if (value != HIGH_CONTRAST_THEME) | ||||
|                 iconTheme = value; | ||||
|         }); | ||||
|  | ||||
|         return highContrast; | ||||
|     } | ||||
|  | ||||
|     _buildFontItem() { | ||||
|         let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); | ||||
|         settings.connect('changed::' + KEY_TEXT_SCALING_FACTOR, () => { | ||||
|             let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR); | ||||
|             let active = (factor > 1.0); | ||||
|             widget.setToggleState(active); | ||||
|  | ||||
|             this._queueSyncMenuVisibility(); | ||||
|         }); | ||||
|  | ||||
|         let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR); | ||||
|         let initial_setting = (factor > 1.0); | ||||
|         let widget = this._buildItemExtended(_("Large Text"), | ||||
| @@ -189,6 +184,15 @@ class ATIndicator extends PanelMenu.Button { | ||||
|                 else | ||||
|                     settings.reset(KEY_TEXT_SCALING_FACTOR); | ||||
|             }); | ||||
|  | ||||
|         settings.connect('changed::' + KEY_TEXT_SCALING_FACTOR, () => { | ||||
|             let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR); | ||||
|             let active = (factor > 1.0); | ||||
|             widget.setToggleState(active); | ||||
|  | ||||
|             this._queueSyncMenuVisibility(); | ||||
|         }); | ||||
|  | ||||
|         return widget; | ||||
|     } | ||||
| }); | ||||
|   | ||||
| @@ -118,9 +118,9 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|         // Remember if there were setup devices and show the menu | ||||
|         // if we've seen setup devices and we're not hard blocked | ||||
|         if (nDevices > 0) | ||||
|             this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode; | ||||
|             this._item.visible = !this._proxy.BluetoothHardwareAirplaneMode; | ||||
|         else | ||||
|             this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; | ||||
|             this._item.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; | ||||
|  | ||||
|         if (nConnectedDevices > 0) | ||||
|             /* Translators: this is the number of connected bluetooth devices */ | ||||
|   | ||||
| @@ -37,12 +37,12 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|  | ||||
|         let icon = new St.Icon({ icon_name: 'display-brightness-symbolic', | ||||
|                                  style_class: 'popup-menu-icon' }); | ||||
|         this._item.actor.add(icon); | ||||
|         this._item.actor.add(this._slider.actor, { expand: true }); | ||||
|         this._item.actor.connect('button-press-event', (actor, event) => { | ||||
|         this._item.add(icon); | ||||
|         this._item.add(this._slider.actor, { expand: true }); | ||||
|         this._item.connect('button-press-event', (actor, event) => { | ||||
|             return this._slider.startDragging(event); | ||||
|         }); | ||||
|         this._item.actor.connect('key-press-event', (actor, event) => { | ||||
|         this._item.connect('key-press-event', (actor, event) => { | ||||
|             return this._slider.onKeyPressEvent(actor, event); | ||||
|         }); | ||||
|  | ||||
| @@ -55,7 +55,7 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|  | ||||
|     _sync() { | ||||
|         let visible = this._proxy.Brightness >= 0; | ||||
|         this._item.actor.visible = visible; | ||||
|         this._item.visible = visible; | ||||
|         if (visible) | ||||
|             this._slider.setValue(this._proxy.Brightness / 100.0); | ||||
|     } | ||||
|   | ||||
| @@ -15,17 +15,18 @@ const Util = imports.misc.util; | ||||
| const INPUT_SOURCE_TYPE_XKB = 'xkb'; | ||||
| const INPUT_SOURCE_TYPE_IBUS = 'ibus'; | ||||
|  | ||||
| var LayoutMenuItem = class extends PopupMenu.PopupBaseMenuItem { | ||||
|     constructor(displayName, shortName) { | ||||
|         super(); | ||||
| var LayoutMenuItem = GObject.registerClass( | ||||
| class LayoutMenuItem extends PopupMenu.PopupBaseMenuItem { | ||||
|     _init(displayName, shortName) { | ||||
|         super._init(); | ||||
|  | ||||
|         this.label = new St.Label({ text: displayName }); | ||||
|         this.indicator = new St.Label({ text: shortName }); | ||||
|         this.actor.add(this.label, { expand: true }); | ||||
|         this.actor.add(this.indicator); | ||||
|         this.actor.label_actor = this.label; | ||||
|         this.add(this.label, { expand: true }); | ||||
|         this.add(this.indicator); | ||||
|         this.label_actor = this.label; | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  | ||||
| var InputSource = class { | ||||
|     constructor(type, id, displayName, shortName, index) { | ||||
| @@ -125,8 +126,8 @@ class InputSourceSwitcher extends SwitcherPopup.SwitcherList { | ||||
|  | ||||
| var InputSourceSettings = class { | ||||
|     constructor() { | ||||
|         if (new.target === InputSourceSettings) | ||||
|             throw new TypeError('Cannot instantiate abstract class ' + new.target.name); | ||||
|         if (this.constructor === InputSourceSettings) | ||||
|             throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`); | ||||
|     } | ||||
|  | ||||
|     _emitInputSourcesChanged() { | ||||
| @@ -822,7 +823,7 @@ class InputSourceIndicator extends PanelMenu.Button { | ||||
|         this._hbox.add_child(this._container); | ||||
|         this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); | ||||
|  | ||||
|         this.actor.add_child(this._hbox); | ||||
|         this.add_child(this._hbox); | ||||
|  | ||||
|         this._propSeparator = new PopupMenu.PopupSeparatorMenuItem(); | ||||
|         this.menu.addMenuItem(this._propSeparator); | ||||
| @@ -857,7 +858,7 @@ class InputSourceIndicator extends PanelMenu.Button { | ||||
|         // but at least for now it is used as "allow popping up windows | ||||
|         // from shell menus"; we can always add a separate sessionMode | ||||
|         // option if need arises. | ||||
|         this._showLayoutItem.actor.visible = Main.sessionMode.allowSettings; | ||||
|         this._showLayoutItem.visible = Main.sessionMode.allowSettings; | ||||
|     } | ||||
|  | ||||
|     _sourcesChanged() { | ||||
| @@ -908,11 +909,11 @@ class InputSourceIndicator extends PanelMenu.Button { | ||||
|             // We also hide if we have only one visible source unless | ||||
|             // it's an IBus source with properties. | ||||
|             this.menu.close(); | ||||
|             this.actor.hide(); | ||||
|             this.hide(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         this.actor.show(); | ||||
|         this.show(); | ||||
|  | ||||
|         this._buildPropSection(newSource.properties); | ||||
|  | ||||
|   | ||||
| @@ -101,12 +101,12 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|     _syncIndicator() { | ||||
|         if (this._managerProxy == null) { | ||||
|             this._indicator.visible = false; | ||||
|             this._item.actor.visible = false; | ||||
|             this._item.visible = false; | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         this._indicator.visible = this._managerProxy.InUse; | ||||
|         this._item.actor.visible = this._indicator.visible; | ||||
|         this._item.visible = this._indicator.visible; | ||||
|         this._updateMenuLabels(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -167,10 +167,10 @@ var NMConnectionItem = class { | ||||
| }; | ||||
| Signals.addSignalMethods(NMConnectionItem.prototype); | ||||
|  | ||||
| var NMConnectionSection = class { | ||||
| var NMConnectionSection = class NMConnectionSection { | ||||
|     constructor(client) { | ||||
|         if (new.target === NMConnectionSection) | ||||
|             throw new TypeError('Cannot instantiate abstract type ' + new.target.name); | ||||
|         if (this.constructor === NMConnectionSection) | ||||
|             throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`); | ||||
|  | ||||
|         this._client = client; | ||||
|  | ||||
| @@ -235,14 +235,14 @@ var NMConnectionSection = class { | ||||
|         if (!this._connectionValid(connection)) | ||||
|             return; | ||||
|  | ||||
|         // This function is called everytime connection is added or updated | ||||
|         // This function is called every time the connection is added or updated. | ||||
|         // In the usual case, we already added this connection and UUID | ||||
|         // didn't change. So we need to check if we already have an item, | ||||
|         // and update it for properties in the connection that changed | ||||
|         // (the only one we care about is the name) | ||||
|         // But it's also possible we didn't know about this connection | ||||
|         // (eg, during coldplug, or because it was updated and suddenly | ||||
|         // it's valid for this device), in which case we add a new item | ||||
|         // it's valid for this device), in which case we add a new item. | ||||
|  | ||||
|         let item = this._connectionItems.get(connection.get_uuid()); | ||||
|         if (item) | ||||
| @@ -297,12 +297,13 @@ var NMConnectionSection = class { | ||||
| }; | ||||
| Signals.addSignalMethods(NMConnectionSection.prototype); | ||||
|  | ||||
| var NMConnectionDevice = class extends NMConnectionSection { | ||||
| var NMConnectionDevice = class NMConnectionDevice extends NMConnectionSection { | ||||
|     constructor(client, device) { | ||||
|         if (new.target === NMConnectionDevice) | ||||
|             throw new TypeError('Cannot instantiate abstract type ' + new.target.name); | ||||
|  | ||||
|         super(client); | ||||
|  | ||||
|         if (this.constructor === NMConnectionDevice) | ||||
|             throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`); | ||||
|  | ||||
|         this._device = device; | ||||
|         this._description = ''; | ||||
|  | ||||
| @@ -388,8 +389,8 @@ var NMConnectionDevice = class extends NMConnectionSection { | ||||
|  | ||||
|     _sync() { | ||||
|         let nItems = this._connectionItems.size; | ||||
|         this._autoConnectItem.actor.visible = (nItems == 0); | ||||
|         this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED; | ||||
|         this._autoConnectItem.visible = (nItems == 0); | ||||
|         this._deactivateItem.visible = this._device.state > NM.DeviceState.DISCONNECTED; | ||||
|  | ||||
|         if (this._activeConnection == null) { | ||||
|             let activeConnection = this._device.active_connection; | ||||
| @@ -476,7 +477,7 @@ var NMDeviceWired = class extends NMConnectionDevice { | ||||
|     } | ||||
|  | ||||
|     _sync() { | ||||
|         this.item.actor.visible = this._hasCarrier(); | ||||
|         this.item.visible = this._hasCarrier(); | ||||
|         super._sync(); | ||||
|     } | ||||
|  | ||||
| @@ -1075,7 +1076,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog { | ||||
|  | ||||
|             let newPos = Util.insertSorted(this._networks, network, this._networkSortFunction); | ||||
|             this._createNetworkItem(network); | ||||
|             this._itemBox.insert_child_at_index(network.item.actor, newPos); | ||||
|             this._itemBox.insert_child_at_index(network.item, newPos); | ||||
|         } | ||||
|  | ||||
|         this._syncView(); | ||||
| @@ -1093,7 +1094,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog { | ||||
|         network.accessPoints.splice(res.ap, 1); | ||||
|  | ||||
|         if (network.accessPoints.length == 0) { | ||||
|             network.item.actor.destroy(); | ||||
|             network.item.destroy(); | ||||
|             this._networks.splice(res.network, 1); | ||||
|         } else { | ||||
|             network.item.updateBestAP(network.accessPoints[0]); | ||||
| @@ -1109,7 +1110,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog { | ||||
|  | ||||
|         this._itemBox.remove_all_children(); | ||||
|         this._networks.forEach(network => { | ||||
|             this._itemBox.add_child(network.item.actor); | ||||
|             this._itemBox.add_child(network.item); | ||||
|         }); | ||||
|  | ||||
|         adjustment.value = scrollValue; | ||||
| @@ -1117,25 +1118,25 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog { | ||||
|  | ||||
|     _selectNetwork(network) { | ||||
|         if (this._selectedNetwork) | ||||
|             this._selectedNetwork.item.actor.remove_style_pseudo_class('selected'); | ||||
|             this._selectedNetwork.item.remove_style_pseudo_class('selected'); | ||||
|  | ||||
|         this._selectedNetwork = network; | ||||
|         this._updateSensitivity(); | ||||
|  | ||||
|         if (this._selectedNetwork) | ||||
|             this._selectedNetwork.item.actor.add_style_pseudo_class('selected'); | ||||
|             this._selectedNetwork.item.add_style_pseudo_class('selected'); | ||||
|     } | ||||
|  | ||||
|     _createNetworkItem(network) { | ||||
|         network.item = new NMWirelessDialogItem(network); | ||||
|         network.item.setActive(network == this._selectedNetwork); | ||||
|         network.item.connect('selected', () => { | ||||
|             Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor); | ||||
|             Util.ensureActorVisibleInScrollView(this._scrollView, network.item); | ||||
|             this._selectNetwork(network); | ||||
|         }); | ||||
|         network.item.actor.connect('destroy', () => { | ||||
|         network.item.connect('destroy', () => { | ||||
|             let keyFocus = global.stage.key_focus; | ||||
|             if (keyFocus && keyFocus.contains(network.item.actor)) | ||||
|             if (keyFocus && keyFocus.contains(network.item)) | ||||
|                 this._itemBox.grab_key_focus(); | ||||
|         }); | ||||
|     } | ||||
| @@ -1261,7 +1262,7 @@ var NMDeviceWireless = class { | ||||
|  | ||||
|     _sync() { | ||||
|         this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On"); | ||||
|         this._toggleItem.actor.visible = this._client.wireless_hardware_enabled; | ||||
|         this._toggleItem.visible = this._client.wireless_hardware_enabled; | ||||
|  | ||||
|         this.item.icon.icon_name = this._getMenuIcon(); | ||||
|         this.item.label.text = this._getStatus(); | ||||
| @@ -1451,7 +1452,7 @@ var NMVpnSection = class extends NMConnectionSection { | ||||
|  | ||||
|     _sync() { | ||||
|         let nItems = this._connectionItems.size; | ||||
|         this.item.actor.visible = (nItems > 0); | ||||
|         this.item.visible = (nItems > 0); | ||||
|  | ||||
|         super._sync(); | ||||
|     } | ||||
| @@ -1534,7 +1535,7 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection { | ||||
|  | ||||
|         this._summaryItem.menu.addSettingsAction(_('Network Settings'), | ||||
|                                                  'gnome-network-panel.desktop'); | ||||
|         this._summaryItem.actor.hide(); | ||||
|         this._summaryItem.hide(); | ||||
|  | ||||
|     } | ||||
|  | ||||
| @@ -1543,7 +1544,7 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection { | ||||
|             (prev, child) => prev + (child.visible ? 1 : 0), 0); | ||||
|         this._summaryItem.label.text = this._getSummaryLabel(nDevices); | ||||
|         let shouldSummarize = nDevices > MAX_DEVICE_ITEMS; | ||||
|         this._summaryItem.actor.visible = shouldSummarize; | ||||
|         this._summaryItem.visible = shouldSummarize; | ||||
|         this.section.actor.visible = !shouldSummarize; | ||||
|     } | ||||
|  | ||||
| @@ -1730,14 +1731,24 @@ var NMApplet = class extends PanelMenu.SystemIndicator { | ||||
|             this._addDeviceWrapper(wrapper); | ||||
|  | ||||
|             this._nmDevices.push(device); | ||||
|             if (!skipSyncDeviceNames) | ||||
|                 this._syncDeviceNames(); | ||||
|             this._deviceChanged(device, skipSyncDeviceNames); | ||||
|  | ||||
|             if (wrapper instanceof NMConnectionSection) { | ||||
|                 this._connections.forEach(connection => { | ||||
|                     wrapper.checkConnection(connection); | ||||
|                 }); | ||||
|             } | ||||
|             device.connect('notify::interface', () => { | ||||
|                 this._deviceChanged(device, false); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     _deviceChanged(device, skipSyncDeviceNames) { | ||||
|         let wrapper = device._delegate; | ||||
|  | ||||
|         if (!skipSyncDeviceNames) | ||||
|             this._syncDeviceNames(); | ||||
|  | ||||
|         if (wrapper instanceof NMConnectionSection) { | ||||
|             this._connections.forEach(connection => { | ||||
|                 wrapper.checkConnection(connection); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -61,6 +61,6 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|                                          : _("Night Light On"); | ||||
|         this._disableItem.label.text = disabled ? _("Resume") | ||||
|                                                 : _("Disable Until Tomorrow"); | ||||
|         this._item.actor.visible = this._indicator.visible = visible; | ||||
|         this._item.visible = this._indicator.visible = visible; | ||||
|     } | ||||
| }; | ||||
|   | ||||
| @@ -96,11 +96,11 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|         // Do we have batteries or a UPS? | ||||
|         let visible = this._proxy.IsPresent; | ||||
|         if (visible) { | ||||
|             this._item.actor.show(); | ||||
|             this._item.show(); | ||||
|             this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE); | ||||
|         } else { | ||||
|             // If there's no battery, then we use the power icon. | ||||
|             this._item.actor.hide(); | ||||
|             this._item.hide(); | ||||
|             this._indicator.icon_name = 'system-shutdown-symbolic'; | ||||
|             this._percentageLabel.hide(); | ||||
|             return; | ||||
|   | ||||
| @@ -53,10 +53,10 @@ var RemoteAccessApplet = class extends PanelMenu.SystemIndicator { | ||||
|     _sync() { | ||||
|         if (this._handles.size == 0) { | ||||
|             this._indicator.visible = false; | ||||
|             this._item.actor.visible = false; | ||||
|             this._item.visible = false; | ||||
|         } else { | ||||
|             this._indicator.visible = true; | ||||
|             this._item.actor.visible = true; | ||||
|             this._item.visible = true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -97,7 +97,7 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|         let showAirplaneMode = this._manager.shouldShowAirplaneMode; | ||||
|  | ||||
|         this._indicator.visible = (airplaneMode && showAirplaneMode); | ||||
|         this._item.actor.visible = (airplaneMode && showAirplaneMode); | ||||
|         this._item.visible = (airplaneMode && showAirplaneMode); | ||||
|         this._offItem.setSensitive(!hwAirplaneMode); | ||||
|  | ||||
|         if (hwAirplaneMode) | ||||
|   | ||||
| @@ -116,10 +116,10 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|  | ||||
|         this._createSubMenu(); | ||||
|  | ||||
|         this._loginScreenItem.actor.connect('notify::visible', | ||||
|                                             () => { this._updateMultiUser(); }); | ||||
|         this._logoutItem.actor.connect('notify::visible', | ||||
|                                        () => { this._updateMultiUser(); }); | ||||
|         this._loginScreenItem.connect('notify::visible', | ||||
|                                       () => { this._updateMultiUser(); }); | ||||
|         this._logoutItem.connect('notify::visible', | ||||
|                                  () => { this._updateMultiUser(); }); | ||||
|         // Whether shutdown is available or not depends on both lockdown | ||||
|         // settings (disable-log-out) and Polkit policy - the latter doesn't | ||||
|         // notify, so we update the menu item each time the menu opens or | ||||
| @@ -142,7 +142,7 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|                        this._lockScreenAction.visible || | ||||
|                        this._altSwitcher.actor.visible); | ||||
|  | ||||
|         this._actionsItem.actor.visible = visible; | ||||
|         this.buttonGroup.visible = visible; | ||||
|     } | ||||
|  | ||||
|     _sessionUpdated() { | ||||
| @@ -150,10 +150,10 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|     } | ||||
|  | ||||
|     _updateMultiUser() { | ||||
|         let hasSwitchUser = this._loginScreenItem.actor.visible; | ||||
|         let hasLogout = this._logoutItem.actor.visible; | ||||
|         let hasSwitchUser = this._loginScreenItem.visible; | ||||
|         let hasLogout = this._logoutItem.visible; | ||||
|  | ||||
|         this._switchUserSubMenu.actor.visible = hasSwitchUser || hasLogout; | ||||
|         this._switchUserSubMenu.visible = hasSwitchUser || hasLogout; | ||||
|     } | ||||
|  | ||||
|     _updateSwitchUserSubMenu() { | ||||
| @@ -208,7 +208,7 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|         this._switchUserSubMenu.menu.addMenuItem(item); | ||||
|         this._loginScreenItem = item; | ||||
|         this._systemActions.bind_property('can-switch-user', | ||||
|                                           this._loginScreenItem.actor, | ||||
|                                           this._loginScreenItem, | ||||
|                                           'visible', | ||||
|                                           bindFlags); | ||||
|  | ||||
| @@ -220,7 +220,7 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|         this._switchUserSubMenu.menu.addMenuItem(item); | ||||
|         this._logoutItem = item; | ||||
|         this._systemActions.bind_property('can-logout', | ||||
|                                           this._logoutItem.actor, | ||||
|                                           this._logoutItem, | ||||
|                                           'visible', | ||||
|                                           bindFlags); | ||||
|  | ||||
| @@ -236,7 +236,7 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|  | ||||
|         item = new PopupMenu.PopupBaseMenuItem({ reactive: false, | ||||
|                                                  can_focus: false }); | ||||
|         this.buttonGroup = item.actor; | ||||
|         this.buttonGroup = item; | ||||
|  | ||||
|         let app = this._settingsApp = Shell.AppSystem.get_default().lookup_app( | ||||
|             'gnome-control-center.desktop' | ||||
| @@ -251,14 +251,14 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|             log('Missing required core component Settings, expect trouble…'); | ||||
|             this._settingsAction = new St.Widget(); | ||||
|         } | ||||
|         item.actor.add(this._settingsAction, { expand: true, x_fill: false }); | ||||
|         item.add(this._settingsAction, { expand: true, x_fill: false }); | ||||
|  | ||||
|         this._orientationLockAction = this._createActionButton('', _("Orientation Lock")); | ||||
|         this._orientationLockAction.connect('clicked', () => { | ||||
|             this.menu.itemActivated(BoxPointer.PopupAnimation.NONE), | ||||
|             this._systemActions.activateLockOrientation(); | ||||
|         }); | ||||
|         item.actor.add(this._orientationLockAction, { expand: true, x_fill: false }); | ||||
|         item.add(this._orientationLockAction, { expand: true, x_fill: false }); | ||||
|         this._systemActions.bind_property('can-lock-orientation', | ||||
|                                           this._orientationLockAction, | ||||
|                                           'visible', | ||||
| @@ -273,7 +273,7 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|             this.menu.itemActivated(BoxPointer.PopupAnimation.NONE); | ||||
|             this._systemActions.activateLockScreen(); | ||||
|         }); | ||||
|         item.actor.add(this._lockScreenAction, { expand: true, x_fill: false }); | ||||
|         item.add(this._lockScreenAction, { expand: true, x_fill: false }); | ||||
|         this._systemActions.bind_property('can-lock-screen', | ||||
|                                           this._lockScreenAction, | ||||
|                                           'visible', | ||||
| @@ -300,9 +300,8 @@ var Indicator = class extends PanelMenu.SystemIndicator { | ||||
|                                           bindFlags); | ||||
|  | ||||
|         this._altSwitcher = new AltSwitcher(this._powerOffAction, this._suspendAction); | ||||
|         item.actor.add(this._altSwitcher.actor, { expand: true, x_fill: false }); | ||||
|         item.add(this._altSwitcher.actor, { expand: true, x_fill: false }); | ||||
|  | ||||
|         this._actionsItem = item; | ||||
|         this.menu.addMenuItem(item); | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -41,12 +41,12 @@ var StreamSlider = class { | ||||
|         this._slider.connect('drag-end', this._notifyVolumeChange.bind(this)); | ||||
|  | ||||
|         this._icon = new St.Icon({ style_class: 'popup-menu-icon' }); | ||||
|         this.item.actor.add(this._icon); | ||||
|         this.item.actor.add(this._slider.actor, { expand: true }); | ||||
|         this.item.actor.connect('button-press-event', (actor, event) => { | ||||
|         this.item.add(this._icon); | ||||
|         this.item.add(this._slider.actor, { expand: true }); | ||||
|         this.item.connect('button-press-event', (actor, event) => { | ||||
|             return this._slider.startDragging(event); | ||||
|         }); | ||||
|         this.item.actor.connect('key-press-event', (actor, event) => { | ||||
|         this.item.connect('key-press-event', (actor, event) => { | ||||
|             return this._slider.onKeyPressEvent(actor, event); | ||||
|         }); | ||||
|  | ||||
| @@ -93,7 +93,7 @@ var StreamSlider = class { | ||||
|  | ||||
|     _updateVisibility() { | ||||
|         let visible = this._shouldBeVisible(); | ||||
|         this.item.actor.visible = visible; | ||||
|         this.item.visible = visible; | ||||
|     } | ||||
|  | ||||
|     scroll(event) { | ||||
|   | ||||
| @@ -30,12 +30,10 @@ function primaryModifier(mask) { | ||||
|     return primary; | ||||
| } | ||||
|  | ||||
| var SwitcherPopup = GObject.registerClass( | ||||
| class SwitcherPopup extends St.Widget { | ||||
| var SwitcherPopup = GObject.registerClass({ | ||||
|     GTypeFlags: GObject.TypeFlags.ABSTRACT | ||||
| }, class SwitcherPopup extends St.Widget { | ||||
|     _init(items) { | ||||
|         if (new.target === SwitcherPopup) | ||||
|             throw new TypeError('Cannot instantiate abstract class ' + new.target.name); | ||||
|  | ||||
|         super._init({ style_class: 'switcher-popup', | ||||
|                       reactive: true, | ||||
|                       visible: false }); | ||||
|   | ||||
| @@ -152,7 +152,7 @@ function registerSpecialPropertySplitter(name, splitFunction, parameters) { | ||||
| // Tweener to a Clutter.TimeLine. Now, Clutter.Timeline itself isn't a | ||||
| // whole lot more sophisticated than a simple timeout at a fixed frame | ||||
| // rate, but at least it knows how to drop frames. (See | ||||
| // HippoAnimationManager for a more sophisticated view of continous | ||||
| // HippoAnimationManager for a more sophisticated view of continuous | ||||
| // time updates; even better is to pay attention to the vertical | ||||
| // vblank and sync to that when possible.) | ||||
| // | ||||
|   | ||||
| @@ -59,7 +59,7 @@ var DisplayChangeDialog = class extends ModalDialog.ModalDialog { | ||||
|                                { x_fill: true, | ||||
|                                  y_fill: true }); | ||||
|  | ||||
|         /* Translators: this and the following message should be limited in lenght, | ||||
|         /* Translators: this and the following message should be limited in length, | ||||
|            to avoid ellipsizing the labels. | ||||
|         */ | ||||
|         this._cancelButton = this.addButton({ label: _("Revert Settings"), | ||||
| @@ -1488,8 +1488,13 @@ var WindowManager = class { | ||||
|         if (this._clearAnimationInfo(actor)) | ||||
|             this._shellwm.completed_size_change(actor); | ||||
|  | ||||
|         let destroyId = actor.connect('destroy', () => { | ||||
|             this._clearAnimationInfo(actor); | ||||
|         }); | ||||
|  | ||||
|         actor.__animationInfo = { clone: actorClone, | ||||
|                                   oldRect: oldFrameRect }; | ||||
|                                   oldRect: oldFrameRect, | ||||
|                                   destroyId: destroyId }; | ||||
|     } | ||||
|  | ||||
|     _sizeChangedWindow(shellwm, actor) { | ||||
| @@ -1550,6 +1555,7 @@ var WindowManager = class { | ||||
|     _clearAnimationInfo(actor) { | ||||
|         if (actor.__animationInfo) { | ||||
|             actor.__animationInfo.clone.destroy(); | ||||
|             actor.disconnect(actor.__animationInfo.destroyId); | ||||
|             delete actor.__animationInfo; | ||||
|             return true; | ||||
|         } | ||||
| @@ -1864,17 +1870,25 @@ var WindowManager = class { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     _getPositionForDirection(direction) { | ||||
|     _getPositionForDirection(direction, fromWs, toWs) { | ||||
|         let xDest = 0, yDest = 0; | ||||
|  | ||||
|         let oldWsIsFullscreen = fromWs.list_windows().some(w => w.is_fullscreen()); | ||||
|         let newWsIsFullscreen = toWs.list_windows().some(w => w.is_fullscreen()); | ||||
|  | ||||
|         // We have to shift windows up or down by the height of the panel to prevent having a | ||||
|         // visible gap between the windows while switching workspaces. Since fullscreen windows | ||||
|         // hide the panel, they don't need to be shifted up or down. | ||||
|         let shiftHeight = Main.panel.height; | ||||
|  | ||||
|         if (direction == Meta.MotionDirection.UP || | ||||
|             direction == Meta.MotionDirection.UP_LEFT || | ||||
|             direction == Meta.MotionDirection.UP_RIGHT) | ||||
|             yDest = -global.screen_height + Main.panel.height; | ||||
|             yDest = -global.screen_height + (oldWsIsFullscreen ? 0 : shiftHeight); | ||||
|         else if (direction == Meta.MotionDirection.DOWN || | ||||
|             direction == Meta.MotionDirection.DOWN_LEFT || | ||||
|             direction == Meta.MotionDirection.DOWN_RIGHT) | ||||
|             yDest = global.screen_height - Main.panel.height; | ||||
|             yDest = global.screen_height - (newWsIsFullscreen ? 0 : shiftHeight); | ||||
|  | ||||
|         if (direction == Meta.MotionDirection.LEFT || | ||||
|             direction == Meta.MotionDirection.UP_LEFT || | ||||
| @@ -1932,7 +1946,7 @@ var WindowManager = class { | ||||
|             switchData.container.add_actor(info.actor); | ||||
|             info.actor.raise_top(); | ||||
|  | ||||
|             let [x, y] = this._getPositionForDirection(dir); | ||||
|             let [x, y] = this._getPositionForDirection(dir, curWs, ws); | ||||
|             info.actor.set_position(x, y); | ||||
|         } | ||||
|  | ||||
| @@ -2018,7 +2032,11 @@ var WindowManager = class { | ||||
|  | ||||
|         this._switchData.inProgress = true; | ||||
|  | ||||
|         let [xDest, yDest] = this._getPositionForDirection(direction); | ||||
|         let workspaceManager = global.workspace_manager; | ||||
|         let fromWs = workspaceManager.get_workspace_by_index(from); | ||||
|         let toWs = workspaceManager.get_workspace_by_index(to); | ||||
|  | ||||
|         let [xDest, yDest] = this._getPositionForDirection(direction, fromWs, toWs); | ||||
|  | ||||
|         /* @direction is the direction that the "camera" moves, so the | ||||
|          * screen contents have to move one screen's worth in the | ||||
|   | ||||
| @@ -173,7 +173,7 @@ var WindowMenu = class extends PopupMenu.PopupMenu { | ||||
|  | ||||
| var WindowMenuManager = class { | ||||
|     constructor() { | ||||
|         this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor }); | ||||
|         this._manager = new PopupMenu.PopupMenuManager(Main.layoutManager.dummyCursor); | ||||
|  | ||||
|         this._sourceActor = new St.Widget({ reactive: true, visible: false }); | ||||
|         this._sourceActor.connect('button-press-event', () => { | ||||
|   | ||||
| @@ -786,8 +786,8 @@ var WindowPositionFlags = { | ||||
|  | ||||
| var LayoutStrategy = class { | ||||
|     constructor(monitor, rowSpacing, columnSpacing) { | ||||
|         if (new.target === LayoutStrategy) | ||||
|             throw new TypeError('Cannot instantiate abstract type ' + new.target.name); | ||||
|         if (this.constructor === LayoutStrategy) | ||||
|             throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`); | ||||
|  | ||||
|         this._monitor = monitor; | ||||
|         this._rowSpacing = rowSpacing; | ||||
| @@ -813,7 +813,7 @@ var LayoutStrategy = class { | ||||
|     } | ||||
|  | ||||
|     // Computes and returns an individual scaling factor for @window, | ||||
|     // to be applied in addition to the overal layout scale. | ||||
|     // to be applied in addition to the overall layout scale. | ||||
|     _computeWindowScale(window) { | ||||
|         // Since we align windows next to each other, the height of the | ||||
|         // thumbnails is much more important to preserve than the width of | ||||
| @@ -1266,7 +1266,7 @@ var Workspace = class { | ||||
|         } | ||||
|  | ||||
|         // We will reposition windows anyway when enter again overview or when ending the windows | ||||
|         // animations whith fade animation. | ||||
|         // animations with fade animation. | ||||
|         // In this way we avoid unwanted animations of windows repositioning while | ||||
|         // animating overview. | ||||
|         if (this.leavingOverview || this._animatingWindowsFade) | ||||
| @@ -1886,10 +1886,10 @@ var Workspace = class { | ||||
|             // Win win -- better scale and better space | ||||
|             return true; | ||||
|         } else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) { | ||||
|             // Keep new layout only if scale gain outweights aspect space loss | ||||
|             // Keep new layout only if scale gain outweighs aspect space loss | ||||
|             return scalePower > spacePower; | ||||
|         } else if (newLayout.scale <= oldLayout.scale && newLayout.space > oldLayout.space) { | ||||
|             // Keep new layout only if aspect space gain outweights scale loss | ||||
|             // Keep new layout only if aspect space gain outweighs scale loss | ||||
|             return spacePower > scalePower; | ||||
|         } else { | ||||
|             // Lose -- worse scale and space | ||||
|   | ||||
| @@ -85,8 +85,6 @@ class WorkspaceSwitcherPopup extends St.Widget { | ||||
|                       height: global.screen_height, | ||||
|                       style_class: 'workspace-switcher-group' }); | ||||
|  | ||||
|         this.actor = this; | ||||
|  | ||||
|         Main.uiGroup.add_actor(this); | ||||
|  | ||||
|         this._timeoutId = 0; | ||||
| @@ -142,7 +140,7 @@ class WorkspaceSwitcherPopup extends St.Widget { | ||||
|                                             time: ANIMATION_TIME, | ||||
|                                             transition: 'easeOutQuad' | ||||
|                                            }); | ||||
|         this.actor.show(); | ||||
|         this.show(); | ||||
|     } | ||||
|  | ||||
|     display(direction, activeWorkspaceIndex) { | ||||
|   | ||||
| @@ -601,8 +601,7 @@ class ThumbnailsBox extends St.Widget { | ||||
|                       style_class: 'workspace-thumbnails', | ||||
|                       request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT }); | ||||
|  | ||||
|         this.actor = this; | ||||
|         this.actor._delegate = this; | ||||
|         this._delegate = this; | ||||
|  | ||||
|         let indicator = new St.Bin({ style_class: 'workspace-thumbnail-indicator' }); | ||||
|  | ||||
|   | ||||
| @@ -84,7 +84,7 @@ var WorkspacesView = class extends WorkspacesViewBase { | ||||
|         this._animating = false; // tweening | ||||
|         this._scrolling = false; // swipe-scrolling | ||||
|         this._gestureActive = false; // touch(pad) gestures | ||||
|         this._animatingScroll = false; // programatically updating the adjustment | ||||
|         this._animatingScroll = false; // programmatically updating the adjustment | ||||
|  | ||||
|         let activeWorkspaceIndex = workspaceManager.get_active_workspace_index(); | ||||
|         this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex, | ||||
| @@ -479,12 +479,12 @@ var WorkspacesDisplay = class { | ||||
|         this.actor.connect('notify::mapped', () => { | ||||
|             switchGesture.enabled = this.actor.mapped; | ||||
|         }); | ||||
|         switchGesture.enabled = this.actor.mapped; | ||||
|  | ||||
|         this._primaryIndex = Main.layoutManager.primaryIndex; | ||||
|  | ||||
|         this._workspacesViews = []; | ||||
|         this._primaryScrollAdjustment = null; | ||||
|         switchGesture.enabled = this.actor.mapped; | ||||
|  | ||||
|         this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA }); | ||||
|         this._settings.connect('changed::workspaces-only-on-primary', | ||||
|   | ||||
							
								
								
									
										50
									
								
								meson.build
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								meson.build
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| project('gnome-shell', 'c', | ||||
|   version: '3.32.0', | ||||
|   version: '3.33.1', | ||||
|   meson_version: '>= 0.47.0', | ||||
|   license: 'GPLv2+' | ||||
| ) | ||||
| @@ -14,7 +14,7 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version | ||||
| libmutter_pc = 'libmutter-' + mutter_api_version | ||||
|  | ||||
| croco_req = '>= 0.6.8' | ||||
| ecal_req = '>= 3.5.3' | ||||
| ecal_req = '>= 3.33.1' | ||||
| eds_req = '>= 3.17.2' | ||||
| gcr_req = '>= 3.7.5' | ||||
| gdesktop_req = '>= 3.7.90' | ||||
| @@ -23,7 +23,7 @@ gi_req = '>= 1.49.1' | ||||
| gjs_req = '>= 1.54.0' | ||||
| gtk_req = '>= 3.15.0' | ||||
| json_glib_req = '>= 0.13.2' | ||||
| mutter_req = '>= 3.32.0' | ||||
| mutter_req = '>= 3.33.1' | ||||
| polkit_req = '>= 0.100' | ||||
| schemas_req = '>= 3.27.90' | ||||
| startup_req = '>= 0.11' | ||||
| @@ -73,7 +73,7 @@ else | ||||
| endif | ||||
|  | ||||
| atk_bridge_dep = dependency('atk-bridge-2.0') | ||||
| ecal_dep = dependency('libecal-1.2', version: ecal_req) | ||||
| ecal_dep = dependency('libecal-2.0', version: ecal_req) | ||||
| eds_dep = dependency('libedataserver-1.2', version: eds_req) | ||||
| gcr_dep = dependency('gcr-base-3', version: gcr_req) | ||||
| gdk_x11_dep = dependency('gdk-x11-3.0') | ||||
| @@ -167,6 +167,48 @@ cdata.set('HAVE_FDWALK', | ||||
|           cc.has_function('fdwalk') | ||||
| ) | ||||
|  | ||||
| all_warnings = [ | ||||
|   '-fno-strict-aliasing', | ||||
|   '-Wpointer-arith', | ||||
|   '-Wmissing-declarations', | ||||
|   '-Wimplicit-function-declaration', | ||||
|   '-Wformat=2', | ||||
|   '-Wformat-nonliteral', | ||||
|   '-Wformat-security', | ||||
|   '-Wstrict-prototypes', | ||||
|   '-Wmissing-prototypes', | ||||
|   '-Wnested-externs', | ||||
|   '-Wold-style-definition', | ||||
|   '-Wundef', | ||||
|   '-Wunused', | ||||
|   '-Wcast-align', | ||||
|   '-Wmissing-noreturn', | ||||
|   '-Wmissing-format-attribute', | ||||
|   '-Wmissing-include-dirs', | ||||
|   '-Wlogical-op', | ||||
|   '-Wignored-qualifiers', | ||||
|   '-Werror=redundant-decls', | ||||
|   '-Werror=implicit', | ||||
|   '-Werror=nonnull', | ||||
|   '-Werror=init-self', | ||||
|   '-Werror=main', | ||||
|   '-Werror=missing-braces', | ||||
|   '-Werror=sequence-point', | ||||
|   '-Werror=return-type', | ||||
|   '-Werror=trigraphs', | ||||
|   '-Werror=array-bounds', | ||||
|   '-Werror=write-strings', | ||||
|   '-Werror=address', | ||||
|   '-Werror=int-to-pointer-cast', | ||||
|   '-Werror=pointer-to-int-cast', | ||||
|   '-Werror=empty-body', | ||||
|   '-Werror=write-strings', | ||||
| ] | ||||
|  | ||||
| supported_warnings = cc.get_supported_arguments(all_warnings) | ||||
|  | ||||
| add_project_arguments(supported_warnings, language: 'c') | ||||
|  | ||||
| config_h = configure_file( | ||||
|   input: 'config.h.meson', | ||||
|   output: 'config.h', | ||||
|   | ||||
							
								
								
									
										128
									
								
								po/de.po
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								po/de.po
									
									
									
									
									
								
							| @@ -16,14 +16,14 @@ | ||||
| # Benjamin Steinwender <b@stbe.at>, 2013-2014. | ||||
| # Bernd Homuth <dev@hmt.im>, 2014-2015, 2016, 2019. | ||||
| # Franco Della-Monica <franco.della.monica@gmail.com>, 2016. | ||||
| # Tim Sabsch <tim@sabsch.com>, 2018. | ||||
| # Tim Sabsch <tim@sabsch.com>, 2018-2019. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2019-03-02 19:56+0000\n" | ||||
| "PO-Revision-Date: 2019-03-02 21:13+0100\n" | ||||
| "POT-Creation-Date: 2019-05-08 10:16+0000\n" | ||||
| "PO-Revision-Date: 2019-05-12 12:36+0200\n" | ||||
| "Last-Translator: Tim Sabsch <tim@sabsch.com>\n" | ||||
| "Language-Team: Deutsch <gnome-de@gnome.org>\n" | ||||
| "Language: de\n" | ||||
| @@ -390,11 +390,6 @@ msgstr "" | ||||
| msgid "Network Login" | ||||
| msgstr "Netzwerkanmeldung" | ||||
|  | ||||
| #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! | ||||
| #: data/org.gnome.Shell.PortalHelper.desktop.in.in:9 | ||||
| msgid "network-workgroup" | ||||
| msgstr "network-workgroup" | ||||
|  | ||||
| #: js/extensionPrefs/main.js:116 | ||||
| msgid "Something’s gone wrong" | ||||
| msgstr "Etwas ist schiefgelaufen" | ||||
| @@ -542,7 +537,7 @@ msgstr "abmelden;verlassen" | ||||
| #: js/misc/systemActions.js:109 | ||||
| msgctxt "search-result" | ||||
| msgid "Suspend" | ||||
| msgstr "In Bereitschaft versetzen" | ||||
| msgstr "Bereitschaft" | ||||
|  | ||||
| #. Translators: A list of keywords that match the suspend action, separated by semicolons | ||||
| #: js/misc/systemActions.js:112 | ||||
| @@ -762,12 +757,12 @@ msgstr "Zu Favoriten hinzufügen" | ||||
| msgid "Show Details" | ||||
| msgstr "Details anzeigen" | ||||
|  | ||||
| #: js/ui/appFavorites.js:141 | ||||
| #: js/ui/appFavorites.js:149 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s wurde zu Ihren Favoriten hinzugefügt" | ||||
|  | ||||
| #: js/ui/appFavorites.js:175 | ||||
| #: js/ui/appFavorites.js:183 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s wurde aus Ihren Favoriten entfernt" | ||||
| @@ -1053,7 +1048,7 @@ msgstr "Passwort der mobilen Breitbandverbindung" | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden." | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665 | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664 | ||||
| msgid "Network Manager" | ||||
| msgstr "Netzwerk-Verwaltung" | ||||
|  | ||||
| @@ -1125,23 +1120,23 @@ msgstr "Weltuhren hinzufügen …" | ||||
| msgid "World Clocks" | ||||
| msgstr "Weltuhren" | ||||
|  | ||||
| #: js/ui/dateMenu.js:222 | ||||
| #: js/ui/dateMenu.js:228 | ||||
| msgid "Weather" | ||||
| msgstr "Wetter" | ||||
|  | ||||
| #: js/ui/dateMenu.js:305 | ||||
| #: js/ui/dateMenu.js:311 | ||||
| msgid "Select a location…" | ||||
| msgstr "Ort auswählen …" | ||||
|  | ||||
| #: js/ui/dateMenu.js:313 | ||||
| #: js/ui/dateMenu.js:319 | ||||
| msgid "Loading…" | ||||
| msgstr "Wird geladen …" | ||||
|  | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #: js/ui/dateMenu.js:329 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Gehen Sie Online, um Wetterinformationen beziehen zu können" | ||||
|  | ||||
| #: js/ui/dateMenu.js:325 | ||||
| #: js/ui/dateMenu.js:331 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Wetterinformationen sind momentan nicht verfügbar" | ||||
|  | ||||
| @@ -1304,26 +1299,26 @@ msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "»%s« von extensions.gnome.org herunterladen und installieren?" | ||||
|  | ||||
| #. Translators: %s is an application name like "Settings" | ||||
| #: js/ui/inhibitShortcutsDialog.js:50 | ||||
| #: js/ui/inhibitShortcutsDialog.js:78 | ||||
| #, javascript-format | ||||
| msgid "%s wants to inhibit shortcuts" | ||||
| msgstr "%s möchte Tastenkombinationen sperren" | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:51 | ||||
| #: js/ui/inhibitShortcutsDialog.js:79 | ||||
| msgid "Application wants to inhibit shortcuts" | ||||
| msgstr "Die Anwendung möchte Tastenkombinationen sperren" | ||||
|  | ||||
| #. Translators: %s is a keyboard shortcut like "Super+x" | ||||
| #: js/ui/inhibitShortcutsDialog.js:60 | ||||
| #: js/ui/inhibitShortcutsDialog.js:88 | ||||
| #, javascript-format | ||||
| msgid "You can restore shortcuts by pressing %s." | ||||
| msgstr "Sie können Tastenkombinationen durch Drücken von %s wiederherstellen." | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:65 | ||||
| #: js/ui/inhibitShortcutsDialog.js:93 | ||||
| msgid "Deny" | ||||
| msgstr "Ablehnen" | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:71 | ||||
| #: js/ui/inhibitShortcutsDialog.js:100 | ||||
| msgid "Allow" | ||||
| msgstr "Zulassen" | ||||
|  | ||||
| @@ -1376,13 +1371,13 @@ msgid "Leave On" | ||||
| msgstr "Eingeschaltet lassen" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:1264 | ||||
| #: js/ui/status/network.js:1263 | ||||
| msgid "Turn On" | ||||
| msgstr "Einschalten" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:310 | ||||
| #: js/ui/status/network.js:1264 js/ui/status/network.js:1376 | ||||
| #: js/ui/status/network.js:1263 js/ui/status/network.js:1375 | ||||
| #: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79 | ||||
| #: js/ui/status/rfkill.js:106 | ||||
| msgid "Turn Off" | ||||
| @@ -1392,7 +1387,7 @@ msgstr "Ausschalten" | ||||
| msgid "Leave Off" | ||||
| msgstr "Ausgeschaltet lassen" | ||||
|  | ||||
| #: js/ui/keyboard.js:203 | ||||
| #: js/ui/keyboard.js:200 | ||||
| msgid "Region & Language Settings" | ||||
| msgstr "Regions- und Spracheinstellungen" | ||||
|  | ||||
| @@ -1444,7 +1439,7 @@ msgstr "Quelle zeigen" | ||||
| msgid "Web Page" | ||||
| msgstr "Webseite" | ||||
|  | ||||
| #: js/ui/messageTray.js:1474 | ||||
| #: js/ui/messageTray.js:1480 | ||||
| msgid "System Information" | ||||
| msgstr "Systeminformationen" | ||||
|  | ||||
| @@ -1528,11 +1523,11 @@ msgstr "Beenden" | ||||
|  | ||||
| #. Translators: If there is no suitable word for "Activities" | ||||
| #. in your language, you can use the word for "Overview". | ||||
| #: js/ui/panel.js:471 | ||||
| #: js/ui/panel.js:470 | ||||
| msgid "Activities" | ||||
| msgstr "Aktivitäten" | ||||
|  | ||||
| #: js/ui/panel.js:746 | ||||
| #: js/ui/panel.js:745 | ||||
| msgctxt "System menu in the top bar" | ||||
| msgid "System" | ||||
| msgstr "System" | ||||
| @@ -1541,15 +1536,6 @@ msgstr "System" | ||||
| msgid "Top Bar" | ||||
| msgstr "Oberes Panel" | ||||
|  | ||||
| #. Translators: this MUST be either "toggle-switch-us" | ||||
| #. (for toggle switches containing the English words | ||||
| #. "ON" and "OFF") or "toggle-switch-intl" (for toggle | ||||
| #. switches containing "◯" and "|"). Other values will | ||||
| #. simply result in invisible toggle switches. | ||||
| #: js/ui/popupMenu.js:285 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-intl" | ||||
|  | ||||
| #: js/ui/runDialog.js:64 | ||||
| msgid "Enter a Command" | ||||
| msgstr "Bitte geben Sie einen Befehl ein" | ||||
| @@ -1589,7 +1575,7 @@ msgid_plural "%d new notifications" | ||||
| msgstr[0] "%d neue Benachrichtigung" | ||||
| msgstr[1] "%d neue Benachrichtigungen" | ||||
|  | ||||
| #: js/ui/screenShield.js:449 js/ui/status/system.js:270 | ||||
| #: js/ui/screenShield.js:449 js/ui/status/system.js:271 | ||||
| msgid "Lock" | ||||
| msgstr "Sperren" | ||||
|  | ||||
| @@ -1604,11 +1590,11 @@ msgstr "GNOME muss den Bildschirm sperren" | ||||
| #. | ||||
| #. XXX: another option is to kick the user into the gdm login | ||||
| #. screen, where we're not affected by grabs | ||||
| #: js/ui/screenShield.js:834 js/ui/screenShield.js:1307 | ||||
| #: js/ui/screenShield.js:826 js/ui/screenShield.js:1299 | ||||
| msgid "Unable to lock" | ||||
| msgstr "Sperrung fehlgeschlagen" | ||||
|  | ||||
| #: js/ui/screenShield.js:835 js/ui/screenShield.js:1308 | ||||
| #: js/ui/screenShield.js:827 js/ui/screenShield.js:1300 | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "Sperrung wurde von einer Anwendung blockiert" | ||||
|  | ||||
| @@ -1772,7 +1758,7 @@ msgid "<unknown>" | ||||
| msgstr "<Unbekannt>" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1293 | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1292 | ||||
| #, javascript-format | ||||
| msgid "%s Off" | ||||
| msgstr "%s ausgeschaltet" | ||||
| @@ -1798,7 +1784,7 @@ msgid "%s Disconnecting" | ||||
| msgstr "%s wird getrennt" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1285 | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1284 | ||||
| #, javascript-format | ||||
| msgid "%s Connecting" | ||||
| msgstr "%s wird verbunden" | ||||
| @@ -1838,7 +1824,7 @@ msgid "Mobile Broadband Settings" | ||||
| msgstr "Einstellungen der mobilen Breitbandverbindung" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1290 | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1289 | ||||
| #, javascript-format | ||||
| msgid "%s Hardware Disabled" | ||||
| msgstr "%s-Hardware ausgeschaltet" | ||||
| @@ -1910,72 +1896,72 @@ msgid "Wi-Fi Settings" | ||||
| msgstr "Drahtlosnetzwerk-Einstellungen" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1281 | ||||
| #: js/ui/status/network.js:1280 | ||||
| #, javascript-format | ||||
| msgid "%s Hotspot Active" | ||||
| msgstr "Hotspot %s eingeschaltet" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1296 | ||||
| #: js/ui/status/network.js:1295 | ||||
| #, javascript-format | ||||
| msgid "%s Not Connected" | ||||
| msgstr "%s nicht verbunden" | ||||
|  | ||||
| #: js/ui/status/network.js:1393 | ||||
| #: js/ui/status/network.js:1392 | ||||
| msgid "connecting…" | ||||
| msgstr "Verbindungsaufbau …" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password | ||||
| #: js/ui/status/network.js:1396 | ||||
| #: js/ui/status/network.js:1395 | ||||
| msgid "authentication required" | ||||
| msgstr "Anmeldung erforderlich" | ||||
|  | ||||
| #: js/ui/status/network.js:1398 | ||||
| #: js/ui/status/network.js:1397 | ||||
| msgid "connection failed" | ||||
| msgstr "Verbindung gescheitert" | ||||
|  | ||||
| #: js/ui/status/network.js:1448 | ||||
| #: js/ui/status/network.js:1447 | ||||
| msgid "VPN Settings" | ||||
| msgstr "VPN-Einstellungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1465 | ||||
| #: js/ui/status/network.js:1464 | ||||
| msgid "VPN" | ||||
| msgstr "VPN" | ||||
|  | ||||
| #: js/ui/status/network.js:1475 | ||||
| #: js/ui/status/network.js:1474 | ||||
| msgid "VPN Off" | ||||
| msgstr "VPN ausgeschaltet" | ||||
|  | ||||
| #: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82 | ||||
| #: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82 | ||||
| msgid "Network Settings" | ||||
| msgstr "Netzwerkeinstellungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1565 | ||||
| #: js/ui/status/network.js:1564 | ||||
| #, javascript-format | ||||
| msgid "%s Wired Connection" | ||||
| msgid_plural "%s Wired Connections" | ||||
| msgstr[0] "%s Kabelverbindung" | ||||
| msgstr[1] "%s Kabelverbindungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1569 | ||||
| #: js/ui/status/network.js:1568 | ||||
| #, javascript-format | ||||
| msgid "%s Wi-Fi Connection" | ||||
| msgid_plural "%s Wi-Fi Connections" | ||||
| msgstr[0] "%s Funknetzwerkverbindung" | ||||
| msgstr[1] "%s Funknetzwerkverbindungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1573 | ||||
| #: js/ui/status/network.js:1572 | ||||
| #, javascript-format | ||||
| msgid "%s Modem Connection" | ||||
| msgid_plural "%s Modem Connections" | ||||
| msgstr[0] "%s Modem-Verbindung" | ||||
| msgstr[1] "%s Modem-Verbindungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1702 | ||||
| #: js/ui/status/network.js:1705 | ||||
| msgid "Connection failed" | ||||
| msgstr "Verbindung gescheitert" | ||||
|  | ||||
| #: js/ui/status/network.js:1703 | ||||
| #: js/ui/status/network.js:1706 | ||||
| msgid "Activation of network connection failed" | ||||
| msgstr "Aktivierung der Netzwerkverbindung ist gescheitert" | ||||
|  | ||||
| @@ -2057,15 +2043,15 @@ msgstr "Abmelden" | ||||
| msgid "Account Settings" | ||||
| msgstr "Kontoeinstellungen" | ||||
|  | ||||
| #: js/ui/status/system.js:255 | ||||
| #: js/ui/status/system.js:256 | ||||
| msgid "Orientation Lock" | ||||
| msgstr "Hoch-/Querformats-Fixierung" | ||||
|  | ||||
| #: js/ui/status/system.js:281 | ||||
| #: js/ui/status/system.js:282 | ||||
| msgid "Suspend" | ||||
| msgstr "In Bereitschaft versetzen" | ||||
| msgstr "Bereitschaft" | ||||
|  | ||||
| #: js/ui/status/system.js:291 | ||||
| #: js/ui/status/system.js:292 | ||||
| msgid "Power Off" | ||||
| msgstr "Ausschalten" | ||||
|  | ||||
| @@ -2183,7 +2169,7 @@ msgstr[1] "" | ||||
|  | ||||
| #. Translators: This represents the size of a window. The first number is | ||||
| #. * the width of the window and the second is the height. | ||||
| #: js/ui/windowManager.js:662 | ||||
| #: js/ui/windowManager.js:677 | ||||
| #, javascript-format | ||||
| msgid "%d × %d" | ||||
| msgstr "%d × %d" | ||||
| @@ -2256,11 +2242,6 @@ msgstr "Auf den Bildschirm nach rechts verschieben" | ||||
| msgid "Evolution Calendar" | ||||
| msgstr "Evolution-Kalender" | ||||
|  | ||||
| #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! | ||||
| #: src/calendar-server/evolution-calendar.desktop.in:6 | ||||
| msgid "evolution" | ||||
| msgstr "evolution" | ||||
|  | ||||
| #: src/main.c:408 | ||||
| msgid "Print version" | ||||
| msgstr "Version ausgeben" | ||||
| @@ -2279,12 +2260,12 @@ msgstr "" | ||||
| msgid "List possible modes" | ||||
| msgstr "Die möglichen Modi auflisten" | ||||
|  | ||||
| #: src/shell-app.c:260 | ||||
| #: src/shell-app.c:264 | ||||
| msgctxt "program" | ||||
| msgid "Unknown" | ||||
| msgstr "Unbekannt" | ||||
|  | ||||
| #: src/shell-app.c:511 | ||||
| #: src/shell-app.c:515 | ||||
| #, c-format | ||||
| msgid "Failed to launch “%s”" | ||||
| msgstr "»%s« konnte nicht gestartet werden" | ||||
| @@ -2323,6 +2304,15 @@ msgstr[1] "%u Eingänge" | ||||
| msgid "System Sounds" | ||||
| msgstr "Systemklänge" | ||||
|  | ||||
| #~ msgid "network-workgroup" | ||||
| #~ msgstr "network-workgroup" | ||||
|  | ||||
| #~ msgid "toggle-switch-us" | ||||
| #~ msgstr "toggle-switch-intl" | ||||
|  | ||||
| #~ msgid "evolution" | ||||
| #~ msgstr "evolution" | ||||
|  | ||||
| #~ msgid "There was an error loading the preferences dialog for %s:" | ||||
| #~ msgstr "" | ||||
| #~ "Beim Laden des Einstellungsdialogs für %s ist ein Fehler aufgetreten:" | ||||
|   | ||||
							
								
								
									
										169
									
								
								po/eo.po
									
									
									
									
									
								
							
							
						
						
									
										169
									
								
								po/eo.po
									
									
									
									
									
								
							| @@ -6,22 +6,22 @@ | ||||
| # Daniel PUENTES <blatberk@openmailbox.org>, 2015. | ||||
| # Nicolas MAIA < >, 2015. | ||||
| # Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011, 2012, 2015, 2016, 2018. | ||||
| # Carmen Bianca BAKKER <carmen@carmenbianca.eu>, 2018, 2019. | ||||
| # Carmen Bianca BAKKER <carmen@carmenbianca.eu>, 2018-2019. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2019-03-24 17:37+0000\n" | ||||
| "PO-Revision-Date: 2019-03-31 00:14+0100\n" | ||||
| "Last-Translator: Carmen Bianca Bakker <carmen@carmenbianca.eu>\n" | ||||
| "POT-Creation-Date: 2019-05-08 17:45+0000\n" | ||||
| "PO-Revision-Date: 2019-05-09 20:12+0200\n" | ||||
| "Last-Translator: Carmen Bianca BAKKER <carmen@carmenbianca.eu>\n" | ||||
| "Language-Team: Esperanto <gnome-eo-list@gnome.org>\n" | ||||
| "Language: eo\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: Poedit 2.2.1\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1)\n" | ||||
| "X-Generator: Gtranslator 3.32.0\n" | ||||
| "X-DamnedLies-Scope: partial\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| @@ -383,7 +383,7 @@ msgstr "Foliumi en Programaro" | ||||
| #: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136 | ||||
| #: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188 | ||||
| #: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888 | ||||
| #: js/ui/shellMountOperation.js:325 js/ui/status/network.js:889 | ||||
| msgid "Cancel" | ||||
| msgstr "Nuligi" | ||||
|  | ||||
| @@ -681,32 +681,37 @@ msgstr "Oftaj" | ||||
| msgid "All" | ||||
| msgstr "Ĉiuj" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1737 js/ui/panel.js:83 | ||||
| #. Translators: This is the heading of a list of open windows | ||||
| #: js/ui/appDisplay.js:1713 js/ui/panel.js:79 | ||||
| msgid "Open Windows" | ||||
| msgstr "Malfermaj fenestroj" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1732 js/ui/panel.js:86 | ||||
| msgid "New Window" | ||||
| msgstr "Nova fenestro" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1751 | ||||
| #: js/ui/appDisplay.js:1746 | ||||
| msgid "Launch using Dedicated Graphics Card" | ||||
| msgstr "Lanĉi uzante dediĉitan vidkarton" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1778 js/ui/dash.js:239 | ||||
| #: js/ui/appDisplay.js:1773 js/ui/dash.js:239 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "Forigi el preferataj" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1784 | ||||
| #: js/ui/appDisplay.js:1779 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "Aldoni al preferataj" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1794 js/ui/panel.js:94 | ||||
| #: js/ui/appDisplay.js:1789 js/ui/panel.js:97 | ||||
| msgid "Show Details" | ||||
| msgstr "Montri detalojn" | ||||
|  | ||||
| #: js/ui/appFavorites.js:141 | ||||
| #: js/ui/appFavorites.js:149 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s estas aldonita de via preferataj aplikaĵoj." | ||||
|  | ||||
| #: js/ui/appFavorites.js:175 | ||||
| #: js/ui/appFavorites.js:183 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s estas forigita de via preferataj aplikaĵoj." | ||||
| @@ -914,7 +919,7 @@ msgstr "" | ||||
| "Alternative vi povas konekti per premi la “WPS”-butonon de via enkursigilo." | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219 | ||||
| #: js/ui/status/network.js:309 js/ui/status/network.js:891 | ||||
| #: js/ui/status/network.js:310 js/ui/status/network.js:892 | ||||
| msgid "Connect" | ||||
| msgstr "Konekti" | ||||
|  | ||||
| @@ -944,7 +949,7 @@ msgstr "Servo: " | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685 | ||||
| msgid "Authentication required by wireless network" | ||||
| msgstr "Aŭtentigo estas bezonata de sendrata reto" | ||||
| msgstr "Sendrata reto bezonas aŭtentigon" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686 | ||||
| #, javascript-format | ||||
| @@ -972,7 +977,7 @@ msgstr "PIN-kodo bezonata" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700 | ||||
| msgid "PIN code is needed for the mobile broadband device" | ||||
| msgstr "PIN-kodo estas bezonata por la portebla larĝkapacita aparato" | ||||
| msgstr "PIN-kodo necesas por la portebla larĝkapacita aparato" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:333 | ||||
| msgid "PIN: " | ||||
| @@ -986,9 +991,9 @@ msgstr "Portebla larĝkapacita retopasvorto" | ||||
| #: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707 | ||||
| #, javascript-format | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "Pasvorto estas bezonata por konekti al “%s”." | ||||
| msgstr "Pasvorto necesas por konekti al “%s”." | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664 | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665 | ||||
| msgid "Network Manager" | ||||
| msgstr "Retadministrilo" | ||||
|  | ||||
| @@ -1060,23 +1065,23 @@ msgstr "Aldoni mondajn horloĝojn…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Mondaj horloĝoj" | ||||
|  | ||||
| #: js/ui/dateMenu.js:222 | ||||
| #: js/ui/dateMenu.js:228 | ||||
| msgid "Weather" | ||||
| msgstr "Vetero" | ||||
|  | ||||
| #: js/ui/dateMenu.js:305 | ||||
| #: js/ui/dateMenu.js:311 | ||||
| msgid "Select a location…" | ||||
| msgstr "Elekti lokon…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:313 | ||||
| #: js/ui/dateMenu.js:319 | ||||
| msgid "Loading…" | ||||
| msgstr "Ŝargante…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #: js/ui/dateMenu.js:329 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Enretigi por veterinformoj" | ||||
|  | ||||
| #: js/ui/dateMenu.js:325 | ||||
| #: js/ui/dateMenu.js:331 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Veterinformoj ĉimomente nehaveblas" | ||||
|  | ||||
| @@ -1305,13 +1310,13 @@ msgid "Leave On" | ||||
| msgstr "Lasi ŝaltita" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:1263 | ||||
| #: js/ui/status/network.js:1264 | ||||
| msgid "Turn On" | ||||
| msgstr "Ŝalti" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:310 | ||||
| #: js/ui/status/network.js:1263 js/ui/status/network.js:1375 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:311 | ||||
| #: js/ui/status/network.js:1264 js/ui/status/network.js:1376 | ||||
| #: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79 | ||||
| #: js/ui/status/rfkill.js:106 | ||||
| msgid "Turn Off" | ||||
| @@ -1373,7 +1378,7 @@ msgstr "Montri fonton" | ||||
| msgid "Web Page" | ||||
| msgstr "Retpaĝo" | ||||
|  | ||||
| #: js/ui/messageTray.js:1480 | ||||
| #: js/ui/messageTray.js:1479 | ||||
| msgid "System Information" | ||||
| msgstr "Sisteminformoj" | ||||
|  | ||||
| @@ -1452,34 +1457,25 @@ msgstr "Premu Esk-klavon por ĉesi" | ||||
| msgid "Press any key to exit" | ||||
| msgstr "Premu iun ajn klavon por ĉesi" | ||||
|  | ||||
| #: js/ui/panel.js:108 | ||||
| #: js/ui/panel.js:113 | ||||
| msgid "Quit" | ||||
| msgstr "Ĉesi" | ||||
|  | ||||
| #. Translators: If there is no suitable word for "Activities" | ||||
| #. in your language, you can use the word for "Overview". | ||||
| #: js/ui/panel.js:471 | ||||
| #: js/ui/panel.js:468 | ||||
| msgid "Activities" | ||||
| msgstr "Aktivecoj" | ||||
|  | ||||
| #: js/ui/panel.js:746 | ||||
| #: js/ui/panel.js:743 | ||||
| msgctxt "System menu in the top bar" | ||||
| msgid "System" | ||||
| msgstr "Sistemo" | ||||
|  | ||||
| #: js/ui/panel.js:867 | ||||
| #: js/ui/panel.js:861 | ||||
| msgid "Top Bar" | ||||
| msgstr "Supra breto" | ||||
|  | ||||
| #. Translators: this MUST be either "toggle-switch-us" | ||||
| #. (for toggle switches containing the English words | ||||
| #. "ON" and "OFF") or "toggle-switch-intl" (for toggle | ||||
| #. switches containing "◯" and "|"). Other values will | ||||
| #. simply result in invisible toggle switches. | ||||
| #: js/ui/popupMenu.js:285 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-intl" | ||||
|  | ||||
| #: js/ui/runDialog.js:64 | ||||
| msgid "Enter a Command" | ||||
| msgstr "Enigu komandon" | ||||
| @@ -1614,11 +1610,11 @@ msgstr "Saltaj klavoj" | ||||
| msgid "Mouse Keys" | ||||
| msgstr "Musklavoj" | ||||
|  | ||||
| #: js/ui/status/accessibility.js:151 | ||||
| #: js/ui/status/accessibility.js:135 | ||||
| msgid "High Contrast" | ||||
| msgstr "Alta kontrasto" | ||||
|  | ||||
| #: js/ui/status/accessibility.js:182 | ||||
| #: js/ui/status/accessibility.js:177 | ||||
| msgid "Large Text" | ||||
| msgstr "Granda teksto" | ||||
|  | ||||
| @@ -1626,7 +1622,7 @@ msgstr "Granda teksto" | ||||
| msgid "Bluetooth" | ||||
| msgstr "Bludento" | ||||
|  | ||||
| #: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585 | ||||
| #: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586 | ||||
| msgid "Bluetooth Settings" | ||||
| msgstr "Bludento-agordoj" | ||||
|  | ||||
| @@ -1697,13 +1693,13 @@ msgid "<unknown>" | ||||
| msgstr "<nekonata>" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1292 | ||||
| #: js/ui/status/network.js:417 js/ui/status/network.js:1293 | ||||
| #, javascript-format | ||||
| msgid "%s Off" | ||||
| msgstr "%s malŝaltita" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:419 | ||||
| #: js/ui/status/network.js:420 | ||||
| #, javascript-format | ||||
| msgid "%s Connected" | ||||
| msgstr "%s konektita" | ||||
| @@ -1711,189 +1707,189 @@ msgstr "%s konektita" | ||||
| #. Translators: this is for network devices that are physically present but are not | ||||
| #. under NetworkManager's control (and thus cannot be used in the menu); | ||||
| #. %s is a network identifier | ||||
| #: js/ui/status/network.js:424 | ||||
| #: js/ui/status/network.js:425 | ||||
| #, javascript-format | ||||
| msgid "%s Unmanaged" | ||||
| msgstr "%s nemastrumita" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:427 | ||||
| #: js/ui/status/network.js:428 | ||||
| #, javascript-format | ||||
| msgid "%s Disconnecting" | ||||
| msgstr "%s malkonektante" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1284 | ||||
| #: js/ui/status/network.js:435 js/ui/status/network.js:1285 | ||||
| #, javascript-format | ||||
| msgid "%s Connecting" | ||||
| msgstr "%s konektante" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier | ||||
| #: js/ui/status/network.js:437 | ||||
| #: js/ui/status/network.js:438 | ||||
| #, javascript-format | ||||
| msgid "%s Requires Authentication" | ||||
| msgstr "%s postulas aŭtentigon" | ||||
|  | ||||
| #. Translators: this is for devices that require some kind of firmware or kernel | ||||
| #. module, which is missing; %s is a network identifier | ||||
| #: js/ui/status/network.js:445 | ||||
| #: js/ui/status/network.js:446 | ||||
| #, javascript-format | ||||
| msgid "Firmware Missing For %s" | ||||
| msgstr "Mikroprogramo mankas por %s" | ||||
|  | ||||
| #. Translators: this is for a network device that cannot be activated (for example it | ||||
| #. is disabled by rfkill, or it has no coverage; %s is a network identifier | ||||
| #: js/ui/status/network.js:449 | ||||
| #: js/ui/status/network.js:450 | ||||
| #, javascript-format | ||||
| msgid "%s Unavailable" | ||||
| msgstr "%s nedisponebla" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:452 | ||||
| #: js/ui/status/network.js:453 | ||||
| #, javascript-format | ||||
| msgid "%s Connection Failed" | ||||
| msgstr "%s konekto malsukcesis" | ||||
|  | ||||
| #: js/ui/status/network.js:464 | ||||
| #: js/ui/status/network.js:465 | ||||
| msgid "Wired Settings" | ||||
| msgstr "Drataj agordoj" | ||||
|  | ||||
| #: js/ui/status/network.js:506 | ||||
| #: js/ui/status/network.js:507 | ||||
| msgid "Mobile Broadband Settings" | ||||
| msgstr "Porteblaj larĝkapacitaj agordoj" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1289 | ||||
| #: js/ui/status/network.js:554 js/ui/status/network.js:1290 | ||||
| #, javascript-format | ||||
| msgid "%s Hardware Disabled" | ||||
| msgstr "%s aparataro malŝaltita" | ||||
|  | ||||
| #. Translators: this is for a network device that cannot be activated | ||||
| #. because it's disabled by rfkill (airplane mode); %s is a network identifier | ||||
| #: js/ui/status/network.js:557 | ||||
| #: js/ui/status/network.js:558 | ||||
| #, javascript-format | ||||
| msgid "%s Disabled" | ||||
| msgstr "%s malŝaltita" | ||||
|  | ||||
| #: js/ui/status/network.js:597 | ||||
| #: js/ui/status/network.js:598 | ||||
| msgid "Connect to Internet" | ||||
| msgstr "Konekti al interreto" | ||||
|  | ||||
| #: js/ui/status/network.js:786 | ||||
| #: js/ui/status/network.js:787 | ||||
| msgid "Airplane Mode is On" | ||||
| msgstr "Aviadila reĝimo ŝaltita" | ||||
|  | ||||
| #: js/ui/status/network.js:787 | ||||
| #: js/ui/status/network.js:788 | ||||
| msgid "Wi-Fi is disabled when airplane mode is on." | ||||
| msgstr "Vifio malebliĝas se aviadila reĝimo estas ŝaltita." | ||||
|  | ||||
| #: js/ui/status/network.js:788 | ||||
| #: js/ui/status/network.js:789 | ||||
| msgid "Turn Off Airplane Mode" | ||||
| msgstr "Malŝalti aviadilan reĝimon" | ||||
|  | ||||
| #: js/ui/status/network.js:797 | ||||
| #: js/ui/status/network.js:798 | ||||
| msgid "Wi-Fi is Off" | ||||
| msgstr "Vifio malŝaltita" | ||||
|  | ||||
| #: js/ui/status/network.js:798 | ||||
| #: js/ui/status/network.js:799 | ||||
| msgid "Wi-Fi needs to be turned on in order to connect to a network." | ||||
| msgstr "Necesas ŝalti vifion por konekti al reto." | ||||
|  | ||||
| #: js/ui/status/network.js:799 | ||||
| #: js/ui/status/network.js:800 | ||||
| msgid "Turn On Wi-Fi" | ||||
| msgstr "Ŝalti vifion" | ||||
|  | ||||
| #: js/ui/status/network.js:824 | ||||
| #: js/ui/status/network.js:825 | ||||
| msgid "Wi-Fi Networks" | ||||
| msgstr "Vifiaj retoj" | ||||
|  | ||||
| #: js/ui/status/network.js:826 | ||||
| #: js/ui/status/network.js:827 | ||||
| msgid "Select a network" | ||||
| msgstr "Elekti reton" | ||||
|  | ||||
| #: js/ui/status/network.js:855 | ||||
| #: js/ui/status/network.js:856 | ||||
| msgid "No Networks" | ||||
| msgstr "Neniu reto" | ||||
|  | ||||
| #: js/ui/status/network.js:876 js/ui/status/rfkill.js:104 | ||||
| #: js/ui/status/network.js:877 js/ui/status/rfkill.js:104 | ||||
| msgid "Use hardware switch to turn off" | ||||
| msgstr "Uzi aparataran ŝaltilon por malŝalti" | ||||
|  | ||||
| #: js/ui/status/network.js:1152 | ||||
| #: js/ui/status/network.js:1153 | ||||
| msgid "Select Network" | ||||
| msgstr "Elekti reton" | ||||
|  | ||||
| #: js/ui/status/network.js:1158 | ||||
| #: js/ui/status/network.js:1159 | ||||
| msgid "Wi-Fi Settings" | ||||
| msgstr "Vifio-agordoj" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1280 | ||||
| #: js/ui/status/network.js:1281 | ||||
| #, javascript-format | ||||
| msgid "%s Hotspot Active" | ||||
| msgstr "%s retkaptejo aktiva" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1295 | ||||
| #: js/ui/status/network.js:1296 | ||||
| #, javascript-format | ||||
| msgid "%s Not Connected" | ||||
| msgstr "%s ne konektita" | ||||
|  | ||||
| #: js/ui/status/network.js:1392 | ||||
| #: js/ui/status/network.js:1393 | ||||
| msgid "connecting…" | ||||
| msgstr "konektante…" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password | ||||
| #: js/ui/status/network.js:1395 | ||||
| #: js/ui/status/network.js:1396 | ||||
| msgid "authentication required" | ||||
| msgstr "aŭtentigo necesas" | ||||
|  | ||||
| #: js/ui/status/network.js:1397 | ||||
| #: js/ui/status/network.js:1398 | ||||
| msgid "connection failed" | ||||
| msgstr "konekto malsukcesis" | ||||
|  | ||||
| #: js/ui/status/network.js:1447 | ||||
| #: js/ui/status/network.js:1448 | ||||
| msgid "VPN Settings" | ||||
| msgstr "VPR-agordoj" | ||||
|  | ||||
| #: js/ui/status/network.js:1464 | ||||
| #: js/ui/status/network.js:1465 | ||||
| msgid "VPN" | ||||
| msgstr "VPR" | ||||
|  | ||||
| #: js/ui/status/network.js:1474 | ||||
| #: js/ui/status/network.js:1475 | ||||
| msgid "VPN Off" | ||||
| msgstr "VPR malŝaltita" | ||||
|  | ||||
| #: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82 | ||||
| #: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82 | ||||
| msgid "Network Settings" | ||||
| msgstr "Ret-agordoj" | ||||
|  | ||||
| #: js/ui/status/network.js:1564 | ||||
| #: js/ui/status/network.js:1565 | ||||
| #, javascript-format | ||||
| msgid "%s Wired Connection" | ||||
| msgid_plural "%s Wired Connections" | ||||
| msgstr[0] "%s drata konekto" | ||||
| msgstr[1] "%s drataj konektoj" | ||||
|  | ||||
| #: js/ui/status/network.js:1568 | ||||
| #: js/ui/status/network.js:1569 | ||||
| #, javascript-format | ||||
| msgid "%s Wi-Fi Connection" | ||||
| msgid_plural "%s Wi-Fi Connections" | ||||
| msgstr[0] "%s vifia konekto" | ||||
| msgstr[1] "%s vifiaj konektoj" | ||||
|  | ||||
| #: js/ui/status/network.js:1572 | ||||
| #: js/ui/status/network.js:1573 | ||||
| #, javascript-format | ||||
| msgid "%s Modem Connection" | ||||
| msgid_plural "%s Modem Connections" | ||||
| msgstr[0] "%s modema konekto" | ||||
| msgstr[1] "%s modemaj konektoj" | ||||
|  | ||||
| #: js/ui/status/network.js:1701 | ||||
| #: js/ui/status/network.js:1706 | ||||
| msgid "Connection failed" | ||||
| msgstr "Konekto malsukcesis" | ||||
|  | ||||
| #: js/ui/status/network.js:1702 | ||||
| #: js/ui/status/network.js:1707 | ||||
| msgid "Activation of network connection failed" | ||||
| msgstr "Aktivigo de reto-konekto malsukcesis" | ||||
|  | ||||
| @@ -2098,7 +2094,7 @@ msgstr[1] "Agordaj ŝanĝoj malfaritos post %d sekundoj" | ||||
|  | ||||
| #. Translators: This represents the size of a window. The first number is | ||||
| #. * the width of the window and the second is the height. | ||||
| #: js/ui/windowManager.js:662 | ||||
| #: js/ui/windowManager.js:677 | ||||
| #, javascript-format | ||||
| msgid "%d × %d" | ||||
| msgstr "%d × %d" | ||||
| @@ -2231,6 +2227,9 @@ msgstr[1] "%u enigoj" | ||||
| msgid "System Sounds" | ||||
| msgstr "Sistemsonoj" | ||||
|  | ||||
| #~ msgid "toggle-switch-us" | ||||
| #~ msgstr "toggle-switch-intl" | ||||
|  | ||||
| #~ msgid "network-workgroup" | ||||
| #~ msgstr "network-workgroup" | ||||
|  | ||||
|   | ||||
							
								
								
									
										160
									
								
								po/es.po
									
									
									
									
									
								
							
							
						
						
									
										160
									
								
								po/es.po
									
									
									
									
									
								
							| @@ -9,8 +9,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell.master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2019-03-24 17:37+0000\n" | ||||
| "PO-Revision-Date: 2019-02-06 11:27+0100\n" | ||||
| "POT-Creation-Date: 2019-05-15 17:25+0000\n" | ||||
| "PO-Revision-Date: 2019-05-16 12:35+0200\n" | ||||
| "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" | ||||
| "Language-Team: es <gnome-es-list@gnome.org>\n" | ||||
| "Language: es\n" | ||||
| @@ -18,7 +18,7 @@ msgstr "" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "X-Generator: Gtranslator 3.31.90\n" | ||||
| "X-Generator: Gtranslator 3.32.0\n" | ||||
|  | ||||
| #: data/50-gnome-shell-system.xml:6 | ||||
| msgid "System" | ||||
| @@ -431,7 +431,7 @@ msgstr "Buscar en Software" | ||||
| #: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136 | ||||
| #: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188 | ||||
| #: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888 | ||||
| #: js/ui/shellMountOperation.js:325 js/ui/status/network.js:889 | ||||
| msgid "Cancel" | ||||
| msgstr "Cancelar" | ||||
|  | ||||
| @@ -522,7 +522,8 @@ msgstr "Cerrar la sesión" | ||||
|  | ||||
| #. Translators: A list of keywords that match the logout action, separated by semicolons | ||||
| #: js/misc/systemActions.js:105 | ||||
| msgid "logout;sign off" | ||||
| #| msgid "logout;sign off" | ||||
| msgid "logout;log out;sign off" | ||||
| msgstr "cerrar;sesión;salir" | ||||
|  | ||||
| #. Translators: The name of the suspend action in search | ||||
| @@ -728,32 +729,37 @@ msgstr "Frecuentes" | ||||
| msgid "All" | ||||
| msgstr "Todas" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1737 js/ui/panel.js:83 | ||||
| #. Translators: This is the heading of a list of open windows | ||||
| #: js/ui/appDisplay.js:1713 js/ui/panel.js:79 | ||||
| msgid "Open Windows" | ||||
| msgstr "Ventanas abiertas" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1732 js/ui/panel.js:86 | ||||
| msgid "New Window" | ||||
| msgstr "Ventana nueva" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1751 | ||||
| #: js/ui/appDisplay.js:1746 | ||||
| msgid "Launch using Dedicated Graphics Card" | ||||
| msgstr "Lanzar usando la tarjeta gráfica dedicada" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1778 js/ui/dash.js:239 | ||||
| #: js/ui/appDisplay.js:1773 js/ui/dash.js:239 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "Quitar de los favoritos" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1784 | ||||
| #: js/ui/appDisplay.js:1779 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "Añadir a los favoritos" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1794 js/ui/panel.js:94 | ||||
| #: js/ui/appDisplay.js:1789 js/ui/panel.js:97 | ||||
| msgid "Show Details" | ||||
| msgstr "Mostrar detalles" | ||||
|  | ||||
| #: js/ui/appFavorites.js:141 | ||||
| #: js/ui/appFavorites.js:149 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "Se ha añadido %s a sus favoritos." | ||||
|  | ||||
| #: js/ui/appFavorites.js:175 | ||||
| #: js/ui/appFavorites.js:183 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "Se ha quitado %s de sus favoritos." | ||||
| @@ -963,7 +969,7 @@ msgstr "" | ||||
| "Alternativamente puede conectarse pulsando el botón «WPS» de su router." | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219 | ||||
| #: js/ui/status/network.js:309 js/ui/status/network.js:891 | ||||
| #: js/ui/status/network.js:310 js/ui/status/network.js:892 | ||||
| msgid "Connect" | ||||
| msgstr "Conectar" | ||||
|  | ||||
| @@ -1038,7 +1044,7 @@ msgstr "Contraseña de la red de banda ancha móvil" | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "Se requiere una contraseña para conectarse a «%s»." | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664 | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665 | ||||
| msgid "Network Manager" | ||||
| msgstr "Gestor de la red" | ||||
|  | ||||
| @@ -1108,23 +1114,23 @@ msgstr "Añadir relojes del mundo…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Relojes del mundo" | ||||
|  | ||||
| #: js/ui/dateMenu.js:222 | ||||
| #: js/ui/dateMenu.js:228 | ||||
| msgid "Weather" | ||||
| msgstr "Meteorología" | ||||
|  | ||||
| #: js/ui/dateMenu.js:305 | ||||
| #: js/ui/dateMenu.js:311 | ||||
| msgid "Select a location…" | ||||
| msgstr "Seleccionar ubicación…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:313 | ||||
| #: js/ui/dateMenu.js:319 | ||||
| msgid "Loading…" | ||||
| msgstr "Cargando…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #: js/ui/dateMenu.js:329 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Conectarse para obtener la información meteorológica" | ||||
|  | ||||
| #: js/ui/dateMenu.js:325 | ||||
| #: js/ui/dateMenu.js:331 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "La información meteorológica no está disponible actualmente." | ||||
|  | ||||
| @@ -1359,13 +1365,13 @@ msgid "Leave On" | ||||
| msgstr "Dejar activada" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:1263 | ||||
| #: js/ui/status/network.js:1264 | ||||
| msgid "Turn On" | ||||
| msgstr "Encender" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:310 | ||||
| #: js/ui/status/network.js:1263 js/ui/status/network.js:1375 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:311 | ||||
| #: js/ui/status/network.js:1264 js/ui/status/network.js:1376 | ||||
| #: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79 | ||||
| #: js/ui/status/rfkill.js:106 | ||||
| msgid "Turn Off" | ||||
| @@ -1427,7 +1433,7 @@ msgstr "Ver fuente" | ||||
| msgid "Web Page" | ||||
| msgstr "Página web" | ||||
|  | ||||
| #: js/ui/messageTray.js:1480 | ||||
| #: js/ui/messageTray.js:1479 | ||||
| msgid "System Information" | ||||
| msgstr "Información del sistema" | ||||
|  | ||||
| @@ -1505,34 +1511,25 @@ msgstr "Pulse Esc para salir" | ||||
| msgid "Press any key to exit" | ||||
| msgstr "Pulse cualquier tecla para salir" | ||||
|  | ||||
| #: js/ui/panel.js:108 | ||||
| #: js/ui/panel.js:113 | ||||
| msgid "Quit" | ||||
| msgstr "Salir" | ||||
|  | ||||
| #. Translators: If there is no suitable word for "Activities" | ||||
| #. in your language, you can use the word for "Overview". | ||||
| #: js/ui/panel.js:471 | ||||
| #: js/ui/panel.js:468 | ||||
| msgid "Activities" | ||||
| msgstr "Actividades" | ||||
|  | ||||
| #: js/ui/panel.js:746 | ||||
| #: js/ui/panel.js:743 | ||||
| msgctxt "System menu in the top bar" | ||||
| msgid "System" | ||||
| msgstr "Sistema" | ||||
|  | ||||
| #: js/ui/panel.js:867 | ||||
| #: js/ui/panel.js:861 | ||||
| msgid "Top Bar" | ||||
| msgstr "Barra superior" | ||||
|  | ||||
| #. Translators: this MUST be either "toggle-switch-us" | ||||
| #. (for toggle switches containing the English words | ||||
| #. "ON" and "OFF") or "toggle-switch-intl" (for toggle | ||||
| #. switches containing "◯" and "|"). Other values will | ||||
| #. simply result in invisible toggle switches. | ||||
| #: js/ui/popupMenu.js:285 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-intl" | ||||
|  | ||||
| #: js/ui/runDialog.js:64 | ||||
| msgid "Enter a Command" | ||||
| msgstr "Introducir un comando" | ||||
| @@ -1667,11 +1664,11 @@ msgstr "Rechazo de teclas" | ||||
| msgid "Mouse Keys" | ||||
| msgstr "Teclas del ratón" | ||||
|  | ||||
| #: js/ui/status/accessibility.js:151 | ||||
| #: js/ui/status/accessibility.js:135 | ||||
| msgid "High Contrast" | ||||
| msgstr "Contraste alto" | ||||
|  | ||||
| #: js/ui/status/accessibility.js:182 | ||||
| #: js/ui/status/accessibility.js:177 | ||||
| msgid "Large Text" | ||||
| msgstr "Texto grande" | ||||
|  | ||||
| @@ -1679,7 +1676,7 @@ msgstr "Texto grande" | ||||
| msgid "Bluetooth" | ||||
| msgstr "Bluetooth" | ||||
|  | ||||
| #: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585 | ||||
| #: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586 | ||||
| msgid "Bluetooth Settings" | ||||
| msgstr "Configuración de Bluetooth" | ||||
|  | ||||
| @@ -1752,13 +1749,13 @@ msgid "<unknown>" | ||||
| msgstr "<desconocido>" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1292 | ||||
| #: js/ui/status/network.js:417 js/ui/status/network.js:1293 | ||||
| #, javascript-format | ||||
| msgid "%s Off" | ||||
| msgstr "%s apagada" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:419 | ||||
| #: js/ui/status/network.js:420 | ||||
| #, javascript-format | ||||
| msgid "%s Connected" | ||||
| msgstr "%s conectada" | ||||
| @@ -1766,189 +1763,189 @@ msgstr "%s conectada" | ||||
| #. Translators: this is for network devices that are physically present but are not | ||||
| #. under NetworkManager's control (and thus cannot be used in the menu); | ||||
| #. %s is a network identifier | ||||
| #: js/ui/status/network.js:424 | ||||
| #: js/ui/status/network.js:425 | ||||
| #, javascript-format | ||||
| msgid "%s Unmanaged" | ||||
| msgstr "%s sin gestionar" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:427 | ||||
| #: js/ui/status/network.js:428 | ||||
| #, javascript-format | ||||
| msgid "%s Disconnecting" | ||||
| msgstr "Desconectando %s" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1284 | ||||
| #: js/ui/status/network.js:435 js/ui/status/network.js:1285 | ||||
| #, javascript-format | ||||
| msgid "%s Connecting" | ||||
| msgstr "Conectando %s" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier | ||||
| #: js/ui/status/network.js:437 | ||||
| #: js/ui/status/network.js:438 | ||||
| #, javascript-format | ||||
| msgid "%s Requires Authentication" | ||||
| msgstr "%s requiere autenticación" | ||||
|  | ||||
| #. Translators: this is for devices that require some kind of firmware or kernel | ||||
| #. module, which is missing; %s is a network identifier | ||||
| #: js/ui/status/network.js:445 | ||||
| #: js/ui/status/network.js:446 | ||||
| #, javascript-format | ||||
| msgid "Firmware Missing For %s" | ||||
| msgstr "Falta el «firmware» para %s" | ||||
|  | ||||
| #. Translators: this is for a network device that cannot be activated (for example it | ||||
| #. is disabled by rfkill, or it has no coverage; %s is a network identifier | ||||
| #: js/ui/status/network.js:449 | ||||
| #: js/ui/status/network.js:450 | ||||
| #, javascript-format | ||||
| msgid "%s Unavailable" | ||||
| msgstr "%s no disponible" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:452 | ||||
| #: js/ui/status/network.js:453 | ||||
| #, javascript-format | ||||
| msgid "%s Connection Failed" | ||||
| msgstr "Falló la conexión %s" | ||||
|  | ||||
| #: js/ui/status/network.js:464 | ||||
| #: js/ui/status/network.js:465 | ||||
| msgid "Wired Settings" | ||||
| msgstr "Configuración de red cableada" | ||||
|  | ||||
| #: js/ui/status/network.js:506 | ||||
| #: js/ui/status/network.js:507 | ||||
| msgid "Mobile Broadband Settings" | ||||
| msgstr "Configuración de banda ancha móvil" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1289 | ||||
| #: js/ui/status/network.js:554 js/ui/status/network.js:1290 | ||||
| #, javascript-format | ||||
| msgid "%s Hardware Disabled" | ||||
| msgstr "Hardware %s desactivado" | ||||
|  | ||||
| #. Translators: this is for a network device that cannot be activated | ||||
| #. because it's disabled by rfkill (airplane mode); %s is a network identifier | ||||
| #: js/ui/status/network.js:557 | ||||
| #: js/ui/status/network.js:558 | ||||
| #, javascript-format | ||||
| msgid "%s Disabled" | ||||
| msgstr "%s desactivado" | ||||
|  | ||||
| #: js/ui/status/network.js:597 | ||||
| #: js/ui/status/network.js:598 | ||||
| msgid "Connect to Internet" | ||||
| msgstr "Conectar a Internet" | ||||
|  | ||||
| #: js/ui/status/network.js:786 | ||||
| #: js/ui/status/network.js:787 | ||||
| msgid "Airplane Mode is On" | ||||
| msgstr "El modo avión está activado" | ||||
|  | ||||
| #: js/ui/status/network.js:787 | ||||
| #: js/ui/status/network.js:788 | ||||
| msgid "Wi-Fi is disabled when airplane mode is on." | ||||
| msgstr "La Wi-Fi se desactiva cuando se activa el modo avión." | ||||
|  | ||||
| #: js/ui/status/network.js:788 | ||||
| #: js/ui/status/network.js:789 | ||||
| msgid "Turn Off Airplane Mode" | ||||
| msgstr "Apagar el modo avión" | ||||
|  | ||||
| #: js/ui/status/network.js:797 | ||||
| #: js/ui/status/network.js:798 | ||||
| msgid "Wi-Fi is Off" | ||||
| msgstr "La Wi-Fi está desactivada" | ||||
|  | ||||
| #: js/ui/status/network.js:798 | ||||
| #: js/ui/status/network.js:799 | ||||
| msgid "Wi-Fi needs to be turned on in order to connect to a network." | ||||
| msgstr "Se debe activar la Wi-Fi para poder conectarse a la red." | ||||
|  | ||||
| #: js/ui/status/network.js:799 | ||||
| #: js/ui/status/network.js:800 | ||||
| msgid "Turn On Wi-Fi" | ||||
| msgstr "Activar la Wi-Fi" | ||||
|  | ||||
| #: js/ui/status/network.js:824 | ||||
| #: js/ui/status/network.js:825 | ||||
| msgid "Wi-Fi Networks" | ||||
| msgstr "Redes Wi-Fi" | ||||
|  | ||||
| #: js/ui/status/network.js:826 | ||||
| #: js/ui/status/network.js:827 | ||||
| msgid "Select a network" | ||||
| msgstr "Seleccionar una red" | ||||
|  | ||||
| #: js/ui/status/network.js:855 | ||||
| #: js/ui/status/network.js:856 | ||||
| msgid "No Networks" | ||||
| msgstr "No hay redes" | ||||
|  | ||||
| #: js/ui/status/network.js:876 js/ui/status/rfkill.js:104 | ||||
| #: js/ui/status/network.js:877 js/ui/status/rfkill.js:104 | ||||
| msgid "Use hardware switch to turn off" | ||||
| msgstr "Usar el interruptor hardware para apagar" | ||||
|  | ||||
| #: js/ui/status/network.js:1152 | ||||
| #: js/ui/status/network.js:1153 | ||||
| msgid "Select Network" | ||||
| msgstr "Seleccionar red" | ||||
|  | ||||
| #: js/ui/status/network.js:1158 | ||||
| #: js/ui/status/network.js:1159 | ||||
| msgid "Wi-Fi Settings" | ||||
| msgstr "Configuración de Wi-Fi" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1280 | ||||
| #: js/ui/status/network.js:1281 | ||||
| #, javascript-format | ||||
| msgid "%s Hotspot Active" | ||||
| msgstr "Punto de acceso %s activo" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1295 | ||||
| #: js/ui/status/network.js:1296 | ||||
| #, javascript-format | ||||
| msgid "%s Not Connected" | ||||
| msgstr "%s no conectado" | ||||
|  | ||||
| #: js/ui/status/network.js:1392 | ||||
| #: js/ui/status/network.js:1393 | ||||
| msgid "connecting…" | ||||
| msgstr "conectando…" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password | ||||
| #: js/ui/status/network.js:1395 | ||||
| #: js/ui/status/network.js:1396 | ||||
| msgid "authentication required" | ||||
| msgstr "se necesita autenticación" | ||||
|  | ||||
| #: js/ui/status/network.js:1397 | ||||
| #: js/ui/status/network.js:1398 | ||||
| msgid "connection failed" | ||||
| msgstr "falló la conexión" | ||||
|  | ||||
| #: js/ui/status/network.js:1447 | ||||
| #: js/ui/status/network.js:1448 | ||||
| msgid "VPN Settings" | ||||
| msgstr "Configuración de VPN" | ||||
|  | ||||
| #: js/ui/status/network.js:1464 | ||||
| #: js/ui/status/network.js:1465 | ||||
| msgid "VPN" | ||||
| msgstr "VPN" | ||||
|  | ||||
| #: js/ui/status/network.js:1474 | ||||
| #: js/ui/status/network.js:1475 | ||||
| msgid "VPN Off" | ||||
| msgstr "VPN apagada" | ||||
|  | ||||
| #: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82 | ||||
| #: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82 | ||||
| msgid "Network Settings" | ||||
| msgstr "Configuración de la red" | ||||
|  | ||||
| #: js/ui/status/network.js:1564 | ||||
| #: js/ui/status/network.js:1565 | ||||
| #, javascript-format | ||||
| msgid "%s Wired Connection" | ||||
| msgid_plural "%s Wired Connections" | ||||
| msgstr[0] "%s conexión cableada" | ||||
| msgstr[1] "%s conexiones cableadas" | ||||
|  | ||||
| #: js/ui/status/network.js:1568 | ||||
| #: js/ui/status/network.js:1569 | ||||
| #, javascript-format | ||||
| msgid "%s Wi-Fi Connection" | ||||
| msgid_plural "%s Wi-Fi Connections" | ||||
| msgstr[0] "%s conexión inalámbrica" | ||||
| msgstr[1] "%s conexiones inalámbricas" | ||||
|  | ||||
| #: js/ui/status/network.js:1572 | ||||
| #: js/ui/status/network.js:1573 | ||||
| #, javascript-format | ||||
| msgid "%s Modem Connection" | ||||
| msgid_plural "%s Modem Connections" | ||||
| msgstr[0] "%s conexión por módem" | ||||
| msgstr[1] "%s conexiones por módem" | ||||
|  | ||||
| #: js/ui/status/network.js:1701 | ||||
| #: js/ui/status/network.js:1706 | ||||
| msgid "Connection failed" | ||||
| msgstr "Falló la conexión" | ||||
|  | ||||
| #: js/ui/status/network.js:1702 | ||||
| #: js/ui/status/network.js:1707 | ||||
| msgid "Activation of network connection failed" | ||||
| msgstr "Falló la activación de la conexión de red" | ||||
|  | ||||
| @@ -2154,7 +2151,7 @@ msgstr[1] "La configuración se revertirá en %d segundos" | ||||
|  | ||||
| #. Translators: This represents the size of a window. The first number is | ||||
| #. * the width of the window and the second is the height. | ||||
| #: js/ui/windowManager.js:662 | ||||
| #: js/ui/windowManager.js:677 | ||||
| #, javascript-format | ||||
| msgid "%d × %d" | ||||
| msgstr "%d × %d" | ||||
| @@ -2289,6 +2286,9 @@ msgstr[1] "%u entradas" | ||||
| msgid "System Sounds" | ||||
| msgstr "Sonidos del sistema" | ||||
|  | ||||
| #~ msgid "toggle-switch-us" | ||||
| #~ msgstr "toggle-switch-intl" | ||||
|  | ||||
| #~ msgid "network-workgroup" | ||||
| #~ msgstr "network-workgroup" | ||||
|  | ||||
|   | ||||
							
								
								
									
										178
									
								
								po/id.po
									
									
									
									
									
								
							
							
						
						
									
										178
									
								
								po/id.po
									
									
									
									
									
								
							| @@ -4,12 +4,13 @@ | ||||
| # Andika Triwidada <andika@gmail.com>, 2010-2014, 2017. | ||||
| # Dirgita <dirgitadevina@yahoo.co.id>, 2011, 2012, 2014. | ||||
| # Wibiharto <wibinem@yahoo.com>, 2011. | ||||
| # Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2017, 2018, 2019. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2019-02-21 18:43+0000\n" | ||||
| "PO-Revision-Date: 2019-02-14 22:18+0700\n" | ||||
| "POT-Creation-Date: 2019-04-17 19:29+0000\n" | ||||
| "PO-Revision-Date: 2019-04-25 14:54+0700\n" | ||||
| "Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n" | ||||
| "Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n" | ||||
| "Language: id\n" | ||||
| @@ -376,11 +377,6 @@ msgstr "" | ||||
| msgid "Network Login" | ||||
| msgstr "Log Masuk Jaringan" | ||||
|  | ||||
| #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! | ||||
| #: data/org.gnome.Shell.PortalHelper.desktop.in.in:9 | ||||
| msgid "network-workgroup" | ||||
| msgstr "network-workgroup" | ||||
|  | ||||
| #: js/extensionPrefs/main.js:116 | ||||
| msgid "Something’s gone wrong" | ||||
| msgstr "Ada yang tidak beres" | ||||
| @@ -461,7 +457,7 @@ msgstr "Tak masuk daftar?" | ||||
|  | ||||
| #. 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:880 | ||||
| #: js/gdm/loginDialog.js:884 | ||||
| #, javascript-format | ||||
| msgid "(e.g., user or %s)" | ||||
| msgstr "(cth., pengguna dari %s)" | ||||
| @@ -469,12 +465,12 @@ msgstr "(cth., pengguna dari %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:885 js/ui/components/networkAgent.js:243 | ||||
| #: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243 | ||||
| #: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281 | ||||
| msgid "Username: " | ||||
| msgstr "Nama pengguna: " | ||||
|  | ||||
| #: js/gdm/loginDialog.js:1223 | ||||
| #: js/gdm/loginDialog.js:1227 | ||||
| msgid "Login Window" | ||||
| msgstr "Jendela Log Masuk" | ||||
|  | ||||
| @@ -728,32 +724,37 @@ msgstr "Sering" | ||||
| msgid "All" | ||||
| msgstr "Semua" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1737 js/ui/panel.js:83 | ||||
| #. Translators: This is the heading of a list of open windows | ||||
| #: js/ui/appDisplay.js:1713 js/ui/panel.js:79 | ||||
| msgid "Open Windows" | ||||
| msgstr "Buka Jendela" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1732 js/ui/panel.js:86 | ||||
| msgid "New Window" | ||||
| msgstr "Jendela Baru" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1751 | ||||
| #: js/ui/appDisplay.js:1746 | ||||
| msgid "Launch using Dedicated Graphics Card" | ||||
| msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1778 js/ui/dash.js:239 | ||||
| #: js/ui/appDisplay.js:1773 js/ui/dash.js:239 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "Hapus dari Favorit" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1784 | ||||
| #: js/ui/appDisplay.js:1779 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "Tambah ke Favorit" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1794 js/ui/panel.js:94 | ||||
| #: js/ui/appDisplay.js:1789 js/ui/panel.js:97 | ||||
| msgid "Show Details" | ||||
| msgstr "Tampilkan Rincian" | ||||
|  | ||||
| #: js/ui/appFavorites.js:141 | ||||
| #: js/ui/appFavorites.js:149 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s telah ditambahkan ke favorit Anda." | ||||
|  | ||||
| #: js/ui/appFavorites.js:175 | ||||
| #: js/ui/appFavorites.js:183 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s telah dihapus dari favorit Anda." | ||||
| @@ -1039,7 +1040,7 @@ msgstr "Sandi jaringan data seluler" | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "Perlu suatu sandi untuk menyambung ke \"%s\"." | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665 | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664 | ||||
| msgid "Network Manager" | ||||
| msgstr "Manajer Jaringan" | ||||
|  | ||||
| @@ -1109,23 +1110,23 @@ msgstr "Tambah jam dunia…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Jam Dunia" | ||||
|  | ||||
| #: js/ui/dateMenu.js:222 | ||||
| #: js/ui/dateMenu.js:228 | ||||
| msgid "Weather" | ||||
| msgstr "Cuaca" | ||||
|  | ||||
| #: js/ui/dateMenu.js:305 | ||||
| #: js/ui/dateMenu.js:311 | ||||
| msgid "Select a location…" | ||||
| msgstr "Pilih lokasi…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:313 | ||||
| #: js/ui/dateMenu.js:319 | ||||
| msgid "Loading…" | ||||
| msgstr "Memuat…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #: js/ui/dateMenu.js:329 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Pergi daring untuk informasi cuaca" | ||||
|  | ||||
| #: js/ui/dateMenu.js:325 | ||||
| #: js/ui/dateMenu.js:331 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Informasi cuaca saat ini tidak tersedia" | ||||
|  | ||||
| @@ -1288,26 +1289,26 @@ msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?" | ||||
|  | ||||
| #. Translators: %s is an application name like "Settings" | ||||
| #: js/ui/inhibitShortcutsDialog.js:50 | ||||
| #: js/ui/inhibitShortcutsDialog.js:78 | ||||
| #, javascript-format | ||||
| msgid "%s wants to inhibit shortcuts" | ||||
| msgstr "%s ingin mencegah pintasan" | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:51 | ||||
| #: js/ui/inhibitShortcutsDialog.js:79 | ||||
| msgid "Application wants to inhibit shortcuts" | ||||
| msgstr "Aplikasi ingin mencegah pintasan" | ||||
|  | ||||
| #. Translators: %s is a keyboard shortcut like "Super+x" | ||||
| #: js/ui/inhibitShortcutsDialog.js:60 | ||||
| #: js/ui/inhibitShortcutsDialog.js:88 | ||||
| #, javascript-format | ||||
| msgid "You can restore shortcuts by pressing %s." | ||||
| msgstr "Anda dapat memulihkan pintasan dengan menekan %s." | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:65 | ||||
| #: js/ui/inhibitShortcutsDialog.js:93 | ||||
| msgid "Deny" | ||||
| msgstr "Tolak" | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:71 | ||||
| #: js/ui/inhibitShortcutsDialog.js:100 | ||||
| msgid "Allow" | ||||
| msgstr "Izinkan" | ||||
|  | ||||
| @@ -1358,13 +1359,13 @@ msgid "Leave On" | ||||
| msgstr "Biarkan Menyala" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:1264 | ||||
| #: js/ui/status/network.js:1263 | ||||
| msgid "Turn On" | ||||
| msgstr "Nyalakan" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:310 | ||||
| #: js/ui/status/network.js:1264 js/ui/status/network.js:1376 | ||||
| #: js/ui/status/network.js:1263 js/ui/status/network.js:1375 | ||||
| #: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79 | ||||
| #: js/ui/status/rfkill.js:106 | ||||
| msgid "Turn Off" | ||||
| @@ -1374,59 +1375,59 @@ msgstr "Matikan" | ||||
| msgid "Leave Off" | ||||
| msgstr "Biarkan Mati" | ||||
|  | ||||
| #: js/ui/keyboard.js:203 | ||||
| #: js/ui/keyboard.js:200 | ||||
| msgid "Region & Language Settings" | ||||
| msgstr "Pengaturan Wilayah & Bahasa" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:614 | ||||
| #: js/ui/lookingGlass.js:615 | ||||
| msgid "No extensions installed" | ||||
| msgstr "Tak ada ekstensi terpasang" | ||||
|  | ||||
| #. Translators: argument is an extension UUID. | ||||
| #: js/ui/lookingGlass.js:668 | ||||
| #: js/ui/lookingGlass.js:669 | ||||
| #, javascript-format | ||||
| msgid "%s has not emitted any errors." | ||||
| msgstr "%s tidak menampilkan galat apa pun." | ||||
|  | ||||
| #: js/ui/lookingGlass.js:674 | ||||
| #: js/ui/lookingGlass.js:675 | ||||
| msgid "Hide Errors" | ||||
| msgstr "Sembunyikan Galat" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:678 js/ui/lookingGlass.js:738 | ||||
| #: js/ui/lookingGlass.js:679 js/ui/lookingGlass.js:739 | ||||
| msgid "Show Errors" | ||||
| msgstr "Tampilkan Galat" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:687 | ||||
| #: js/ui/lookingGlass.js:688 | ||||
| msgid "Enabled" | ||||
| msgstr "Diaktifkan" | ||||
|  | ||||
| #. translators: | ||||
| #. * The device has been disabled | ||||
| #: js/ui/lookingGlass.js:690 subprojects/gvc/gvc-mixer-control.c:1866 | ||||
| #: js/ui/lookingGlass.js:691 subprojects/gvc/gvc-mixer-control.c:1864 | ||||
| msgid "Disabled" | ||||
| msgstr "Dinonaktifkan" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:692 | ||||
| #: js/ui/lookingGlass.js:693 | ||||
| msgid "Error" | ||||
| msgstr "Galat" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:694 | ||||
| #: js/ui/lookingGlass.js:695 | ||||
| msgid "Out of date" | ||||
| msgstr "Kadaluarsa" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:696 | ||||
| #: js/ui/lookingGlass.js:697 | ||||
| msgid "Downloading" | ||||
| msgstr "Mengunduh" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:720 | ||||
| #: js/ui/lookingGlass.js:721 | ||||
| msgid "View Source" | ||||
| msgstr "Tilik Sumber" | ||||
|  | ||||
| #: js/ui/lookingGlass.js:729 | ||||
| #: js/ui/lookingGlass.js:730 | ||||
| msgid "Web Page" | ||||
| msgstr "Halaman Web" | ||||
|  | ||||
| #: js/ui/messageTray.js:1474 | ||||
| #: js/ui/messageTray.js:1480 | ||||
| msgid "System Information" | ||||
| msgstr "Informasi Sistem" | ||||
|  | ||||
| @@ -1504,35 +1505,25 @@ msgstr "Tekan Esc untuk keluar" | ||||
| msgid "Press any key to exit" | ||||
| msgstr "Tekan tombol apa saja untuk keluar" | ||||
|  | ||||
| #: js/ui/panel.js:108 | ||||
| #: js/ui/panel.js:113 | ||||
| msgid "Quit" | ||||
| msgstr "Keluar" | ||||
|  | ||||
| #. Translators: If there is no suitable word for "Activities" | ||||
| #. in your language, you can use the word for "Overview". | ||||
| #: js/ui/panel.js:466 | ||||
| #: js/ui/panel.js:468 | ||||
| msgid "Activities" | ||||
| msgstr "Aktivitas" | ||||
|  | ||||
| #: js/ui/panel.js:741 | ||||
| #: js/ui/panel.js:743 | ||||
| msgctxt "System menu in the top bar" | ||||
| msgid "System" | ||||
| msgstr "Sistem" | ||||
|  | ||||
| #: js/ui/panel.js:861 | ||||
| #: js/ui/panel.js:864 | ||||
| msgid "Top Bar" | ||||
| msgstr "Bar Atas" | ||||
|  | ||||
| # Dirgita: Hayo, enaknya pake I/O atau ON/OFF?^^ | ||||
| #. Translators: this MUST be either "toggle-switch-us" | ||||
| #. (for toggle switches containing the English words | ||||
| #. "ON" and "OFF") or "toggle-switch-intl" (for toggle | ||||
| #. switches containing "◯" and "|"). Other values will | ||||
| #. simply result in invisible toggle switches. | ||||
| #: js/ui/popupMenu.js:285 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-intl" | ||||
|  | ||||
| #: js/ui/runDialog.js:64 | ||||
| msgid "Enter a Command" | ||||
| msgstr "Ketikkan Perintah" | ||||
| @@ -1569,7 +1560,7 @@ msgid_plural "%d new notifications" | ||||
| msgstr[0] "%d pemberitahuan baru" | ||||
| msgstr[1] "%d pemberitahuan baru" | ||||
|  | ||||
| #: js/ui/screenShield.js:449 js/ui/status/system.js:270 | ||||
| #: js/ui/screenShield.js:449 js/ui/status/system.js:271 | ||||
| msgid "Lock" | ||||
| msgstr "Kunci" | ||||
|  | ||||
| @@ -1584,11 +1575,11 @@ msgstr "GNOME perlu mengunci layar" | ||||
| #. | ||||
| #. XXX: another option is to kick the user into the gdm login | ||||
| #. screen, where we're not affected by grabs | ||||
| #: js/ui/screenShield.js:834 js/ui/screenShield.js:1307 | ||||
| #: js/ui/screenShield.js:826 js/ui/screenShield.js:1299 | ||||
| msgid "Unable to lock" | ||||
| msgstr "Tak bisa mengunci" | ||||
|  | ||||
| #: js/ui/screenShield.js:835 js/ui/screenShield.js:1308 | ||||
| #: js/ui/screenShield.js:827 js/ui/screenShield.js:1300 | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "Kunci diblokir oleh suatu aplikasi" | ||||
|  | ||||
| @@ -1750,7 +1741,7 @@ msgid "<unknown>" | ||||
| msgstr "<tak dikenal>" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1293 | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1292 | ||||
| #, javascript-format | ||||
| msgid "%s Off" | ||||
| msgstr "%s Mati" | ||||
| @@ -1776,7 +1767,7 @@ msgid "%s Disconnecting" | ||||
| msgstr "%s Memutus" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1285 | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1284 | ||||
| #, javascript-format | ||||
| msgid "%s Connecting" | ||||
| msgstr "%s Menyambung" | ||||
| @@ -1816,7 +1807,7 @@ msgid "Mobile Broadband Settings" | ||||
| msgstr "Pengaturan Data Seluler" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1290 | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1289 | ||||
| #, javascript-format | ||||
| msgid "%s Hardware Disabled" | ||||
| msgstr "%s Perangkat Keras Dinonaktifkan" | ||||
| @@ -1881,72 +1872,72 @@ msgid "Wi-Fi Settings" | ||||
| msgstr "Pengaturan Wi-Fi" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1281 | ||||
| #: js/ui/status/network.js:1280 | ||||
| #, javascript-format | ||||
| msgid "%s Hotspot Active" | ||||
| msgstr "%s Hotspot Aktif" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1296 | ||||
| #: js/ui/status/network.js:1295 | ||||
| #, javascript-format | ||||
| msgid "%s Not Connected" | ||||
| msgstr "%s Tak Tersambung" | ||||
|  | ||||
| #: js/ui/status/network.js:1393 | ||||
| #: js/ui/status/network.js:1392 | ||||
| msgid "connecting…" | ||||
| msgstr "menyambung…" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password | ||||
| #: js/ui/status/network.js:1396 | ||||
| #: js/ui/status/network.js:1395 | ||||
| msgid "authentication required" | ||||
| msgstr "diperlukan otentikasi" | ||||
|  | ||||
| #: js/ui/status/network.js:1398 | ||||
| #: js/ui/status/network.js:1397 | ||||
| msgid "connection failed" | ||||
| msgstr "koneksi gagal" | ||||
|  | ||||
| #: js/ui/status/network.js:1448 | ||||
| #: js/ui/status/network.js:1447 | ||||
| msgid "VPN Settings" | ||||
| msgstr "Pengaturan VPN" | ||||
|  | ||||
| #: js/ui/status/network.js:1465 | ||||
| #: js/ui/status/network.js:1464 | ||||
| msgid "VPN" | ||||
| msgstr "VPN" | ||||
|  | ||||
| #: js/ui/status/network.js:1475 | ||||
| #: js/ui/status/network.js:1474 | ||||
| msgid "VPN Off" | ||||
| msgstr "VPN Mati" | ||||
|  | ||||
| #: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82 | ||||
| #: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82 | ||||
| msgid "Network Settings" | ||||
| msgstr "Pengaturan Jaringan" | ||||
|  | ||||
| #: js/ui/status/network.js:1565 | ||||
| #: js/ui/status/network.js:1564 | ||||
| #, javascript-format | ||||
| msgid "%s Wired Connection" | ||||
| msgid_plural "%s Wired Connections" | ||||
| msgstr[0] "%s Koneksi Kabel" | ||||
| msgstr[1] "%s Koneksi Kabel" | ||||
|  | ||||
| #: js/ui/status/network.js:1569 | ||||
| #: js/ui/status/network.js:1568 | ||||
| #, javascript-format | ||||
| msgid "%s Wi-Fi Connection" | ||||
| msgid_plural "%s Wi-Fi Connections" | ||||
| msgstr[0] "%s Koneksi Wi-Fi" | ||||
| msgstr[1] "%s Koneksi Wi-Fi" | ||||
|  | ||||
| #: js/ui/status/network.js:1573 | ||||
| #: js/ui/status/network.js:1572 | ||||
| #, javascript-format | ||||
| msgid "%s Modem Connection" | ||||
| msgid_plural "%s Modem Connections" | ||||
| msgstr[0] "%s Koneksi Modem" | ||||
| msgstr[1] "%s Koneksi Modem" | ||||
|  | ||||
| #: js/ui/status/network.js:1702 | ||||
| #: js/ui/status/network.js:1705 | ||||
| msgid "Connection failed" | ||||
| msgstr "Koneksi gagal" | ||||
|  | ||||
| #: js/ui/status/network.js:1703 | ||||
| #: js/ui/status/network.js:1706 | ||||
| msgid "Activation of network connection failed" | ||||
| msgstr "Aktivasi koneksi jaringan gagal" | ||||
|  | ||||
| @@ -2028,15 +2019,15 @@ msgstr "Keluar" | ||||
| msgid "Account Settings" | ||||
| msgstr "Pengaturan Akun" | ||||
|  | ||||
| #: js/ui/status/system.js:255 | ||||
| #: js/ui/status/system.js:256 | ||||
| msgid "Orientation Lock" | ||||
| msgstr "Kunci Orientasi" | ||||
|  | ||||
| #: js/ui/status/system.js:281 | ||||
| #: js/ui/status/system.js:282 | ||||
| msgid "Suspend" | ||||
| msgstr "Suspensi" | ||||
|  | ||||
| #: js/ui/status/system.js:291 | ||||
| #: js/ui/status/system.js:292 | ||||
| msgid "Power Off" | ||||
| msgstr "Matikan" | ||||
|  | ||||
| @@ -2152,7 +2143,7 @@ msgstr[1] "Perubahan tatanan akan dikembalikan dalam %d detik" | ||||
|  | ||||
| #. Translators: This represents the size of a window. The first number is | ||||
| #. * the width of the window and the second is the height. | ||||
| #: js/ui/windowManager.js:662 | ||||
| #: js/ui/windowManager.js:677 | ||||
| #, javascript-format | ||||
| msgid "%d × %d" | ||||
| msgstr "%d × %d" | ||||
| @@ -2225,11 +2216,6 @@ msgstr "Pindahkan ke Monitor Kanan" | ||||
| msgid "Evolution Calendar" | ||||
| msgstr "Evolution Kalender" | ||||
|  | ||||
| #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! | ||||
| #: src/calendar-server/evolution-calendar.desktop.in:6 | ||||
| msgid "evolution" | ||||
| msgstr "evolution" | ||||
|  | ||||
| #: src/main.c:408 | ||||
| msgid "Print version" | ||||
| msgstr "Versi Cetak" | ||||
| @@ -2246,12 +2232,12 @@ msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk" | ||||
| msgid "List possible modes" | ||||
| msgstr "Menampilkan mode yang mungkin" | ||||
|  | ||||
| #: src/shell-app.c:260 | ||||
| #: src/shell-app.c:264 | ||||
| msgctxt "program" | ||||
| msgid "Unknown" | ||||
| msgstr "Tak dikenal" | ||||
|  | ||||
| #: src/shell-app.c:511 | ||||
| #: src/shell-app.c:515 | ||||
| #, c-format | ||||
| msgid "Failed to launch “%s”" | ||||
| msgstr "Gagal meluncurkan \"%s\"" | ||||
| @@ -2270,7 +2256,7 @@ msgstr "Dialog autentikasi ditolak oleh pengguna" | ||||
|  | ||||
| #. translators: | ||||
| #. * The number of sound outputs on a particular device | ||||
| #: subprojects/gvc/gvc-mixer-control.c:1873 | ||||
| #: subprojects/gvc/gvc-mixer-control.c:1871 | ||||
| #, c-format | ||||
| msgid "%u Output" | ||||
| msgid_plural "%u Outputs" | ||||
| @@ -2279,17 +2265,27 @@ msgstr[1] "%u Keluaran" | ||||
|  | ||||
| #. translators: | ||||
| #. * The number of sound inputs on a particular device | ||||
| #: subprojects/gvc/gvc-mixer-control.c:1883 | ||||
| #: subprojects/gvc/gvc-mixer-control.c:1881 | ||||
| #, c-format | ||||
| msgid "%u Input" | ||||
| msgid_plural "%u Inputs" | ||||
| msgstr[0] "%u Masukan" | ||||
| msgstr[1] "%u Masukan" | ||||
|  | ||||
| #: subprojects/gvc/gvc-mixer-control.c:2738 | ||||
| #: subprojects/gvc/gvc-mixer-control.c:2736 | ||||
| msgid "System Sounds" | ||||
| msgstr "Suara Sistem" | ||||
|  | ||||
| #~ msgid "network-workgroup" | ||||
| #~ msgstr "network-workgroup" | ||||
|  | ||||
| # Dirgita: Hayo, enaknya pake I/O atau ON/OFF?^^ | ||||
| #~ msgid "toggle-switch-us" | ||||
| #~ msgstr "toggle-switch-intl" | ||||
|  | ||||
| #~ msgid "evolution" | ||||
| #~ msgstr "evolution" | ||||
|  | ||||
| #~ msgid "There was an error loading the preferences dialog for %s:" | ||||
| #~ msgstr "Ada galat saat memuat dialog preferensi bagi %s:" | ||||
|  | ||||
|   | ||||
							
								
								
									
										1083
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										1083
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -295,13 +295,13 @@ create_client_for_source (ESource              *source, | ||||
| 		          CalendarSourceData   *source_data) | ||||
| { | ||||
|   ClientData *data; | ||||
|   ECalClient *client; | ||||
|   EClient *client; | ||||
|   GError *error = NULL; | ||||
|  | ||||
|   client = g_hash_table_lookup (source_data->clients, source); | ||||
|   g_return_if_fail (client == NULL); | ||||
|  | ||||
|   client = e_cal_client_new (source, source_type, &error); | ||||
|   client = e_cal_client_connect_sync (source, source_type, -1, NULL, &error); | ||||
|   if (!client) | ||||
|     { | ||||
|       g_warning ("Could not load source '%s': %s", | ||||
| @@ -312,7 +312,7 @@ create_client_for_source (ESource              *source, | ||||
|     } | ||||
|  | ||||
|   data = g_slice_new0 (ClientData); | ||||
|   data->client = client;  /* takes ownership */ | ||||
|   data->client = E_CAL_CLIENT (client);  /* takes ownership */ | ||||
|   data->backend_died_id = g_signal_connect (client, | ||||
|                                             "backend-died", | ||||
|                                             G_CALLBACK (backend_died_cb), | ||||
|   | ||||
| @@ -102,97 +102,120 @@ typedef struct | ||||
| } CollectAppointmentsData; | ||||
|  | ||||
| static time_t | ||||
| get_time_from_property (icalcomponent         *ical, | ||||
|                         icalproperty_kind      prop_kind, | ||||
|                         struct icaltimetype (* get_prop_func) (const icalproperty *prop), | ||||
|                         icaltimezone          *default_zone) | ||||
| get_time_from_property (ICalComponent         *icomp, | ||||
|                         ICalPropertyKind       prop_kind, | ||||
|                         ICalTime * (* get_prop_func) (ICalProperty *prop), | ||||
|                         ICalTimezone          *default_zone) | ||||
| { | ||||
|   icalproperty        *prop; | ||||
|   struct icaltimetype  ical_time; | ||||
|   icalparameter       *param; | ||||
|   icaltimezone        *timezone = NULL; | ||||
|   ICalProperty  *prop; | ||||
|   ICalTime      *itt; | ||||
|   ICalParameter *param; | ||||
|   ICalTimezone  *timezone = NULL; | ||||
|   time_t         retval; | ||||
|  | ||||
|   prop = icalcomponent_get_first_property (ical, prop_kind); | ||||
|   prop = i_cal_component_get_first_property (icomp, prop_kind); | ||||
|   if (!prop) | ||||
|     return 0; | ||||
|  | ||||
|   ical_time = get_prop_func (prop); | ||||
|   itt = get_prop_func (prop); | ||||
|  | ||||
|   param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER); | ||||
|   param = i_cal_property_get_first_parameter (prop, I_CAL_TZID_PARAMETER); | ||||
|   if (param) | ||||
|     timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param)); | ||||
|   else if (icaltime_is_utc (ical_time)) | ||||
|     timezone = icaltimezone_get_utc_timezone (); | ||||
|     timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param)); | ||||
|   else if (i_cal_time_is_utc (itt)) | ||||
|     timezone = i_cal_timezone_get_utc_timezone (); | ||||
|   else | ||||
|     timezone = default_zone; | ||||
|  | ||||
|   return icaltime_as_timet_with_zone (ical_time, timezone); | ||||
|   retval = i_cal_time_as_timet_with_zone (itt, timezone); | ||||
|  | ||||
|   g_clear_object (¶m); | ||||
|   g_clear_object (&prop); | ||||
|   g_clear_object (&itt); | ||||
|  | ||||
|   return retval; | ||||
| } | ||||
|  | ||||
| static char * | ||||
| get_ical_uid (icalcomponent *ical) | ||||
| get_ical_uid (ICalComponent *icomp) | ||||
| { | ||||
|   return g_strdup (icalcomponent_get_uid (ical)); | ||||
|   return g_strdup (i_cal_component_get_uid (icomp)); | ||||
| } | ||||
|  | ||||
| static char * | ||||
| get_ical_summary (icalcomponent *ical) | ||||
| get_ical_summary (ICalComponent *icomp) | ||||
| { | ||||
|   icalproperty *prop; | ||||
|   ICalProperty *prop; | ||||
|   char         *retval; | ||||
|  | ||||
|   prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY); | ||||
|   prop = i_cal_component_get_first_property (icomp, I_CAL_SUMMARY_PROPERTY); | ||||
|   if (!prop) | ||||
|     return NULL; | ||||
|  | ||||
|   return g_strdup (icalproperty_get_summary (prop)); | ||||
|   retval = g_strdup (i_cal_property_get_summary (prop)); | ||||
|  | ||||
|   g_object_unref (prop); | ||||
|  | ||||
|   return retval; | ||||
| } | ||||
|  | ||||
| static char * | ||||
| get_ical_description (icalcomponent *ical) | ||||
| get_ical_description (ICalComponent *icomp) | ||||
| { | ||||
|   icalproperty *prop; | ||||
|   ICalProperty *prop; | ||||
|   char         *retval; | ||||
|  | ||||
|   prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY); | ||||
|   prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY); | ||||
|   if (!prop) | ||||
|     return NULL; | ||||
|  | ||||
|   return g_strdup (icalproperty_get_description (prop)); | ||||
|   retval = g_strdup (i_cal_property_get_description (prop)); | ||||
|  | ||||
|   g_object_unref (prop); | ||||
|  | ||||
|   return retval; | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_start_time (icalcomponent *ical, | ||||
|                      icaltimezone  *default_zone) | ||||
| get_ical_start_time (ICalComponent *icomp, | ||||
|                      ICalTimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_DTSTART_PROPERTY, | ||||
|                                  icalproperty_get_dtstart, | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_DTSTART_PROPERTY, | ||||
|                                  i_cal_property_get_dtstart, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_end_time (icalcomponent *ical, | ||||
|                    icaltimezone  *default_zone) | ||||
| get_ical_end_time (ICalComponent *icomp, | ||||
|                    ICalTimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_DTEND_PROPERTY, | ||||
|                                  icalproperty_get_dtend, | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_DTEND_PROPERTY, | ||||
|                                  i_cal_property_get_dtend, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| get_ical_is_all_day (icalcomponent *ical, | ||||
| get_ical_is_all_day (ICalComponent *icomp, | ||||
|                      time_t         start_time, | ||||
|                      icaltimezone  *default_zone) | ||||
|                      ICalTimezone  *default_zone) | ||||
| { | ||||
|   icalproperty            *prop; | ||||
|   struct tm               *start_tm; | ||||
|   time_t                   end_time; | ||||
|   struct icaldurationtype  duration; | ||||
|   struct icaltimetype      start_icaltime; | ||||
|   ICalProperty *prop; | ||||
|   ICalDuration *duration; | ||||
|   ICalTime     *dtstart; | ||||
|   struct tm    *start_tm; | ||||
|   time_t        end_time; | ||||
|   gboolean      retval; | ||||
|  | ||||
|   start_icaltime = icalcomponent_get_dtstart (ical); | ||||
|   if (start_icaltime.is_date) | ||||
|     return TRUE; | ||||
|   dtstart = i_cal_component_get_dtstart (icomp); | ||||
|   if (dtstart && i_cal_time_is_date (dtstart)) | ||||
|     { | ||||
|       g_clear_object (&dtstart); | ||||
|       return TRUE; | ||||
|     } | ||||
|  | ||||
|   g_clear_object (&dtstart); | ||||
|  | ||||
|   start_tm = gmtime (&start_time); | ||||
|   if (start_tm->tm_sec  != 0 || | ||||
| @@ -200,35 +223,40 @@ get_ical_is_all_day (icalcomponent *ical, | ||||
|       start_tm->tm_hour != 0) | ||||
|     return FALSE; | ||||
|  | ||||
|   if ((end_time = get_ical_end_time (ical, default_zone))) | ||||
|   if ((end_time = get_ical_end_time (icomp, default_zone))) | ||||
|     return (end_time - start_time) % 86400 == 0; | ||||
|  | ||||
|   prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY); | ||||
|   prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY); | ||||
|   if (!prop) | ||||
|     return FALSE; | ||||
|  | ||||
|   duration = icalproperty_get_duration (prop); | ||||
|   duration = i_cal_property_get_duration (prop); | ||||
|  | ||||
|   return icaldurationtype_as_int (duration) % 86400 == 0; | ||||
|   retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0; | ||||
|  | ||||
|   g_clear_object (&duration); | ||||
|   g_clear_object (&prop); | ||||
|  | ||||
|   return retval; | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_due_time (icalcomponent *ical, | ||||
|                    icaltimezone  *default_zone) | ||||
| get_ical_due_time (ICalComponent *icomp, | ||||
|                    ICalTimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_DUE_PROPERTY, | ||||
|                                  icalproperty_get_due, | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_DUE_PROPERTY, | ||||
|                                  i_cal_property_get_due, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| static inline time_t | ||||
| get_ical_completed_time (icalcomponent *ical, | ||||
|                          icaltimezone  *default_zone) | ||||
| get_ical_completed_time (ICalComponent *icomp, | ||||
|                          ICalTimezone  *default_zone) | ||||
| { | ||||
|   return get_time_from_property (ical, | ||||
|                                  ICAL_COMPLETED_PROPERTY, | ||||
|                                  icalproperty_get_completed, | ||||
|   return get_time_from_property (icomp, | ||||
|                                  I_CAL_COMPLETED_PROPERTY, | ||||
|                                  i_cal_property_get_completed, | ||||
|                                  default_zone); | ||||
| } | ||||
|  | ||||
| @@ -365,67 +393,69 @@ calendar_appointment_free (CalendarAppointment *appointment) | ||||
|  | ||||
| static void | ||||
| calendar_appointment_init (CalendarAppointment  *appointment, | ||||
|                            icalcomponent        *ical, | ||||
|                            ICalComponent        *icomp, | ||||
|                            ECalClient           *cal) | ||||
| { | ||||
|   icaltimezone *default_zone; | ||||
|   ICalTimezone *default_zone; | ||||
|   const char *source_id; | ||||
|  | ||||
|   source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal))); | ||||
|   default_zone = e_cal_client_get_default_timezone (cal); | ||||
|  | ||||
|   appointment->uid          = get_ical_uid (ical); | ||||
|   appointment->uid          = get_ical_uid (icomp); | ||||
|   appointment->source_id    = g_strdup (source_id); | ||||
|   appointment->backend_name = get_source_backend_name (cal); | ||||
|   appointment->summary      = get_ical_summary (ical); | ||||
|   appointment->description  = get_ical_description (ical); | ||||
|   appointment->summary      = get_ical_summary (icomp); | ||||
|   appointment->description  = get_ical_description (icomp); | ||||
|   appointment->color_string = get_source_color (cal); | ||||
|   appointment->start_time   = get_ical_start_time (ical, default_zone); | ||||
|   appointment->end_time     = get_ical_end_time (ical, default_zone); | ||||
|   appointment->is_all_day   = get_ical_is_all_day (ical, | ||||
|   appointment->start_time   = get_ical_start_time (icomp, default_zone); | ||||
|   appointment->end_time     = get_ical_end_time (icomp, default_zone); | ||||
|   appointment->is_all_day   = get_ical_is_all_day (icomp, | ||||
|                                                    appointment->start_time, | ||||
|                                                    default_zone); | ||||
| } | ||||
|  | ||||
| static CalendarAppointment * | ||||
| calendar_appointment_new (icalcomponent        *ical, | ||||
| calendar_appointment_new (ICalComponent        *icomp, | ||||
|                           ECalClient           *cal) | ||||
| { | ||||
|   CalendarAppointment *appointment; | ||||
|  | ||||
|   appointment = g_new0 (CalendarAppointment, 1); | ||||
|  | ||||
|   calendar_appointment_init (appointment, ical, cal); | ||||
|   calendar_appointment_init (appointment, icomp, cal); | ||||
|   return appointment; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| generate_instances_cb (ECalComponent *comp, | ||||
|                        time_t         start, | ||||
|                        time_t         end, | ||||
|                        gpointer       data) | ||||
| generate_instances_cb (ICalComponent *icomp, | ||||
|                        ICalTime *instance_start, | ||||
|                        ICalTime *instance_end, | ||||
|                        gpointer user_data, | ||||
|                        GCancellable *cancellable, | ||||
|                        GError **error) | ||||
| { | ||||
|   ECalClient *cal = ((CollectAppointmentsData *)data)->client; | ||||
|   GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments; | ||||
|   ECalClient *cal = ((CollectAppointmentsData *)user_data)->client; | ||||
|   GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments; | ||||
|   CalendarAppointment *appointment; | ||||
|   CalendarOccurrence *occurrence; | ||||
|   const char *uid; | ||||
|   ICalTimezone *default_zone; | ||||
|   const gchar *uid; | ||||
|  | ||||
|   e_cal_component_get_uid (comp, &uid); | ||||
|   default_zone = e_cal_client_get_default_timezone (cal); | ||||
|   uid = i_cal_component_get_uid (icomp); | ||||
|   appointment = g_hash_table_lookup (appointments, uid); | ||||
|  | ||||
|   if (appointment == NULL) | ||||
|     { | ||||
|       icalcomponent *ical = e_cal_component_get_icalcomponent (comp); | ||||
|  | ||||
|       appointment = calendar_appointment_new (ical, cal); | ||||
|       appointment = calendar_appointment_new (icomp, cal); | ||||
|       g_hash_table_insert (appointments, g_strdup (uid), appointment); | ||||
|     } | ||||
|  | ||||
|   occurrence             = g_new0 (CalendarOccurrence, 1); | ||||
|   occurrence->start_time = start; | ||||
|   occurrence->end_time   = end; | ||||
|   occurrence->rid        = e_cal_component_get_recurid_as_string (comp); | ||||
|   occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone); | ||||
|   occurrence->end_time   = i_cal_time_as_timet_with_zone (instance_end, default_zone); | ||||
|   occurrence->rid        = e_cal_util_component_get_recurid_as_string (icomp); | ||||
|  | ||||
|   appointment->occurrences = g_slist_append (appointment->occurrences, occurrence); | ||||
|  | ||||
| @@ -442,7 +472,7 @@ struct _App | ||||
|   time_t since; | ||||
|   time_t until; | ||||
|  | ||||
|   icaltimezone *zone; | ||||
|   ICalTimezone *zone; | ||||
|  | ||||
|   CalendarSources *sources; | ||||
|   gulong sources_signal_id; | ||||
| @@ -468,9 +498,9 @@ app_update_timezone (App *app) | ||||
|   if (g_strcmp0 (location, app->timezone_location) != 0) | ||||
|     { | ||||
|       if (location == NULL) | ||||
|         app->zone = icaltimezone_get_utc_timezone (); | ||||
|         app->zone = i_cal_timezone_get_utc_timezone (); | ||||
|       else | ||||
|         app->zone = icaltimezone_get_builtin_timezone (location); | ||||
|         app->zone = i_cal_timezone_get_builtin_timezone (location); | ||||
|       g_free (app->timezone_location); | ||||
|       app->timezone_location = location; | ||||
|       print_debug ("Using timezone %s", app->timezone_location); | ||||
| @@ -528,10 +558,10 @@ on_objects_added (ECalClientView *view, | ||||
|  | ||||
|   for (l = objects; l != NULL; l = l->next) | ||||
|     { | ||||
|       icalcomponent *ical = l->data; | ||||
|       ICalComponent *icomp = l->data; | ||||
|       const char *uid; | ||||
|  | ||||
|       uid = icalcomponent_get_uid (ical); | ||||
|       uid = i_cal_component_get_uid (icomp); | ||||
|  | ||||
|       if (g_hash_table_lookup (app->appointments, uid) == NULL) | ||||
|         { | ||||
| @@ -600,7 +630,7 @@ app_load_events (App *app) | ||||
|  | ||||
|   since_iso8601 = isodate_from_time_t (app->since); | ||||
|   until_iso8601 = isodate_from_time_t (app->until); | ||||
|   tz_location = icaltimezone_get_location (app->zone); | ||||
|   tz_location = i_cal_timezone_get_location (app->zone); | ||||
|  | ||||
|   print_debug ("Loading events since %s until %s", | ||||
|                since_iso8601, | ||||
| @@ -622,21 +652,12 @@ app_load_events (App *app) | ||||
|  | ||||
|       e_cal_client_set_default_timezone (cal, app->zone); | ||||
|  | ||||
|       error = NULL; | ||||
|       if (!e_client_open_sync (E_CLIENT (cal), TRUE, NULL, &error)) | ||||
|         { | ||||
|           ESource *source = e_client_get_source (E_CLIENT (cal)); | ||||
|           g_warning ("Error opening calendar %s: %s\n", | ||||
| 		     e_source_get_uid (source), error->message); | ||||
|           g_error_free (error); | ||||
|           continue; | ||||
|         } | ||||
|  | ||||
|       data.client = cal; | ||||
|       data.appointments = app->appointments; | ||||
|       e_cal_client_generate_instances_sync (cal, | ||||
|                                             app->since, | ||||
|                                             app->until, | ||||
|                                             NULL, | ||||
|                                             generate_instances_cb, | ||||
|                                             &data); | ||||
|  | ||||
| @@ -1078,7 +1099,7 @@ main (int    argc, | ||||
|  | ||||
| /* ---------------------------------------------------------------------------------------------------- */ | ||||
|  | ||||
| static void | ||||
| static void __attribute__((format(printf, 1, 0))) | ||||
| print_debug (const gchar *format, ...) | ||||
| { | ||||
|   gchar *s; | ||||
|   | ||||
| @@ -266,7 +266,7 @@ main (int    argc, | ||||
|  | ||||
| /* ---------------------------------------------------------------------------------------------------- */ | ||||
|  | ||||
| static void | ||||
| static void __attribute__((format(printf, 1, 0))) | ||||
| print_debug (const gchar *format, ...) | ||||
| { | ||||
|   gchar *s; | ||||
|   | ||||
| @@ -1069,9 +1069,9 @@ _shell_app_add_window (ShellApp        *app, | ||||
|  | ||||
|   app->running_state->window_sort_stale = TRUE; | ||||
|   app->running_state->windows = g_slist_prepend (app->running_state->windows, g_object_ref (window)); | ||||
|   g_signal_connect (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app); | ||||
|   g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app); | ||||
|   g_signal_connect (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app); | ||||
|   g_signal_connect_object (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app, 0); | ||||
|   g_signal_connect_object (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app, 0); | ||||
|   g_signal_connect_object (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app, 0); | ||||
|  | ||||
|   shell_app_update_app_actions (app, window); | ||||
|   shell_app_ensure_busy_watch (app); | ||||
|   | ||||
| @@ -863,6 +863,7 @@ _shell_global_set_plugin (ShellGlobal *global, | ||||
|     } | ||||
|  | ||||
|   st_entry_set_cursor_func (entry_cursor_func, global); | ||||
|   st_clipboard_set_selection (meta_display_get_selection (display)); | ||||
|  | ||||
|   g_signal_connect (global->stage, "notify::width", | ||||
|                     G_CALLBACK (global_stage_notify_width), global); | ||||
|   | ||||
| @@ -149,7 +149,7 @@ shell_glsl_quad_constructed (GObject *object) | ||||
|  | ||||
|   priv->pipeline = cogl_pipeline_copy (klass->base_pipeline); | ||||
|  | ||||
|   cogl_pipeline_set_layer_null_texture (priv->pipeline, 0, COGL_TEXTURE_TYPE_2D); | ||||
|   cogl_pipeline_set_layer_null_texture (priv->pipeline, 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -186,9 +186,7 @@ shell_invert_lightness_effect_init (ShellInvertLightnessEffect *self) | ||||
|       cogl_pipeline_add_layer_snippet (klass->base_pipeline, 0, snippet); | ||||
|       cogl_object_unref (snippet); | ||||
|  | ||||
|       cogl_pipeline_set_layer_null_texture (klass->base_pipeline, | ||||
|                                             0, /* layer number */ | ||||
|                                             COGL_TEXTURE_TYPE_2D); | ||||
|       cogl_pipeline_set_layer_null_texture (klass->base_pipeline, 0); | ||||
|     } | ||||
|  | ||||
|   self->pipeline = cogl_pipeline_copy (klass->base_pipeline); | ||||
|   | ||||
| @@ -117,7 +117,7 @@ remove_mnemonics (const GValue *value) | ||||
|   label = g_value_get_string (value); | ||||
|   g_return_val_if_fail (label != NULL, NULL); | ||||
|  | ||||
|   /* Stripped label will have the original label lenght at most */ | ||||
|   /* Stripped label will have the original label length at most */ | ||||
|   stripped_label = temp = g_new (gchar, strlen(label) + 1); | ||||
|   g_assert (stripped_label != NULL); | ||||
|  | ||||
|   | ||||
| @@ -430,7 +430,7 @@ ClutterContent * | ||||
| shell_util_get_content_for_window_actor (MetaWindowActor *window_actor, | ||||
|                                          MetaRectangle   *window_rect) | ||||
| { | ||||
|   ClutterActor *texture; | ||||
|   MetaShapedTexture *texture; | ||||
|   ClutterContent *content; | ||||
|   cairo_surface_t *surface; | ||||
|   cairo_rectangle_int_t clip; | ||||
| @@ -453,8 +453,7 @@ shell_util_get_content_for_window_actor (MetaWindowActor *window_actor, | ||||
|   clip.width = ceilf (window_rect->width * resource_scale); | ||||
|   clip.height = ceilf (window_rect->height * resource_scale); | ||||
|  | ||||
|   surface = meta_shaped_texture_get_image (META_SHAPED_TEXTURE (texture), | ||||
|                                            &clip); | ||||
|   surface = meta_shaped_texture_get_image (texture, &clip); | ||||
|  | ||||
|   content = clutter_canvas_new (); | ||||
|   clutter_canvas_set_size (CLUTTER_CANVAS (content), | ||||
|   | ||||
| @@ -18,6 +18,7 @@ st_headers = [ | ||||
|   'st-scrollable.h', | ||||
|   'st-scroll-bar.h', | ||||
|   'st-scroll-view.h', | ||||
|   'st-scroll-view-fade.h', | ||||
|   'st-settings.h', | ||||
|   'st-shadow.h', | ||||
|   'st-texture-cache.h', | ||||
| @@ -73,6 +74,7 @@ st_sources = [ | ||||
|   'st-scrollable.c', | ||||
|   'st-scroll-bar.c', | ||||
|   'st-scroll-view.c', | ||||
|   'st-scroll-view-fade.c', | ||||
|   'st-settings.c', | ||||
|   'st-shadow.c', | ||||
|   'st-texture-cache.c', | ||||
| @@ -94,11 +96,6 @@ st_enums = gnome.mkenums_simple('st-enum-types', | ||||
|  | ||||
| st_gir_sources = st_sources + st_private_headers + st_headers + st_enums | ||||
|  | ||||
| st_non_gir_sources = [ | ||||
|   'st-scroll-view-fade.c', | ||||
|   'st-scroll-view-fade.h' | ||||
| ] | ||||
|  | ||||
| data_to_c = find_program(meson.source_root() + '/src/data-to-c.pl') | ||||
|  | ||||
| custom_target('scroll-view-fade-glsl', | ||||
| @@ -123,9 +120,9 @@ st_cflags = [ | ||||
|  | ||||
| # Currently meson requires a shared library for building girs | ||||
| libst = shared_library('st-1.0', | ||||
|   sources: st_gir_sources + st_non_gir_sources, | ||||
|   sources: st_gir_sources, | ||||
|   c_args: st_cflags, | ||||
|   dependencies: [clutter_dep, gtk_dep, croco_dep, x11_dep, m_dep], | ||||
|   dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_dep, m_dep], | ||||
|   build_rpath: mutter_typelibdir, | ||||
|   install_rpath: mutter_typelibdir, | ||||
|   install_dir: pkglibdir, | ||||
| @@ -152,7 +149,7 @@ libst_gir = gnome.generate_gir(libst, | ||||
|   sources: st_gir_sources, | ||||
|   nsversion: '1.0', | ||||
|   namespace: 'St', | ||||
|   includes: ['Clutter-' + mutter_api_version, 'Cally-' + mutter_api_version, 'Gtk-3.0'], | ||||
|   includes: ['Clutter-' + mutter_api_version, 'Cally-' + mutter_api_version, 'Meta-' + mutter_api_version, 'Gtk-3.0'], | ||||
|   dependencies: [mutter_dep], | ||||
|   include_directories: include_directories('..'), | ||||
|   extra_args: ['-DST_COMPILATION', '--quiet'], | ||||
|   | ||||
| @@ -19,251 +19,49 @@ | ||||
|  | ||||
| /** | ||||
|  * SECTION:st-clipboard | ||||
|  * @short_description: a simple representation of the X clipboard | ||||
|  * @short_description: a simple representation of the clipboard | ||||
|  * | ||||
|  * #StCliboard is a very simple object representation of the clipboard | ||||
|  * available to applications. Text is always assumed to be UTF-8 and non-text | ||||
|  * items are not handled. | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
|  | ||||
| #include "st-clipboard.h" | ||||
| #include <X11/Xlib.h> | ||||
| #include <X11/Xatom.h> | ||||
| #include <gdk/gdk.h> | ||||
| #include <gdk/gdkx.h> | ||||
| #include <string.h> | ||||
|  | ||||
| struct _StClipboardPrivate | ||||
| { | ||||
|   Window clipboard_window; | ||||
|   gchar *clipboard_text; | ||||
| #include <meta/display.h> | ||||
| #include <meta/meta-selection-source-memory.h> | ||||
| #include <meta/meta-selection.h> | ||||
|  | ||||
|   Atom  *supported_targets; | ||||
|   gint   n_targets; | ||||
| }; | ||||
| G_DEFINE_TYPE (StClipboard, st_clipboard, G_TYPE_OBJECT) | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (StClipboard, st_clipboard, G_TYPE_OBJECT) | ||||
|  | ||||
| typedef struct _EventFilterData EventFilterData; | ||||
| struct _EventFilterData | ||||
| typedef struct _TransferData TransferData; | ||||
| struct _TransferData | ||||
| { | ||||
|   StClipboard            *clipboard; | ||||
|   StClipboardCallbackFunc callback; | ||||
|   gpointer                user_data; | ||||
|   GOutputStream          *stream; | ||||
| }; | ||||
|  | ||||
| static Atom __atom_primary = None; | ||||
| static Atom __atom_clip = None; | ||||
| static Atom __utf8_string = None; | ||||
| static Atom __atom_targets = None; | ||||
|  | ||||
| static void | ||||
| st_clipboard_dispose (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (st_clipboard_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| st_clipboard_finalize (GObject *object) | ||||
| { | ||||
|   StClipboardPrivate *priv = ((StClipboard *) object)->priv; | ||||
|  | ||||
|   g_free (priv->clipboard_text); | ||||
|   priv->clipboard_text = NULL; | ||||
|  | ||||
|   g_free (priv->supported_targets); | ||||
|   priv->supported_targets = NULL; | ||||
|   priv->n_targets = 0; | ||||
|  | ||||
|   G_OBJECT_CLASS (st_clipboard_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static GdkFilterReturn | ||||
| st_clipboard_provider (GdkXEvent *xevent_p, | ||||
|                        GdkEvent  *gev, | ||||
|                        void      *user_data) | ||||
| { | ||||
|   StClipboard *clipboard = user_data; | ||||
|   XEvent *xev = (XEvent *) xevent_p; | ||||
|   XSelectionEvent notify_event; | ||||
|   XSelectionRequestEvent *req_event; | ||||
|   GdkDisplay *display = gdk_display_get_default (); | ||||
|  | ||||
|   if (xev->type != SelectionRequest || | ||||
|       xev->xany.window != clipboard->priv->clipboard_window || | ||||
|       !clipboard->priv->clipboard_text) | ||||
|     return GDK_FILTER_CONTINUE; | ||||
|  | ||||
|   req_event = &xev->xselectionrequest; | ||||
|  | ||||
|   gdk_x11_display_error_trap_push (display); | ||||
|  | ||||
|   if (req_event->target == __atom_targets) | ||||
|     { | ||||
|       XChangeProperty (req_event->display, | ||||
|                        req_event->requestor, | ||||
|                        req_event->property, | ||||
|                        XA_ATOM, | ||||
|                        32, | ||||
|                        PropModeReplace, | ||||
|                        (guchar*) clipboard->priv->supported_targets, | ||||
|                        clipboard->priv->n_targets); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       XChangeProperty (req_event->display, | ||||
|                        req_event->requestor, | ||||
|                        req_event->property, | ||||
|                        req_event->target, | ||||
|                        8, | ||||
|                        PropModeReplace, | ||||
|                        (guchar*) clipboard->priv->clipboard_text, | ||||
|                        strlen (clipboard->priv->clipboard_text)); | ||||
|     } | ||||
|  | ||||
|   notify_event.type = SelectionNotify; | ||||
|   notify_event.display = req_event->display; | ||||
|   notify_event.requestor = req_event->requestor; | ||||
|   notify_event.selection = req_event->selection; | ||||
|   notify_event.target = req_event->target; | ||||
|   notify_event.time = req_event->time; | ||||
|  | ||||
|   if (req_event->property == None) | ||||
|     notify_event.property = req_event->target; | ||||
|   else | ||||
|     notify_event.property = req_event->property; | ||||
|  | ||||
|   /* notify the requestor that they have a copy of the selection */ | ||||
|   XSendEvent (req_event->display, req_event->requestor, False, 0, | ||||
|               (XEvent *) ¬ify_event); | ||||
|   /* Make it happen non async */ | ||||
|   XSync (GDK_DISPLAY_XDISPLAY (display), FALSE); | ||||
|  | ||||
|   if (gdk_x11_display_error_trap_pop (display)) | ||||
|     { | ||||
|       /* FIXME: Warn here on fail ? */ | ||||
|     } | ||||
|  | ||||
|   return GDK_FILTER_REMOVE; | ||||
| } | ||||
| const char *supported_mimetypes[] = { | ||||
|   "text/plain;charset=utf-8", | ||||
|   "UTF8_STRING", | ||||
|   "text/plain", | ||||
|   "STRING", | ||||
| }; | ||||
|  | ||||
| static MetaSelection *meta_selection = NULL; | ||||
|  | ||||
| static void | ||||
| st_clipboard_class_init (StClipboardClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|  | ||||
|   object_class->dispose = st_clipboard_dispose; | ||||
|   object_class->finalize = st_clipboard_finalize; | ||||
| } | ||||
|  | ||||
| static void | ||||
| st_clipboard_init (StClipboard *self) | ||||
| { | ||||
|   GdkDisplay *gdk_display; | ||||
|   Display *dpy; | ||||
|   StClipboardPrivate *priv; | ||||
|  | ||||
|   priv = self->priv = st_clipboard_get_instance_private (self); | ||||
|  | ||||
|   gdk_display = gdk_display_get_default (); | ||||
|   dpy = GDK_DISPLAY_XDISPLAY (gdk_display); | ||||
|  | ||||
|   priv->clipboard_window = | ||||
|     XCreateSimpleWindow (dpy, | ||||
|                          gdk_x11_get_default_root_xwindow (), | ||||
|                          -1, -1, 1, 1, 0, 0, 0); | ||||
|  | ||||
|   /* Only create once */ | ||||
|   if (__atom_primary == None) | ||||
|     __atom_primary = XInternAtom (dpy, "PRIMARY", 0); | ||||
|  | ||||
|   if (__atom_clip == None) | ||||
|     __atom_clip = XInternAtom (dpy, "CLIPBOARD", 0); | ||||
|  | ||||
|   if (__utf8_string == None) | ||||
|     __utf8_string = XInternAtom (dpy, "UTF8_STRING", 0); | ||||
|  | ||||
|   if (__atom_targets == None) | ||||
|     __atom_targets = XInternAtom (dpy, "TARGETS", 0); | ||||
|  | ||||
|   priv->n_targets = 2; | ||||
|   priv->supported_targets = g_new (Atom, priv->n_targets); | ||||
|  | ||||
|   priv->supported_targets[0] = __utf8_string; | ||||
|   priv->supported_targets[1] = __atom_targets; | ||||
|  | ||||
|   gdk_window_add_filter (NULL, /* all windows */ | ||||
|                          st_clipboard_provider, | ||||
|                          self); | ||||
| } | ||||
|  | ||||
| static GdkFilterReturn | ||||
| st_clipboard_x11_event_filter (GdkXEvent *xevent_p, | ||||
|                                GdkEvent  *gev, | ||||
|                                void      *user_data) | ||||
| { | ||||
|   XEvent *xev = (XEvent *) xevent_p; | ||||
|   EventFilterData *filter_data = user_data; | ||||
|   StClipboardPrivate *priv = filter_data->clipboard->priv; | ||||
|   Atom actual_type; | ||||
|   int actual_format, result; | ||||
|   unsigned long nitems, bytes_after; | ||||
|   unsigned char *data = NULL; | ||||
|   GdkDisplay *display = gdk_display_get_default (); | ||||
|  | ||||
|   if(xev->type != SelectionNotify || | ||||
|      xev->xany.window != priv->clipboard_window) | ||||
|     return GDK_FILTER_CONTINUE; | ||||
|  | ||||
|   if (xev->xselection.property == None) | ||||
|     { | ||||
|       /* clipboard empty */ | ||||
|       filter_data->callback (filter_data->clipboard, | ||||
|                              NULL, | ||||
|                              filter_data->user_data); | ||||
|  | ||||
|       gdk_window_remove_filter (NULL, | ||||
|                                 st_clipboard_x11_event_filter, | ||||
|                                 filter_data); | ||||
|       g_free (filter_data); | ||||
|       return GDK_FILTER_REMOVE; | ||||
|     } | ||||
|  | ||||
|   gdk_x11_display_error_trap_push (display); | ||||
|  | ||||
|   result = XGetWindowProperty (xev->xselection.display, | ||||
|                                xev->xselection.requestor, | ||||
|                                xev->xselection.property, | ||||
|                                0L, G_MAXINT, | ||||
|                                True, | ||||
|                                AnyPropertyType, | ||||
|                                &actual_type, | ||||
|                                &actual_format, | ||||
|                                &nitems, | ||||
|                                &bytes_after, | ||||
|                                &data); | ||||
|  | ||||
|   if (gdk_x11_display_error_trap_pop (display) || result != Success) | ||||
|     { | ||||
|       /* FIXME: handle failure better */ | ||||
|       g_warning ("Clipboard: prop retrival failed"); | ||||
|     } | ||||
|  | ||||
|   filter_data->callback (filter_data->clipboard, (char*) data, | ||||
|                          filter_data->user_data); | ||||
|  | ||||
|   gdk_window_remove_filter (NULL, | ||||
|                             st_clipboard_x11_event_filter, | ||||
|                             filter_data); | ||||
|  | ||||
|   g_free (filter_data); | ||||
|  | ||||
|   if (data) | ||||
|     XFree (data); | ||||
|  | ||||
|   return GDK_FILTER_REMOVE; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -287,10 +85,57 @@ st_clipboard_get_default (void) | ||||
|   return default_clipboard; | ||||
| } | ||||
|  | ||||
| static Atom | ||||
| atom_for_clipboard_type (StClipboardType type) | ||||
| static gboolean | ||||
| convert_type (StClipboardType    type, | ||||
|               MetaSelectionType *type_out) | ||||
| { | ||||
|   return type == ST_CLIPBOARD_TYPE_CLIPBOARD ? __atom_clip : __atom_primary; | ||||
|   if (type == ST_CLIPBOARD_TYPE_PRIMARY) | ||||
|     *type_out = META_SELECTION_PRIMARY; | ||||
|   else if (type == ST_CLIPBOARD_TYPE_CLIPBOARD) | ||||
|     *type_out = META_SELECTION_CLIPBOARD; | ||||
|   else | ||||
|     return FALSE; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static const char * | ||||
| pick_mimetype (MetaSelection     *meta_selection, | ||||
|                MetaSelectionType  selection_type) | ||||
| { | ||||
|   const char *selected_mimetype = NULL; | ||||
|   GList *mimetypes; | ||||
|   int i; | ||||
|  | ||||
|   mimetypes = meta_selection_get_mimetypes (meta_selection, selection_type); | ||||
|  | ||||
|   for (i = 0; i < G_N_ELEMENTS (supported_mimetypes); i++) | ||||
|     { | ||||
|       if (g_list_find_custom (mimetypes, supported_mimetypes[i], | ||||
|                               (GCompareFunc) g_strcmp0)) | ||||
|         { | ||||
|           selected_mimetype = supported_mimetypes[i]; | ||||
|           break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   g_list_free_full (mimetypes, g_free); | ||||
|   return selected_mimetype; | ||||
| } | ||||
|  | ||||
| static void | ||||
| transfer_cb (MetaSelection *selection, | ||||
|              GAsyncResult  *res, | ||||
|              TransferData  *data) | ||||
| { | ||||
|   const gchar *text = NULL; | ||||
|  | ||||
|   if (meta_selection_transfer_finish (selection, res, NULL)) | ||||
|     text = g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (data->stream)); | ||||
|  | ||||
|   data->callback (data->clipboard, text, data->user_data); | ||||
|   g_object_unref (data->stream); | ||||
|   g_free (data); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -310,37 +155,35 @@ st_clipboard_get_text (StClipboard            *clipboard, | ||||
|                        StClipboardCallbackFunc callback, | ||||
|                        gpointer                user_data) | ||||
| { | ||||
|   EventFilterData *data; | ||||
|   GdkDisplay *gdk_display; | ||||
|   Display *dpy; | ||||
|   MetaSelectionType selection_type; | ||||
|   TransferData *data; | ||||
|   const char *mimetype = NULL; | ||||
|  | ||||
|   g_return_if_fail (ST_IS_CLIPBOARD (clipboard)); | ||||
|   g_return_if_fail (meta_selection != NULL); | ||||
|   g_return_if_fail (callback != NULL); | ||||
|  | ||||
|   data = g_new0 (EventFilterData, 1); | ||||
|   if (convert_type (type, &selection_type)) | ||||
|     mimetype = pick_mimetype (meta_selection, selection_type); | ||||
|  | ||||
|   if (!mimetype) | ||||
|     { | ||||
|       callback (clipboard, NULL, user_data); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   data = g_new0 (TransferData, 1); | ||||
|   data->clipboard = clipboard; | ||||
|   data->callback = callback; | ||||
|   data->user_data = user_data; | ||||
|   data->stream = g_memory_output_stream_new_resizable (); | ||||
|  | ||||
|   gdk_window_add_filter (NULL, /* all windows */ | ||||
|                          st_clipboard_x11_event_filter, | ||||
|                          data); | ||||
|  | ||||
|   gdk_display = gdk_display_get_default (); | ||||
|   dpy = GDK_DISPLAY_XDISPLAY (gdk_display); | ||||
|  | ||||
|   gdk_x11_display_error_trap_push (gdk_display); | ||||
|  | ||||
|   XConvertSelection (dpy, | ||||
|                      atom_for_clipboard_type (type), | ||||
|                      __utf8_string, __utf8_string, | ||||
|                      clipboard->priv->clipboard_window, | ||||
|                      CurrentTime); | ||||
|  | ||||
|   if (gdk_x11_display_error_trap_pop (gdk_display)) | ||||
|     { | ||||
|       /* FIXME */ | ||||
|     } | ||||
|   meta_selection_transfer_async (meta_selection, | ||||
|                                  selection_type, | ||||
|                                  mimetype, -1, | ||||
|                                  data->stream, NULL, | ||||
|                                  (GAsyncReadyCallback) transfer_cb, | ||||
|                                  data); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -356,31 +199,26 @@ st_clipboard_set_text (StClipboard     *clipboard, | ||||
|                        StClipboardType  type, | ||||
|                        const gchar     *text) | ||||
| { | ||||
|   StClipboardPrivate *priv; | ||||
|   GdkDisplay *gdk_display; | ||||
|   Display *dpy; | ||||
|   MetaSelectionType selection_type; | ||||
|   MetaSelectionSource *source; | ||||
|   GBytes *bytes; | ||||
|  | ||||
|   g_return_if_fail (ST_IS_CLIPBOARD (clipboard)); | ||||
|   g_return_if_fail (meta_selection != NULL); | ||||
|   g_return_if_fail (text != NULL); | ||||
|  | ||||
|   priv = clipboard->priv; | ||||
|   if (!convert_type (type, &selection_type)) | ||||
|     return; | ||||
|  | ||||
|   /* make a copy of the text */ | ||||
|   g_free (priv->clipboard_text); | ||||
|   priv->clipboard_text = g_strdup (text); | ||||
|   bytes = g_bytes_new_take (g_strdup (text), strlen (text)); | ||||
|   source = meta_selection_source_memory_new ("text/plain;charset=utf-8", bytes); | ||||
|   g_bytes_unref (bytes); | ||||
|  | ||||
|   /* tell X we own the clipboard selection */ | ||||
|   gdk_display = gdk_display_get_default (); | ||||
|   dpy = GDK_DISPLAY_XDISPLAY (gdk_display); | ||||
|  | ||||
|   gdk_x11_display_error_trap_push (gdk_display); | ||||
|  | ||||
|   XSetSelectionOwner (dpy, atom_for_clipboard_type (type), priv->clipboard_window, CurrentTime); | ||||
|  | ||||
|   XSync (dpy, FALSE); | ||||
|  | ||||
|   if (gdk_x11_display_error_trap_pop (gdk_display)) | ||||
|     { | ||||
|       /* FIXME */ | ||||
|     } | ||||
|   meta_selection_set_owner (meta_selection, selection_type, source); | ||||
| } | ||||
|  | ||||
| void | ||||
| st_clipboard_set_selection (MetaSelection *selection) | ||||
| { | ||||
|   meta_selection = selection; | ||||
| } | ||||
|   | ||||
| @@ -25,6 +25,7 @@ | ||||
| #define _ST_CLIPBOARD_H | ||||
|  | ||||
| #include <glib-object.h> | ||||
| #include <meta/meta-selection.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| @@ -32,7 +33,6 @@ G_BEGIN_DECLS | ||||
| G_DECLARE_FINAL_TYPE (StClipboard, st_clipboard, ST, CLIPBOARD, GObject) | ||||
|  | ||||
| typedef struct _StClipboard StClipboard; | ||||
| typedef struct _StClipboardPrivate StClipboardPrivate; | ||||
|  | ||||
| /** | ||||
|  * StClipboard: | ||||
| @@ -44,7 +44,6 @@ struct _StClipboard | ||||
| { | ||||
|   /*< private >*/ | ||||
|   GObject parent; | ||||
|   StClipboardPrivate *priv; | ||||
| }; | ||||
|  | ||||
| typedef enum { | ||||
| @@ -74,6 +73,8 @@ void st_clipboard_set_text (StClipboard             *clipboard, | ||||
|                             StClipboardType          type, | ||||
|                             const gchar             *text); | ||||
|  | ||||
| void st_clipboard_set_selection (MetaSelection *selection); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* _ST_CLIPBOARD_H */ | ||||
|   | ||||
| @@ -204,9 +204,7 @@ _st_create_texture_pipeline (CoglTexture *src_texture) | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|  | ||||
|       texture_pipeline_template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_layer_null_texture (texture_pipeline_template, | ||||
|                                             0, /* layer */ | ||||
|                                             COGL_TEXTURE_TYPE_2D); | ||||
|       cogl_pipeline_set_layer_null_texture (texture_pipeline_template, 0); | ||||
|     } | ||||
|  | ||||
|   pipeline = cogl_pipeline_copy (texture_pipeline_template); | ||||
|   | ||||
| @@ -496,15 +496,31 @@ pixbuf_to_st_content_image (GdkPixbuf *pixbuf, | ||||
|   ClutterContent *image; | ||||
|   g_autoptr(GError) error = NULL; | ||||
|  | ||||
|   if (width < 0) | ||||
|     width = ceilf (gdk_pixbuf_get_width (pixbuf) / resource_scale); | ||||
|   else | ||||
|     width *= paint_scale; | ||||
|   float native_width, native_height; | ||||
|  | ||||
|   if (height < 0) | ||||
|     height = ceilf (gdk_pixbuf_get_height (pixbuf) / resource_scale); | ||||
|   native_width = ceilf (gdk_pixbuf_get_width (pixbuf) / resource_scale); | ||||
|   native_height = ceilf (gdk_pixbuf_get_height (pixbuf) / resource_scale); | ||||
|  | ||||
|   if (width < 0 && height < 0) | ||||
|     { | ||||
|       width = native_width; | ||||
|       height = native_height; | ||||
|     } | ||||
|   else if (width < 0) | ||||
|     { | ||||
|       height *= paint_scale; | ||||
|       width = native_width * (height / native_height); | ||||
|     } | ||||
|   else if (height < 0) | ||||
|     { | ||||
|       width *= paint_scale; | ||||
|       height = native_height * (width / native_width); | ||||
|     } | ||||
|   else | ||||
|     height *= paint_scale; | ||||
|     { | ||||
|       width *= paint_scale; | ||||
|       height *= paint_scale; | ||||
|     } | ||||
|  | ||||
|   image = st_image_content_new_with_preferred_size (width, height); | ||||
|   clutter_image_set_data (CLUTTER_IMAGE (image), | ||||
|   | ||||
| @@ -107,6 +107,8 @@ struct _StThemeNode { | ||||
|   int box_shadow_min_width; | ||||
|   int box_shadow_min_height; | ||||
|  | ||||
|   guint stylesheets_changed_id; | ||||
|  | ||||
|   CoglPipeline *border_slices_texture; | ||||
|   CoglPipeline *border_slices_pipeline; | ||||
|   CoglPipeline *background_texture; | ||||
|   | ||||
| @@ -111,9 +111,11 @@ st_theme_node_dispose (GObject *gobject) | ||||
|       node->icon_colors = NULL; | ||||
|     } | ||||
|  | ||||
|   if (node->theme) | ||||
|     g_signal_handlers_disconnect_by_func (node->theme, | ||||
|                                           on_custom_stylesheets_changed, node); | ||||
|   if (node->theme && node->stylesheets_changed_id) | ||||
|     { | ||||
|       g_signal_handler_disconnect (node->theme, node->stylesheets_changed_id); | ||||
|       node->stylesheets_changed_id = 0; | ||||
|     } | ||||
|  | ||||
|   st_theme_node_paint_state_free (&node->cached_state); | ||||
|  | ||||
| @@ -230,8 +232,9 @@ st_theme_node_new (StThemeContext    *context, | ||||
|   if (theme != NULL) | ||||
|     { | ||||
|       node->theme = g_object_ref (theme); | ||||
|       g_signal_connect (node->theme, "custom-stylesheets-changed", | ||||
|                         G_CALLBACK (on_custom_stylesheets_changed), node); | ||||
|       node->stylesheets_changed_id = | ||||
|         g_signal_connect (node->theme, "custom-stylesheets-changed", | ||||
|                           G_CALLBACK (on_custom_stylesheets_changed), node); | ||||
|     } | ||||
|  | ||||
|   node->element_type = element_type; | ||||
| @@ -1136,10 +1139,14 @@ get_length_from_term_int (StThemeNode *node, | ||||
| { | ||||
|   double value; | ||||
|   GetFromTermResult result; | ||||
|   int scale_factor; | ||||
|  | ||||
|   result = get_length_from_term (node, term, use_parent_font, &value); | ||||
|   if (result == VALUE_FOUND) | ||||
|     *length = (int) (0.5 + value); | ||||
|     { | ||||
|       g_object_get (node->context, "scale-factor", &scale_factor, NULL); | ||||
|       *length = (int) ((value / scale_factor) + 0.5) * scale_factor; | ||||
|     } | ||||
|   return result; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -65,6 +65,8 @@ struct _StWidgetPrivate | ||||
|   StThemeNodeTransition *transition_animation; | ||||
|  | ||||
|   guint is_style_dirty : 1; | ||||
|   guint first_child_dirty : 1; | ||||
|   guint last_child_dirty : 1; | ||||
|   guint draw_bg_color : 1; | ||||
|   guint draw_border_internal : 1; | ||||
|   guint track_hover : 1; | ||||
| @@ -72,6 +74,7 @@ struct _StWidgetPrivate | ||||
|   guint can_focus : 1; | ||||
|  | ||||
|   gulong texture_file_changed_id; | ||||
|   guint update_child_styles_id; | ||||
|  | ||||
|   AtkObject *accessible; | ||||
|   AtkRole accessible_role; | ||||
| @@ -323,6 +326,8 @@ st_widget_dispose (GObject *gobject) | ||||
|   g_clear_object (&priv->last_visible_child); | ||||
|  | ||||
|   G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject); | ||||
|  | ||||
|   g_clear_handle_id (&priv->update_child_styles_id, g_source_remove); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1608,47 +1613,85 @@ find_nearest_visible_forward (ClutterActor *actor) | ||||
|   return next; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| st_widget_update_child_styles (StWidget *widget) | ||||
| { | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   if (priv->first_child_dirty) | ||||
|     { | ||||
|       ClutterActor *first_child; | ||||
|  | ||||
|       priv->first_child_dirty = FALSE; | ||||
|  | ||||
|       first_child = clutter_actor_get_first_child (CLUTTER_ACTOR (widget)); | ||||
|       st_widget_set_first_visible_child (widget, | ||||
|                                          find_nearest_visible_forward (first_child)); | ||||
|     } | ||||
|  | ||||
|   if (priv->last_child_dirty) | ||||
|     { | ||||
|       ClutterActor *last_child; | ||||
|  | ||||
|       priv->last_child_dirty = FALSE; | ||||
|  | ||||
|       last_child = clutter_actor_get_last_child (CLUTTER_ACTOR (widget)); | ||||
|       st_widget_set_last_visible_child (widget, | ||||
|                                         find_nearest_visible_backwards (last_child)); | ||||
|     } | ||||
|  | ||||
|   priv->update_child_styles_id = 0; | ||||
|   return G_SOURCE_REMOVE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| st_widget_queue_child_styles_update (StWidget *widget) | ||||
| { | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   if (priv->update_child_styles_id != 0) | ||||
|     return; | ||||
|  | ||||
|   priv->update_child_styles_id = g_idle_add ((GSourceFunc) st_widget_update_child_styles, widget); | ||||
| } | ||||
|  | ||||
| static void | ||||
| st_widget_visible_notify (StWidget   *widget, | ||||
|                           GParamSpec *pspec, | ||||
|                           gpointer    data) | ||||
| { | ||||
|   StWidgetPrivate *parent_priv; | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (widget); | ||||
|   ClutterActor *parent = clutter_actor_get_parent (actor); | ||||
|  | ||||
|   if (parent == NULL || !ST_IS_WIDGET (parent)) | ||||
|     return; | ||||
|  | ||||
|   parent_priv = st_widget_get_instance_private (ST_WIDGET (parent)); | ||||
|  | ||||
|   if (clutter_actor_is_visible (actor)) | ||||
|     { | ||||
|       ClutterActor *before, *after; | ||||
|  | ||||
|       before = clutter_actor_get_previous_sibling (actor); | ||||
|       if (find_nearest_visible_backwards (before) == NULL) | ||||
|         st_widget_set_first_visible_child (ST_WIDGET (parent), actor); | ||||
|         parent_priv->first_child_dirty = TRUE; | ||||
|  | ||||
|       after = clutter_actor_get_next_sibling (actor); | ||||
|       if (find_nearest_visible_forward (after) == NULL) | ||||
|         st_widget_set_last_visible_child (ST_WIDGET (parent), actor); | ||||
|         parent_priv->last_child_dirty = TRUE; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (st_widget_has_style_pseudo_class (widget, "first-child")) | ||||
|         { | ||||
|           ClutterActor *new_first; | ||||
|  | ||||
|           new_first = find_nearest_visible_forward (CLUTTER_ACTOR (widget)); | ||||
|           st_widget_set_first_visible_child (ST_WIDGET (parent), new_first); | ||||
|         } | ||||
|         parent_priv->first_child_dirty = TRUE; | ||||
|  | ||||
|       if (st_widget_has_style_pseudo_class (widget, "last-child")) | ||||
|         { | ||||
|           ClutterActor *new_last; | ||||
|  | ||||
|           new_last = find_nearest_visible_backwards (CLUTTER_ACTOR (widget)); | ||||
|           st_widget_set_last_visible_child (ST_WIDGET (parent), new_last); | ||||
|         } | ||||
|         parent_priv->last_child_dirty = TRUE; | ||||
|     } | ||||
|  | ||||
|   if (parent_priv->first_child_dirty || parent_priv->last_child_dirty) | ||||
|     st_widget_queue_child_styles_update (ST_WIDGET (parent)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1656,10 +1699,10 @@ st_widget_first_child_notify (StWidget   *widget, | ||||
|                               GParamSpec *pspec, | ||||
|                               gpointer    data) | ||||
| { | ||||
|   ClutterActor *first_child; | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   first_child = clutter_actor_get_first_child (CLUTTER_ACTOR (widget)); | ||||
|   st_widget_set_first_visible_child (widget, find_nearest_visible_forward (first_child)); | ||||
|   priv->first_child_dirty = TRUE; | ||||
|   st_widget_queue_child_styles_update (widget); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1667,10 +1710,10 @@ st_widget_last_child_notify (StWidget   *widget, | ||||
|                              GParamSpec *pspec, | ||||
|                              gpointer    data) | ||||
| { | ||||
|   ClutterActor *last_child; | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   last_child = clutter_actor_get_last_child (CLUTTER_ACTOR (widget)); | ||||
|   st_widget_set_last_visible_child (widget, find_nearest_visible_backwards (last_child)); | ||||
|   priv->last_child_dirty = TRUE; | ||||
|   st_widget_queue_child_styles_update (widget); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1718,7 +1761,7 @@ st_widget_recompute_style (StWidget    *widget, | ||||
|   StThemeNode *new_theme_node = st_widget_get_theme_node (widget); | ||||
|   int transition_duration; | ||||
|   StSettings *settings; | ||||
|   gboolean paint_equal; | ||||
|   gboolean paint_equal, geometry_equal = FALSE; | ||||
|   gboolean animations_enabled; | ||||
|  | ||||
|   if (new_theme_node == old_theme_node) | ||||
| @@ -1729,8 +1772,9 @@ st_widget_recompute_style (StWidget    *widget, | ||||
|  | ||||
|   _st_theme_node_apply_margins (new_theme_node, CLUTTER_ACTOR (widget)); | ||||
|  | ||||
|   if (!old_theme_node || | ||||
|       !st_theme_node_geometry_equal (old_theme_node, new_theme_node)) | ||||
|   if (old_theme_node) | ||||
|     geometry_equal = st_theme_node_geometry_equal (old_theme_node, new_theme_node); | ||||
|   if (!geometry_equal) | ||||
|     clutter_actor_queue_relayout ((ClutterActor *) widget); | ||||
|  | ||||
|   transition_duration = st_theme_node_get_transition_duration (new_theme_node); | ||||
| @@ -1782,7 +1826,11 @@ st_widget_recompute_style (StWidget    *widget, | ||||
|         st_theme_node_paint_state_invalidate (current_paint_state (widget)); | ||||
|     } | ||||
|  | ||||
|   g_signal_emit (widget, signals[STYLE_CHANGED], 0); | ||||
|   if (!paint_equal || !geometry_equal) | ||||
|     g_signal_emit (widget, signals[STYLE_CHANGED], 0); | ||||
|   else | ||||
|     notify_children_of_style_change ((ClutterActor *) widget); | ||||
|  | ||||
|   priv->is_style_dirty = FALSE; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -70,7 +70,7 @@ static guint manager_signals[LAST_SIGNAL]; | ||||
| #define SYSTEM_TRAY_ORIENTATION_VERT 1 | ||||
|  | ||||
| #ifdef GDK_WINDOWING_X11 | ||||
| static gboolean na_tray_manager_check_running_screen_x11 (); | ||||
| static gboolean na_tray_manager_check_running_screen_x11 (void); | ||||
| #endif | ||||
|  | ||||
| static void na_tray_manager_finalize     (GObject      *object); | ||||
| @@ -808,7 +808,7 @@ na_tray_manager_manage_screen (NaTrayManager *manager) | ||||
| #ifdef GDK_WINDOWING_X11 | ||||
|  | ||||
| static gboolean | ||||
| na_tray_manager_check_running_screen_x11 () | ||||
| na_tray_manager_check_running_screen_x11 (void) | ||||
| { | ||||
|   GdkDisplay *display; | ||||
|   GdkScreen *screen; | ||||
| @@ -833,7 +833,7 @@ na_tray_manager_check_running_screen_x11 () | ||||
| #endif | ||||
|  | ||||
| gboolean | ||||
| na_tray_manager_check_running () | ||||
| na_tray_manager_check_running (void) | ||||
| { | ||||
| #ifdef GDK_WINDOWING_X11 | ||||
|   return na_tray_manager_check_running_screen_x11 (); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user