Compare commits

..

1 Commits

Author SHA1 Message Date
Jakub Steiner
6393e90a5a theme: sync OSD colors with gtk 2019-04-16 16:47:59 +02:00
86 changed files with 2949 additions and 2450 deletions

View File

@@ -15,10 +15,8 @@ variables:
- merge_requests - merge_requests
check_commit_log: check_commit_log:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2 image: registry.gitlab.gnome.org/gnome/mutter/master:v1
stage: review stage: review
variables:
GIT_DEPTH: "100"
script: script:
- ./.gitlab-ci/check-commit-log.sh - ./.gitlab-ci/check-commit-log.sh
only: only:
@@ -40,7 +38,7 @@ js_check:
when: on_failure when: on_failure
build: build:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2 image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
stage: build stage: build
before_script: before_script:
- .gitlab-ci/checkout-mutter.sh - .gitlab-ci/checkout-mutter.sh
@@ -58,7 +56,7 @@ build:
- build - build
test: test:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2 image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
stage: test stage: test
before_script: before_script:
- ninja -C mutter/build install - ninja -C mutter/build install
@@ -72,7 +70,7 @@ test:
when: on_failure when: on_failure
test-pot: test-pot:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2 image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
stage: test stage: test
before_script: before_script:
- ninja -C mutter/build install - ninja -C mutter/build install

19
.gitlab-ci/Dockerfile Normal file
View File

@@ -0,0 +1,19 @@
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

View File

@@ -17,19 +17,15 @@ if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
merge_request_branch=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME merge_request_branch=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
echo Looking for $merge_request_branch on remote ... echo Looking for $merge_request_branch on remote ...
if git fetch -q $merge_request_remote $merge_request_branch 2>/dev/null; then if git fetch $merge_request_remote $merge_request_branch >/dev/null 2>&1; then
mutter_target=FETCH_HEAD mutter_target=FETCH_HEAD
else
mutter_target=origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
echo Using $mutter_target instead
fi fi
fi fi
if [ -z "$mutter_target" ]; then if [ -z "$mutter_target" ]; then
mutter_target=$(git branch -r -l origin/$shell_branch) mutter_target=$(git branch -r -l $shell_branch)
mutter_target=${mutter_target:-$(git branch -r -l ${shell_branch#remotes/})}
mutter_target=${mutter_target:-origin/master} mutter_target=${mutter_target:-origin/master}
echo Using $mutter_target instead echo Using $mutter_target instead
fi fi
git checkout -q $mutter_target git checkout $mutter_target

60
NEWS
View File

@@ -1,63 +1,3 @@
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 3.32.0
====== ======
* Fix sizing issues in on-screen-keyboard emoji panel [Carlos; !439] * Fix sizing issues in on-screen-keyboard emoji panel [Carlos; !439]

View File

@@ -21,8 +21,10 @@
<file>noise-texture.png</file> <file>noise-texture.png</file>
<file>pad-osd.css</file> <file>pad-osd.css</file>
<file>process-working.svg</file> <file>process-working.svg</file>
<file>toggle-off-us.svg</file>
<file>toggle-off-intl.svg</file> <file>toggle-off-intl.svg</file>
<file>toggle-off-hc.svg</file> <file>toggle-off-hc.svg</file>
<file>toggle-on-us.svg</file>
<file>toggle-on-intl.svg</file> <file>toggle-on-intl.svg</file>
<file>toggle-on-hc.svg</file> <file>toggle-on-hc.svg</file>
</gresource> </gresource>

View File

@@ -21,7 +21,7 @@ $success_color: if($variant == 'light', #33d17a, darken(#33d17a, 10%));
$destructive_color: if($variant == 'light', #e01b24, darken(#e01b24, 10%)); $destructive_color: if($variant == 'light', #e01b24, darken(#e01b24, 10%));
$osd_fg_color: #eeeeec; $osd_fg_color: #eeeeec;
$osd_bg_color: #2e3436; $osd_bg_color: transparentize(darken(desaturate(#3d3846, 100%), 15%),0.3);
$osd_borders_color: transparentize(black, 0.3); $osd_borders_color: transparentize(black, 0.3);
$osd_outer_borders_color: transparentize(white, 0.9); $osd_outer_borders_color: transparentize(white, 0.9);

View File

@@ -29,7 +29,7 @@ $panel-corner-radius: 6px;
/* GLOBALS */ /* GLOBALS */
$font-size: 11; $font-size: 11;
$font-family: Cantarell, Sans-Serif; $font-family: Cantarell, Sans-Serif;
$_bubble_bg_color: opacify($osd_bg_color,0.25); $_bubble_bg_color: $osd_bg_color;
$_bubble_fg_color: $osd_fg_color; $_bubble_fg_color: $osd_fg_color;
$_bubble_borders_color: transparentize($osd_fg_color,0.8); $_bubble_borders_color: transparentize($osd_fg_color,0.8);
@@ -157,13 +157,18 @@ StScrollBar {
/* Switches */ /* Switches */
.toggle-switch { .toggle-switch {
width: 46px; width: 65px;
height: 22px; height: 22px;
background-size: contain; 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 */ /* links */
.shell-link { .shell-link {
color: $link_color; color: $link_color;
@@ -179,7 +184,7 @@ StScrollBar {
.modal-dialog { .modal-dialog {
border-radius: 9px; border-radius: 9px;
color: $osd_fg_color; color: $osd_fg_color;
background-color: transparentize(darken($osd_bg_color,10%),0.05); background-color: $osd_bg_color;
border: 1px solid $_bubble_borders_color; border: 1px solid $_bubble_borders_color;
.modal-dialog-content-box { .modal-dialog-content-box {
padding: 24px; padding: 24px;
@@ -1150,23 +1155,25 @@ StScrollBar {
//close buttons //close buttons
.window-close { .window-close {
background-color: $selected_bg_color; background-color: white;
color: white;
border-radius: 24px; border-radius: 24px;
border: 2px solid $selected_bg_color; border: 4px solid $selected_bg_color;
box-shadow: inset 0 -4px 0 0 transparentize($selected_bg_color, 0.5);
color: $selected_bg_color;
height: 24px; height: 24px;
width: 24px; width: 24px;
-shell-close-overlap: 11px; -shell-close-overlap: 14px;
box-shadow: -1px 1px 5px 0px transparentize(black, 0.5);
&:hover { &:hover {
background-color: lighten($selected_bg_color, 5%); background-color: $selected_bg_color;
border-color: lighten($selected_bg_color, 5%); border-color: white;
color: white;
} }
&:active { &:active {
background-color: darken($selected_bg_color, 5%); background-color: mix(white, $selected_bg_color, 75%);
border-color: darken($selected_bg_color, 5%); border-color: $selected_bg_color;
color: $selected_bg_color;
} }
} }
@@ -1231,14 +1238,13 @@ StScrollBar {
} }
.window-clone-border { .window-clone-border {
$_bg: transparentize(white, 0.65); border: 4px solid $selected_bg_color;
border: 5px solid $_bg; border-radius: 4px;
border-radius: 6px;
// For window decorations with round corners we can't match // For window decorations with round corners we can't match
// the exact shape when the window is scaled. So apply a shadow // the exact shape when the window is scaled. So apply a shadow
// to fix that case // to fix that case
box-shadow: inset 0 0 0 1px $_bg; box-shadow: inset 0px 0px 0px 1px $selected_bg_color;
} }
.window-caption { .window-caption {
spacing: 25px; spacing: 25px;
color: $selected_fg_color; color: $selected_fg_color;

View File

@@ -111,7 +111,7 @@
} }
} }
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) { @mixin button($t, $c:opacify(lighten($osd_bg_color, 5%),1.0), $tc:$fg_color, $edge: $borders_edge) {
// //
// Button drawing function // Button drawing function
// //
@@ -136,8 +136,7 @@
// //
// normal button // normal button
// //
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5), $_bg: $c;
$osd_bg_color);
color: $osd_fg_color; color: $osd_fg_color;
background-color: $_bg; background-color: $_bg;
@@ -150,8 +149,7 @@
// //
// focused button // focused button
// //
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3), $_bg: lighten($c,3%);
lighten($osd_bg_color,3%));
color: $osd_fg_color; color: $osd_fg_color;
text-shadow: 0 1px black; text-shadow: 0 1px black;
@@ -163,8 +161,7 @@
// //
// active osd button // active osd button
// //
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3), $_bg: lighten($c,3%);
lighten($osd_bg_color,3%));
color: white; color: white;
border-color: $osd_borders_color; border-color: $osd_borders_color;

View File

@@ -10,62 +10,124 @@
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="46" width="65"
height="22" height="22"
viewBox="0 0 46 22" id="svg2857"
version="1.1" version="1.1"
id="svg2751" inkscape:version="0.48.5 r10040"
inkscape:version="0.92.4 5da689c313, 2019-01-14" sodipodi:docname="toggle-off-us.svg">
sodipodi:docname="toggle-off-intl.svg">
<defs <defs
id="defs2745"> 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 <linearGradient
inkscape:collect="always" inkscape:collect="always"
id="linearGradient3329"> 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 <stop
style="stop-color:#39393a;stop-opacity:1;" style="stop-color:#2e3232;stop-opacity:1"
offset="0" offset="0"
id="stop3325" /> id="stop76471-7-1-5" />
<stop <stop
style="stop-color:#302f30;stop-opacity:1" style="stop-color:#3e4545;stop-opacity:1"
offset="1" offset="1"
id="stop3327" /> 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" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" y2="492.52756"
xlink:href="#linearGradient3329" x2="610.13782"
id="linearGradient3331" y1="501.43866"
x1="53" x1="610.13782"
y1="294.42917" gradientTransform="matrix(1.5918367,0,0,0.85714285,-900.56122,-423.92857)"
x2="53"
y2="309.80417"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
gradientTransform="translate(-42.760724)" /> id="linearGradient13602"
xlink:href="#linearGradient37802-8"
inkscape:collect="always" />
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
pagecolor="#535353" pagecolor="#000000"
bordercolor="#666666" bordercolor="#666666"
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="1" inkscape:pageopacity="1"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1" inkscape:zoom="1"
inkscape:cx="-19.436775" inkscape:cx="-5.0602834"
inkscape:cy="-13.499723" inkscape:cy="16.473273"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="g37994"
showgrid="false" showgrid="false"
units="px" inkscape:window-width="2560"
inkscape:pagecheckerboard="true" inkscape:window-height="1375"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
borderlayer="true" borderlayer="true"
inkscape:showpageshadow="false" inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
showborder="false"> showborder="false">
<inkscape:grid <inkscape:grid
type="xygrid" type="xygrid"
id="grid3298" /> id="grid12954"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview> </sodipodi:namedview>
<metadata <metadata
id="metadata2748"> id="metadata2862">
<rdf:RDF> <rdf:RDF>
<cc:Work <cc:Work
rdf:about=""> rdf:about="">
@@ -80,24 +142,68 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1" id="layer1"
transform="translate(0,-291.17916)"> 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 <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" 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="rect3296" id="rect13475"
width="44.446434" width="98"
height="20.910645" height="25"
x="0.625" x="644.5"
y="291.71494" y="484.61118"
rx="10.455324" rx="4.7429576"
ry="10.073335" /> ry="3.8424656" />
<rect <rect
ry="10.455322" ry="3.8424656"
rx="10.455322" rx="4.7429576"
y="291.71494" y="483.5"
x="0.5428465" x="644.5"
height="20.910645" height="25"
width="21.142862" width="98"
id="rect3300" id="rect38000"
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" /> 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>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -0,0 +1,255 @@
<?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>

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@@ -10,69 +10,117 @@
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="46" width="65"
height="22" height="22"
viewBox="0 0 46 22" id="svg2857"
version="1.1" version="1.1"
id="svg2751" inkscape:version="0.91 r13725"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="toggle-on-intl.svg"> sodipodi:docname="toggle-on-intl.svg">
<defs <defs
id="defs2745"> 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 <linearGradient
inkscape:collect="always" inkscape:collect="always"
id="linearGradient3329"> 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">
<stop <stop
style="stop-color:#39393a;stop-opacity:1;" id="stop77463"
offset="0" offset="0"
id="stop3325" /> style="stop-color:#182f4c;stop-opacity:1" />
<stop <stop
style="stop-color:#302f30;stop-opacity:1" id="stop77465"
offset="1" offset="1"
id="stop3327" /> style="stop-color:#205b9a;stop-opacity:1" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient3329" xlink:href="#linearGradient76469-7-7-4"
id="linearGradient3331" id="linearGradient38024"
x1="53"
y1="294.42917"
x2="53"
y2="309.80417"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
gradientTransform="translate(-19)" /> 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" />
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
pagecolor="#535353" pagecolor="#000000"
bordercolor="#666666" bordercolor="#666666"
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="1" inkscape:pageopacity="1"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1" inkscape:zoom="1"
inkscape:cx="13.588971" inkscape:cx="37.410841"
inkscape:cy="14.124546" inkscape:cy="16.009314"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="g37994"
showgrid="false" showgrid="false"
units="px" inkscape:window-width="2560"
inkscape:pagecheckerboard="true" inkscape:window-height="1376"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
borderlayer="true" borderlayer="true"
inkscape:showpageshadow="false" inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
showborder="false"> showborder="false">
<inkscape:grid <inkscape:grid
type="xygrid" type="xygrid"
id="grid3298" /> id="grid12954"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview> </sodipodi:namedview>
<metadata <metadata
id="metadata2748"> id="metadata2862">
<rdf:RDF> <rdf:RDF>
<cc:Work <cc:Work
rdf:about=""> rdf:about="">
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@@ -80,24 +128,65 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1" id="layer1"
transform="translate(0,-291.17916)"> 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 <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" 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="rect3296" id="rect13475"
width="44.446434" width="98"
height="20.910645" height="25"
x="0.625" x="644.5"
y="291.71494" y="484.61118"
rx="10.455324" rx="4.7429576"
ry="10.073335" /> ry="3.8424656" />
<rect <rect
ry="10.455322" ry="3.8424656"
rx="10.455322" rx="4.7429576"
y="291.71494" y="483.5"
x="24.30357" x="644.5"
height="20.910645" height="25"
width="21.142862" width="98"
id="rect3300" id="rect38000"
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" /> 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>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

207
data/theme/toggle-on-us.svg Normal file
View File

@@ -0,0 +1,207 @@
<?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>

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@@ -325,7 +325,7 @@ var SessionMenuButton = class {
this._button.remove_style_pseudo_class('active'); this._button.remove_style_pseudo_class('active');
}); });
this._manager = new PopupMenu.PopupMenuManager(this._button, this._manager = new PopupMenu.PopupMenuManager({ actor: this._button },
{ actionMode: Shell.ActionMode.NONE }); { actionMode: Shell.ActionMode.NONE });
this._manager.addMenu(this._menu); this._manager.addMenu(this._menu);
@@ -652,7 +652,7 @@ var LoginDialog = GObject.registerClass({
bannerAllocation.x2 = Math.floor(centerX - centerGap / 2); bannerAllocation.x2 = Math.floor(centerX - centerGap / 2);
bannerAllocation.x1 = Math.floor(bannerAllocation.x2 - wideBannerWidth); bannerAllocation.x1 = Math.floor(bannerAllocation.x2 - wideBannerWidth);
// figure out how tall it would like to be and try to accommodate // figure out how tall it would like to be and try to accomodate
// but don't let it get too close to the logo // but don't let it get too close to the logo
let [wideMinHeight, wideBannerHeight] = this._bannerView.get_preferred_height(wideBannerWidth); let [wideMinHeight, wideBannerHeight] = this._bannerView.get_preferred_height(wideBannerWidth);

View File

@@ -42,6 +42,8 @@ var IntrospectService = class {
} }
_isStandaloneApp(app) { _isStandaloneApp(app) {
let windows = app.get_windows();
return app.get_windows().some(w => w.transient_for == null); return app.get_windows().some(w => w.transient_for == null);
} }
@@ -53,11 +55,6 @@ var IntrospectService = class {
return APP_WHITELIST.includes(sender); 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() { _syncRunningApplications() {
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
let apps = this._appSystem.get_running(); let apps = this._appSystem.get_running();
@@ -79,10 +76,6 @@ var IntrospectService = class {
newActiveApplication = app.get_id(); 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; newRunningApplications[app.get_id()] = appInfo;
} }
@@ -144,7 +137,6 @@ var IntrospectService = class {
let frameRect = window.get_frame_rect(); let frameRect = window.get_frame_rect();
let title = window.get_title(); let title = window.get_title();
let wmClass = window.get_wm_class(); let wmClass = window.get_wm_class();
let sandboxedAppId = window.get_sandboxed_app_id();
windowsList[windowId] = { windowsList[windowId] = {
'app-id': GLib.Variant.new('s', app.get_id()), 'app-id': GLib.Variant.new('s', app.get_id()),
@@ -161,10 +153,6 @@ var IntrospectService = class {
if (wmClass != null) if (wmClass != null)
windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass); 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])); invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));

View File

@@ -88,42 +88,42 @@ const SystemActions = GObject.registerClass({
name: C_("search-result", "Power Off"), name: C_("search-result", "Power Off"),
iconName: 'system-shutdown-symbolic', iconName: 'system-shutdown-symbolic',
// Translators: A list of keywords that match the power-off action, separated by semicolons // 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 }); available: false });
this._actions.set(LOCK_SCREEN_ACTION_ID, this._actions.set(LOCK_SCREEN_ACTION_ID,
{ // Translators: The name of the lock screen action in search { // Translators: The name of the lock screen action in search
name: C_("search-result", "Lock Screen"), name: C_("search-result", "Lock Screen"),
iconName: 'system-lock-screen-symbolic', iconName: 'system-lock-screen-symbolic',
// Translators: A list of keywords that match the lock screen action, separated by semicolons // Translators: A list of keywords that match the lock screen action, separated by semicolons
keywords: _("lock screen").split(/[; ]/), keywords: _("lock screen").split(';'),
available: false }); available: false });
this._actions.set(LOGOUT_ACTION_ID, this._actions.set(LOGOUT_ACTION_ID,
{ // Translators: The name of the logout action in search { // Translators: The name of the logout action in search
name: C_("search-result", "Log Out"), name: C_("search-result", "Log Out"),
iconName: 'application-exit-symbolic', iconName: 'application-exit-symbolic',
// Translators: A list of keywords that match the logout action, separated by semicolons // Translators: A list of keywords that match the logout action, separated by semicolons
keywords: _("logout;log out;sign off").split(/[; ]/), keywords: _("logout;sign off").split(';'),
available: false }); available: false });
this._actions.set(SUSPEND_ACTION_ID, this._actions.set(SUSPEND_ACTION_ID,
{ // Translators: The name of the suspend action in search { // Translators: The name of the suspend action in search
name: C_("search-result", "Suspend"), name: C_("search-result", "Suspend"),
iconName: 'media-playback-pause-symbolic', iconName: 'media-playback-pause-symbolic',
// Translators: A list of keywords that match the suspend action, separated by semicolons // Translators: A list of keywords that match the suspend action, separated by semicolons
keywords: _("suspend;sleep").split(/[; ]/), keywords: _("suspend;sleep").split(';'),
available: false }); available: false });
this._actions.set(SWITCH_USER_ACTION_ID, this._actions.set(SWITCH_USER_ACTION_ID,
{ // Translators: The name of the switch user action in search { // Translators: The name of the switch user action in search
name: C_("search-result", "Switch User"), name: C_("search-result", "Switch User"),
iconName: 'system-switch-user-symbolic', iconName: 'system-switch-user-symbolic',
// Translators: A list of keywords that match the switch user action, separated by semicolons // Translators: A list of keywords that match the switch user action, separated by semicolons
keywords: _("switch user").split(/[; ]/), keywords: _("switch user").split(';'),
available: false }); available: false });
this._actions.set(LOCK_ORIENTATION_ACTION_ID, this._actions.set(LOCK_ORIENTATION_ACTION_ID,
{ // Translators: The name of the lock orientation action in search { // Translators: The name of the lock orientation action in search
name: C_("search-result", "Lock Orientation"), name: C_("search-result", "Lock Orientation"),
iconName: '', iconName: '',
// Translators: A list of keywords that match the lock orientation action, separated by semicolons // 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 }); available: false });
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
@@ -262,7 +262,7 @@ const SystemActions = GObject.registerClass({
let results = []; let results = [];
for (let [key, {available, keywords}] of this._actions) for (let [key, {available, keywords}] of this._actions)
if (available && terms.every(t => keywords.some(k => k.startsWith(t)))) if (available && terms.every(t => keywords.some(k => (k.indexOf(t) >= 0))))
results.push(key); results.push(key);
return results; return results;

View File

@@ -366,7 +366,7 @@ class CloseButton extends St.Button {
} }
_computeBoxPointerOffset() { _computeBoxPointerOffset() {
if (!this._boxPointer || !this._boxPointer.get_stage()) if (!this._boxPointer || !this._boxPointer.actor.get_stage())
return 0; return 0;
let side = this._boxPointer.arrowSide; let side = this._boxPointer.arrowSide;

View File

@@ -474,10 +474,12 @@ var CyclerList = GObject.registerClass({
} }
}); });
var CyclerPopup = GObject.registerClass({ var CyclerPopup = GObject.registerClass(
GTypeFlags: GObject.TypeFlags.ABSTRACT class CyclerPopup extends SwitcherPopup.SwitcherPopup {
}, class CyclerPopup extends SwitcherPopup.SwitcherPopup {
_init() { _init() {
if (new.target === CyclerPopup)
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
super._init(); super._init();
this._items = this._getWindows(); this._items = this._getWindows();

View File

@@ -98,8 +98,8 @@ function clamp(value, min, max) {
class BaseAppView { class BaseAppView {
constructor(params, gridParams) { constructor(params, gridParams) {
if (this.constructor === BaseAppView) if (new.target === BaseAppView)
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`); throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE, gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE,
columnLimit: MAX_COLUMNS, columnLimit: MAX_COLUMNS,
@@ -414,7 +414,7 @@ var AllView = class AllView extends BaseAppView {
this._refilterApps(); this._refilterApps();
} }
// Overridden from BaseAppView // Overriden from BaseAppView
animate(animationDirection, onComplete) { animate(animationDirection, onComplete) {
this._scrollView.reactive = false; this._scrollView.reactive = false;
let completionFunc = () => { let completionFunc = () => {
@@ -1017,7 +1017,7 @@ var FolderView = class FolderView extends BaseAppView {
Util.ensureActorVisibleInScrollView(this.actor, actor); Util.ensureActorVisibleInScrollView(this.actor, actor);
} }
// Overridden from BaseAppView // Overriden from BaseAppView
animate(animationDirection) { animate(animationDirection) {
this._grid.animatePulse(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); let contentBox = this.actor.get_theme_node().get_content_box(pageBox);
// We only can show icons inside the collection view boxPointer // We only can show icons inside the collection view boxPointer
// so we have to subtract the required padding etc of the boxpointer // so we have to substract the required padding etc of the boxpointer
return [(contentBox.x2 - contentBox.x1) - 2 * this._offsetForEachSide, (contentBox.y2 - contentBox.y1) - 2 * this._offsetForEachSide]; return [(contentBox.x2 - contentBox.x1) - 2 * this._offsetForEachSide, (contentBox.y2 - contentBox.y1) - 2 * this._offsetForEachSide];
} }
@@ -1301,15 +1301,15 @@ var AppFolderPopup = class AppFolderPopup {
x_expand: true, x_expand: true,
x_align: St.Align.START }); x_align: St.Align.START });
this._boxPointer.style_class = 'app-folder-popup'; this._boxPointer.actor.style_class = 'app-folder-popup';
this.actor.add_actor(this._boxPointer); this.actor.add_actor(this._boxPointer.actor);
this._boxPointer.bin.set_child(this._view.actor); this._boxPointer.bin.set_child(this._view.actor);
this.closeButton = Util.makeCloseButton(this._boxPointer); this.closeButton = Util.makeCloseButton(this._boxPointer);
this.closeButton.connect('clicked', this.popdown.bind(this)); this.closeButton.connect('clicked', this.popdown.bind(this));
this.actor.add_actor(this.closeButton); this.actor.add_actor(this.closeButton);
this._boxPointer.bind_property('opacity', this.closeButton, 'opacity', this._boxPointer.actor.bind_property('opacity', this.closeButton, 'opacity',
GObject.BindingFlags.SYNC_CREATE); GObject.BindingFlags.SYNC_CREATE);
global.focus_manager.add_group(this.actor); 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.actor.connect('popup-menu', this._onKeyboardPopupMenu.bind(this));
this._menu = null; this._menu = null;
this._menuManager = new PopupMenu.PopupMenuManager(this.actor); this._menuManager = new PopupMenu.PopupMenuManager(this);
if (isDraggable) { if (isDraggable) {
this._draggable = DND.makeDraggable(this.actor); this._draggable = DND.makeDraggable(this.actor);
@@ -1707,20 +1707,25 @@ var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu {
w => !w.skip_taskbar w => !w.skip_taskbar
); );
if (windows.length > 0) // Display the app windows menu items and the separator between windows
this.addMenuItem( // of the current desktop and other windows.
/* Translators: This is the heading of a list of open windows */ let workspaceManager = global.workspace_manager;
new PopupMenu.PopupSeparatorMenuItem(_("Open Windows")) let activeWorkspace = workspaceManager.get_active_workspace();
); let separatorShown = windows.length > 0 && windows[0].get_workspace() != activeWorkspace;
windows.forEach(window => { for (let i = 0; i < windows.length; i++) {
let window = windows[i];
if (!separatorShown && window.get_workspace() != activeWorkspace) {
this._appendSeparator();
separatorShown = true;
}
let title = window.title ? window.title let title = window.title ? window.title
: this._source.app.get_name(); : this._source.app.get_name();
let item = this._appendMenuItem(title); let item = this._appendMenuItem(title);
item.connect('activate', () => { item.connect('activate', () => {
this.emit('activate-window', window); this.emit('activate-window', window);
}); });
}); }
if (!this._source.app.is_window_backed()) { if (!this._source.app.is_window_backed()) {
this._appendSeparator(); this._appendSeparator();

View File

@@ -25,7 +25,7 @@ var BackgroundMenu = class BackgroundMenu extends PopupMenu.PopupMenu {
function addBackgroundMenu(actor, layoutManager) { function addBackgroundMenu(actor, layoutManager) {
actor.reactive = true; actor.reactive = true;
actor._backgroundMenu = new BackgroundMenu(layoutManager); actor._backgroundMenu = new BackgroundMenu(layoutManager);
actor._backgroundManager = new PopupMenu.PopupMenuManager(actor); actor._backgroundManager = new PopupMenu.PopupMenuManager({ actor: actor });
actor._backgroundManager.addMenu(actor._backgroundMenu); actor._backgroundManager.addMenu(actor._backgroundMenu);
function openMenu(x, y) { function openMenu(x, y) {

View File

@@ -121,7 +121,6 @@ var BarLevel = class {
cr.lineTo(x, (height - barLevelHeight) / 2); cr.lineTo(x, (height - barLevelHeight) / 2);
cr.lineTo(x, (height + barLevelHeight) / 2); cr.lineTo(x, (height + barLevelHeight) / 2);
cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2); cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2);
if (this._value > 0)
Clutter.cairo_set_source_color(cr, barLevelActiveColor); Clutter.cairo_set_source_color(cr, barLevelActiveColor);
cr.fillPreserve(); cr.fillPreserve();
Clutter.cairo_set_source_color(cr, barLevelActiveBorderColor); Clutter.cairo_set_source_color(cr, barLevelActiveBorderColor);
@@ -144,7 +143,6 @@ var BarLevel = class {
} }
/* end progress bar arc */ /* end progress bar arc */
if (this._value > 0) {
if (this._value <= this._overdriveStart) if (this._value <= this._overdriveStart)
Clutter.cairo_set_source_color(cr, barLevelActiveColor); Clutter.cairo_set_source_color(cr, barLevelActiveColor);
else else
@@ -156,7 +154,6 @@ var BarLevel = class {
cr.fillPreserve(); cr.fillPreserve();
cr.setLineWidth(barLevelBorderWidth); cr.setLineWidth(barLevelBorderWidth);
cr.stroke(); cr.stroke();
}
/* draw overdrive separator */ /* draw overdrive separator */
if (overdriveActive) { if (overdriveActive) {

View File

@@ -33,6 +33,8 @@ var BoxPointer = GObject.registerClass({
_init(arrowSide, binProperties) { _init(arrowSide, binProperties) {
super._init(); super._init();
this.actor = this;
this.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); this.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
this._arrowSide = arrowSide; this._arrowSide = arrowSide;

View File

@@ -23,8 +23,20 @@ var KeyringDialog = class extends ModalDialog.ModalDialog {
this._content = new Dialog.MessageDialogContent({ icon }); this._content = new Dialog.MessageDialogContent({ icon });
this.contentLayout.add(this._content); 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('message', this._content, 'title', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('description', this._content, 'body', 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._workSpinner = null;
this._controlTable = null; this._controlTable = null;

View File

@@ -401,7 +401,7 @@ var ChatSource = class extends MessageTray.Source {
if (this._client.is_handling_channel(this._channel)) { if (this._client.is_handling_channel(this._channel)) {
// We are handling the channel, try to pass it to Empathy or Polari // We are handling the channel, try to pass it to Empathy or Polari
// (depending on the channel type) // (depending on the channel type)
// We don't check if either app is available - mission control will // We don't check if either app is availble - mission control will
// fallback to something else if activation fails // fallback to something else if activation fails
let target; let target;

View File

@@ -899,7 +899,7 @@ var Dash = class Dash {
favPos++; favPos++;
} }
// No drag placeholder means we don't want to favorite the app // No drag placeholder means we don't wan't to favorite the app
// and we are dragging it to its original position // and we are dragging it to its original position
if (!this._dragPlaceholder) if (!this._dragPlaceholder)
return true; return true;

View File

@@ -118,7 +118,7 @@ var WorldClocksSection = class WorldClocksSection {
if (!clocks[i].location) if (!clocks[i].location)
continue; continue;
let l = world.deserialize(clocks[i].location); let l = world.deserialize(clocks[i].location);
if (l && l.get_timezone() != null) if (l)
this._locations.push({ location: l }); this._locations.push({ location: l });
} }
@@ -476,9 +476,10 @@ class DateMenuButton extends PanelMenu.Button {
box.add_actor(this._clockDisplay); box.add_actor(this._clockDisplay);
box.add_actor(this._indicator.actor); box.add_actor(this._indicator.actor);
this.label_actor = this._clockDisplay; this.actor.label_actor = this._clockDisplay;
this.add_actor(box); this.actor.add_actor(box);
this.add_style_class_name ('clock-display'); this.actor.add_style_class_name ('clock-display');
let layout = new FreezableBinLayout(); let layout = new FreezableBinLayout();
let bin = new St.Widget({ layout_manager: layout }); let bin = new St.Widget({ layout_manager: layout });

View File

@@ -175,10 +175,10 @@ var MessageDialogContent = GObject.registerClass({
this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`); this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
}); });
let textProps = { ellipsize: Pango.EllipsizeMode.NONE, let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE,
line_wrap: true }; line_wrap: true };
this._subtitle.clutter_text.set(textProps); Object.assign(this._subtitle.clutter_text, textProps);
this._body.clutter_text.set(textProps); Object.assign(this._body.clutter_text, textProps);
if (!params.hasOwnProperty('style_class')) if (!params.hasOwnProperty('style_class'))
params.style_class = 'message-dialog-main-layout'; params.style_class = 'message-dialog-main-layout';

View File

@@ -96,15 +96,6 @@ function init() {
Clutter.Actor.prototype.toString = function() { Clutter.Actor.prototype.toString = function() {
return St.describe_actor(this); 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; let origToString = Object.prototype.toString;
Object.prototype.toString = function() { Object.prototype.toString = function() {

View File

@@ -272,7 +272,7 @@ var CandidatePopup = class CandidatePopup {
_setDummyCursorGeometry(x, y, w, h) { _setDummyCursorGeometry(x, y, w, h) {
Main.layoutManager.setDummyCursorGeometry(x, y, w, h); Main.layoutManager.setDummyCursorGeometry(x, y, w, h);
if (this._boxPointer.visible) if (this._boxPointer.actor.visible)
this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0);
} }
@@ -285,7 +285,7 @@ var CandidatePopup = class CandidatePopup {
if (isVisible) { if (isVisible) {
this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0);
this._boxPointer.open(BoxPointer.PopupAnimation.NONE); this._boxPointer.open(BoxPointer.PopupAnimation.NONE);
this._boxPointer.raise_top(); this._boxPointer.actor.raise_top();
} else { } else {
this._boxPointer.close(BoxPointer.PopupAnimation.NONE); this._boxPointer.close(BoxPointer.PopupAnimation.NONE);
} }

View File

@@ -43,6 +43,8 @@ class BaseIcon extends St.Bin {
x_fill: true, x_fill: true,
y_fill: true }); y_fill: true });
this.actor = this;
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this._box = new St.BoxLayout({ vertical: true }); this._box = new St.BoxLayout({ vertical: true });
@@ -186,6 +188,8 @@ var IconGrid = GObject.registerClass({
super._init({ style_class: 'icon-grid', super._init({ style_class: 'icon-grid',
y_align: Clutter.ActorAlign.START }); y_align: Clutter.ActorAlign.START });
this.actor = this;
params = Params.parse(params, { rowLimit: null, params = Params.parse(params, { rowLimit: null,
columnLimit: null, columnLimit: null,
minRows: 1, minRows: 1,
@@ -840,7 +844,7 @@ var PaginatedIconGrid = GObject.registerClass({
} }
} }
// Overridden from IconGrid // Overriden from IconGrid
_getChildrenToAnimate() { _getChildrenToAnimate() {
let children = this._getVisibleChildren(); let children = this._getVisibleChildren();
let firstIndex = this._childrenPerPage * this.currentPage; let firstIndex = this._childrenPerPage * this.currentPage;

View File

@@ -282,11 +282,11 @@ var Key = class Key {
y_fill: true, y_fill: true,
x_align: St.Align.START }); x_align: St.Align.START });
this._boxPointer.hide(); this._boxPointer.hide();
Main.layoutManager.addChrome(this._boxPointer); Main.layoutManager.addChrome(this._boxPointer.actor);
this._boxPointer.setPosition(this.keyButton, 0.5); this._boxPointer.setPosition(this.keyButton, 0.5);
// Adds style to existing keyboard style to avoid repetition // Adds style to existing keyboard style to avoid repetition
this._boxPointer.add_style_class_name('keyboard-subkeys'); this._boxPointer.actor.add_style_class_name('keyboard-subkeys');
this._getExtendedKeys(); this._getExtendedKeys();
this.keyButton._extended_keys = this._extended_keyboard; this.keyButton._extended_keys = this._extended_keyboard;
} }
@@ -1049,7 +1049,7 @@ var Keyboard = class Keyboard {
this._a11yApplicationsSettings.connect('changed', this._syncEnabled.bind(this)); this._a11yApplicationsSettings.connect('changed', this._syncEnabled.bind(this));
this._lastDeviceId = null; this._lastDeviceId = null;
this._suggestions = null; this._suggestions = null;
this._emojiKeyVisible = Meta.is_wayland_compositor(); this._emojiKeyVisible = true;
this._focusTracker = new FocusTracker(); this._focusTracker = new FocusTracker();
this._focusTracker.connect('position-changed', this._onFocusPositionChanged.bind(this)); this._focusTracker.connect('position-changed', this._onFocusPositionChanged.bind(this));
@@ -1144,7 +1144,6 @@ var Keyboard = class Keyboard {
this._keyboardController.disconnect(this._keypadVisibleId); this._keyboardController.disconnect(this._keypadVisibleId);
if (this._focusNotifyId) if (this._focusNotifyId)
global.stage.disconnect(this._focusNotifyId); global.stage.disconnect(this._focusNotifyId);
this._clearShowIdle();
this._keyboard = null; this._keyboard = null;
this.actor.destroy(); this.actor.destroy();
this.actor = null; this.actor = null;
@@ -1163,7 +1162,7 @@ var Keyboard = class Keyboard {
this._keyboardController = new KeyboardController(); this._keyboardController = new KeyboardController();
this._groups = {}; this._groups = {};
this._currentPage = null; this._current_page = null;
this._suggestions = new Suggestions(); this._suggestions = new Suggestions();
this.actor.add(this._suggestions.actor, this.actor.add(this._suggestions.actor,
@@ -1203,12 +1202,10 @@ var Keyboard = class Keyboard {
this._keyboardNotifyId = this._keyboardController.connect('active-group', this._onGroupChanged.bind(this)); this._keyboardNotifyId = this._keyboardController.connect('active-group', this._onGroupChanged.bind(this));
this._keyboardGroupsChangedId = this._keyboardController.connect('groups-changed', this._onKeyboardGroupsChanged.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._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._keypadVisibleId = this._keyboardController.connect('keypad-visible', this._onKeypadVisible.bind(this));
this._focusNotifyId = global.stage.connect('notify::key-focus', this._onKeyFocusChanged.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(); this._relayout();
} }
@@ -1230,7 +1227,6 @@ var Keyboard = class Keyboard {
if (!this._showIdleId) { if (!this._showIdleId) {
this._showIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => { this._showIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
this.show(Main.layoutManager.focusIndex); this.show(Main.layoutManager.focusIndex);
this._showIdleId = 0;
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show'); GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show');
@@ -1357,7 +1353,7 @@ var Keyboard = class Keyboard {
} else if (switchToLevel == 1) { } else if (switchToLevel == 1) {
extraButton.connect('long-press', () => { extraButton.connect('long-press', () => {
this._latched = true; this._latched = true;
this._setCurrentLevelLatched(this._currentPage, this._latched); this._setCurrentLevelLatched(this._current_page, this._latched);
}); });
} }
@@ -1384,8 +1380,8 @@ var Keyboard = class Keyboard {
} }
_updateCurrentPageVisible() { _updateCurrentPageVisible() {
if (this._currentPage) if (this._current_page)
this._currentPage.visible = !this._emojiActive && !this._keypadVisible; this._current_page.visible = !this._emojiActive && !this._keypadVisible;
} }
_setEmojiActive(active) { _setEmojiActive(active) {
@@ -1444,7 +1440,7 @@ var Keyboard = class Keyboard {
_getGridSlots() { _getGridSlots() {
let numOfHorizSlots = 0, numOfVertSlots; let numOfHorizSlots = 0, numOfVertSlots;
let rows = this._currentPage.get_children(); let rows = this._current_page.get_children();
numOfVertSlots = rows.length; numOfVertSlots = rows.length;
for (let i = 0; i < rows.length; ++i) { for (let i = 0; i < rows.length; ++i) {
@@ -1474,12 +1470,7 @@ var Keyboard = class Keyboard {
} }
_onKeyboardGroupsChanged(keyboard) { _onKeyboardGroupsChanged(keyboard) {
let nonGroupActors = [this._emojiSelection.actor, this._keypad.actor]; this._groups = [];
this._aspectContainer.get_children().filter(c => !nonGroupActors.includes(c)).forEach(c => {
c.destroy();
});
this._groups = {};
this._onGroupChanged(); this._onGroupChanged();
} }
@@ -1521,24 +1512,13 @@ var Keyboard = class Keyboard {
_setActiveLayer(activeLevel) { _setActiveLayer(activeLevel) {
let activeGroupName = this._keyboardController.getCurrentGroup(); let activeGroupName = this._keyboardController.getCurrentGroup();
let layers = this._groups[activeGroupName]; let layers = this._groups[activeGroupName];
let currentPage = layers[activeLevel];
if (this._currentPage == currentPage) { if (this._current_page != null) {
this._updateCurrentPageVisible(); this._setCurrentLevelLatched(this._current_page, false);
return; this._current_page.hide();
} }
if (this._currentPage != null) { this._current_page = layers[activeLevel];
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(); this._updateCurrentPageVisible();
} }
@@ -1626,6 +1606,18 @@ var Keyboard = class Keyboard {
this.setCursorLocation(null); 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() { resetSuggestions() {
if (this._suggestions) if (this._suggestions)
this._suggestions.clear(); this._suggestions.clear();

View File

@@ -216,17 +216,10 @@ var LayoutManager = GObject.registerClass({
this.uiGroup = new UiActor({ name: 'uiGroup' }); this.uiGroup = new UiActor({ name: 'uiGroup' });
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT); this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
global.stage.add_child(this.uiGroup);
global.stage.remove_actor(global.window_group); global.stage.remove_actor(global.window_group);
this.uiGroup.add_actor(global.window_group); this.uiGroup.add_actor(global.window_group);
// Using addChrome() to add actors to uiGroup will position actors global.stage.add_child(this.uiGroup);
// 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', this.overviewGroup = new St.Widget({ name: 'overviewGroup',
visible: false, visible: false,
@@ -238,7 +231,7 @@ var LayoutManager = GObject.registerClass({
clip_to_allocation: true, clip_to_allocation: true,
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
}); });
this.addTopChrome(this.screenShieldGroup); this.addChrome(this.screenShieldGroup);
this.panelBox = new St.BoxLayout({ name: 'panelBox', this.panelBox = new St.BoxLayout({ name: 'panelBox',
vertical: true }); vertical: true });
@@ -254,7 +247,7 @@ var LayoutManager = GObject.registerClass({
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox', this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
reactive: true, reactive: true,
track_hover: true }); track_hover: true });
this.addTopChrome(this.keyboardBox); this.addChrome(this.keyboardBox);
this._keyboardHeightNotifyId = 0; this._keyboardHeightNotifyId = 0;
// A dummy actor that tracks the mouse or text cursor, based on the // A dummy actor that tracks the mouse or text cursor, based on the
@@ -262,6 +255,9 @@ var LayoutManager = GObject.registerClass({
this.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 }); this.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 });
this.uiGroup.add_actor(this.dummyCursor); 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); let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
global.stage.remove_actor(feedbackGroup); global.stage.remove_actor(feedbackGroup);
this.uiGroup.add_actor(feedbackGroup); this.uiGroup.add_actor(feedbackGroup);
@@ -806,16 +802,6 @@ var LayoutManager = GObject.registerClass({
this._trackActor(actor, params); 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: // trackChrome:
// @actor: a descendant of the chrome to begin tracking // @actor: a descendant of the chrome to begin tracking
// @params: parameters describing how to track @actor // @params: parameters describing how to track @actor

View File

@@ -1272,7 +1272,7 @@ var ZoomRegion = class ZoomRegion {
/** /**
* getContrast: * getContrast:
* Retrieve the contrast of the magnified view. * Retreive the contrast of the magnified view.
* @return Object containing the contrast for the red, green, * @return Object containing the contrast for the red, green,
* and blue channels. * and blue channels.
*/ */

View File

@@ -636,7 +636,7 @@ function _queueBeforeRedraw(workId) {
* initialization as well, under the assumption that new actors * initialization as well, under the assumption that new actors
* will need it. * will need it.
* *
* Returns: A string work identifier * Returns: A string work identifer
*/ */
function initializeDeferredWork(actor, callback, props) { function initializeDeferredWork(actor, callback, props) {
// Turn into a string so we can use as an object property // Turn into a string so we can use as an object property

View File

@@ -584,6 +584,7 @@ class SourceActor extends St.Widget {
this._source = source; this._source = source;
this._size = size; this._size = size;
this.actor = this;
this.connect('destroy', () => { this.connect('destroy', () => {
this._source.disconnect(this._iconUpdatedId); this._source.disconnect(this._iconUpdatedId);
this._actorDestroyed = true; this._actorDestroyed = true;

View File

@@ -224,10 +224,10 @@ var ModalDialog = class {
// can be dismissed by a close call. // can be dismissed by a close call.
// //
// The main point of this method is to give some indication to the user // The main point of this method is to give some indication to the user
// that the dialog response has been acknowledged but will take a few // that the dialog reponse has been acknowledged but will take a few
// moments before being processed. // moments before being processed.
// e.g., if a user clicked "Log Out" then the dialog should go away // e.g., if a user clicked "Log Out" then the dialog should go away
// immediately, but the lightbox should remain until the logout is // imediately, but the lightbox should remain until the logout is
// complete. // complete.
_fadeOutDialog(timestamp) { _fadeOutDialog(timestamp) {
if (this.state == State.CLOSED || this.state == State.CLOSING) if (this.state == State.CLOSED || this.state == State.CLOSING)

View File

@@ -369,15 +369,17 @@ class DashSpacer extends St.Widget {
} }
vfunc_get_preferred_width(forHeight) { vfunc_get_preferred_width(forHeight) {
if (this._bindConstraint) let box = this.get_allocation_box();
return this._bindConstraint.source.get_preferred_width(forHeight); let minWidth = super.vfunc_get_preferred_width(forHeight)[0];
return super.vfunc_get_preferred_width(forHeight); let natWidth = box.x2 - box.x1;
return [minWidth, natWidth];
} }
vfunc_get_preferred_height(forWidth) { vfunc_get_preferred_height(forWidth) {
if (this._bindConstraint) let box = this.get_allocation_box();
return this._bindConstraint.source.get_preferred_height(forWidth); let minHeight = super.vfunc_get_preferred_height(forWidth)[0];
return super.vfunc_get_preferred_height(forWidth); let natHeight = box.y2 - box.y1;
return [minHeight, natHeight];
} }
}); });

View File

@@ -374,12 +374,12 @@ var PadDiagram = GObject.registerClass({
svgData += this._cssString(); svgData += this._cssString();
svgData += this._wrappingSvgFooter(); svgData += this._wrappingSvgFooter();
let istream = new Gio.MemoryInputStream(); let handle = new Rsvg.Handle();
istream.add_bytes(new GLib.Bytes(svgData)); handle.set_base_uri(GLib.path_get_dirname(this._imagePath));
handle.write(svgData);
handle.close();
return Rsvg.Handle.new_from_stream_sync(istream, return handle;
Gio.File.new_for_path(this._imagePath),
0, null);
} }
_updateDiagramScale() { _updateDiagramScale() {

View File

@@ -75,9 +75,6 @@ class AppMenu extends PopupMenu.PopupMenu {
this._windowsChangedId = 0; 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._windowSection = new PopupMenu.PopupMenuSection();
this.addMenuItem(this._windowSection); this.addMenuItem(this._windowSection);
@@ -108,8 +105,6 @@ class AppMenu extends PopupMenu.PopupMenu {
}); });
}); });
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.addAction(_("Quit"), () => { this.addAction(_("Quit"), () => {
this._app.request_quit(); this._app.request_quit();
}); });
@@ -122,7 +117,7 @@ class AppMenu extends PopupMenu.PopupMenu {
_updateDetailsVisibility() { _updateDetailsVisibility() {
let sw = this._appSystem.lookup_app('org.gnome.Software.desktop'); let sw = this._appSystem.lookup_app('org.gnome.Software.desktop');
this._detailsItem.visible = (sw != null); this._detailsItem.actor.visible = (sw != null);
} }
isEmpty() { isEmpty() {
@@ -160,7 +155,7 @@ class AppMenu extends PopupMenu.PopupMenu {
}); });
}); });
this._newWindowItem.visible = this._newWindowItem.actor.visible =
app && app.can_open_new_window() && !actions.includes('new-window'); app && app.can_open_new_window() && !actions.includes('new-window');
} }
@@ -177,6 +172,13 @@ class AppMenu extends PopupMenu.PopupMenu {
Main.activateWindow(window, event.get_time()); 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);
} }
} }
@@ -194,7 +196,7 @@ var AppMenuButton = GObject.registerClass({
_init(panel) { _init(panel) {
super._init(0.0, null, true); super._init(0.0, null, true);
this.accessible_role = Atk.Role.MENU; this.actor.accessible_role = Atk.Role.MENU;
this._startingApps = []; this._startingApps = [];
@@ -204,10 +206,10 @@ var AppMenuButton = GObject.registerClass({
let bin = new St.Bin({ name: 'appMenu' }); let bin = new St.Bin({ name: 'appMenu' });
bin.connect('style-changed', this._onStyleChanged.bind(this)); bin.connect('style-changed', this._onStyleChanged.bind(this));
this.add_actor(bin); this.actor.add_actor(bin);
this.bind_property("reactive", this, "can-focus", 0); this.actor.bind_property("reactive", this.actor, "can-focus", 0);
this.reactive = false; this.actor.reactive = false;
this._container = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); this._container = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
bin.set_child(this._container); bin.set_child(this._container);
@@ -263,10 +265,10 @@ var AppMenuButton = GObject.registerClass({
return; return;
this._visible = true; this._visible = true;
this.reactive = true; this.actor.reactive = true;
this.show(); this.show();
Tweener.removeTweens(this); Tweener.removeTweens(this.actor);
Tweener.addTween(this, Tweener.addTween(this.actor,
{ opacity: 255, { opacity: 255,
time: Overview.ANIMATION_TIME, time: Overview.ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
@@ -277,9 +279,9 @@ var AppMenuButton = GObject.registerClass({
return; return;
this._visible = false; this._visible = false;
this.reactive = false; this.actor.reactive = false;
Tweener.removeTweens(this); Tweener.removeTweens(this.actor);
Tweener.addTween(this, Tweener.addTween(this.actor,
{ opacity: 0, { opacity: 0,
time: Overview.ANIMATION_TIME, time: Overview.ANIMATION_TIME,
transition: 'easeOutQuad', transition: 'easeOutQuad',
@@ -402,7 +404,7 @@ var AppMenuButton = GObject.registerClass({
if (this._targetApp) { if (this._targetApp) {
this._busyNotifyId = this._targetApp.connect('notify::busy', this._sync.bind(this)); this._busyNotifyId = this._targetApp.connect('notify::busy', this._sync.bind(this));
this._label.set_text(this._targetApp.get_name()); this._label.set_text(this._targetApp.get_name());
this.set_accessible_name(this._targetApp.get_name()); this.actor.set_accessible_name(this._targetApp.get_name());
} }
} }
@@ -420,7 +422,7 @@ var AppMenuButton = GObject.registerClass({
else else
this.stopAnimation(); this.stopAnimation();
this.reactive = (visible && !isBusy); this.actor.reactive = (visible && !isBusy);
this._syncIcon(); this._syncIcon();
this.menu.setApp(this._targetApp); this.menu.setApp(this._targetApp);
@@ -459,28 +461,28 @@ var ActivitiesButton = GObject.registerClass(
class ActivitiesButton extends PanelMenu.Button { class ActivitiesButton extends PanelMenu.Button {
_init() { _init() {
super._init(0.0, null, true); super._init(0.0, null, true);
this.accessible_role = Atk.Role.TOGGLE_BUTTON; this.actor.accessible_role = Atk.Role.TOGGLE_BUTTON;
this.name = 'panelActivities'; this.actor.name = 'panelActivities';
/* Translators: If there is no suitable word for "Activities" /* Translators: If there is no suitable word for "Activities"
in your language, you can use the word for "Overview". */ in your language, you can use the word for "Overview". */
this._label = new St.Label({ text: _("Activities"), this._label = new St.Label({ text: _("Activities"),
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this.add_actor(this._label); this.actor.add_actor(this._label);
this.label_actor = this._label; this.actor.label_actor = this._label;
this.connect('captured-event', this._onCapturedEvent.bind(this)); this.actor.connect('captured-event', this._onCapturedEvent.bind(this));
this.connect_after('key-release-event', this._onKeyRelease.bind(this)); this.actor.connect_after('key-release-event', this._onKeyRelease.bind(this));
Main.overview.connect('showing', () => { Main.overview.connect('showing', () => {
this.add_style_pseudo_class('overview'); this.actor.add_style_pseudo_class('overview');
this.add_accessible_state (Atk.StateType.CHECKED); this.actor.add_accessible_state (Atk.StateType.CHECKED);
}); });
Main.overview.connect('hiding', () => { Main.overview.connect('hiding', () => {
this.remove_style_pseudo_class('overview'); this.actor.remove_style_pseudo_class('overview');
this.remove_accessible_state (Atk.StateType.CHECKED); this.actor.remove_accessible_state (Atk.StateType.CHECKED);
}); });
this._xdndTimeOut = 0; this._xdndTimeOut = 0;
@@ -533,7 +535,7 @@ class ActivitiesButton extends PanelMenu.Button {
let [x, y, mask] = global.get_pointer(); let [x, y, mask] = global.get_pointer();
let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
if (pickedActor == this && Main.overview.shouldToggleByCornerOrButton()) if (pickedActor == this.actor && Main.overview.shouldToggleByCornerOrButton())
Main.overview.toggle(); Main.overview.toggle();
Mainloop.source_remove(this._xdndTimeOut); Mainloop.source_remove(this._xdndTimeOut);
@@ -747,7 +749,7 @@ class AggregateMenu extends PanelMenu.Button {
this.menu.box.set_layout_manager(menuLayout); this.menu.box.set_layout_manager(menuLayout);
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' }); this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
this.add_child(this._indicators); this.actor.add_child(this._indicators);
if (Config.HAVE_NETWORKMANAGER) { if (Config.HAVE_NETWORKMANAGER) {
this._network = new imports.ui.status.network.NMApplet(); this._network = new imports.ui.status.network.NMApplet();
@@ -825,6 +827,9 @@ class Panel extends St.Widget {
super._init({ name: 'panel', super._init({ name: 'panel',
reactive: true }); reactive: true });
// For compatibility with extensions that still use the
// this.actor field
this.actor = this;
this.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); this.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
this._sessionStyle = null; this._sessionStyle = null;
@@ -877,7 +882,7 @@ class Panel extends St.Widget {
} }
vfunc_allocate(box, flags) { vfunc_allocate(box, flags) {
this.set_allocation(box, flags); super.vfunc_allocate(box, flags);
let allocWidth = box.x2 - box.x1; let allocWidth = box.x2 - box.x1;
let allocHeight = box.y2 - box.y1; let allocHeight = box.y2 - box.y1;
@@ -971,11 +976,22 @@ class Panel extends St.Widget {
if (isPress && button != 1) if (isPress && button != 1)
return Clutter.EVENT_PROPAGATE; 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 [stageX, stageY] = event.get_coords();
let dragWindow = this._getDraggableWindowForPosition(stageX); let allowDrag = dragWindow.maximized_vertically &&
stageX > rect.x && stageX < rect.x + rect.width;
if (!dragWindow) if (!allowDrag)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
global.display.begin_grab_op(dragWindow, global.display.begin_grab_op(dragWindow,
@@ -1005,7 +1021,7 @@ class Panel extends St.Widget {
return; // menu not supported by current session mode return; // menu not supported by current session mode
let menu = indicator.menu; let menu = indicator.menu;
if (!indicator.reactive) if (!indicator.actor.reactive)
return; return;
menu.toggle(); menu.toggle();
@@ -1027,7 +1043,7 @@ class Panel extends St.Widget {
return; return;
let menu = indicator.menu; let menu = indicator.menu;
if (!indicator.reactive) if (!indicator.actor.reactive)
return; return;
menu.close(); menu.close();
@@ -1185,21 +1201,4 @@ class Panel extends St.Widget {
Main.messageTray.bannerBlocked = isOpen; 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
});
}
}); });

View File

@@ -14,11 +14,12 @@ class ButtonBox extends St.Widget {
super._init(params); super._init(params);
this.actor = this;
this._delegate = this; this._delegate = this;
this.container = new St.Bin({ y_fill: true, this.container = new St.Bin({ y_fill: true,
x_fill: true, x_fill: true,
child: this }); child: this.actor });
this.connect('style-changed', this._onStyleChanged.bind(this)); this.connect('style-changed', this._onStyleChanged.bind(this));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
@@ -104,9 +105,9 @@ var Button = GObject.registerClass({
this.connect('notify::visible', this._onVisibilityChanged.bind(this)); this.connect('notify::visible', this._onVisibilityChanged.bind(this));
if (dontCreateMenu) if (dontCreateMenu)
this.menu = new PopupMenu.PopupDummyMenu(this); this.menu = new PopupMenu.PopupDummyMenu(this.actor);
else else
this.setMenu(new PopupMenu.PopupMenu(this, menuAlignment, St.Side.TOP, 0)); this.setMenu(new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0));
} }
setSensitive(sensitive) { setSensitive(sensitive) {
@@ -144,7 +145,7 @@ var Button = GObject.registerClass({
if (!this.menu) if (!this.menu)
return; return;
if (!this.visible) if (!this.actor.visible)
this.menu.close(); this.menu.close();
} }
@@ -154,10 +155,10 @@ var Button = GObject.registerClass({
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) { if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) {
let group = global.focus_manager.get_group(this); let group = global.focus_manager.get_group(this.actor);
if (group) { if (group) {
let direction = (symbol == Clutter.KEY_Left) ? St.DirectionType.LEFT : St.DirectionType.RIGHT; let direction = (symbol == Clutter.KEY_Left) ? St.DirectionType.LEFT : St.DirectionType.RIGHT;
group.navigate_focus(this, direction, false); group.navigate_focus(this.actor, direction, false);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
} }
@@ -166,9 +167,9 @@ var Button = GObject.registerClass({
_onOpenStateChanged(menu, open) { _onOpenStateChanged(menu, open) {
if (open) if (open)
this.add_style_pseudo_class('active'); this.actor.add_style_pseudo_class('active');
else else
this.remove_style_pseudo_class('active'); this.actor.remove_style_pseudo_class('active');
// Setting the max-height won't do any good if the minimum height of the // 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 // menu is higher then the screen; it's useful if part of the menu is

View File

@@ -51,64 +51,49 @@ function arrowIcon(side) {
return arrow; return arrow;
} }
var PopupBaseMenuItem = GObject.registerClass({ var PopupBaseMenuItem = class {
Properties: { constructor(params) {
'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, params = Params.parse (params, { reactive: true,
activate: true, activate: true,
hover: true, hover: true,
style_class: null, style_class: null,
can_focus: true can_focus: true
}); });
super._init({ style_class: 'popup-menu-item',
this.actor = new St.BoxLayout({ style_class: 'popup-menu-item',
reactive: params.reactive, reactive: params.reactive,
track_hover: params.reactive, track_hover: params.reactive,
can_focus: params.can_focus, can_focus: params.can_focus,
accessible_role: Atk.Role.MENU_ITEM }); accessible_role: Atk.Role.MENU_ITEM });
this._delegate = this; this.actor._delegate = this;
this._ornament = Ornament.NONE; this._ornament = Ornament.NONE;
this._ornamentLabel = new St.Label({ style_class: 'popup-menu-ornament' }); this._ornamentLabel = new St.Label({ style_class: 'popup-menu-ornament' });
this.add(this._ornamentLabel); this.actor.add(this._ornamentLabel);
this._parent = null; this._parent = null;
this._active = false; this.active = false;
this._activatable = params.reactive && params.activate; this._activatable = params.reactive && params.activate;
this._sensitive = true; this._sensitive = true;
if (!this._activatable) if (!this._activatable)
this.add_style_class_name('popup-inactive-menu-item'); this.actor.add_style_class_name('popup-inactive-menu-item');
if (params.style_class) if (params.style_class)
this.add_style_class_name(params.style_class); this.actor.add_style_class_name(params.style_class);
if (this._activatable) { if (this._activatable) {
this.connect('button-press-event', this._onButtonPressEvent.bind(this)); this.actor.connect('button-press-event', this._onButtonPressEvent.bind(this));
this.connect('button-release-event', this._onButtonReleaseEvent.bind(this)); this.actor.connect('button-release-event', this._onButtonReleaseEvent.bind(this));
this.connect('touch-event', this._onTouchEvent.bind(this)); this.actor.connect('touch-event', this._onTouchEvent.bind(this));
this.connect('key-press-event', this._onKeyPressEvent.bind(this)); this.actor.connect('key-press-event', this._onKeyPressEvent.bind(this));
} }
if (params.reactive && params.hover) if (params.reactive && params.hover)
this.bind_property('hover', this, 'active', GObject.BindingFlags.SYNC_CREATE); this.actor.connect('notify::hover', this._onHoverChanged.bind(this));
}
get actor() { this.actor.connect('key-focus-in', this._onKeyFocusIn.bind(this));
/* This is kept for compatibility with current implementation, and we this.actor.connect('key-focus-out', this._onKeyFocusOut.bind(this));
don't want to warn here yet since PopupMenu depends on this */ this.actor.connect('destroy', this._onDestroy.bind(this));
return this;
} }
_getTopMenu() { _getTopMenu() {
@@ -124,24 +109,24 @@ var PopupBaseMenuItem = GObject.registerClass({
_onButtonPressEvent(actor, event) { _onButtonPressEvent(actor, event) {
// This is the CSS active state // This is the CSS active state
this.add_style_pseudo_class('active'); this.actor.add_style_pseudo_class ('active');
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onButtonReleaseEvent(actor, event) { _onButtonReleaseEvent(actor, event) {
this.remove_style_pseudo_class('active'); this.actor.remove_style_pseudo_class ('active');
this.activate(event); this.activate(event);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_onTouchEvent(actor, event) { _onTouchEvent(actor, event) {
if (event.type() == Clutter.EventType.TOUCH_END) { if (event.type() == Clutter.EventType.TOUCH_END) {
this.remove_style_pseudo_class('active'); this.actor.remove_style_pseudo_class ('active');
this.activate(event); this.activate(event);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else if (event.type() == Clutter.EventType.TOUCH_BEGIN) { } else if (event.type() == Clutter.EventType.TOUCH_BEGIN) {
// This is the CSS active state // This is the CSS active state
this.add_style_pseudo_class('active'); this.actor.add_style_pseudo_class ('active');
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
@@ -166,56 +151,54 @@ var PopupBaseMenuItem = GObject.registerClass({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
vfunc_key_focus_in() { _onKeyFocusIn(actor) {
super.vfunc_key_focus_in(); this.setActive(true);
this.active = true;
} }
vfunc_key_focus_out() { _onKeyFocusOut(actor) {
super.vfunc_key_focus_out(); this.setActive(false);
this.active = false; }
_onHoverChanged(actor) {
this.setActive(actor.hover);
} }
activate(event) { activate(event) {
this.emit('activate', event); this.emit('activate', event);
} }
get active() { setActive(active) {
return this._active;
}
set active(active) {
let activeChanged = active != this.active; let activeChanged = active != this.active;
if (activeChanged) { if (activeChanged) {
this._active = active; this.active = active;
if (active) { if (active) {
this.add_style_class_name('selected'); this.actor.add_style_class_name('selected');
if (this.can_focus) if (this.actor.can_focus)
this.grab_key_focus(); this.actor.grab_key_focus();
} else { } else {
this.remove_style_class_name('selected'); this.actor.remove_style_class_name('selected');
// Remove the CSS active state if the user press the button and // 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. // 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 // The correct behaviour would be to set the new item with the CSS
// active state as well, but button-press-event is not trigered, // active state as well, but button-press-event is not trigered,
// so we should track it in our own, which would involve some work // so we should track it in our own, which would involve some work
// in the container // in the container
this.remove_style_pseudo_class('active'); this.actor.remove_style_pseudo_class ('active');
} }
this.notify('active'); this.emit('active-changed', active);
} }
} }
syncSensitive() { syncSensitive() {
let sensitive = this.sensitive; let sensitive = this.getSensitive();
this.reactive = sensitive; this.actor.reactive = sensitive;
this.can_focus = sensitive; this.actor.can_focus = sensitive;
this.notify('sensitive'); this.emit('sensitive-changed');
return sensitive; return sensitive;
} }
getSensitive() { getSensitive() {
let parentSensitive = this._parent ? this._parent.sensitive : true; let parentSensitive = this._parent ? this._parent.getSensitive() : true;
return this._activatable && this._sensitive && parentSensitive; return this._activatable && this._sensitive && parentSensitive;
} }
@@ -227,12 +210,12 @@ var PopupBaseMenuItem = GObject.registerClass({
this.syncSensitive(); this.syncSensitive();
} }
get sensitive() { destroy() {
return this.getSensitive(); this.actor.destroy();
} }
set sensitive(sensitive) { _onDestroy() {
this.setSensitive(sensitive); this.emit('destroy');
} }
setOrnament(ornament) { setOrnament(ornament) {
@@ -243,38 +226,36 @@ var PopupBaseMenuItem = GObject.registerClass({
if (ornament == Ornament.DOT) { if (ornament == Ornament.DOT) {
this._ornamentLabel.text = '\u2022'; this._ornamentLabel.text = '\u2022';
this.add_accessible_state(Atk.StateType.CHECKED); this.actor.add_accessible_state(Atk.StateType.CHECKED);
} else if (ornament == Ornament.CHECK) { } else if (ornament == Ornament.CHECK) {
this._ornamentLabel.text = '\u2713'; this._ornamentLabel.text = '\u2713';
this.add_accessible_state(Atk.StateType.CHECKED); this.actor.add_accessible_state(Atk.StateType.CHECKED);
} else if (ornament == Ornament.NONE) { } else if (ornament == Ornament.NONE) {
this._ornamentLabel.text = ''; this._ornamentLabel.text = '';
this.remove_accessible_state(Atk.StateType.CHECKED); this.actor.remove_accessible_state(Atk.StateType.CHECKED);
} }
} }
}); };
Signals.addSignalMethods(PopupBaseMenuItem.prototype);
var PopupMenuItem = GObject.registerClass( var PopupMenuItem = class extends PopupBaseMenuItem {
class PopupMenuItem extends PopupBaseMenuItem { constructor(text, params) {
_init(text, params) { super(params);
super._init(params);
this.label = new St.Label({ text: text }); this.label = new St.Label({ text: text });
this.add_child(this.label); this.actor.add_child(this.label);
this.label_actor = this.label this.actor.label_actor = this.label
} }
}); };
var PopupSeparatorMenuItem = class extends PopupBaseMenuItem {
var PopupSeparatorMenuItem = GObject.registerClass( constructor(text) {
class PopupSeparatorMenuItem extends PopupBaseMenuItem { super({ reactive: false,
_init(text) { can_focus: false});
super._init({ reactive: false,
can_focus: false });
this.label = new St.Label({ text: text || '' }); this.label = new St.Label({ text: text || '' });
this.add(this.label); this.actor.add(this.label);
this.label_actor = this.label; this.actor.label_actor = this.label;
this.label.connect('notify::text', this.label.connect('notify::text',
this._syncVisibility.bind(this)); this._syncVisibility.bind(this));
@@ -283,78 +264,81 @@ class PopupSeparatorMenuItem extends PopupBaseMenuItem {
this._separator = new St.Widget({ style_class: 'popup-separator-menu-item', this._separator = new St.Widget({ style_class: 'popup-separator-menu-item',
y_expand: true, y_expand: true,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this.add(this._separator, { expand: true }); this.actor.add(this._separator, { expand: true });
} }
_syncVisibility() { _syncVisibility() {
this.label.visible = this.label.text != ''; this.label.visible = this.label.text != '';
} }
}); };
var Switch = GObject.registerClass( var Switch = class {
class Switch extends St.Bin { constructor(state) {
_init(state) { this.actor = new St.Bin({ style_class: 'toggle-switch',
super._init({ style_class: 'toggle-switch',
accessible_role: Atk.Role.CHECK_BOX, accessible_role: Atk.Role.CHECK_BOX,
can_focus: true }); 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"));
this.setToggleState(state); this.setToggleState(state);
} }
setToggleState(state) { setToggleState(state) {
if (state) if (state)
this.add_style_pseudo_class('checked'); this.actor.add_style_pseudo_class('checked');
else else
this.remove_style_pseudo_class('checked'); this.actor.remove_style_pseudo_class('checked');
this.state = state; this.state = state;
} }
toggle() { toggle() {
this.setToggleState(!this.state); this.setToggleState(!this.state);
} }
}); };
var PopupSwitchMenuItem = GObject.registerClass({ var PopupSwitchMenuItem = class extends PopupBaseMenuItem {
Signals: { 'toggled': { param_types: [GObject.TYPE_BOOLEAN] }, }, constructor(text, active, params) {
}, super(params);
class PopupSwitchMenuItem extends PopupBaseMenuItem {
_init(text, active, params) {
super._init(params);
this.label = new St.Label({ text: text }); this.label = new St.Label({ text: text });
this._switch = new Switch(active); this._switch = new Switch(active);
this.accessible_role = Atk.Role.CHECK_MENU_ITEM; this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM;
this.checkAccessibleState(); this.checkAccessibleState();
this.label_actor = this.label; this.actor.label_actor = this.label;
this.add_child(this.label); this.actor.add_child(this.label);
this._statusBin = new St.Bin({ x_align: St.Align.END }); this._statusBin = new St.Bin({ x_align: St.Align.END });
this.add(this._statusBin, { expand: true, x_align: St.Align.END }); this.actor.add(this._statusBin, { expand: true, x_align: St.Align.END });
this._statusLabel = new St.Label({ text: '', this._statusLabel = new St.Label({ text: '',
style_class: 'popup-status-menu-item' style_class: 'popup-status-menu-item'
}); });
this._statusBin.child = this._switch; this._statusBin.child = this._switch.actor;
} }
setStatus(text) { setStatus(text) {
if (text != null) { if (text != null) {
this._statusLabel.text = text; this._statusLabel.text = text;
this._statusBin.child = this._statusLabel; this._statusBin.child = this._statusLabel;
this.reactive = false; this.actor.reactive = false;
this.accessible_role = Atk.Role.MENU_ITEM; this.actor.accessible_role = Atk.Role.MENU_ITEM;
} else { } else {
this._statusBin.child = this._switch; this._statusBin.child = this._switch.actor;
this.reactive = true; this.actor.reactive = true;
this.accessible_role = Atk.Role.CHECK_MENU_ITEM; this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM;
} }
this.checkAccessibleState(); this.checkAccessibleState();
} }
activate(event) { activate(event) {
if (this._switch.mapped) if (this._switch.actor.mapped) {
this.toggle(); this.toggle();
}
// we allow pressing space to toggle the switch // we allow pressing space to toggle the switch
// without closing the menu // without closing the menu
@@ -381,30 +365,29 @@ class PopupSwitchMenuItem extends PopupBaseMenuItem {
} }
checkAccessibleState() { checkAccessibleState() {
switch (this.accessible_role) { switch (this.actor.accessible_role) {
case Atk.Role.CHECK_MENU_ITEM: case Atk.Role.CHECK_MENU_ITEM:
if (this._switch.state) if (this._switch.state)
this.add_accessible_state(Atk.StateType.CHECKED); this.actor.add_accessible_state (Atk.StateType.CHECKED);
else else
this.remove_accessible_state(Atk.StateType.CHECKED); this.actor.remove_accessible_state (Atk.StateType.CHECKED);
break; break;
default: default:
this.remove_accessible_state(Atk.StateType.CHECKED); this.actor.remove_accessible_state (Atk.StateType.CHECKED);
} }
} }
}); };
var PopupImageMenuItem = GObject.registerClass( var PopupImageMenuItem = class extends PopupBaseMenuItem {
class PopupImageMenuItem extends PopupBaseMenuItem { constructor(text, icon, params) {
_init(text, icon, params) { super(params);
super._init(params);
this._icon = new St.Icon({ style_class: 'popup-menu-icon', this._icon = new St.Icon({ style_class: 'popup-menu-icon',
x_align: Clutter.ActorAlign.END }); x_align: Clutter.ActorAlign.END });
this.add_child(this._icon); this.actor.add_child(this._icon);
this.label = new St.Label({ text: text }); this.label = new St.Label({ text: text });
this.add_child(this.label); this.actor.add_child(this.label);
this.label_actor = this.label; this.actor.label_actor = this.label;
this.setIcon(icon); this.setIcon(icon);
} }
@@ -416,12 +399,12 @@ class PopupImageMenuItem extends PopupBaseMenuItem {
else else
this._icon.icon_name = icon; this._icon.icon_name = icon;
} }
}); };
var PopupMenuBase = class { var PopupMenuBase = class {
constructor(sourceActor, styleClass) { constructor(sourceActor, styleClass) {
if (this.constructor === PopupMenuBase) if (new.target === PopupMenuBase)
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`); throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
this.sourceActor = sourceActor; this.sourceActor = sourceActor;
this._parent = null; this._parent = null;
@@ -460,21 +443,13 @@ var PopupMenuBase = class {
} }
getSensitive() { getSensitive() {
let parentSensitive = this._parent ? this._parent.sensitive : true; let parentSensitive = this._parent ? this._parent.getSensitive() : true;
return this._sensitive && parentSensitive; return this._sensitive && parentSensitive;
} }
setSensitive(sensitive) { setSensitive(sensitive) {
this._sensitive = sensitive; this._sensitive = sensitive;
this.emit('notify::sensitive'); this.emit('sensitive-changed');
}
get sensitive() {
return this.getSensitive();
}
set sensitive(sensitive) {
this.setSensitive(sensitive);
} }
_sessionUpdated() { _sessionUpdated() {
@@ -510,7 +485,7 @@ var PopupMenuBase = class {
app.activate(); app.activate();
}); });
menuItem.visible = Main.sessionMode.allowSettings; menuItem.actor.visible = Main.sessionMode.allowSettings;
this._settingsActions[desktopFile] = menuItem; this._settingsActions[desktopFile] = menuItem;
return menuItem; return menuItem;
@@ -519,7 +494,7 @@ var PopupMenuBase = class {
_setSettingsVisibility(visible) { _setSettingsVisibility(visible) {
for (let id in this._settingsActions) { for (let id in this._settingsActions) {
let item = this._settingsActions[id]; let item = this._settingsActions[id];
item.visible = visible; item.actor.visible = visible;
} }
} }
@@ -542,17 +517,16 @@ var PopupMenuBase = class {
_subMenuActiveChanged(submenu, submenuItem) { _subMenuActiveChanged(submenu, submenuItem) {
if (this._activeMenuItem && this._activeMenuItem != submenuItem) if (this._activeMenuItem && this._activeMenuItem != submenuItem)
this._activeMenuItem.active = false; this._activeMenuItem.setActive(false);
this._activeMenuItem = submenuItem; this._activeMenuItem = submenuItem;
this.emit('active-changed', submenuItem); this.emit('active-changed', submenuItem);
} }
_connectItemSignals(menuItem) { _connectItemSignals(menuItem) {
menuItem._activeChangeId = menuItem.connect('notify::active', (menuItem) => { menuItem._activeChangeId = menuItem.connect('active-changed', (menuItem, active) => {
let active = menuItem.active;
if (active && this._activeMenuItem != menuItem) { if (active && this._activeMenuItem != menuItem) {
if (this._activeMenuItem) if (this._activeMenuItem)
this._activeMenuItem.active = false; this._activeMenuItem.setActive(false);
this._activeMenuItem = menuItem; this._activeMenuItem = menuItem;
this.emit('active-changed', menuItem); this.emit('active-changed', menuItem);
} else if (!active && this._activeMenuItem == menuItem) { } else if (!active && this._activeMenuItem == menuItem) {
@@ -560,8 +534,8 @@ var PopupMenuBase = class {
this.emit('active-changed', null); this.emit('active-changed', null);
} }
}); });
menuItem._sensitiveChangeId = menuItem.connect('notify::sensitive', () => { menuItem._sensitiveChangeId = menuItem.connect('sensitive-changed', () => {
let sensitive = menuItem.sensitive; let sensitive = menuItem.getSensitive();
if (!sensitive && this._activeMenuItem == menuItem) { if (!sensitive && this._activeMenuItem == menuItem) {
if (!this.actor.navigate_focus(menuItem.actor, if (!this.actor.navigate_focus(menuItem.actor,
St.DirectionType.TAB_FORWARD, St.DirectionType.TAB_FORWARD,
@@ -577,7 +551,7 @@ var PopupMenuBase = class {
this.itemActivated(BoxPointer.PopupAnimation.FULL); this.itemActivated(BoxPointer.PopupAnimation.FULL);
}); });
menuItem._parentSensitiveChangeId = this.connect('notify::sensitive', () => { menuItem._parentSensitiveChangeId = this.connect('sensitive-changed', () => {
menuItem.syncSensitive(); menuItem.syncSensitive();
}); });
@@ -629,7 +603,7 @@ var PopupMenuBase = class {
return; return;
} }
menuItem.show(); menuItem.actor.show();
} }
moveMenuItem(menuItem, position) { moveMenuItem(menuItem, position) {
@@ -676,8 +650,8 @@ var PopupMenuBase = class {
let parentClosingId = this.connect('menu-closed', () => { let parentClosingId = this.connect('menu-closed', () => {
menuItem.emit('menu-closed'); menuItem.emit('menu-closed');
}); });
let subMenuSensitiveChangedId = this.connect('notify::sensitive', () => { let subMenuSensitiveChangedId = this.connect('sensitive-changed', () => {
menuItem.emit('notify::sensitive'); menuItem.emit('sensitive-changed');
}); });
menuItem.connect('destroy', () => { menuItem.connect('destroy', () => {
@@ -883,9 +857,9 @@ var PopupMenu = class extends PopupMenuBase {
close(animate) { close(animate) {
if (this._activeMenuItem) if (this._activeMenuItem)
this._activeMenuItem.active = false; this._activeMenuItem.setActive(false);
if (this._boxPointer.visible) { if (this._boxPointer.actor.visible) {
this._boxPointer.close(animate, () => { this._boxPointer.close(animate, () => {
this.emit('menu-closed'); this.emit('menu-closed');
}); });
@@ -916,10 +890,6 @@ var PopupDummyMenu = class {
return true; return true;
} }
get sensitive() {
return this.getSensitive();
}
open() { this.emit('open-state-changed', true); } open() { this.emit('open-state-changed', true); }
close() { this.emit('open-state-changed', false); } close() { this.emit('open-state-changed', false); }
toggle() {} toggle() {}
@@ -959,11 +929,7 @@ var PopupSubMenu = class extends PopupMenuBase {
} }
getSensitive() { getSensitive() {
return this._sensitive && this.sourceActor.sensitive; return this._sensitive && this.sourceActor._delegate.getSensitive();
}
get sensitive() {
return this.getSensitive();
} }
open(animate) { open(animate) {
@@ -1030,7 +996,7 @@ var PopupSubMenu = class extends PopupMenuBase {
this.emit('open-state-changed', false); this.emit('open-state-changed', false);
if (this._activeMenuItem) if (this._activeMenuItem)
this._activeMenuItem.active = false; this._activeMenuItem.setActive(false);
if (animate && this._needsScrollbar()) if (animate && this._needsScrollbar())
animate = false; animate = false;
@@ -1062,7 +1028,7 @@ var PopupSubMenu = class extends PopupMenuBase {
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) { if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
this.close(BoxPointer.PopupAnimation.FULL); this.close(BoxPointer.PopupAnimation.FULL);
this.sourceActor._delegate.active = true; this.sourceActor._delegate.setActive(true);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
@@ -1093,26 +1059,25 @@ var PopupMenuSection = class extends PopupMenuBase {
close() { this.emit('open-state-changed', false); } close() { this.emit('open-state-changed', false); }
}; };
var PopupSubMenuMenuItem = GObject.registerClass( var PopupSubMenuMenuItem = class extends PopupBaseMenuItem {
class PopupSubMenuMenuItem extends PopupBaseMenuItem { constructor(text, wantIcon) {
_init(text, wantIcon) { super();
super._init();
this.add_style_class_name('popup-submenu-menu-item'); this.actor.add_style_class_name('popup-submenu-menu-item');
if (wantIcon) { if (wantIcon) {
this.icon = new St.Icon({ style_class: 'popup-menu-icon' }); this.icon = new St.Icon({ style_class: 'popup-menu-icon' });
this.add_child(this.icon); this.actor.add_child(this.icon);
} }
this.label = new St.Label({ text: text, this.label = new St.Label({ text: text,
y_expand: true, y_expand: true,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this.add_child(this.label); this.actor.add_child(this.label);
this.label_actor = this.label; this.actor.label_actor = this.label;
let expander = new St.Bin({ style_class: 'popup-menu-item-expander' }); let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
this.add(expander, { expand: true }); this.actor.add(expander, { expand: true });
this._triangle = arrowIcon(St.Side.RIGHT); this._triangle = arrowIcon(St.Side.RIGHT);
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 }); this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });
@@ -1121,12 +1086,11 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this._triangleBin.add_child(this._triangle); this._triangleBin.add_child(this._triangle);
this.add_child(this._triangleBin); this.actor.add_child(this._triangleBin);
this.add_accessible_state(Atk.StateType.EXPANDABLE); this.actor.add_accessible_state (Atk.StateType.EXPANDABLE);
this.menu = new PopupSubMenu(this, this._triangle); this.menu = new PopupSubMenu(this.actor, this._triangle);
this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this)); this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this));
this.connect('destroy', () => { this.menu.destroy(); });
} }
_setParent(parent) { _setParent(parent) {
@@ -1143,18 +1107,24 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
_subMenuOpenStateChanged(menu, open) { _subMenuOpenStateChanged(menu, open) {
if (open) { if (open) {
this.add_style_pseudo_class('open'); this.actor.add_style_pseudo_class('open');
this._getTopMenu()._setOpenedSubMenu(this.menu); this._getTopMenu()._setOpenedSubMenu(this.menu);
this.add_accessible_state(Atk.StateType.EXPANDED); this.actor.add_accessible_state (Atk.StateType.EXPANDED);
this.add_style_pseudo_class('checked'); this.actor.add_style_pseudo_class('checked');
} else { } else {
this.remove_style_pseudo_class('open'); this.actor.remove_style_pseudo_class('open');
this._getTopMenu()._setOpenedSubMenu(null); this._getTopMenu()._setOpenedSubMenu(null);
this.remove_accessible_state (Atk.StateType.EXPANDED); this.actor.remove_accessible_state (Atk.StateType.EXPANDED);
this.remove_style_pseudo_class('checked'); this.actor.remove_style_pseudo_class('checked');
} }
} }
destroy() {
this.menu.destroy();
super.destroy();
}
setSubmenuShown(open) { setSubmenuShown(open) {
if (open) if (open)
this.menu.open(BoxPointer.PopupAnimation.FULL); this.menu.open(BoxPointer.PopupAnimation.FULL);
@@ -1192,7 +1162,7 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
_onButtonReleaseEvent(actor) { _onButtonReleaseEvent(actor) {
// Since we override the parent, we need to manage what the parent does // Since we override the parent, we need to manage what the parent does
// with the active style class // with the active style class
this.remove_style_pseudo_class('active'); this.actor.remove_style_pseudo_class ('active');
this._setOpenState(!this._getOpenState()); this._setOpenState(!this._getOpenState());
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
@@ -1201,12 +1171,12 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
if (event.type() == Clutter.EventType.TOUCH_END) { if (event.type() == Clutter.EventType.TOUCH_END) {
// Since we override the parent, we need to manage what the parent does // Since we override the parent, we need to manage what the parent does
// with the active style class // with the active style class
this.remove_style_pseudo_class('active'); this.actor.remove_style_pseudo_class ('active');
this._setOpenState(!this._getOpenState()); this._setOpenState(!this._getOpenState());
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
}); };
/* Basic implementation of a menu manager. /* Basic implementation of a menu manager.
* Call addMenu to add menus * Call addMenu to add menus
@@ -1216,7 +1186,7 @@ var PopupMenuManager = class {
grabParams = Params.parse(grabParams, grabParams = Params.parse(grabParams,
{ actionMode: Shell.ActionMode.POPUP }); { actionMode: Shell.ActionMode.POPUP });
this._owner = owner; this._owner = owner;
this._grabHelper = new GrabHelper.GrabHelper(owner, grabParams); this._grabHelper = new GrabHelper.GrabHelper(owner.actor, grabParams);
this._menus = []; this._menus = [];
} }

View File

@@ -148,7 +148,7 @@ function addContextMenu(entry, params) {
entry.menu = new EntryMenu(entry); entry.menu = new EntryMenu(entry);
entry.menu.isPassword = params.isPassword; entry.menu.isPassword = params.isPassword;
entry._menuManager = new PopupMenu.PopupMenuManager(entry, entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry },
{ actionMode: params.actionMode }); { actionMode: params.actionMode });
entry._menuManager.addMenu(entry.menu); entry._menuManager.addMenu(entry.menu);

View File

@@ -39,7 +39,7 @@ class ATIndicator extends PanelMenu.Button {
icon_name: 'preferences-desktop-accessibility-symbolic' })); icon_name: 'preferences-desktop-accessibility-symbolic' }));
this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this.add_child(this._hbox); this.actor.add_child(this._hbox);
this._a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA }); this._a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA });
this._a11ySettings.connect('changed::' + KEY_ALWAYS_SHOW, this._queueSyncMenuVisibility.bind(this)); 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 alwaysShow = this._a11ySettings.get_boolean(KEY_ALWAYS_SHOW);
let items = this.menu._getMenuItems(); let items = this.menu._getMenuItems();
this.visible = alwaysShow || items.some(f => !!f.state); this.actor.visible = alwaysShow || items.some(f => !!f.state);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
} }
@@ -112,22 +112,38 @@ class ATIndicator extends PanelMenu.Button {
_buildItem(string, schema, key) { _buildItem(string, schema, key) {
let settings = new Gio.Settings({ schema_id: schema }); let settings = new Gio.Settings({ schema_id: schema });
let widget = this._buildItemExtended(string, settings.connect('changed::'+key, () => {
settings.get_boolean(key),
settings.is_writable(key),
enabled => settings.set_boolean(key, enabled));
settings.connect('changed::' + key, () => {
widget.setToggleState(settings.get_boolean(key)); widget.setToggleState(settings.get_boolean(key));
this._queueSyncMenuVisibility(); this._queueSyncMenuVisibility();
}); });
let widget = this._buildItemExtended(string,
settings.get_boolean(key),
settings.is_writable(key),
enabled => settings.set_boolean(key, enabled));
return widget; return widget;
} }
_buildHCItem() { _buildHCItem() {
let interfaceSettings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); 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 gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME);
let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME); let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME);
let hasHC = (gtkTheme == HIGH_CONTRAST_THEME); let hasHC = (gtkTheme == HIGH_CONTRAST_THEME);
@@ -148,30 +164,19 @@ class ATIndicator extends PanelMenu.Button {
interfaceSettings.reset(KEY_ICON_THEME); 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; return highContrast;
} }
_buildFontItem() { _buildFontItem() {
let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); 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 factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
let initial_setting = (factor > 1.0); let initial_setting = (factor > 1.0);
let widget = this._buildItemExtended(_("Large Text"), let widget = this._buildItemExtended(_("Large Text"),
@@ -184,15 +189,6 @@ class ATIndicator extends PanelMenu.Button {
else else
settings.reset(KEY_TEXT_SCALING_FACTOR); 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; return widget;
} }
}); });

View File

@@ -118,9 +118,9 @@ var Indicator = class extends PanelMenu.SystemIndicator {
// Remember if there were setup devices and show the menu // Remember if there were setup devices and show the menu
// if we've seen setup devices and we're not hard blocked // if we've seen setup devices and we're not hard blocked
if (nDevices > 0) if (nDevices > 0)
this._item.visible = !this._proxy.BluetoothHardwareAirplaneMode; this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode;
else else
this._item.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
if (nConnectedDevices > 0) if (nConnectedDevices > 0)
/* Translators: this is the number of connected bluetooth devices */ /* Translators: this is the number of connected bluetooth devices */

View File

@@ -37,12 +37,12 @@ var Indicator = class extends PanelMenu.SystemIndicator {
let icon = new St.Icon({ icon_name: 'display-brightness-symbolic', let icon = new St.Icon({ icon_name: 'display-brightness-symbolic',
style_class: 'popup-menu-icon' }); style_class: 'popup-menu-icon' });
this._item.add(icon); this._item.actor.add(icon);
this._item.add(this._slider.actor, { expand: true }); this._item.actor.add(this._slider.actor, { expand: true });
this._item.connect('button-press-event', (actor, event) => { this._item.actor.connect('button-press-event', (actor, event) => {
return this._slider.startDragging(event); return this._slider.startDragging(event);
}); });
this._item.connect('key-press-event', (actor, event) => { this._item.actor.connect('key-press-event', (actor, event) => {
return this._slider.onKeyPressEvent(actor, event); return this._slider.onKeyPressEvent(actor, event);
}); });
@@ -55,7 +55,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
_sync() { _sync() {
let visible = this._proxy.Brightness >= 0; let visible = this._proxy.Brightness >= 0;
this._item.visible = visible; this._item.actor.visible = visible;
if (visible) if (visible)
this._slider.setValue(this._proxy.Brightness / 100.0); this._slider.setValue(this._proxy.Brightness / 100.0);
} }

View File

@@ -15,18 +15,17 @@ const Util = imports.misc.util;
const INPUT_SOURCE_TYPE_XKB = 'xkb'; const INPUT_SOURCE_TYPE_XKB = 'xkb';
const INPUT_SOURCE_TYPE_IBUS = 'ibus'; const INPUT_SOURCE_TYPE_IBUS = 'ibus';
var LayoutMenuItem = GObject.registerClass( var LayoutMenuItem = class extends PopupMenu.PopupBaseMenuItem {
class LayoutMenuItem extends PopupMenu.PopupBaseMenuItem { constructor(displayName, shortName) {
_init(displayName, shortName) { super();
super._init();
this.label = new St.Label({ text: displayName }); this.label = new St.Label({ text: displayName });
this.indicator = new St.Label({ text: shortName }); this.indicator = new St.Label({ text: shortName });
this.add(this.label, { expand: true }); this.actor.add(this.label, { expand: true });
this.add(this.indicator); this.actor.add(this.indicator);
this.label_actor = this.label; this.actor.label_actor = this.label;
} }
}); };
var InputSource = class { var InputSource = class {
constructor(type, id, displayName, shortName, index) { constructor(type, id, displayName, shortName, index) {
@@ -126,8 +125,8 @@ class InputSourceSwitcher extends SwitcherPopup.SwitcherList {
var InputSourceSettings = class { var InputSourceSettings = class {
constructor() { constructor() {
if (this.constructor === InputSourceSettings) if (new.target === InputSourceSettings)
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`); throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
} }
_emitInputSourcesChanged() { _emitInputSourcesChanged() {
@@ -823,7 +822,7 @@ class InputSourceIndicator extends PanelMenu.Button {
this._hbox.add_child(this._container); this._hbox.add_child(this._container);
this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this.add_child(this._hbox); this.actor.add_child(this._hbox);
this._propSeparator = new PopupMenu.PopupSeparatorMenuItem(); this._propSeparator = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(this._propSeparator); this.menu.addMenuItem(this._propSeparator);
@@ -858,7 +857,7 @@ class InputSourceIndicator extends PanelMenu.Button {
// but at least for now it is used as "allow popping up windows // but at least for now it is used as "allow popping up windows
// from shell menus"; we can always add a separate sessionMode // from shell menus"; we can always add a separate sessionMode
// option if need arises. // option if need arises.
this._showLayoutItem.visible = Main.sessionMode.allowSettings; this._showLayoutItem.actor.visible = Main.sessionMode.allowSettings;
} }
_sourcesChanged() { _sourcesChanged() {
@@ -909,11 +908,11 @@ class InputSourceIndicator extends PanelMenu.Button {
// We also hide if we have only one visible source unless // We also hide if we have only one visible source unless
// it's an IBus source with properties. // it's an IBus source with properties.
this.menu.close(); this.menu.close();
this.hide(); this.actor.hide();
return; return;
} }
this.show(); this.actor.show();
this._buildPropSection(newSource.properties); this._buildPropSection(newSource.properties);

View File

@@ -101,12 +101,12 @@ var Indicator = class extends PanelMenu.SystemIndicator {
_syncIndicator() { _syncIndicator() {
if (this._managerProxy == null) { if (this._managerProxy == null) {
this._indicator.visible = false; this._indicator.visible = false;
this._item.visible = false; this._item.actor.visible = false;
return; return;
} }
this._indicator.visible = this._managerProxy.InUse; this._indicator.visible = this._managerProxy.InUse;
this._item.visible = this._indicator.visible; this._item.actor.visible = this._indicator.visible;
this._updateMenuLabels(); this._updateMenuLabels();
} }

View File

@@ -167,10 +167,10 @@ var NMConnectionItem = class {
}; };
Signals.addSignalMethods(NMConnectionItem.prototype); Signals.addSignalMethods(NMConnectionItem.prototype);
var NMConnectionSection = class NMConnectionSection { var NMConnectionSection = class {
constructor(client) { constructor(client) {
if (this.constructor === NMConnectionSection) if (new.target === NMConnectionSection)
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`); throw new TypeError('Cannot instantiate abstract type ' + new.target.name);
this._client = client; this._client = client;
@@ -235,14 +235,14 @@ var NMConnectionSection = class NMConnectionSection {
if (!this._connectionValid(connection)) if (!this._connectionValid(connection))
return; return;
// This function is called every time the connection is added or updated. // This function is called everytime connection is added or updated
// In the usual case, we already added this connection and UUID // 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, // didn't change. So we need to check if we already have an item,
// and update it for properties in the connection that changed // and update it for properties in the connection that changed
// (the only one we care about is the name) // (the only one we care about is the name)
// But it's also possible we didn't know about this connection // But it's also possible we didn't know about this connection
// (eg, during coldplug, or because it was updated and suddenly // (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()); let item = this._connectionItems.get(connection.get_uuid());
if (item) if (item)
@@ -297,13 +297,12 @@ var NMConnectionSection = class NMConnectionSection {
}; };
Signals.addSignalMethods(NMConnectionSection.prototype); Signals.addSignalMethods(NMConnectionSection.prototype);
var NMConnectionDevice = class NMConnectionDevice extends NMConnectionSection { var NMConnectionDevice = class extends NMConnectionSection {
constructor(client, device) { constructor(client, device) {
if (new.target === NMConnectionDevice)
throw new TypeError('Cannot instantiate abstract type ' + new.target.name);
super(client); super(client);
if (this.constructor === NMConnectionDevice)
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
this._device = device; this._device = device;
this._description = ''; this._description = '';
@@ -389,8 +388,8 @@ var NMConnectionDevice = class NMConnectionDevice extends NMConnectionSection {
_sync() { _sync() {
let nItems = this._connectionItems.size; let nItems = this._connectionItems.size;
this._autoConnectItem.visible = (nItems == 0); this._autoConnectItem.actor.visible = (nItems == 0);
this._deactivateItem.visible = this._device.state > NM.DeviceState.DISCONNECTED; this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED;
if (this._activeConnection == null) { if (this._activeConnection == null) {
let activeConnection = this._device.active_connection; let activeConnection = this._device.active_connection;
@@ -477,7 +476,7 @@ var NMDeviceWired = class extends NMConnectionDevice {
} }
_sync() { _sync() {
this.item.visible = this._hasCarrier(); this.item.actor.visible = this._hasCarrier();
super._sync(); super._sync();
} }
@@ -1076,7 +1075,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
let newPos = Util.insertSorted(this._networks, network, this._networkSortFunction); let newPos = Util.insertSorted(this._networks, network, this._networkSortFunction);
this._createNetworkItem(network); this._createNetworkItem(network);
this._itemBox.insert_child_at_index(network.item, newPos); this._itemBox.insert_child_at_index(network.item.actor, newPos);
} }
this._syncView(); this._syncView();
@@ -1094,7 +1093,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
network.accessPoints.splice(res.ap, 1); network.accessPoints.splice(res.ap, 1);
if (network.accessPoints.length == 0) { if (network.accessPoints.length == 0) {
network.item.destroy(); network.item.actor.destroy();
this._networks.splice(res.network, 1); this._networks.splice(res.network, 1);
} else { } else {
network.item.updateBestAP(network.accessPoints[0]); network.item.updateBestAP(network.accessPoints[0]);
@@ -1110,7 +1109,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
this._itemBox.remove_all_children(); this._itemBox.remove_all_children();
this._networks.forEach(network => { this._networks.forEach(network => {
this._itemBox.add_child(network.item); this._itemBox.add_child(network.item.actor);
}); });
adjustment.value = scrollValue; adjustment.value = scrollValue;
@@ -1118,25 +1117,25 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
_selectNetwork(network) { _selectNetwork(network) {
if (this._selectedNetwork) if (this._selectedNetwork)
this._selectedNetwork.item.remove_style_pseudo_class('selected'); this._selectedNetwork.item.actor.remove_style_pseudo_class('selected');
this._selectedNetwork = network; this._selectedNetwork = network;
this._updateSensitivity(); this._updateSensitivity();
if (this._selectedNetwork) if (this._selectedNetwork)
this._selectedNetwork.item.add_style_pseudo_class('selected'); this._selectedNetwork.item.actor.add_style_pseudo_class('selected');
} }
_createNetworkItem(network) { _createNetworkItem(network) {
network.item = new NMWirelessDialogItem(network); network.item = new NMWirelessDialogItem(network);
network.item.setActive(network == this._selectedNetwork); network.item.setActive(network == this._selectedNetwork);
network.item.connect('selected', () => { network.item.connect('selected', () => {
Util.ensureActorVisibleInScrollView(this._scrollView, network.item); Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor);
this._selectNetwork(network); this._selectNetwork(network);
}); });
network.item.connect('destroy', () => { network.item.actor.connect('destroy', () => {
let keyFocus = global.stage.key_focus; let keyFocus = global.stage.key_focus;
if (keyFocus && keyFocus.contains(network.item)) if (keyFocus && keyFocus.contains(network.item.actor))
this._itemBox.grab_key_focus(); this._itemBox.grab_key_focus();
}); });
} }
@@ -1262,7 +1261,7 @@ var NMDeviceWireless = class {
_sync() { _sync() {
this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On"); this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
this._toggleItem.visible = this._client.wireless_hardware_enabled; this._toggleItem.actor.visible = this._client.wireless_hardware_enabled;
this.item.icon.icon_name = this._getMenuIcon(); this.item.icon.icon_name = this._getMenuIcon();
this.item.label.text = this._getStatus(); this.item.label.text = this._getStatus();
@@ -1452,7 +1451,7 @@ var NMVpnSection = class extends NMConnectionSection {
_sync() { _sync() {
let nItems = this._connectionItems.size; let nItems = this._connectionItems.size;
this.item.visible = (nItems > 0); this.item.actor.visible = (nItems > 0);
super._sync(); super._sync();
} }
@@ -1535,7 +1534,7 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection {
this._summaryItem.menu.addSettingsAction(_('Network Settings'), this._summaryItem.menu.addSettingsAction(_('Network Settings'),
'gnome-network-panel.desktop'); 'gnome-network-panel.desktop');
this._summaryItem.hide(); this._summaryItem.actor.hide();
} }
@@ -1544,7 +1543,7 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection {
(prev, child) => prev + (child.visible ? 1 : 0), 0); (prev, child) => prev + (child.visible ? 1 : 0), 0);
this._summaryItem.label.text = this._getSummaryLabel(nDevices); this._summaryItem.label.text = this._getSummaryLabel(nDevices);
let shouldSummarize = nDevices > MAX_DEVICE_ITEMS; let shouldSummarize = nDevices > MAX_DEVICE_ITEMS;
this._summaryItem.visible = shouldSummarize; this._summaryItem.actor.visible = shouldSummarize;
this.section.actor.visible = !shouldSummarize; this.section.actor.visible = !shouldSummarize;
} }
@@ -1731,17 +1730,6 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
this._addDeviceWrapper(wrapper); this._addDeviceWrapper(wrapper);
this._nmDevices.push(device); this._nmDevices.push(device);
this._deviceChanged(device, skipSyncDeviceNames);
device.connect('notify::interface', () => {
this._deviceChanged(device, false);
});
}
}
_deviceChanged(device, skipSyncDeviceNames) {
let wrapper = device._delegate;
if (!skipSyncDeviceNames) if (!skipSyncDeviceNames)
this._syncDeviceNames(); this._syncDeviceNames();
@@ -1751,6 +1739,7 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
}); });
} }
} }
}
_addDeviceWrapper(wrapper) { _addDeviceWrapper(wrapper) {
wrapper._activationFailedId = wrapper.connect('activation-failed', wrapper._activationFailedId = wrapper.connect('activation-failed',

View File

@@ -61,6 +61,6 @@ var Indicator = class extends PanelMenu.SystemIndicator {
: _("Night Light On"); : _("Night Light On");
this._disableItem.label.text = disabled ? _("Resume") this._disableItem.label.text = disabled ? _("Resume")
: _("Disable Until Tomorrow"); : _("Disable Until Tomorrow");
this._item.visible = this._indicator.visible = visible; this._item.actor.visible = this._indicator.visible = visible;
} }
}; };

View File

@@ -96,11 +96,11 @@ var Indicator = class extends PanelMenu.SystemIndicator {
// Do we have batteries or a UPS? // Do we have batteries or a UPS?
let visible = this._proxy.IsPresent; let visible = this._proxy.IsPresent;
if (visible) { if (visible) {
this._item.show(); this._item.actor.show();
this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE); this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE);
} else { } else {
// If there's no battery, then we use the power icon. // If there's no battery, then we use the power icon.
this._item.hide(); this._item.actor.hide();
this._indicator.icon_name = 'system-shutdown-symbolic'; this._indicator.icon_name = 'system-shutdown-symbolic';
this._percentageLabel.hide(); this._percentageLabel.hide();
return; return;

View File

@@ -53,10 +53,10 @@ var RemoteAccessApplet = class extends PanelMenu.SystemIndicator {
_sync() { _sync() {
if (this._handles.size == 0) { if (this._handles.size == 0) {
this._indicator.visible = false; this._indicator.visible = false;
this._item.visible = false; this._item.actor.visible = false;
} else { } else {
this._indicator.visible = true; this._indicator.visible = true;
this._item.visible = true; this._item.actor.visible = true;
} }
} }

View File

@@ -97,7 +97,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
let showAirplaneMode = this._manager.shouldShowAirplaneMode; let showAirplaneMode = this._manager.shouldShowAirplaneMode;
this._indicator.visible = (airplaneMode && showAirplaneMode); this._indicator.visible = (airplaneMode && showAirplaneMode);
this._item.visible = (airplaneMode && showAirplaneMode); this._item.actor.visible = (airplaneMode && showAirplaneMode);
this._offItem.setSensitive(!hwAirplaneMode); this._offItem.setSensitive(!hwAirplaneMode);
if (hwAirplaneMode) if (hwAirplaneMode)

View File

@@ -116,9 +116,9 @@ var Indicator = class extends PanelMenu.SystemIndicator {
this._createSubMenu(); this._createSubMenu();
this._loginScreenItem.connect('notify::visible', this._loginScreenItem.actor.connect('notify::visible',
() => { this._updateMultiUser(); }); () => { this._updateMultiUser(); });
this._logoutItem.connect('notify::visible', this._logoutItem.actor.connect('notify::visible',
() => { this._updateMultiUser(); }); () => { this._updateMultiUser(); });
// Whether shutdown is available or not depends on both lockdown // Whether shutdown is available or not depends on both lockdown
// settings (disable-log-out) and Polkit policy - the latter doesn't // settings (disable-log-out) and Polkit policy - the latter doesn't
@@ -142,7 +142,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
this._lockScreenAction.visible || this._lockScreenAction.visible ||
this._altSwitcher.actor.visible); this._altSwitcher.actor.visible);
this.buttonGroup.visible = visible; this._actionsItem.actor.visible = visible;
} }
_sessionUpdated() { _sessionUpdated() {
@@ -150,10 +150,10 @@ var Indicator = class extends PanelMenu.SystemIndicator {
} }
_updateMultiUser() { _updateMultiUser() {
let hasSwitchUser = this._loginScreenItem.visible; let hasSwitchUser = this._loginScreenItem.actor.visible;
let hasLogout = this._logoutItem.visible; let hasLogout = this._logoutItem.actor.visible;
this._switchUserSubMenu.visible = hasSwitchUser || hasLogout; this._switchUserSubMenu.actor.visible = hasSwitchUser || hasLogout;
} }
_updateSwitchUserSubMenu() { _updateSwitchUserSubMenu() {
@@ -208,7 +208,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
this._switchUserSubMenu.menu.addMenuItem(item); this._switchUserSubMenu.menu.addMenuItem(item);
this._loginScreenItem = item; this._loginScreenItem = item;
this._systemActions.bind_property('can-switch-user', this._systemActions.bind_property('can-switch-user',
this._loginScreenItem, this._loginScreenItem.actor,
'visible', 'visible',
bindFlags); bindFlags);
@@ -220,7 +220,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
this._switchUserSubMenu.menu.addMenuItem(item); this._switchUserSubMenu.menu.addMenuItem(item);
this._logoutItem = item; this._logoutItem = item;
this._systemActions.bind_property('can-logout', this._systemActions.bind_property('can-logout',
this._logoutItem, this._logoutItem.actor,
'visible', 'visible',
bindFlags); bindFlags);
@@ -236,7 +236,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
item = new PopupMenu.PopupBaseMenuItem({ reactive: false, item = new PopupMenu.PopupBaseMenuItem({ reactive: false,
can_focus: false }); can_focus: false });
this.buttonGroup = item; this.buttonGroup = item.actor;
let app = this._settingsApp = Shell.AppSystem.get_default().lookup_app( let app = this._settingsApp = Shell.AppSystem.get_default().lookup_app(
'gnome-control-center.desktop' 'gnome-control-center.desktop'
@@ -251,14 +251,14 @@ var Indicator = class extends PanelMenu.SystemIndicator {
log('Missing required core component Settings, expect trouble…'); log('Missing required core component Settings, expect trouble…');
this._settingsAction = new St.Widget(); this._settingsAction = new St.Widget();
} }
item.add(this._settingsAction, { expand: true, x_fill: false }); item.actor.add(this._settingsAction, { expand: true, x_fill: false });
this._orientationLockAction = this._createActionButton('', _("Orientation Lock")); this._orientationLockAction = this._createActionButton('', _("Orientation Lock"));
this._orientationLockAction.connect('clicked', () => { this._orientationLockAction.connect('clicked', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE), this.menu.itemActivated(BoxPointer.PopupAnimation.NONE),
this._systemActions.activateLockOrientation(); this._systemActions.activateLockOrientation();
}); });
item.add(this._orientationLockAction, { expand: true, x_fill: false }); item.actor.add(this._orientationLockAction, { expand: true, x_fill: false });
this._systemActions.bind_property('can-lock-orientation', this._systemActions.bind_property('can-lock-orientation',
this._orientationLockAction, this._orientationLockAction,
'visible', 'visible',
@@ -273,7 +273,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE); this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateLockScreen(); this._systemActions.activateLockScreen();
}); });
item.add(this._lockScreenAction, { expand: true, x_fill: false }); item.actor.add(this._lockScreenAction, { expand: true, x_fill: false });
this._systemActions.bind_property('can-lock-screen', this._systemActions.bind_property('can-lock-screen',
this._lockScreenAction, this._lockScreenAction,
'visible', 'visible',
@@ -300,8 +300,9 @@ var Indicator = class extends PanelMenu.SystemIndicator {
bindFlags); bindFlags);
this._altSwitcher = new AltSwitcher(this._powerOffAction, this._suspendAction); this._altSwitcher = new AltSwitcher(this._powerOffAction, this._suspendAction);
item.add(this._altSwitcher.actor, { expand: true, x_fill: false }); item.actor.add(this._altSwitcher.actor, { expand: true, x_fill: false });
this._actionsItem = item;
this.menu.addMenuItem(item); this.menu.addMenuItem(item);

View File

@@ -41,12 +41,12 @@ var StreamSlider = class {
this._slider.connect('drag-end', this._notifyVolumeChange.bind(this)); this._slider.connect('drag-end', this._notifyVolumeChange.bind(this));
this._icon = new St.Icon({ style_class: 'popup-menu-icon' }); this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
this.item.add(this._icon); this.item.actor.add(this._icon);
this.item.add(this._slider.actor, { expand: true }); this.item.actor.add(this._slider.actor, { expand: true });
this.item.connect('button-press-event', (actor, event) => { this.item.actor.connect('button-press-event', (actor, event) => {
return this._slider.startDragging(event); return this._slider.startDragging(event);
}); });
this.item.connect('key-press-event', (actor, event) => { this.item.actor.connect('key-press-event', (actor, event) => {
return this._slider.onKeyPressEvent(actor, event); return this._slider.onKeyPressEvent(actor, event);
}); });
@@ -93,7 +93,7 @@ var StreamSlider = class {
_updateVisibility() { _updateVisibility() {
let visible = this._shouldBeVisible(); let visible = this._shouldBeVisible();
this.item.visible = visible; this.item.actor.visible = visible;
} }
scroll(event) { scroll(event) {

View File

@@ -30,10 +30,12 @@ function primaryModifier(mask) {
return primary; return primary;
} }
var SwitcherPopup = GObject.registerClass({ var SwitcherPopup = GObject.registerClass(
GTypeFlags: GObject.TypeFlags.ABSTRACT class SwitcherPopup extends St.Widget {
}, class SwitcherPopup extends St.Widget {
_init(items) { _init(items) {
if (new.target === SwitcherPopup)
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
super._init({ style_class: 'switcher-popup', super._init({ style_class: 'switcher-popup',
reactive: true, reactive: true,
visible: false }); visible: false });

View File

@@ -152,7 +152,7 @@ function registerSpecialPropertySplitter(name, splitFunction, parameters) {
// Tweener to a Clutter.TimeLine. Now, Clutter.Timeline itself isn't a // Tweener to a Clutter.TimeLine. Now, Clutter.Timeline itself isn't a
// whole lot more sophisticated than a simple timeout at a fixed frame // whole lot more sophisticated than a simple timeout at a fixed frame
// rate, but at least it knows how to drop frames. (See // rate, but at least it knows how to drop frames. (See
// HippoAnimationManager for a more sophisticated view of continuous // HippoAnimationManager for a more sophisticated view of continous
// time updates; even better is to pay attention to the vertical // time updates; even better is to pay attention to the vertical
// vblank and sync to that when possible.) // vblank and sync to that when possible.)
// //

View File

@@ -59,7 +59,7 @@ var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
{ x_fill: true, { x_fill: true,
y_fill: true }); y_fill: true });
/* Translators: this and the following message should be limited in length, /* Translators: this and the following message should be limited in lenght,
to avoid ellipsizing the labels. to avoid ellipsizing the labels.
*/ */
this._cancelButton = this.addButton({ label: _("Revert Settings"), this._cancelButton = this.addButton({ label: _("Revert Settings"),
@@ -1488,13 +1488,8 @@ var WindowManager = class {
if (this._clearAnimationInfo(actor)) if (this._clearAnimationInfo(actor))
this._shellwm.completed_size_change(actor); this._shellwm.completed_size_change(actor);
let destroyId = actor.connect('destroy', () => {
this._clearAnimationInfo(actor);
});
actor.__animationInfo = { clone: actorClone, actor.__animationInfo = { clone: actorClone,
oldRect: oldFrameRect, oldRect: oldFrameRect };
destroyId: destroyId };
} }
_sizeChangedWindow(shellwm, actor) { _sizeChangedWindow(shellwm, actor) {
@@ -1555,7 +1550,6 @@ var WindowManager = class {
_clearAnimationInfo(actor) { _clearAnimationInfo(actor) {
if (actor.__animationInfo) { if (actor.__animationInfo) {
actor.__animationInfo.clone.destroy(); actor.__animationInfo.clone.destroy();
actor.disconnect(actor.__animationInfo.destroyId);
delete actor.__animationInfo; delete actor.__animationInfo;
return true; return true;
} }
@@ -1870,25 +1864,17 @@ var WindowManager = class {
} }
} }
_getPositionForDirection(direction, fromWs, toWs) { _getPositionForDirection(direction) {
let xDest = 0, yDest = 0; 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 || if (direction == Meta.MotionDirection.UP ||
direction == Meta.MotionDirection.UP_LEFT || direction == Meta.MotionDirection.UP_LEFT ||
direction == Meta.MotionDirection.UP_RIGHT) direction == Meta.MotionDirection.UP_RIGHT)
yDest = -global.screen_height + (oldWsIsFullscreen ? 0 : shiftHeight); yDest = -global.screen_height + Main.panel.height;
else if (direction == Meta.MotionDirection.DOWN || else if (direction == Meta.MotionDirection.DOWN ||
direction == Meta.MotionDirection.DOWN_LEFT || direction == Meta.MotionDirection.DOWN_LEFT ||
direction == Meta.MotionDirection.DOWN_RIGHT) direction == Meta.MotionDirection.DOWN_RIGHT)
yDest = global.screen_height - (newWsIsFullscreen ? 0 : shiftHeight); yDest = global.screen_height - Main.panel.height;
if (direction == Meta.MotionDirection.LEFT || if (direction == Meta.MotionDirection.LEFT ||
direction == Meta.MotionDirection.UP_LEFT || direction == Meta.MotionDirection.UP_LEFT ||
@@ -1946,7 +1932,7 @@ var WindowManager = class {
switchData.container.add_actor(info.actor); switchData.container.add_actor(info.actor);
info.actor.raise_top(); info.actor.raise_top();
let [x, y] = this._getPositionForDirection(dir, curWs, ws); let [x, y] = this._getPositionForDirection(dir);
info.actor.set_position(x, y); info.actor.set_position(x, y);
} }
@@ -2032,11 +2018,7 @@ var WindowManager = class {
this._switchData.inProgress = true; this._switchData.inProgress = true;
let workspaceManager = global.workspace_manager; let [xDest, yDest] = this._getPositionForDirection(direction);
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 /* @direction is the direction that the "camera" moves, so the
* screen contents have to move one screen's worth in the * screen contents have to move one screen's worth in the

View File

@@ -173,7 +173,7 @@ var WindowMenu = class extends PopupMenu.PopupMenu {
var WindowMenuManager = class { var WindowMenuManager = class {
constructor() { constructor() {
this._manager = new PopupMenu.PopupMenuManager(Main.layoutManager.dummyCursor); this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
this._sourceActor = new St.Widget({ reactive: true, visible: false }); this._sourceActor = new St.Widget({ reactive: true, visible: false });
this._sourceActor.connect('button-press-event', () => { this._sourceActor.connect('button-press-event', () => {

View File

@@ -786,8 +786,8 @@ var WindowPositionFlags = {
var LayoutStrategy = class { var LayoutStrategy = class {
constructor(monitor, rowSpacing, columnSpacing) { constructor(monitor, rowSpacing, columnSpacing) {
if (this.constructor === LayoutStrategy) if (new.target === LayoutStrategy)
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`); throw new TypeError('Cannot instantiate abstract type ' + new.target.name);
this._monitor = monitor; this._monitor = monitor;
this._rowSpacing = rowSpacing; this._rowSpacing = rowSpacing;
@@ -813,7 +813,7 @@ var LayoutStrategy = class {
} }
// Computes and returns an individual scaling factor for @window, // Computes and returns an individual scaling factor for @window,
// to be applied in addition to the overall layout scale. // to be applied in addition to the overal layout scale.
_computeWindowScale(window) { _computeWindowScale(window) {
// Since we align windows next to each other, the height of the // Since we align windows next to each other, the height of the
// thumbnails is much more important to preserve than the width of // 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 // We will reposition windows anyway when enter again overview or when ending the windows
// animations with fade animation. // animations whith fade animation.
// In this way we avoid unwanted animations of windows repositioning while // In this way we avoid unwanted animations of windows repositioning while
// animating overview. // animating overview.
if (this.leavingOverview || this._animatingWindowsFade) if (this.leavingOverview || this._animatingWindowsFade)
@@ -1886,10 +1886,10 @@ var Workspace = class {
// Win win -- better scale and better space // Win win -- better scale and better space
return true; return true;
} else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) { } else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) {
// Keep new layout only if scale gain outweighs aspect space loss // Keep new layout only if scale gain outweights aspect space loss
return scalePower > spacePower; return scalePower > spacePower;
} else if (newLayout.scale <= oldLayout.scale && newLayout.space > oldLayout.space) { } else if (newLayout.scale <= oldLayout.scale && newLayout.space > oldLayout.space) {
// Keep new layout only if aspect space gain outweighs scale loss // Keep new layout only if aspect space gain outweights scale loss
return spacePower > scalePower; return spacePower > scalePower;
} else { } else {
// Lose -- worse scale and space // Lose -- worse scale and space

View File

@@ -85,6 +85,8 @@ class WorkspaceSwitcherPopup extends St.Widget {
height: global.screen_height, height: global.screen_height,
style_class: 'workspace-switcher-group' }); style_class: 'workspace-switcher-group' });
this.actor = this;
Main.uiGroup.add_actor(this); Main.uiGroup.add_actor(this);
this._timeoutId = 0; this._timeoutId = 0;
@@ -140,7 +142,7 @@ class WorkspaceSwitcherPopup extends St.Widget {
time: ANIMATION_TIME, time: ANIMATION_TIME,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
this.show(); this.actor.show();
} }
display(direction, activeWorkspaceIndex) { display(direction, activeWorkspaceIndex) {

View File

@@ -601,7 +601,8 @@ class ThumbnailsBox extends St.Widget {
style_class: 'workspace-thumbnails', style_class: 'workspace-thumbnails',
request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT }); request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
this._delegate = this; this.actor = this;
this.actor._delegate = this;
let indicator = new St.Bin({ style_class: 'workspace-thumbnail-indicator' }); let indicator = new St.Bin({ style_class: 'workspace-thumbnail-indicator' });

View File

@@ -84,7 +84,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
this._animating = false; // tweening this._animating = false; // tweening
this._scrolling = false; // swipe-scrolling this._scrolling = false; // swipe-scrolling
this._gestureActive = false; // touch(pad) gestures this._gestureActive = false; // touch(pad) gestures
this._animatingScroll = false; // programmatically updating the adjustment this._animatingScroll = false; // programatically updating the adjustment
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index(); let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex, this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
@@ -479,12 +479,12 @@ var WorkspacesDisplay = class {
this.actor.connect('notify::mapped', () => { this.actor.connect('notify::mapped', () => {
switchGesture.enabled = this.actor.mapped; switchGesture.enabled = this.actor.mapped;
}); });
switchGesture.enabled = this.actor.mapped;
this._primaryIndex = Main.layoutManager.primaryIndex; this._primaryIndex = Main.layoutManager.primaryIndex;
this._workspacesViews = []; this._workspacesViews = [];
this._primaryScrollAdjustment = null; this._primaryScrollAdjustment = null;
switchGesture.enabled = this.actor.mapped;
this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA }); this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA });
this._settings.connect('changed::workspaces-only-on-primary', this._settings.connect('changed::workspaces-only-on-primary',

View File

@@ -1,5 +1,5 @@
project('gnome-shell', 'c', project('gnome-shell', 'c',
version: '3.33.1', version: '3.32.0',
meson_version: '>= 0.47.0', meson_version: '>= 0.47.0',
license: 'GPLv2+' license: 'GPLv2+'
) )
@@ -14,7 +14,7 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
libmutter_pc = 'libmutter-' + mutter_api_version libmutter_pc = 'libmutter-' + mutter_api_version
croco_req = '>= 0.6.8' croco_req = '>= 0.6.8'
ecal_req = '>= 3.33.1' ecal_req = '>= 3.5.3'
eds_req = '>= 3.17.2' eds_req = '>= 3.17.2'
gcr_req = '>= 3.7.5' gcr_req = '>= 3.7.5'
gdesktop_req = '>= 3.7.90' gdesktop_req = '>= 3.7.90'
@@ -23,7 +23,7 @@ gi_req = '>= 1.49.1'
gjs_req = '>= 1.54.0' gjs_req = '>= 1.54.0'
gtk_req = '>= 3.15.0' gtk_req = '>= 3.15.0'
json_glib_req = '>= 0.13.2' json_glib_req = '>= 0.13.2'
mutter_req = '>= 3.33.1' mutter_req = '>= 3.32.0'
polkit_req = '>= 0.100' polkit_req = '>= 0.100'
schemas_req = '>= 3.27.90' schemas_req = '>= 3.27.90'
startup_req = '>= 0.11' startup_req = '>= 0.11'
@@ -73,7 +73,7 @@ else
endif endif
atk_bridge_dep = dependency('atk-bridge-2.0') atk_bridge_dep = dependency('atk-bridge-2.0')
ecal_dep = dependency('libecal-2.0', version: ecal_req) ecal_dep = dependency('libecal-1.2', version: ecal_req)
eds_dep = dependency('libedataserver-1.2', version: eds_req) eds_dep = dependency('libedataserver-1.2', version: eds_req)
gcr_dep = dependency('gcr-base-3', version: gcr_req) gcr_dep = dependency('gcr-base-3', version: gcr_req)
gdk_x11_dep = dependency('gdk-x11-3.0') gdk_x11_dep = dependency('gdk-x11-3.0')
@@ -167,48 +167,6 @@ cdata.set('HAVE_FDWALK',
cc.has_function('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( config_h = configure_file(
input: 'config.h.meson', input: 'config.h.meson',
output: 'config.h', output: 'config.h',

128
po/de.po
View File

@@ -16,14 +16,14 @@
# Benjamin Steinwender <b@stbe.at>, 2013-2014. # Benjamin Steinwender <b@stbe.at>, 2013-2014.
# Bernd Homuth <dev@hmt.im>, 2014-2015, 2016, 2019. # Bernd Homuth <dev@hmt.im>, 2014-2015, 2016, 2019.
# Franco Della-Monica <franco.della.monica@gmail.com>, 2016. # Franco Della-Monica <franco.della.monica@gmail.com>, 2016.
# Tim Sabsch <tim@sabsch.com>, 2018-2019. # Tim Sabsch <tim@sabsch.com>, 2018.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-05-08 10:16+0000\n" "POT-Creation-Date: 2019-03-02 19:56+0000\n"
"PO-Revision-Date: 2019-05-12 12:36+0200\n" "PO-Revision-Date: 2019-03-02 21:13+0100\n"
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n" "Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n" "Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de\n" "Language: de\n"
@@ -390,6 +390,11 @@ msgstr ""
msgid "Network Login" msgid "Network Login"
msgstr "Netzwerkanmeldung" 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 #: js/extensionPrefs/main.js:116
msgid "Somethings gone wrong" msgid "Somethings gone wrong"
msgstr "Etwas ist schiefgelaufen" msgstr "Etwas ist schiefgelaufen"
@@ -537,7 +542,7 @@ msgstr "abmelden;verlassen"
#: js/misc/systemActions.js:109 #: js/misc/systemActions.js:109
msgctxt "search-result" msgctxt "search-result"
msgid "Suspend" msgid "Suspend"
msgstr "Bereitschaft" msgstr "In Bereitschaft versetzen"
#. Translators: A list of keywords that match the suspend action, separated by semicolons #. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:112 #: js/misc/systemActions.js:112
@@ -757,12 +762,12 @@ msgstr "Zu Favoriten hinzufügen"
msgid "Show Details" msgid "Show Details"
msgstr "Details anzeigen" msgstr "Details anzeigen"
#: js/ui/appFavorites.js:149 #: js/ui/appFavorites.js:141
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s wurde zu Ihren Favoriten hinzugefügt" msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
#: js/ui/appFavorites.js:183 #: js/ui/appFavorites.js:175
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s wurde aus Ihren Favoriten entfernt" msgstr "%s wurde aus Ihren Favoriten entfernt"
@@ -1048,7 +1053,7 @@ msgstr "Passwort der mobilen Breitbandverbindung"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden." msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden."
#: 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" msgid "Network Manager"
msgstr "Netzwerk-Verwaltung" msgstr "Netzwerk-Verwaltung"
@@ -1120,23 +1125,23 @@ msgstr "Weltuhren hinzufügen …"
msgid "World Clocks" msgid "World Clocks"
msgstr "Weltuhren" msgstr "Weltuhren"
#: js/ui/dateMenu.js:228 #: js/ui/dateMenu.js:222
msgid "Weather" msgid "Weather"
msgstr "Wetter" msgstr "Wetter"
#: js/ui/dateMenu.js:311 #: js/ui/dateMenu.js:305
msgid "Select a location…" msgid "Select a location…"
msgstr "Ort auswählen …" msgstr "Ort auswählen …"
#: js/ui/dateMenu.js:319 #: js/ui/dateMenu.js:313
msgid "Loading…" msgid "Loading…"
msgstr "Wird geladen …" msgstr "Wird geladen …"
#: js/ui/dateMenu.js:329 #: js/ui/dateMenu.js:323
msgid "Go online for weather information" msgid "Go online for weather information"
msgstr "Gehen Sie Online, um Wetterinformationen beziehen zu können" msgstr "Gehen Sie Online, um Wetterinformationen beziehen zu können"
#: js/ui/dateMenu.js:331 #: js/ui/dateMenu.js:325
msgid "Weather information is currently unavailable" msgid "Weather information is currently unavailable"
msgstr "Wetterinformationen sind momentan nicht verfügbar" msgstr "Wetterinformationen sind momentan nicht verfügbar"
@@ -1299,26 +1304,26 @@ msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "»%s« von extensions.gnome.org herunterladen und installieren?" msgstr "»%s« von extensions.gnome.org herunterladen und installieren?"
#. Translators: %s is an application name like "Settings" #. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:78 #: js/ui/inhibitShortcutsDialog.js:50
#, javascript-format #, javascript-format
msgid "%s wants to inhibit shortcuts" msgid "%s wants to inhibit shortcuts"
msgstr "%s möchte Tastenkombinationen sperren" msgstr "%s möchte Tastenkombinationen sperren"
#: js/ui/inhibitShortcutsDialog.js:79 #: js/ui/inhibitShortcutsDialog.js:51
msgid "Application wants to inhibit shortcuts" msgid "Application wants to inhibit shortcuts"
msgstr "Die Anwendung möchte Tastenkombinationen sperren" msgstr "Die Anwendung möchte Tastenkombinationen sperren"
#. Translators: %s is a keyboard shortcut like "Super+x" #. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:88 #: js/ui/inhibitShortcutsDialog.js:60
#, javascript-format #, javascript-format
msgid "You can restore shortcuts by pressing %s." msgid "You can restore shortcuts by pressing %s."
msgstr "Sie können Tastenkombinationen durch Drücken von %s wiederherstellen." msgstr "Sie können Tastenkombinationen durch Drücken von %s wiederherstellen."
#: js/ui/inhibitShortcutsDialog.js:93 #: js/ui/inhibitShortcutsDialog.js:65
msgid "Deny" msgid "Deny"
msgstr "Ablehnen" msgstr "Ablehnen"
#: js/ui/inhibitShortcutsDialog.js:100 #: js/ui/inhibitShortcutsDialog.js:71
msgid "Allow" msgid "Allow"
msgstr "Zulassen" msgstr "Zulassen"
@@ -1371,13 +1376,13 @@ msgid "Leave On"
msgstr "Eingeschaltet lassen" msgstr "Eingeschaltet lassen"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 #: 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" msgid "Turn On"
msgstr "Einschalten" msgstr "Einschalten"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 #: 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:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375 #: 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/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106 #: js/ui/status/rfkill.js:106
msgid "Turn Off" msgid "Turn Off"
@@ -1387,7 +1392,7 @@ msgstr "Ausschalten"
msgid "Leave Off" msgid "Leave Off"
msgstr "Ausgeschaltet lassen" msgstr "Ausgeschaltet lassen"
#: js/ui/keyboard.js:200 #: js/ui/keyboard.js:203
msgid "Region & Language Settings" msgid "Region & Language Settings"
msgstr "Regions- und Spracheinstellungen" msgstr "Regions- und Spracheinstellungen"
@@ -1439,7 +1444,7 @@ msgstr "Quelle zeigen"
msgid "Web Page" msgid "Web Page"
msgstr "Webseite" msgstr "Webseite"
#: js/ui/messageTray.js:1480 #: js/ui/messageTray.js:1474
msgid "System Information" msgid "System Information"
msgstr "Systeminformationen" msgstr "Systeminformationen"
@@ -1523,11 +1528,11 @@ msgstr "Beenden"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: js/ui/panel.js:470 #: js/ui/panel.js:471
msgid "Activities" msgid "Activities"
msgstr "Aktivitäten" msgstr "Aktivitäten"
#: js/ui/panel.js:745 #: js/ui/panel.js:746
msgctxt "System menu in the top bar" msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "System" msgstr "System"
@@ -1536,6 +1541,15 @@ msgstr "System"
msgid "Top Bar" msgid "Top Bar"
msgstr "Oberes Panel" 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 #: js/ui/runDialog.js:64
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Bitte geben Sie einen Befehl ein" msgstr "Bitte geben Sie einen Befehl ein"
@@ -1575,7 +1589,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d neue Benachrichtigung" msgstr[0] "%d neue Benachrichtigung"
msgstr[1] "%d neue Benachrichtigungen" msgstr[1] "%d neue Benachrichtigungen"
#: js/ui/screenShield.js:449 js/ui/status/system.js:271 #: js/ui/screenShield.js:449 js/ui/status/system.js:270
msgid "Lock" msgid "Lock"
msgstr "Sperren" msgstr "Sperren"
@@ -1590,11 +1604,11 @@ msgstr "GNOME muss den Bildschirm sperren"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1299 #: js/ui/screenShield.js:834 js/ui/screenShield.js:1307
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Sperrung fehlgeschlagen" msgstr "Sperrung fehlgeschlagen"
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300 #: js/ui/screenShield.js:835 js/ui/screenShield.js:1308
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Sperrung wurde von einer Anwendung blockiert" msgstr "Sperrung wurde von einer Anwendung blockiert"
@@ -1758,7 +1772,7 @@ msgid "<unknown>"
msgstr "<Unbekannt>" msgstr "<Unbekannt>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:416 js/ui/status/network.js:1292 #: js/ui/status/network.js:416 js/ui/status/network.js:1293
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s ausgeschaltet" msgstr "%s ausgeschaltet"
@@ -1784,7 +1798,7 @@ msgid "%s Disconnecting"
msgstr "%s wird getrennt" msgstr "%s wird getrennt"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:434 js/ui/status/network.js:1284 #: js/ui/status/network.js:434 js/ui/status/network.js:1285
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "%s wird verbunden" msgstr "%s wird verbunden"
@@ -1824,7 +1838,7 @@ msgid "Mobile Broadband Settings"
msgstr "Einstellungen der mobilen Breitbandverbindung" msgstr "Einstellungen der mobilen Breitbandverbindung"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:553 js/ui/status/network.js:1289 #: js/ui/status/network.js:553 js/ui/status/network.js:1290
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "%s-Hardware ausgeschaltet" msgstr "%s-Hardware ausgeschaltet"
@@ -1896,72 +1910,72 @@ msgid "Wi-Fi Settings"
msgstr "Drahtlosnetzwerk-Einstellungen" msgstr "Drahtlosnetzwerk-Einstellungen"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1280 #: js/ui/status/network.js:1281
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "Hotspot %s eingeschaltet" msgstr "Hotspot %s eingeschaltet"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1295 #: js/ui/status/network.js:1296
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s nicht verbunden" msgstr "%s nicht verbunden"
#: js/ui/status/network.js:1392 #: js/ui/status/network.js:1393
msgid "connecting…" msgid "connecting…"
msgstr "Verbindungsaufbau …" msgstr "Verbindungsaufbau …"
#. Translators: this is for network connections that require some kind of key or password #. 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" msgid "authentication required"
msgstr "Anmeldung erforderlich" msgstr "Anmeldung erforderlich"
#: js/ui/status/network.js:1397 #: js/ui/status/network.js:1398
msgid "connection failed" msgid "connection failed"
msgstr "Verbindung gescheitert" msgstr "Verbindung gescheitert"
#: js/ui/status/network.js:1447 #: js/ui/status/network.js:1448
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPN-Einstellungen" msgstr "VPN-Einstellungen"
#: js/ui/status/network.js:1464 #: js/ui/status/network.js:1465
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1474 #: js/ui/status/network.js:1475
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN ausgeschaltet" msgstr "VPN ausgeschaltet"
#: 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" msgid "Network Settings"
msgstr "Netzwerkeinstellungen" msgstr "Netzwerkeinstellungen"
#: js/ui/status/network.js:1564 #: js/ui/status/network.js:1565
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s Kabelverbindung" msgstr[0] "%s Kabelverbindung"
msgstr[1] "%s Kabelverbindungen" msgstr[1] "%s Kabelverbindungen"
#: js/ui/status/network.js:1568 #: js/ui/status/network.js:1569
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s Funknetzwerkverbindung" msgstr[0] "%s Funknetzwerkverbindung"
msgstr[1] "%s Funknetzwerkverbindungen" msgstr[1] "%s Funknetzwerkverbindungen"
#: js/ui/status/network.js:1572 #: js/ui/status/network.js:1573
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s Modem-Verbindung" msgstr[0] "%s Modem-Verbindung"
msgstr[1] "%s Modem-Verbindungen" msgstr[1] "%s Modem-Verbindungen"
#: js/ui/status/network.js:1705 #: js/ui/status/network.js:1702
msgid "Connection failed" msgid "Connection failed"
msgstr "Verbindung gescheitert" msgstr "Verbindung gescheitert"
#: js/ui/status/network.js:1706 #: js/ui/status/network.js:1703
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivierung der Netzwerkverbindung ist gescheitert" msgstr "Aktivierung der Netzwerkverbindung ist gescheitert"
@@ -2043,15 +2057,15 @@ msgstr "Abmelden"
msgid "Account Settings" msgid "Account Settings"
msgstr "Kontoeinstellungen" msgstr "Kontoeinstellungen"
#: js/ui/status/system.js:256 #: js/ui/status/system.js:255
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Hoch-/Querformats-Fixierung" msgstr "Hoch-/Querformats-Fixierung"
#: js/ui/status/system.js:282 #: js/ui/status/system.js:281
msgid "Suspend" msgid "Suspend"
msgstr "Bereitschaft" msgstr "In Bereitschaft versetzen"
#: js/ui/status/system.js:292 #: js/ui/status/system.js:291
msgid "Power Off" msgid "Power Off"
msgstr "Ausschalten" msgstr "Ausschalten"
@@ -2169,7 +2183,7 @@ msgstr[1] ""
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:677 #: js/ui/windowManager.js:662
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"
@@ -2242,6 +2256,11 @@ msgstr "Auf den Bildschirm nach rechts verschieben"
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Evolution-Kalender" 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 #: src/main.c:408
msgid "Print version" msgid "Print version"
msgstr "Version ausgeben" msgstr "Version ausgeben"
@@ -2260,12 +2279,12 @@ msgstr ""
msgid "List possible modes" msgid "List possible modes"
msgstr "Die möglichen Modi auflisten" msgstr "Die möglichen Modi auflisten"
#: src/shell-app.c:264 #: src/shell-app.c:260
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Unbekannt" msgstr "Unbekannt"
#: src/shell-app.c:515 #: src/shell-app.c:511
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "»%s« konnte nicht gestartet werden" msgstr "»%s« konnte nicht gestartet werden"
@@ -2304,15 +2323,6 @@ msgstr[1] "%u Eingänge"
msgid "System Sounds" msgid "System Sounds"
msgstr "Systemklänge" 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:" #~ msgid "There was an error loading the preferences dialog for %s:"
#~ msgstr "" #~ msgstr ""
#~ "Beim Laden des Einstellungsdialogs für %s ist ein Fehler aufgetreten:" #~ "Beim Laden des Einstellungsdialogs für %s ist ein Fehler aufgetreten:"

169
po/eo.po
View File

@@ -6,22 +6,22 @@
# Daniel PUENTES <blatberk@openmailbox.org>, 2015. # Daniel PUENTES <blatberk@openmailbox.org>, 2015.
# Nicolas MAIA < >, 2015. # Nicolas MAIA < >, 2015.
# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011, 2012, 2015, 2016, 2018. # 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 "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-05-08 17:45+0000\n" "POT-Creation-Date: 2019-03-24 17:37+0000\n"
"PO-Revision-Date: 2019-05-09 20:12+0200\n" "PO-Revision-Date: 2019-03-31 00:14+0100\n"
"Last-Translator: Carmen Bianca BAKKER <carmen@carmenbianca.eu>\n" "Last-Translator: Carmen Bianca Bakker <carmen@carmenbianca.eu>\n"
"Language-Team: Esperanto <gnome-eo-list@gnome.org>\n" "Language-Team: Esperanto <gnome-eo-list@gnome.org>\n"
"Language: eo\n" "Language: eo\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 3.32.0\n" "X-Generator: Poedit 2.2.1\n"
"X-DamnedLies-Scope: partial\n" "X-DamnedLies-Scope: partial\n"
"X-Project-Style: gnome\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/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136 #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188 #: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:889 #: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
msgid "Cancel" msgid "Cancel"
msgstr "Nuligi" msgstr "Nuligi"
@@ -681,37 +681,32 @@ msgstr "Oftaj"
msgid "All" msgid "All"
msgstr "Ĉiuj" msgstr "Ĉiuj"
#. Translators: This is the heading of a list of open windows #: js/ui/appDisplay.js:1737 js/ui/panel.js:83
#: 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" msgid "New Window"
msgstr "Nova fenestro" msgstr "Nova fenestro"
#: js/ui/appDisplay.js:1746 #: js/ui/appDisplay.js:1751
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Lanĉi uzante dediĉitan vidkarton" msgstr "Lanĉi uzante dediĉitan vidkarton"
#: js/ui/appDisplay.js:1773 js/ui/dash.js:239 #: js/ui/appDisplay.js:1778 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Forigi el preferataj" msgstr "Forigi el preferataj"
#: js/ui/appDisplay.js:1779 #: js/ui/appDisplay.js:1784
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Aldoni al preferataj" msgstr "Aldoni al preferataj"
#: js/ui/appDisplay.js:1789 js/ui/panel.js:97 #: js/ui/appDisplay.js:1794 js/ui/panel.js:94
msgid "Show Details" msgid "Show Details"
msgstr "Montri detalojn" msgstr "Montri detalojn"
#: js/ui/appFavorites.js:149 #: js/ui/appFavorites.js:141
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s estas aldonita de via preferataj aplikaĵoj." msgstr "%s estas aldonita de via preferataj aplikaĵoj."
#: js/ui/appFavorites.js:183 #: js/ui/appFavorites.js:175
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s estas forigita de via preferataj aplikaĵoj." msgstr "%s estas forigita de via preferataj aplikaĵoj."
@@ -919,7 +914,7 @@ msgstr ""
"Alternative vi povas konekti per premi la “WPS”-butonon de via enkursigilo." "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/components/networkAgent.js:112 js/ui/status/network.js:219
#: js/ui/status/network.js:310 js/ui/status/network.js:892 #: js/ui/status/network.js:309 js/ui/status/network.js:891
msgid "Connect" msgid "Connect"
msgstr "Konekti" msgstr "Konekti"
@@ -949,7 +944,7 @@ msgstr "Servo: "
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685 #: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
msgid "Authentication required by wireless network" msgid "Authentication required by wireless network"
msgstr "Sendrata reto bezonas aŭtentigon" msgstr "Aŭtentigo estas bezonata de sendrata reto"
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686 #: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#, javascript-format #, javascript-format
@@ -977,7 +972,7 @@ msgstr "PIN-kodo bezonata"
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700 #: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
msgid "PIN code is needed for the mobile broadband device" msgid "PIN code is needed for the mobile broadband device"
msgstr "PIN-kodo necesas por la portebla larĝkapacita aparato" msgstr "PIN-kodo estas bezonata por la portebla larĝkapacita aparato"
#: js/ui/components/networkAgent.js:333 #: js/ui/components/networkAgent.js:333
msgid "PIN: " msgid "PIN: "
@@ -991,9 +986,9 @@ msgstr "Portebla larĝkapacita retopasvorto"
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707 #: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
#, javascript-format #, javascript-format
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Pasvorto necesas por konekti al “%s”." msgstr "Pasvorto estas bezonata por konekti al “%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" msgid "Network Manager"
msgstr "Retadministrilo" msgstr "Retadministrilo"
@@ -1065,23 +1060,23 @@ msgstr "Aldoni mondajn horloĝojn…"
msgid "World Clocks" msgid "World Clocks"
msgstr "Mondaj horloĝoj" msgstr "Mondaj horloĝoj"
#: js/ui/dateMenu.js:228 #: js/ui/dateMenu.js:222
msgid "Weather" msgid "Weather"
msgstr "Vetero" msgstr "Vetero"
#: js/ui/dateMenu.js:311 #: js/ui/dateMenu.js:305
msgid "Select a location…" msgid "Select a location…"
msgstr "Elekti lokon…" msgstr "Elekti lokon…"
#: js/ui/dateMenu.js:319 #: js/ui/dateMenu.js:313
msgid "Loading…" msgid "Loading…"
msgstr "Ŝargante…" msgstr "Ŝargante…"
#: js/ui/dateMenu.js:329 #: js/ui/dateMenu.js:323
msgid "Go online for weather information" msgid "Go online for weather information"
msgstr "Enretigi por veterinformoj" msgstr "Enretigi por veterinformoj"
#: js/ui/dateMenu.js:331 #: js/ui/dateMenu.js:325
msgid "Weather information is currently unavailable" msgid "Weather information is currently unavailable"
msgstr "Veterinformoj ĉimomente nehaveblas" msgstr "Veterinformoj ĉimomente nehaveblas"
@@ -1310,13 +1305,13 @@ msgid "Leave On"
msgstr "Lasi ŝaltita" msgstr "Lasi ŝaltita"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 #: 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" msgid "Turn On"
msgstr "Ŝalti" msgstr "Ŝalti"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:311 #: 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/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106 #: js/ui/status/rfkill.js:106
msgid "Turn Off" msgid "Turn Off"
@@ -1378,7 +1373,7 @@ msgstr "Montri fonton"
msgid "Web Page" msgid "Web Page"
msgstr "Retpaĝo" msgstr "Retpaĝo"
#: js/ui/messageTray.js:1479 #: js/ui/messageTray.js:1480
msgid "System Information" msgid "System Information"
msgstr "Sisteminformoj" msgstr "Sisteminformoj"
@@ -1457,25 +1452,34 @@ msgstr "Premu Esk-klavon por ĉesi"
msgid "Press any key to exit" msgid "Press any key to exit"
msgstr "Premu iun ajn klavon por ĉesi" msgstr "Premu iun ajn klavon por ĉesi"
#: js/ui/panel.js:113 #: js/ui/panel.js:108
msgid "Quit" msgid "Quit"
msgstr "Ĉesi" msgstr "Ĉesi"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: js/ui/panel.js:468 #: js/ui/panel.js:471
msgid "Activities" msgid "Activities"
msgstr "Aktivecoj" msgstr "Aktivecoj"
#: js/ui/panel.js:743 #: js/ui/panel.js:746
msgctxt "System menu in the top bar" msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistemo" msgstr "Sistemo"
#: js/ui/panel.js:861 #: js/ui/panel.js:867
msgid "Top Bar" msgid "Top Bar"
msgstr "Supra breto" 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 #: js/ui/runDialog.js:64
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Enigu komandon" msgstr "Enigu komandon"
@@ -1610,11 +1614,11 @@ msgstr "Saltaj klavoj"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "Musklavoj" msgstr "Musklavoj"
#: js/ui/status/accessibility.js:135 #: js/ui/status/accessibility.js:151
msgid "High Contrast" msgid "High Contrast"
msgstr "Alta kontrasto" msgstr "Alta kontrasto"
#: js/ui/status/accessibility.js:177 #: js/ui/status/accessibility.js:182
msgid "Large Text" msgid "Large Text"
msgstr "Granda teksto" msgstr "Granda teksto"
@@ -1622,7 +1626,7 @@ msgstr "Granda teksto"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bludento" msgstr "Bludento"
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586 #: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Bludento-agordoj" msgstr "Bludento-agordoj"
@@ -1693,13 +1697,13 @@ msgid "<unknown>"
msgstr "<nekonata>" msgstr "<nekonata>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:417 js/ui/status/network.js:1293 #: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s malŝaltita" msgstr "%s malŝaltita"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:420 #: js/ui/status/network.js:419
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "%s konektita" msgstr "%s konektita"
@@ -1707,189 +1711,189 @@ msgstr "%s konektita"
#. Translators: this is for network devices that are physically present but are not #. 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); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:425 #: js/ui/status/network.js:424
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s nemastrumita" msgstr "%s nemastrumita"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:428 #: js/ui/status/network.js:427
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "%s malkonektante" msgstr "%s malkonektante"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:435 js/ui/status/network.js:1285 #: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "%s konektante" msgstr "%s konektante"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:438 #: js/ui/status/network.js:437
#, javascript-format #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s postulas aŭtentigon" msgstr "%s postulas aŭtentigon"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:446 #: js/ui/status/network.js:445
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "Mikroprogramo mankas por %s" msgstr "Mikroprogramo mankas por %s"
#. Translators: this is for a network device that cannot be activated (for example it #. 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 #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:450 #: js/ui/status/network.js:449
#, javascript-format #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s nedisponebla" msgstr "%s nedisponebla"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:453 #: js/ui/status/network.js:452
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "%s konekto malsukcesis" msgstr "%s konekto malsukcesis"
#: js/ui/status/network.js:465 #: js/ui/status/network.js:464
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Drataj agordoj" msgstr "Drataj agordoj"
#: js/ui/status/network.js:507 #: js/ui/status/network.js:506
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Porteblaj larĝkapacitaj agordoj" msgstr "Porteblaj larĝkapacitaj agordoj"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:554 js/ui/status/network.js:1290 #: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "%s aparataro malŝaltita" msgstr "%s aparataro malŝaltita"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:558 #: js/ui/status/network.js:557
#, javascript-format #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s malŝaltita" msgstr "%s malŝaltita"
#: js/ui/status/network.js:598 #: js/ui/status/network.js:597
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "Konekti al interreto" msgstr "Konekti al interreto"
#: js/ui/status/network.js:787 #: js/ui/status/network.js:786
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "Aviadila reĝimo ŝaltita" msgstr "Aviadila reĝimo ŝaltita"
#: js/ui/status/network.js:788 #: js/ui/status/network.js:787
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Vifio malebliĝas se aviadila reĝimo estas ŝaltita." msgstr "Vifio malebliĝas se aviadila reĝimo estas ŝaltita."
#: js/ui/status/network.js:789 #: js/ui/status/network.js:788
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Malŝalti aviadilan reĝimon" msgstr "Malŝalti aviadilan reĝimon"
#: js/ui/status/network.js:798 #: js/ui/status/network.js:797
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "Vifio malŝaltita" msgstr "Vifio malŝaltita"
#: js/ui/status/network.js:799 #: js/ui/status/network.js:798
msgid "Wi-Fi needs to be turned on in order to connect to a network." msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Necesas ŝalti vifion por konekti al reto." msgstr "Necesas ŝalti vifion por konekti al reto."
#: js/ui/status/network.js:800 #: js/ui/status/network.js:799
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Ŝalti vifion" msgstr "Ŝalti vifion"
#: js/ui/status/network.js:825 #: js/ui/status/network.js:824
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Vifiaj retoj" msgstr "Vifiaj retoj"
#: js/ui/status/network.js:827 #: js/ui/status/network.js:826
msgid "Select a network" msgid "Select a network"
msgstr "Elekti reton" msgstr "Elekti reton"
#: js/ui/status/network.js:856 #: js/ui/status/network.js:855
msgid "No Networks" msgid "No Networks"
msgstr "Neniu reto" msgstr "Neniu reto"
#: js/ui/status/network.js:877 js/ui/status/rfkill.js:104 #: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Uzi aparataran ŝaltilon por malŝalti" msgstr "Uzi aparataran ŝaltilon por malŝalti"
#: js/ui/status/network.js:1153 #: js/ui/status/network.js:1152
msgid "Select Network" msgid "Select Network"
msgstr "Elekti reton" msgstr "Elekti reton"
#: js/ui/status/network.js:1159 #: js/ui/status/network.js:1158
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Vifio-agordoj" msgstr "Vifio-agordoj"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1281 #: js/ui/status/network.js:1280
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "%s retkaptejo aktiva" msgstr "%s retkaptejo aktiva"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1296 #: js/ui/status/network.js:1295
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s ne konektita" msgstr "%s ne konektita"
#: js/ui/status/network.js:1393 #: js/ui/status/network.js:1392
msgid "connecting…" msgid "connecting…"
msgstr "konektante…" msgstr "konektante…"
#. Translators: this is for network connections that require some kind of key or password #. 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" msgid "authentication required"
msgstr "aŭtentigo necesas" msgstr "aŭtentigo necesas"
#: js/ui/status/network.js:1398 #: js/ui/status/network.js:1397
msgid "connection failed" msgid "connection failed"
msgstr "konekto malsukcesis" msgstr "konekto malsukcesis"
#: js/ui/status/network.js:1448 #: js/ui/status/network.js:1447
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPR-agordoj" msgstr "VPR-agordoj"
#: js/ui/status/network.js:1465 #: js/ui/status/network.js:1464
msgid "VPN" msgid "VPN"
msgstr "VPR" msgstr "VPR"
#: js/ui/status/network.js:1475 #: js/ui/status/network.js:1474
msgid "VPN Off" msgid "VPN Off"
msgstr "VPR malŝaltita" msgstr "VPR malŝaltita"
#: 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" msgid "Network Settings"
msgstr "Ret-agordoj" msgstr "Ret-agordoj"
#: js/ui/status/network.js:1565 #: js/ui/status/network.js:1564
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s drata konekto" msgstr[0] "%s drata konekto"
msgstr[1] "%s drataj konektoj" msgstr[1] "%s drataj konektoj"
#: js/ui/status/network.js:1569 #: js/ui/status/network.js:1568
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s vifia konekto" msgstr[0] "%s vifia konekto"
msgstr[1] "%s vifiaj konektoj" msgstr[1] "%s vifiaj konektoj"
#: js/ui/status/network.js:1573 #: js/ui/status/network.js:1572
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s modema konekto" msgstr[0] "%s modema konekto"
msgstr[1] "%s modemaj konektoj" msgstr[1] "%s modemaj konektoj"
#: js/ui/status/network.js:1706 #: js/ui/status/network.js:1701
msgid "Connection failed" msgid "Connection failed"
msgstr "Konekto malsukcesis" msgstr "Konekto malsukcesis"
#: js/ui/status/network.js:1707 #: js/ui/status/network.js:1702
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivigo de reto-konekto malsukcesis" msgstr "Aktivigo de reto-konekto malsukcesis"
@@ -2094,7 +2098,7 @@ msgstr[1] "Agordaj ŝanĝoj malfaritos post %d sekundoj"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:677 #: js/ui/windowManager.js:662
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"
@@ -2227,9 +2231,6 @@ msgstr[1] "%u enigoj"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sistemsonoj" msgstr "Sistemsonoj"
#~ msgid "toggle-switch-us"
#~ msgstr "toggle-switch-intl"
#~ msgid "network-workgroup" #~ msgid "network-workgroup"
#~ msgstr "network-workgroup" #~ msgstr "network-workgroup"

160
po/es.po
View File

@@ -9,8 +9,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell.master\n" "Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-05-15 17:25+0000\n" "POT-Creation-Date: 2019-03-24 17:37+0000\n"
"PO-Revision-Date: 2019-05-16 12:35+0200\n" "PO-Revision-Date: 2019-02-06 11:27+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: es <gnome-es-list@gnome.org>\n" "Language-Team: es <gnome-es-list@gnome.org>\n"
"Language: es\n" "Language: es\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 3.32.0\n" "X-Generator: Gtranslator 3.31.90\n"
#: data/50-gnome-shell-system.xml:6 #: data/50-gnome-shell-system.xml:6
msgid "System" msgid "System"
@@ -431,7 +431,7 @@ msgstr "Buscar en Software"
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55 #: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136 #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188 #: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:889 #: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@@ -522,8 +522,7 @@ msgstr "Cerrar la sesión"
#. Translators: A list of keywords that match the logout action, separated by semicolons #. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:105 #: js/misc/systemActions.js:105
#| msgid "logout;sign off" msgid "logout;sign off"
msgid "logout;log out;sign off"
msgstr "cerrar;sesión;salir" msgstr "cerrar;sesión;salir"
#. Translators: The name of the suspend action in search #. Translators: The name of the suspend action in search
@@ -729,37 +728,32 @@ msgstr "Frecuentes"
msgid "All" msgid "All"
msgstr "Todas" msgstr "Todas"
#. Translators: This is the heading of a list of open windows #: js/ui/appDisplay.js:1737 js/ui/panel.js:83
#: 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" msgid "New Window"
msgstr "Ventana nueva" msgstr "Ventana nueva"
#: js/ui/appDisplay.js:1746 #: js/ui/appDisplay.js:1751
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Lanzar usando la tarjeta gráfica dedicada" msgstr "Lanzar usando la tarjeta gráfica dedicada"
#: js/ui/appDisplay.js:1773 js/ui/dash.js:239 #: js/ui/appDisplay.js:1778 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Quitar de los favoritos" msgstr "Quitar de los favoritos"
#: js/ui/appDisplay.js:1779 #: js/ui/appDisplay.js:1784
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Añadir a los favoritos" msgstr "Añadir a los favoritos"
#: js/ui/appDisplay.js:1789 js/ui/panel.js:97 #: js/ui/appDisplay.js:1794 js/ui/panel.js:94
msgid "Show Details" msgid "Show Details"
msgstr "Mostrar detalles" msgstr "Mostrar detalles"
#: js/ui/appFavorites.js:149 #: js/ui/appFavorites.js:141
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "Se ha añadido %s a sus favoritos." msgstr "Se ha añadido %s a sus favoritos."
#: js/ui/appFavorites.js:183 #: js/ui/appFavorites.js:175
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "Se ha quitado %s de sus favoritos." msgstr "Se ha quitado %s de sus favoritos."
@@ -969,7 +963,7 @@ msgstr ""
"Alternativamente puede conectarse pulsando el botón «WPS» de su router." "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/components/networkAgent.js:112 js/ui/status/network.js:219
#: js/ui/status/network.js:310 js/ui/status/network.js:892 #: js/ui/status/network.js:309 js/ui/status/network.js:891
msgid "Connect" msgid "Connect"
msgstr "Conectar" msgstr "Conectar"
@@ -1044,7 +1038,7 @@ msgstr "Contraseña de la red de banda ancha móvil"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Se requiere una contraseña para conectarse a «%s»." msgstr "Se requiere una contraseña para conectarse a «%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" msgid "Network Manager"
msgstr "Gestor de la red" msgstr "Gestor de la red"
@@ -1114,23 +1108,23 @@ msgstr "Añadir relojes del mundo…"
msgid "World Clocks" msgid "World Clocks"
msgstr "Relojes del mundo" msgstr "Relojes del mundo"
#: js/ui/dateMenu.js:228 #: js/ui/dateMenu.js:222
msgid "Weather" msgid "Weather"
msgstr "Meteorología" msgstr "Meteorología"
#: js/ui/dateMenu.js:311 #: js/ui/dateMenu.js:305
msgid "Select a location…" msgid "Select a location…"
msgstr "Seleccionar ubicación…" msgstr "Seleccionar ubicación…"
#: js/ui/dateMenu.js:319 #: js/ui/dateMenu.js:313
msgid "Loading…" msgid "Loading…"
msgstr "Cargando…" msgstr "Cargando…"
#: js/ui/dateMenu.js:329 #: js/ui/dateMenu.js:323
msgid "Go online for weather information" msgid "Go online for weather information"
msgstr "Conectarse para obtener la información meteorológica" msgstr "Conectarse para obtener la información meteorológica"
#: js/ui/dateMenu.js:331 #: js/ui/dateMenu.js:325
msgid "Weather information is currently unavailable" msgid "Weather information is currently unavailable"
msgstr "La información meteorológica no está disponible actualmente." msgstr "La información meteorológica no está disponible actualmente."
@@ -1365,13 +1359,13 @@ msgid "Leave On"
msgstr "Dejar activada" msgstr "Dejar activada"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 #: 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" msgid "Turn On"
msgstr "Encender" msgstr "Encender"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:311 #: 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/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106 #: js/ui/status/rfkill.js:106
msgid "Turn Off" msgid "Turn Off"
@@ -1433,7 +1427,7 @@ msgstr "Ver fuente"
msgid "Web Page" msgid "Web Page"
msgstr "Página web" msgstr "Página web"
#: js/ui/messageTray.js:1479 #: js/ui/messageTray.js:1480
msgid "System Information" msgid "System Information"
msgstr "Información del sistema" msgstr "Información del sistema"
@@ -1511,25 +1505,34 @@ msgstr "Pulse Esc para salir"
msgid "Press any key to exit" msgid "Press any key to exit"
msgstr "Pulse cualquier tecla para salir" msgstr "Pulse cualquier tecla para salir"
#: js/ui/panel.js:113 #: js/ui/panel.js:108
msgid "Quit" msgid "Quit"
msgstr "Salir" msgstr "Salir"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: js/ui/panel.js:468 #: js/ui/panel.js:471
msgid "Activities" msgid "Activities"
msgstr "Actividades" msgstr "Actividades"
#: js/ui/panel.js:743 #: js/ui/panel.js:746
msgctxt "System menu in the top bar" msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: js/ui/panel.js:861 #: js/ui/panel.js:867
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" 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 #: js/ui/runDialog.js:64
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Introducir un comando" msgstr "Introducir un comando"
@@ -1664,11 +1667,11 @@ msgstr "Rechazo de teclas"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "Teclas del ratón" msgstr "Teclas del ratón"
#: js/ui/status/accessibility.js:135 #: js/ui/status/accessibility.js:151
msgid "High Contrast" msgid "High Contrast"
msgstr "Contraste alto" msgstr "Contraste alto"
#: js/ui/status/accessibility.js:177 #: js/ui/status/accessibility.js:182
msgid "Large Text" msgid "Large Text"
msgstr "Texto grande" msgstr "Texto grande"
@@ -1676,7 +1679,7 @@ msgstr "Texto grande"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586 #: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth" msgstr "Configuración de Bluetooth"
@@ -1749,13 +1752,13 @@ msgid "<unknown>"
msgstr "<desconocido>" msgstr "<desconocido>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:417 js/ui/status/network.js:1293 #: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s apagada" msgstr "%s apagada"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:420 #: js/ui/status/network.js:419
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "%s conectada" msgstr "%s conectada"
@@ -1763,189 +1766,189 @@ msgstr "%s conectada"
#. Translators: this is for network devices that are physically present but are not #. 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); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:425 #: js/ui/status/network.js:424
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s sin gestionar" msgstr "%s sin gestionar"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:428 #: js/ui/status/network.js:427
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "Desconectando %s" msgstr "Desconectando %s"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:435 js/ui/status/network.js:1285 #: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "Conectando %s" msgstr "Conectando %s"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:438 #: js/ui/status/network.js:437
#, javascript-format #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s requiere autenticación" msgstr "%s requiere autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:446 #: js/ui/status/network.js:445
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "Falta el «firmware» para %s" msgstr "Falta el «firmware» para %s"
#. Translators: this is for a network device that cannot be activated (for example it #. 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 #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:450 #: js/ui/status/network.js:449
#, javascript-format #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s no disponible" msgstr "%s no disponible"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:453 #: js/ui/status/network.js:452
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "Falló la conexión %s" msgstr "Falló la conexión %s"
#: js/ui/status/network.js:465 #: js/ui/status/network.js:464
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Configuración de red cableada" msgstr "Configuración de red cableada"
#: js/ui/status/network.js:507 #: js/ui/status/network.js:506
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Configuración de banda ancha móvil" msgstr "Configuración de banda ancha móvil"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:554 js/ui/status/network.js:1290 #: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "Hardware %s desactivado" msgstr "Hardware %s desactivado"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:558 #: js/ui/status/network.js:557
#, javascript-format #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s desactivado" msgstr "%s desactivado"
#: js/ui/status/network.js:598 #: js/ui/status/network.js:597
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "Conectar a Internet" msgstr "Conectar a Internet"
#: js/ui/status/network.js:787 #: js/ui/status/network.js:786
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "El modo avión está activado" msgstr "El modo avión está activado"
#: js/ui/status/network.js:788 #: js/ui/status/network.js:787
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "La Wi-Fi se desactiva cuando se activa el modo avión." msgstr "La Wi-Fi se desactiva cuando se activa el modo avión."
#: js/ui/status/network.js:789 #: js/ui/status/network.js:788
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Apagar el modo avión" msgstr "Apagar el modo avión"
#: js/ui/status/network.js:798 #: js/ui/status/network.js:797
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "La Wi-Fi está desactivada" msgstr "La Wi-Fi está desactivada"
#: js/ui/status/network.js:799 #: js/ui/status/network.js:798
msgid "Wi-Fi needs to be turned on in order to connect to a network." 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." msgstr "Se debe activar la Wi-Fi para poder conectarse a la red."
#: js/ui/status/network.js:800 #: js/ui/status/network.js:799
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Activar la Wi-Fi" msgstr "Activar la Wi-Fi"
#: js/ui/status/network.js:825 #: js/ui/status/network.js:824
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Redes Wi-Fi" msgstr "Redes Wi-Fi"
#: js/ui/status/network.js:827 #: js/ui/status/network.js:826
msgid "Select a network" msgid "Select a network"
msgstr "Seleccionar una red" msgstr "Seleccionar una red"
#: js/ui/status/network.js:856 #: js/ui/status/network.js:855
msgid "No Networks" msgid "No Networks"
msgstr "No hay redes" msgstr "No hay redes"
#: js/ui/status/network.js:877 js/ui/status/rfkill.js:104 #: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Usar el interruptor hardware para apagar" msgstr "Usar el interruptor hardware para apagar"
#: js/ui/status/network.js:1153 #: js/ui/status/network.js:1152
msgid "Select Network" msgid "Select Network"
msgstr "Seleccionar red" msgstr "Seleccionar red"
#: js/ui/status/network.js:1159 #: js/ui/status/network.js:1158
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Configuración de Wi-Fi" msgstr "Configuración de Wi-Fi"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1281 #: js/ui/status/network.js:1280
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "Punto de acceso %s activo" msgstr "Punto de acceso %s activo"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1296 #: js/ui/status/network.js:1295
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s no conectado" msgstr "%s no conectado"
#: js/ui/status/network.js:1393 #: js/ui/status/network.js:1392
msgid "connecting…" msgid "connecting…"
msgstr "conectando…" msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password #. 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" msgid "authentication required"
msgstr "se necesita autenticación" msgstr "se necesita autenticación"
#: js/ui/status/network.js:1398 #: js/ui/status/network.js:1397
msgid "connection failed" msgid "connection failed"
msgstr "falló la conexión" msgstr "falló la conexión"
#: js/ui/status/network.js:1448 #: js/ui/status/network.js:1447
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Configuración de VPN" msgstr "Configuración de VPN"
#: js/ui/status/network.js:1465 #: js/ui/status/network.js:1464
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1475 #: js/ui/status/network.js:1474
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN apagada" msgstr "VPN apagada"
#: 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" msgid "Network Settings"
msgstr "Configuración de la red" msgstr "Configuración de la red"
#: js/ui/status/network.js:1565 #: js/ui/status/network.js:1564
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s conexión cableada" msgstr[0] "%s conexión cableada"
msgstr[1] "%s conexiones cableadas" msgstr[1] "%s conexiones cableadas"
#: js/ui/status/network.js:1569 #: js/ui/status/network.js:1568
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s conexión inalámbrica" msgstr[0] "%s conexión inalámbrica"
msgstr[1] "%s conexiones inalámbricas" msgstr[1] "%s conexiones inalámbricas"
#: js/ui/status/network.js:1573 #: js/ui/status/network.js:1572
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s conexión por módem" msgstr[0] "%s conexión por módem"
msgstr[1] "%s conexiones por módem" msgstr[1] "%s conexiones por módem"
#: js/ui/status/network.js:1706 #: js/ui/status/network.js:1701
msgid "Connection failed" msgid "Connection failed"
msgstr "Falló la conexión" msgstr "Falló la conexión"
#: js/ui/status/network.js:1707 #: js/ui/status/network.js:1702
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red" msgstr "Falló la activación de la conexión de red"
@@ -2151,7 +2154,7 @@ msgstr[1] "La configuración se revertirá en %d segundos"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:677 #: js/ui/windowManager.js:662
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"
@@ -2286,9 +2289,6 @@ msgstr[1] "%u entradas"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sonidos del sistema" msgstr "Sonidos del sistema"
#~ msgid "toggle-switch-us"
#~ msgstr "toggle-switch-intl"
#~ msgid "network-workgroup" #~ msgid "network-workgroup"
#~ msgstr "network-workgroup" #~ msgstr "network-workgroup"

783
po/fur.po

File diff suppressed because it is too large Load Diff

178
po/id.po
View File

@@ -4,13 +4,12 @@
# Andika Triwidada <andika@gmail.com>, 2010-2014, 2017. # Andika Triwidada <andika@gmail.com>, 2010-2014, 2017.
# Dirgita <dirgitadevina@yahoo.co.id>, 2011, 2012, 2014. # Dirgita <dirgitadevina@yahoo.co.id>, 2011, 2012, 2014.
# Wibiharto <wibinem@yahoo.com>, 2011. # Wibiharto <wibinem@yahoo.com>, 2011.
# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2017, 2018, 2019.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-04-17 19:29+0000\n" "POT-Creation-Date: 2019-02-21 18:43+0000\n"
"PO-Revision-Date: 2019-04-25 14:54+0700\n" "PO-Revision-Date: 2019-02-14 22:18+0700\n"
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n" "Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n" "Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n" "Language: id\n"
@@ -377,6 +376,11 @@ msgstr ""
msgid "Network Login" msgid "Network Login"
msgstr "Log Masuk Jaringan" 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 #: js/extensionPrefs/main.js:116
msgid "Somethings gone wrong" msgid "Somethings gone wrong"
msgstr "Ada yang tidak beres" msgstr "Ada yang tidak beres"
@@ -457,7 +461,7 @@ msgstr "Tak masuk daftar?"
#. Translators: this message is shown below the username entry field #. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm #. to clue the user in on how to login to the local network realm
#: js/gdm/loginDialog.js:884 #: js/gdm/loginDialog.js:880
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(cth., pengguna dari %s)" msgstr "(cth., pengguna dari %s)"
@@ -465,12 +469,12 @@ msgstr "(cth., pengguna dari %s)"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243 #: js/gdm/loginDialog.js:885 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281 #: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: " msgid "Username: "
msgstr "Nama pengguna: " msgstr "Nama pengguna: "
#: js/gdm/loginDialog.js:1227 #: js/gdm/loginDialog.js:1223
msgid "Login Window" msgid "Login Window"
msgstr "Jendela Log Masuk" msgstr "Jendela Log Masuk"
@@ -724,37 +728,32 @@ msgstr "Sering"
msgid "All" msgid "All"
msgstr "Semua" msgstr "Semua"
#. Translators: This is the heading of a list of open windows #: js/ui/appDisplay.js:1737 js/ui/panel.js:83
#: 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" msgid "New Window"
msgstr "Jendela Baru" msgstr "Jendela Baru"
#: js/ui/appDisplay.js:1746 #: js/ui/appDisplay.js:1751
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi" msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi"
#: js/ui/appDisplay.js:1773 js/ui/dash.js:239 #: js/ui/appDisplay.js:1778 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Hapus dari Favorit" msgstr "Hapus dari Favorit"
#: js/ui/appDisplay.js:1779 #: js/ui/appDisplay.js:1784
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Tambah ke Favorit" msgstr "Tambah ke Favorit"
#: js/ui/appDisplay.js:1789 js/ui/panel.js:97 #: js/ui/appDisplay.js:1794 js/ui/panel.js:94
msgid "Show Details" msgid "Show Details"
msgstr "Tampilkan Rincian" msgstr "Tampilkan Rincian"
#: js/ui/appFavorites.js:149 #: js/ui/appFavorites.js:141
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s telah ditambahkan ke favorit Anda." msgstr "%s telah ditambahkan ke favorit Anda."
#: js/ui/appFavorites.js:183 #: js/ui/appFavorites.js:175
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s telah dihapus dari favorit Anda." msgstr "%s telah dihapus dari favorit Anda."
@@ -1040,7 +1039,7 @@ msgstr "Sandi jaringan data seluler"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Perlu suatu sandi untuk menyambung ke \"%s\"." msgstr "Perlu suatu sandi untuk menyambung ke \"%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" msgid "Network Manager"
msgstr "Manajer Jaringan" msgstr "Manajer Jaringan"
@@ -1110,23 +1109,23 @@ msgstr "Tambah jam dunia…"
msgid "World Clocks" msgid "World Clocks"
msgstr "Jam Dunia" msgstr "Jam Dunia"
#: js/ui/dateMenu.js:228 #: js/ui/dateMenu.js:222
msgid "Weather" msgid "Weather"
msgstr "Cuaca" msgstr "Cuaca"
#: js/ui/dateMenu.js:311 #: js/ui/dateMenu.js:305
msgid "Select a location…" msgid "Select a location…"
msgstr "Pilih lokasi…" msgstr "Pilih lokasi…"
#: js/ui/dateMenu.js:319 #: js/ui/dateMenu.js:313
msgid "Loading…" msgid "Loading…"
msgstr "Memuat…" msgstr "Memuat…"
#: js/ui/dateMenu.js:329 #: js/ui/dateMenu.js:323
msgid "Go online for weather information" msgid "Go online for weather information"
msgstr "Pergi daring untuk informasi cuaca" msgstr "Pergi daring untuk informasi cuaca"
#: js/ui/dateMenu.js:331 #: js/ui/dateMenu.js:325
msgid "Weather information is currently unavailable" msgid "Weather information is currently unavailable"
msgstr "Informasi cuaca saat ini tidak tersedia" msgstr "Informasi cuaca saat ini tidak tersedia"
@@ -1289,26 +1288,26 @@ msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?" msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
#. Translators: %s is an application name like "Settings" #. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:78 #: js/ui/inhibitShortcutsDialog.js:50
#, javascript-format #, javascript-format
msgid "%s wants to inhibit shortcuts" msgid "%s wants to inhibit shortcuts"
msgstr "%s ingin mencegah pintasan" msgstr "%s ingin mencegah pintasan"
#: js/ui/inhibitShortcutsDialog.js:79 #: js/ui/inhibitShortcutsDialog.js:51
msgid "Application wants to inhibit shortcuts" msgid "Application wants to inhibit shortcuts"
msgstr "Aplikasi ingin mencegah pintasan" msgstr "Aplikasi ingin mencegah pintasan"
#. Translators: %s is a keyboard shortcut like "Super+x" #. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:88 #: js/ui/inhibitShortcutsDialog.js:60
#, javascript-format #, javascript-format
msgid "You can restore shortcuts by pressing %s." msgid "You can restore shortcuts by pressing %s."
msgstr "Anda dapat memulihkan pintasan dengan menekan %s." msgstr "Anda dapat memulihkan pintasan dengan menekan %s."
#: js/ui/inhibitShortcutsDialog.js:93 #: js/ui/inhibitShortcutsDialog.js:65
msgid "Deny" msgid "Deny"
msgstr "Tolak" msgstr "Tolak"
#: js/ui/inhibitShortcutsDialog.js:100 #: js/ui/inhibitShortcutsDialog.js:71
msgid "Allow" msgid "Allow"
msgstr "Izinkan" msgstr "Izinkan"
@@ -1359,13 +1358,13 @@ msgid "Leave On"
msgstr "Biarkan Menyala" msgstr "Biarkan Menyala"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 #: 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" msgid "Turn On"
msgstr "Nyalakan" msgstr "Nyalakan"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 #: 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:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375 #: 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/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106 #: js/ui/status/rfkill.js:106
msgid "Turn Off" msgid "Turn Off"
@@ -1375,59 +1374,59 @@ msgstr "Matikan"
msgid "Leave Off" msgid "Leave Off"
msgstr "Biarkan Mati" msgstr "Biarkan Mati"
#: js/ui/keyboard.js:200 #: js/ui/keyboard.js:203
msgid "Region & Language Settings" msgid "Region & Language Settings"
msgstr "Pengaturan Wilayah & Bahasa" msgstr "Pengaturan Wilayah & Bahasa"
#: js/ui/lookingGlass.js:615 #: js/ui/lookingGlass.js:614
msgid "No extensions installed" msgid "No extensions installed"
msgstr "Tak ada ekstensi terpasang" msgstr "Tak ada ekstensi terpasang"
#. Translators: argument is an extension UUID. #. Translators: argument is an extension UUID.
#: js/ui/lookingGlass.js:669 #: js/ui/lookingGlass.js:668
#, javascript-format #, javascript-format
msgid "%s has not emitted any errors." msgid "%s has not emitted any errors."
msgstr "%s tidak menampilkan galat apa pun." msgstr "%s tidak menampilkan galat apa pun."
#: js/ui/lookingGlass.js:675 #: js/ui/lookingGlass.js:674
msgid "Hide Errors" msgid "Hide Errors"
msgstr "Sembunyikan Galat" msgstr "Sembunyikan Galat"
#: js/ui/lookingGlass.js:679 js/ui/lookingGlass.js:739 #: js/ui/lookingGlass.js:678 js/ui/lookingGlass.js:738
msgid "Show Errors" msgid "Show Errors"
msgstr "Tampilkan Galat" msgstr "Tampilkan Galat"
#: js/ui/lookingGlass.js:688 #: js/ui/lookingGlass.js:687
msgid "Enabled" msgid "Enabled"
msgstr "Diaktifkan" msgstr "Diaktifkan"
#. translators: #. translators:
#. * The device has been disabled #. * The device has been disabled
#: js/ui/lookingGlass.js:691 subprojects/gvc/gvc-mixer-control.c:1864 #: js/ui/lookingGlass.js:690 subprojects/gvc/gvc-mixer-control.c:1866
msgid "Disabled" msgid "Disabled"
msgstr "Dinonaktifkan" msgstr "Dinonaktifkan"
#: js/ui/lookingGlass.js:693 #: js/ui/lookingGlass.js:692
msgid "Error" msgid "Error"
msgstr "Galat" msgstr "Galat"
#: js/ui/lookingGlass.js:695 #: js/ui/lookingGlass.js:694
msgid "Out of date" msgid "Out of date"
msgstr "Kadaluarsa" msgstr "Kadaluarsa"
#: js/ui/lookingGlass.js:697 #: js/ui/lookingGlass.js:696
msgid "Downloading" msgid "Downloading"
msgstr "Mengunduh" msgstr "Mengunduh"
#: js/ui/lookingGlass.js:721 #: js/ui/lookingGlass.js:720
msgid "View Source" msgid "View Source"
msgstr "Tilik Sumber" msgstr "Tilik Sumber"
#: js/ui/lookingGlass.js:730 #: js/ui/lookingGlass.js:729
msgid "Web Page" msgid "Web Page"
msgstr "Halaman Web" msgstr "Halaman Web"
#: js/ui/messageTray.js:1480 #: js/ui/messageTray.js:1474
msgid "System Information" msgid "System Information"
msgstr "Informasi Sistem" msgstr "Informasi Sistem"
@@ -1505,25 +1504,35 @@ msgstr "Tekan Esc untuk keluar"
msgid "Press any key to exit" msgid "Press any key to exit"
msgstr "Tekan tombol apa saja untuk keluar" msgstr "Tekan tombol apa saja untuk keluar"
#: js/ui/panel.js:113 #: js/ui/panel.js:108
msgid "Quit" msgid "Quit"
msgstr "Keluar" msgstr "Keluar"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: js/ui/panel.js:468 #: js/ui/panel.js:466
msgid "Activities" msgid "Activities"
msgstr "Aktivitas" msgstr "Aktivitas"
#: js/ui/panel.js:743 #: js/ui/panel.js:741
msgctxt "System menu in the top bar" msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistem" msgstr "Sistem"
#: js/ui/panel.js:864 #: js/ui/panel.js:861
msgid "Top Bar" msgid "Top Bar"
msgstr "Bar Atas" 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 #: js/ui/runDialog.js:64
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Ketikkan Perintah" msgstr "Ketikkan Perintah"
@@ -1560,7 +1569,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d pemberitahuan baru" msgstr[0] "%d pemberitahuan baru"
msgstr[1] "%d pemberitahuan baru" msgstr[1] "%d pemberitahuan baru"
#: js/ui/screenShield.js:449 js/ui/status/system.js:271 #: js/ui/screenShield.js:449 js/ui/status/system.js:270
msgid "Lock" msgid "Lock"
msgstr "Kunci" msgstr "Kunci"
@@ -1575,11 +1584,11 @@ msgstr "GNOME perlu mengunci layar"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1299 #: js/ui/screenShield.js:834 js/ui/screenShield.js:1307
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Tak bisa mengunci" msgstr "Tak bisa mengunci"
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300 #: js/ui/screenShield.js:835 js/ui/screenShield.js:1308
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Kunci diblokir oleh suatu aplikasi" msgstr "Kunci diblokir oleh suatu aplikasi"
@@ -1741,7 +1750,7 @@ msgid "<unknown>"
msgstr "<tak dikenal>" msgstr "<tak dikenal>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:416 js/ui/status/network.js:1292 #: js/ui/status/network.js:416 js/ui/status/network.js:1293
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s Mati" msgstr "%s Mati"
@@ -1767,7 +1776,7 @@ msgid "%s Disconnecting"
msgstr "%s Memutus" msgstr "%s Memutus"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:434 js/ui/status/network.js:1284 #: js/ui/status/network.js:434 js/ui/status/network.js:1285
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "%s Menyambung" msgstr "%s Menyambung"
@@ -1807,7 +1816,7 @@ msgid "Mobile Broadband Settings"
msgstr "Pengaturan Data Seluler" msgstr "Pengaturan Data Seluler"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:553 js/ui/status/network.js:1289 #: js/ui/status/network.js:553 js/ui/status/network.js:1290
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "%s Perangkat Keras Dinonaktifkan" msgstr "%s Perangkat Keras Dinonaktifkan"
@@ -1872,72 +1881,72 @@ msgid "Wi-Fi Settings"
msgstr "Pengaturan Wi-Fi" msgstr "Pengaturan Wi-Fi"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1280 #: js/ui/status/network.js:1281
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "%s Hotspot Aktif" msgstr "%s Hotspot Aktif"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1295 #: js/ui/status/network.js:1296
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s Tak Tersambung" msgstr "%s Tak Tersambung"
#: js/ui/status/network.js:1392 #: js/ui/status/network.js:1393
msgid "connecting…" msgid "connecting…"
msgstr "menyambung…" msgstr "menyambung…"
#. Translators: this is for network connections that require some kind of key or password #. 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" msgid "authentication required"
msgstr "diperlukan otentikasi" msgstr "diperlukan otentikasi"
#: js/ui/status/network.js:1397 #: js/ui/status/network.js:1398
msgid "connection failed" msgid "connection failed"
msgstr "koneksi gagal" msgstr "koneksi gagal"
#: js/ui/status/network.js:1447 #: js/ui/status/network.js:1448
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Pengaturan VPN" msgstr "Pengaturan VPN"
#: js/ui/status/network.js:1464 #: js/ui/status/network.js:1465
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1474 #: js/ui/status/network.js:1475
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN Mati" msgstr "VPN Mati"
#: 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" msgid "Network Settings"
msgstr "Pengaturan Jaringan" msgstr "Pengaturan Jaringan"
#: js/ui/status/network.js:1564 #: js/ui/status/network.js:1565
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s Koneksi Kabel" msgstr[0] "%s Koneksi Kabel"
msgstr[1] "%s Koneksi Kabel" msgstr[1] "%s Koneksi Kabel"
#: js/ui/status/network.js:1568 #: js/ui/status/network.js:1569
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s Koneksi Wi-Fi" msgstr[0] "%s Koneksi Wi-Fi"
msgstr[1] "%s Koneksi Wi-Fi" msgstr[1] "%s Koneksi Wi-Fi"
#: js/ui/status/network.js:1572 #: js/ui/status/network.js:1573
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s Koneksi Modem" msgstr[0] "%s Koneksi Modem"
msgstr[1] "%s Koneksi Modem" msgstr[1] "%s Koneksi Modem"
#: js/ui/status/network.js:1705 #: js/ui/status/network.js:1702
msgid "Connection failed" msgid "Connection failed"
msgstr "Koneksi gagal" msgstr "Koneksi gagal"
#: js/ui/status/network.js:1706 #: js/ui/status/network.js:1703
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivasi koneksi jaringan gagal" msgstr "Aktivasi koneksi jaringan gagal"
@@ -2019,15 +2028,15 @@ msgstr "Keluar"
msgid "Account Settings" msgid "Account Settings"
msgstr "Pengaturan Akun" msgstr "Pengaturan Akun"
#: js/ui/status/system.js:256 #: js/ui/status/system.js:255
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Kunci Orientasi" msgstr "Kunci Orientasi"
#: js/ui/status/system.js:282 #: js/ui/status/system.js:281
msgid "Suspend" msgid "Suspend"
msgstr "Suspensi" msgstr "Suspensi"
#: js/ui/status/system.js:292 #: js/ui/status/system.js:291
msgid "Power Off" msgid "Power Off"
msgstr "Matikan" msgstr "Matikan"
@@ -2143,7 +2152,7 @@ msgstr[1] "Perubahan tatanan akan dikembalikan dalam %d detik"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:677 #: js/ui/windowManager.js:662
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"
@@ -2216,6 +2225,11 @@ msgstr "Pindahkan ke Monitor Kanan"
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Evolution Kalender" 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 #: src/main.c:408
msgid "Print version" msgid "Print version"
msgstr "Versi Cetak" msgstr "Versi Cetak"
@@ -2232,12 +2246,12 @@ msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
msgid "List possible modes" msgid "List possible modes"
msgstr "Menampilkan mode yang mungkin" msgstr "Menampilkan mode yang mungkin"
#: src/shell-app.c:264 #: src/shell-app.c:260
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Tak dikenal" msgstr "Tak dikenal"
#: src/shell-app.c:515 #: src/shell-app.c:511
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Gagal meluncurkan \"%s\"" msgstr "Gagal meluncurkan \"%s\""
@@ -2256,7 +2270,7 @@ msgstr "Dialog autentikasi ditolak oleh pengguna"
#. translators: #. translators:
#. * The number of sound outputs on a particular device #. * The number of sound outputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1871 #: subprojects/gvc/gvc-mixer-control.c:1873
#, c-format #, c-format
msgid "%u Output" msgid "%u Output"
msgid_plural "%u Outputs" msgid_plural "%u Outputs"
@@ -2265,27 +2279,17 @@ msgstr[1] "%u Keluaran"
#. translators: #. translators:
#. * The number of sound inputs on a particular device #. * The number of sound inputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1881 #: subprojects/gvc/gvc-mixer-control.c:1883
#, c-format #, c-format
msgid "%u Input" msgid "%u Input"
msgid_plural "%u Inputs" msgid_plural "%u Inputs"
msgstr[0] "%u Masukan" msgstr[0] "%u Masukan"
msgstr[1] "%u Masukan" msgstr[1] "%u Masukan"
#: subprojects/gvc/gvc-mixer-control.c:2736 #: subprojects/gvc/gvc-mixer-control.c:2738
msgid "System Sounds" msgid "System Sounds"
msgstr "Suara Sistem" 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:" #~ msgid "There was an error loading the preferences dialog for %s:"
#~ msgstr "Ada galat saat memuat dialog preferensi bagi %s:" #~ msgstr "Ada galat saat memuat dialog preferensi bagi %s:"

File diff suppressed because it is too large Load Diff

View File

@@ -295,13 +295,13 @@ create_client_for_source (ESource *source,
CalendarSourceData *source_data) CalendarSourceData *source_data)
{ {
ClientData *data; ClientData *data;
EClient *client; ECalClient *client;
GError *error = NULL; GError *error = NULL;
client = g_hash_table_lookup (source_data->clients, source); client = g_hash_table_lookup (source_data->clients, source);
g_return_if_fail (client == NULL); g_return_if_fail (client == NULL);
client = e_cal_client_connect_sync (source, source_type, -1, NULL, &error); client = e_cal_client_new (source, source_type, &error);
if (!client) if (!client)
{ {
g_warning ("Could not load source '%s': %s", g_warning ("Could not load source '%s': %s",
@@ -312,7 +312,7 @@ create_client_for_source (ESource *source,
} }
data = g_slice_new0 (ClientData); data = g_slice_new0 (ClientData);
data->client = E_CAL_CLIENT (client); /* takes ownership */ data->client = client; /* takes ownership */
data->backend_died_id = g_signal_connect (client, data->backend_died_id = g_signal_connect (client,
"backend-died", "backend-died",
G_CALLBACK (backend_died_cb), G_CALLBACK (backend_died_cb),

View File

@@ -102,120 +102,97 @@ typedef struct
} CollectAppointmentsData; } CollectAppointmentsData;
static time_t static time_t
get_time_from_property (ICalComponent *icomp, get_time_from_property (icalcomponent *ical,
ICalPropertyKind prop_kind, icalproperty_kind prop_kind,
ICalTime * (* get_prop_func) (ICalProperty *prop), struct icaltimetype (* get_prop_func) (const icalproperty *prop),
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
ICalProperty *prop; icalproperty *prop;
ICalTime *itt; struct icaltimetype ical_time;
ICalParameter *param; icalparameter *param;
ICalTimezone *timezone = NULL; icaltimezone *timezone = NULL;
time_t retval;
prop = i_cal_component_get_first_property (icomp, prop_kind); prop = icalcomponent_get_first_property (ical, prop_kind);
if (!prop) if (!prop)
return 0; return 0;
itt = get_prop_func (prop); ical_time = get_prop_func (prop);
param = i_cal_property_get_first_parameter (prop, I_CAL_TZID_PARAMETER); param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
if (param) if (param)
timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param)); timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param));
else if (i_cal_time_is_utc (itt)) else if (icaltime_is_utc (ical_time))
timezone = i_cal_timezone_get_utc_timezone (); timezone = icaltimezone_get_utc_timezone ();
else else
timezone = default_zone; timezone = default_zone;
retval = i_cal_time_as_timet_with_zone (itt, timezone); return icaltime_as_timet_with_zone (ical_time, timezone);
g_clear_object (&param);
g_clear_object (&prop);
g_clear_object (&itt);
return retval;
} }
static char * static char *
get_ical_uid (ICalComponent *icomp) get_ical_uid (icalcomponent *ical)
{ {
return g_strdup (i_cal_component_get_uid (icomp)); return g_strdup (icalcomponent_get_uid (ical));
} }
static char * static char *
get_ical_summary (ICalComponent *icomp) get_ical_summary (icalcomponent *ical)
{ {
ICalProperty *prop; icalproperty *prop;
char *retval;
prop = i_cal_component_get_first_property (icomp, I_CAL_SUMMARY_PROPERTY); prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY);
if (!prop) if (!prop)
return NULL; return NULL;
retval = g_strdup (i_cal_property_get_summary (prop)); return g_strdup (icalproperty_get_summary (prop));
g_object_unref (prop);
return retval;
} }
static char * static char *
get_ical_description (ICalComponent *icomp) get_ical_description (icalcomponent *ical)
{ {
ICalProperty *prop; icalproperty *prop;
char *retval;
prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY); prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY);
if (!prop) if (!prop)
return NULL; return NULL;
retval = g_strdup (i_cal_property_get_description (prop)); return g_strdup (icalproperty_get_description (prop));
g_object_unref (prop);
return retval;
} }
static inline time_t static inline time_t
get_ical_start_time (ICalComponent *icomp, get_ical_start_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_DTSTART_PROPERTY, ICAL_DTSTART_PROPERTY,
i_cal_property_get_dtstart, icalproperty_get_dtstart,
default_zone); default_zone);
} }
static inline time_t static inline time_t
get_ical_end_time (ICalComponent *icomp, get_ical_end_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_DTEND_PROPERTY, ICAL_DTEND_PROPERTY,
i_cal_property_get_dtend, icalproperty_get_dtend,
default_zone); default_zone);
} }
static gboolean static gboolean
get_ical_is_all_day (ICalComponent *icomp, get_ical_is_all_day (icalcomponent *ical,
time_t start_time, time_t start_time,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
ICalProperty *prop; icalproperty *prop;
ICalDuration *duration;
ICalTime *dtstart;
struct tm *start_tm; struct tm *start_tm;
time_t end_time; time_t end_time;
gboolean retval; struct icaldurationtype duration;
struct icaltimetype start_icaltime;
dtstart = i_cal_component_get_dtstart (icomp); start_icaltime = icalcomponent_get_dtstart (ical);
if (dtstart && i_cal_time_is_date (dtstart)) if (start_icaltime.is_date)
{
g_clear_object (&dtstart);
return TRUE; return TRUE;
}
g_clear_object (&dtstart);
start_tm = gmtime (&start_time); start_tm = gmtime (&start_time);
if (start_tm->tm_sec != 0 || if (start_tm->tm_sec != 0 ||
@@ -223,40 +200,35 @@ get_ical_is_all_day (ICalComponent *icomp,
start_tm->tm_hour != 0) start_tm->tm_hour != 0)
return FALSE; return FALSE;
if ((end_time = get_ical_end_time (icomp, default_zone))) if ((end_time = get_ical_end_time (ical, default_zone)))
return (end_time - start_time) % 86400 == 0; return (end_time - start_time) % 86400 == 0;
prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY); prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY);
if (!prop) if (!prop)
return FALSE; return FALSE;
duration = i_cal_property_get_duration (prop); duration = icalproperty_get_duration (prop);
retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0; return icaldurationtype_as_int (duration) % 86400 == 0;
g_clear_object (&duration);
g_clear_object (&prop);
return retval;
} }
static inline time_t static inline time_t
get_ical_due_time (ICalComponent *icomp, get_ical_due_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_DUE_PROPERTY, ICAL_DUE_PROPERTY,
i_cal_property_get_due, icalproperty_get_due,
default_zone); default_zone);
} }
static inline time_t static inline time_t
get_ical_completed_time (ICalComponent *icomp, get_ical_completed_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_COMPLETED_PROPERTY, ICAL_COMPLETED_PROPERTY,
i_cal_property_get_completed, icalproperty_get_completed,
default_zone); default_zone);
} }
@@ -393,69 +365,67 @@ calendar_appointment_free (CalendarAppointment *appointment)
static void static void
calendar_appointment_init (CalendarAppointment *appointment, calendar_appointment_init (CalendarAppointment *appointment,
ICalComponent *icomp, icalcomponent *ical,
ECalClient *cal) ECalClient *cal)
{ {
ICalTimezone *default_zone; icaltimezone *default_zone;
const char *source_id; const char *source_id;
source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal))); source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal)));
default_zone = e_cal_client_get_default_timezone (cal); default_zone = e_cal_client_get_default_timezone (cal);
appointment->uid = get_ical_uid (icomp); appointment->uid = get_ical_uid (ical);
appointment->source_id = g_strdup (source_id); appointment->source_id = g_strdup (source_id);
appointment->backend_name = get_source_backend_name (cal); appointment->backend_name = get_source_backend_name (cal);
appointment->summary = get_ical_summary (icomp); appointment->summary = get_ical_summary (ical);
appointment->description = get_ical_description (icomp); appointment->description = get_ical_description (ical);
appointment->color_string = get_source_color (cal); appointment->color_string = get_source_color (cal);
appointment->start_time = get_ical_start_time (icomp, default_zone); appointment->start_time = get_ical_start_time (ical, default_zone);
appointment->end_time = get_ical_end_time (icomp, default_zone); appointment->end_time = get_ical_end_time (ical, default_zone);
appointment->is_all_day = get_ical_is_all_day (icomp, appointment->is_all_day = get_ical_is_all_day (ical,
appointment->start_time, appointment->start_time,
default_zone); default_zone);
} }
static CalendarAppointment * static CalendarAppointment *
calendar_appointment_new (ICalComponent *icomp, calendar_appointment_new (icalcomponent *ical,
ECalClient *cal) ECalClient *cal)
{ {
CalendarAppointment *appointment; CalendarAppointment *appointment;
appointment = g_new0 (CalendarAppointment, 1); appointment = g_new0 (CalendarAppointment, 1);
calendar_appointment_init (appointment, icomp, cal); calendar_appointment_init (appointment, ical, cal);
return appointment; return appointment;
} }
static gboolean static gboolean
generate_instances_cb (ICalComponent *icomp, generate_instances_cb (ECalComponent *comp,
ICalTime *instance_start, time_t start,
ICalTime *instance_end, time_t end,
gpointer user_data, gpointer data)
GCancellable *cancellable,
GError **error)
{ {
ECalClient *cal = ((CollectAppointmentsData *)user_data)->client; ECalClient *cal = ((CollectAppointmentsData *)data)->client;
GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments; GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments;
CalendarAppointment *appointment; CalendarAppointment *appointment;
CalendarOccurrence *occurrence; CalendarOccurrence *occurrence;
ICalTimezone *default_zone; const char *uid;
const gchar *uid;
default_zone = e_cal_client_get_default_timezone (cal); e_cal_component_get_uid (comp, &uid);
uid = i_cal_component_get_uid (icomp);
appointment = g_hash_table_lookup (appointments, uid); appointment = g_hash_table_lookup (appointments, uid);
if (appointment == NULL) if (appointment == NULL)
{ {
appointment = calendar_appointment_new (icomp, cal); icalcomponent *ical = e_cal_component_get_icalcomponent (comp);
appointment = calendar_appointment_new (ical, cal);
g_hash_table_insert (appointments, g_strdup (uid), appointment); g_hash_table_insert (appointments, g_strdup (uid), appointment);
} }
occurrence = g_new0 (CalendarOccurrence, 1); occurrence = g_new0 (CalendarOccurrence, 1);
occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone); occurrence->start_time = start;
occurrence->end_time = i_cal_time_as_timet_with_zone (instance_end, default_zone); occurrence->end_time = end;
occurrence->rid = e_cal_util_component_get_recurid_as_string (icomp); occurrence->rid = e_cal_component_get_recurid_as_string (comp);
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence); appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
@@ -472,7 +442,7 @@ struct _App
time_t since; time_t since;
time_t until; time_t until;
ICalTimezone *zone; icaltimezone *zone;
CalendarSources *sources; CalendarSources *sources;
gulong sources_signal_id; gulong sources_signal_id;
@@ -498,9 +468,9 @@ app_update_timezone (App *app)
if (g_strcmp0 (location, app->timezone_location) != 0) if (g_strcmp0 (location, app->timezone_location) != 0)
{ {
if (location == NULL) if (location == NULL)
app->zone = i_cal_timezone_get_utc_timezone (); app->zone = icaltimezone_get_utc_timezone ();
else else
app->zone = i_cal_timezone_get_builtin_timezone (location); app->zone = icaltimezone_get_builtin_timezone (location);
g_free (app->timezone_location); g_free (app->timezone_location);
app->timezone_location = location; app->timezone_location = location;
print_debug ("Using timezone %s", app->timezone_location); print_debug ("Using timezone %s", app->timezone_location);
@@ -558,10 +528,10 @@ on_objects_added (ECalClientView *view,
for (l = objects; l != NULL; l = l->next) for (l = objects; l != NULL; l = l->next)
{ {
ICalComponent *icomp = l->data; icalcomponent *ical = l->data;
const char *uid; const char *uid;
uid = i_cal_component_get_uid (icomp); uid = icalcomponent_get_uid (ical);
if (g_hash_table_lookup (app->appointments, uid) == NULL) if (g_hash_table_lookup (app->appointments, uid) == NULL)
{ {
@@ -630,7 +600,7 @@ app_load_events (App *app)
since_iso8601 = isodate_from_time_t (app->since); since_iso8601 = isodate_from_time_t (app->since);
until_iso8601 = isodate_from_time_t (app->until); until_iso8601 = isodate_from_time_t (app->until);
tz_location = i_cal_timezone_get_location (app->zone); tz_location = icaltimezone_get_location (app->zone);
print_debug ("Loading events since %s until %s", print_debug ("Loading events since %s until %s",
since_iso8601, since_iso8601,
@@ -652,12 +622,21 @@ app_load_events (App *app)
e_cal_client_set_default_timezone (cal, app->zone); 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.client = cal;
data.appointments = app->appointments; data.appointments = app->appointments;
e_cal_client_generate_instances_sync (cal, e_cal_client_generate_instances_sync (cal,
app->since, app->since,
app->until, app->until,
NULL,
generate_instances_cb, generate_instances_cb,
&data); &data);
@@ -1099,7 +1078,7 @@ main (int argc,
/* ---------------------------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------------------------- */
static void __attribute__((format(printf, 1, 0))) static void
print_debug (const gchar *format, ...) print_debug (const gchar *format, ...)
{ {
gchar *s; gchar *s;

View File

@@ -266,7 +266,7 @@ main (int argc,
/* ---------------------------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------------------------- */
static void __attribute__((format(printf, 1, 0))) static void
print_debug (const gchar *format, ...) print_debug (const gchar *format, ...)
{ {
gchar *s; gchar *s;

View File

@@ -1069,9 +1069,9 @@ _shell_app_add_window (ShellApp *app,
app->running_state->window_sort_stale = TRUE; app->running_state->window_sort_stale = TRUE;
app->running_state->windows = g_slist_prepend (app->running_state->windows, g_object_ref (window)); app->running_state->windows = g_slist_prepend (app->running_state->windows, g_object_ref (window));
g_signal_connect_object (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app, 0); g_signal_connect (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app);
g_signal_connect_object (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app, 0); g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app);
g_signal_connect_object (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app, 0); g_signal_connect (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app);
shell_app_update_app_actions (app, window); shell_app_update_app_actions (app, window);
shell_app_ensure_busy_watch (app); shell_app_ensure_busy_watch (app);

View File

@@ -863,7 +863,6 @@ _shell_global_set_plugin (ShellGlobal *global,
} }
st_entry_set_cursor_func (entry_cursor_func, 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_signal_connect (global->stage, "notify::width",
G_CALLBACK (global_stage_notify_width), global); G_CALLBACK (global_stage_notify_width), global);

View File

@@ -149,7 +149,7 @@ shell_glsl_quad_constructed (GObject *object)
priv->pipeline = cogl_pipeline_copy (klass->base_pipeline); priv->pipeline = cogl_pipeline_copy (klass->base_pipeline);
cogl_pipeline_set_layer_null_texture (priv->pipeline, 0); cogl_pipeline_set_layer_null_texture (priv->pipeline, 0, COGL_TEXTURE_TYPE_2D);
} }
static void static void

View File

@@ -186,7 +186,9 @@ shell_invert_lightness_effect_init (ShellInvertLightnessEffect *self)
cogl_pipeline_add_layer_snippet (klass->base_pipeline, 0, snippet); cogl_pipeline_add_layer_snippet (klass->base_pipeline, 0, snippet);
cogl_object_unref (snippet); cogl_object_unref (snippet);
cogl_pipeline_set_layer_null_texture (klass->base_pipeline, 0); cogl_pipeline_set_layer_null_texture (klass->base_pipeline,
0, /* layer number */
COGL_TEXTURE_TYPE_2D);
} }
self->pipeline = cogl_pipeline_copy (klass->base_pipeline); self->pipeline = cogl_pipeline_copy (klass->base_pipeline);

View File

@@ -117,7 +117,7 @@ remove_mnemonics (const GValue *value)
label = g_value_get_string (value); label = g_value_get_string (value);
g_return_val_if_fail (label != NULL, NULL); g_return_val_if_fail (label != NULL, NULL);
/* Stripped label will have the original label length at most */ /* Stripped label will have the original label lenght at most */
stripped_label = temp = g_new (gchar, strlen(label) + 1); stripped_label = temp = g_new (gchar, strlen(label) + 1);
g_assert (stripped_label != NULL); g_assert (stripped_label != NULL);

View File

@@ -430,7 +430,7 @@ ClutterContent *
shell_util_get_content_for_window_actor (MetaWindowActor *window_actor, shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
MetaRectangle *window_rect) MetaRectangle *window_rect)
{ {
MetaShapedTexture *texture; ClutterActor *texture;
ClutterContent *content; ClutterContent *content;
cairo_surface_t *surface; cairo_surface_t *surface;
cairo_rectangle_int_t clip; cairo_rectangle_int_t clip;
@@ -453,7 +453,8 @@ shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
clip.width = ceilf (window_rect->width * resource_scale); clip.width = ceilf (window_rect->width * resource_scale);
clip.height = ceilf (window_rect->height * resource_scale); clip.height = ceilf (window_rect->height * resource_scale);
surface = meta_shaped_texture_get_image (texture, &clip); surface = meta_shaped_texture_get_image (META_SHAPED_TEXTURE (texture),
&clip);
content = clutter_canvas_new (); content = clutter_canvas_new ();
clutter_canvas_set_size (CLUTTER_CANVAS (content), clutter_canvas_set_size (CLUTTER_CANVAS (content),

View File

@@ -18,7 +18,6 @@ st_headers = [
'st-scrollable.h', 'st-scrollable.h',
'st-scroll-bar.h', 'st-scroll-bar.h',
'st-scroll-view.h', 'st-scroll-view.h',
'st-scroll-view-fade.h',
'st-settings.h', 'st-settings.h',
'st-shadow.h', 'st-shadow.h',
'st-texture-cache.h', 'st-texture-cache.h',
@@ -74,7 +73,6 @@ st_sources = [
'st-scrollable.c', 'st-scrollable.c',
'st-scroll-bar.c', 'st-scroll-bar.c',
'st-scroll-view.c', 'st-scroll-view.c',
'st-scroll-view-fade.c',
'st-settings.c', 'st-settings.c',
'st-shadow.c', 'st-shadow.c',
'st-texture-cache.c', 'st-texture-cache.c',
@@ -96,6 +94,11 @@ st_enums = gnome.mkenums_simple('st-enum-types',
st_gir_sources = st_sources + st_private_headers + st_headers + st_enums 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') data_to_c = find_program(meson.source_root() + '/src/data-to-c.pl')
custom_target('scroll-view-fade-glsl', custom_target('scroll-view-fade-glsl',
@@ -120,9 +123,9 @@ st_cflags = [
# Currently meson requires a shared library for building girs # Currently meson requires a shared library for building girs
libst = shared_library('st-1.0', libst = shared_library('st-1.0',
sources: st_gir_sources, sources: st_gir_sources + st_non_gir_sources,
c_args: st_cflags, c_args: st_cflags,
dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_dep, m_dep], dependencies: [clutter_dep, gtk_dep, croco_dep, x11_dep, m_dep],
build_rpath: mutter_typelibdir, build_rpath: mutter_typelibdir,
install_rpath: mutter_typelibdir, install_rpath: mutter_typelibdir,
install_dir: pkglibdir, install_dir: pkglibdir,
@@ -149,7 +152,7 @@ libst_gir = gnome.generate_gir(libst,
sources: st_gir_sources, sources: st_gir_sources,
nsversion: '1.0', nsversion: '1.0',
namespace: 'St', namespace: 'St',
includes: ['Clutter-' + mutter_api_version, 'Cally-' + mutter_api_version, 'Meta-' + mutter_api_version, 'Gtk-3.0'], includes: ['Clutter-' + mutter_api_version, 'Cally-' + mutter_api_version, 'Gtk-3.0'],
dependencies: [mutter_dep], dependencies: [mutter_dep],
include_directories: include_directories('..'), include_directories: include_directories('..'),
extra_args: ['-DST_COMPILATION', '--quiet'], extra_args: ['-DST_COMPILATION', '--quiet'],

View File

@@ -19,49 +19,251 @@
/** /**
* SECTION:st-clipboard * SECTION:st-clipboard
* @short_description: a simple representation of the clipboard * @short_description: a simple representation of the X clipboard
* *
* #StCliboard is a very simple object 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 * available to applications. Text is always assumed to be UTF-8 and non-text
* items are not handled. * items are not handled.
*/ */
#include "config.h"
#include "st-clipboard.h" #include "st-clipboard.h"
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <string.h>
#include <meta/display.h> struct _StClipboardPrivate
#include <meta/meta-selection-source-memory.h> {
#include <meta/meta-selection.h> Window clipboard_window;
gchar *clipboard_text;
G_DEFINE_TYPE (StClipboard, st_clipboard, G_TYPE_OBJECT) Atom *supported_targets;
gint n_targets;
};
typedef struct _TransferData TransferData; G_DEFINE_TYPE_WITH_PRIVATE (StClipboard, st_clipboard, G_TYPE_OBJECT)
struct _TransferData
typedef struct _EventFilterData EventFilterData;
struct _EventFilterData
{ {
StClipboard *clipboard; StClipboard *clipboard;
StClipboardCallbackFunc callback; StClipboardCallbackFunc callback;
gpointer user_data; gpointer user_data;
GOutputStream *stream;
}; };
const char *supported_mimetypes[] = { static Atom __atom_primary = None;
"text/plain;charset=utf-8", static Atom __atom_clip = None;
"UTF8_STRING", static Atom __utf8_string = None;
"text/plain", static Atom __atom_targets = None;
"STRING",
}; 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 *) &notify_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;
}
static MetaSelection *meta_selection = NULL;
static void static void
st_clipboard_class_init (StClipboardClass *klass) 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 static void
st_clipboard_init (StClipboard *self) 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;
} }
/** /**
@@ -85,57 +287,10 @@ st_clipboard_get_default (void)
return default_clipboard; return default_clipboard;
} }
static gboolean static Atom
convert_type (StClipboardType type, atom_for_clipboard_type (StClipboardType type)
MetaSelectionType *type_out)
{ {
if (type == ST_CLIPBOARD_TYPE_PRIMARY) return type == ST_CLIPBOARD_TYPE_CLIPBOARD ? __atom_clip : __atom_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);
} }
/** /**
@@ -155,35 +310,37 @@ st_clipboard_get_text (StClipboard *clipboard,
StClipboardCallbackFunc callback, StClipboardCallbackFunc callback,
gpointer user_data) gpointer user_data)
{ {
MetaSelectionType selection_type; EventFilterData *data;
TransferData *data; GdkDisplay *gdk_display;
const char *mimetype = NULL; Display *dpy;
g_return_if_fail (ST_IS_CLIPBOARD (clipboard)); g_return_if_fail (ST_IS_CLIPBOARD (clipboard));
g_return_if_fail (meta_selection != NULL);
g_return_if_fail (callback != NULL); g_return_if_fail (callback != NULL);
if (convert_type (type, &selection_type)) data = g_new0 (EventFilterData, 1);
mimetype = pick_mimetype (meta_selection, selection_type);
if (!mimetype)
{
callback (clipboard, NULL, user_data);
return;
}
data = g_new0 (TransferData, 1);
data->clipboard = clipboard; data->clipboard = clipboard;
data->callback = callback; data->callback = callback;
data->user_data = user_data; data->user_data = user_data;
data->stream = g_memory_output_stream_new_resizable ();
meta_selection_transfer_async (meta_selection, gdk_window_add_filter (NULL, /* all windows */
selection_type, st_clipboard_x11_event_filter,
mimetype, -1,
data->stream, NULL,
(GAsyncReadyCallback) transfer_cb,
data); 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 */
}
} }
/** /**
@@ -199,26 +356,31 @@ st_clipboard_set_text (StClipboard *clipboard,
StClipboardType type, StClipboardType type,
const gchar *text) const gchar *text)
{ {
MetaSelectionType selection_type; StClipboardPrivate *priv;
MetaSelectionSource *source; GdkDisplay *gdk_display;
GBytes *bytes; Display *dpy;
g_return_if_fail (ST_IS_CLIPBOARD (clipboard)); g_return_if_fail (ST_IS_CLIPBOARD (clipboard));
g_return_if_fail (meta_selection != NULL);
g_return_if_fail (text != NULL); g_return_if_fail (text != NULL);
if (!convert_type (type, &selection_type)) priv = clipboard->priv;
return;
bytes = g_bytes_new_take (g_strdup (text), strlen (text)); /* make a copy of the text */
source = meta_selection_source_memory_new ("text/plain;charset=utf-8", bytes); g_free (priv->clipboard_text);
g_bytes_unref (bytes); priv->clipboard_text = g_strdup (text);
meta_selection_set_owner (meta_selection, selection_type, source); /* tell X we own the clipboard selection */
} gdk_display = gdk_display_get_default ();
dpy = GDK_DISPLAY_XDISPLAY (gdk_display);
void
st_clipboard_set_selection (MetaSelection *selection) gdk_x11_display_error_trap_push (gdk_display);
{
meta_selection = selection; XSetSelectionOwner (dpy, atom_for_clipboard_type (type), priv->clipboard_window, CurrentTime);
XSync (dpy, FALSE);
if (gdk_x11_display_error_trap_pop (gdk_display))
{
/* FIXME */
}
} }

View File

@@ -25,7 +25,6 @@
#define _ST_CLIPBOARD_H #define _ST_CLIPBOARD_H
#include <glib-object.h> #include <glib-object.h>
#include <meta/meta-selection.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@@ -33,6 +32,7 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (StClipboard, st_clipboard, ST, CLIPBOARD, GObject) G_DECLARE_FINAL_TYPE (StClipboard, st_clipboard, ST, CLIPBOARD, GObject)
typedef struct _StClipboard StClipboard; typedef struct _StClipboard StClipboard;
typedef struct _StClipboardPrivate StClipboardPrivate;
/** /**
* StClipboard: * StClipboard:
@@ -44,6 +44,7 @@ struct _StClipboard
{ {
/*< private >*/ /*< private >*/
GObject parent; GObject parent;
StClipboardPrivate *priv;
}; };
typedef enum { typedef enum {
@@ -73,8 +74,6 @@ void st_clipboard_set_text (StClipboard *clipboard,
StClipboardType type, StClipboardType type,
const gchar *text); const gchar *text);
void st_clipboard_set_selection (MetaSelection *selection);
G_END_DECLS G_END_DECLS
#endif /* _ST_CLIPBOARD_H */ #endif /* _ST_CLIPBOARD_H */

View File

@@ -204,7 +204,9 @@ _st_create_texture_pipeline (CoglTexture *src_texture)
clutter_backend_get_cogl_context (clutter_get_default_backend ()); clutter_backend_get_cogl_context (clutter_get_default_backend ());
texture_pipeline_template = cogl_pipeline_new (ctx); texture_pipeline_template = cogl_pipeline_new (ctx);
cogl_pipeline_set_layer_null_texture (texture_pipeline_template, 0); cogl_pipeline_set_layer_null_texture (texture_pipeline_template,
0, /* layer */
COGL_TEXTURE_TYPE_2D);
} }
pipeline = cogl_pipeline_copy (texture_pipeline_template); pipeline = cogl_pipeline_copy (texture_pipeline_template);

View File

@@ -496,31 +496,15 @@ pixbuf_to_st_content_image (GdkPixbuf *pixbuf,
ClutterContent *image; ClutterContent *image;
g_autoptr(GError) error = NULL; g_autoptr(GError) error = NULL;
float native_width, native_height; if (width < 0)
width = ceilf (gdk_pixbuf_get_width (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 else
{
width *= paint_scale; width *= paint_scale;
if (height < 0)
height = ceilf (gdk_pixbuf_get_height (pixbuf) / resource_scale);
else
height *= paint_scale; height *= paint_scale;
}
image = st_image_content_new_with_preferred_size (width, height); image = st_image_content_new_with_preferred_size (width, height);
clutter_image_set_data (CLUTTER_IMAGE (image), clutter_image_set_data (CLUTTER_IMAGE (image),

View File

@@ -107,8 +107,6 @@ struct _StThemeNode {
int box_shadow_min_width; int box_shadow_min_width;
int box_shadow_min_height; int box_shadow_min_height;
guint stylesheets_changed_id;
CoglPipeline *border_slices_texture; CoglPipeline *border_slices_texture;
CoglPipeline *border_slices_pipeline; CoglPipeline *border_slices_pipeline;
CoglPipeline *background_texture; CoglPipeline *background_texture;

View File

@@ -111,11 +111,9 @@ st_theme_node_dispose (GObject *gobject)
node->icon_colors = NULL; node->icon_colors = NULL;
} }
if (node->theme && node->stylesheets_changed_id) if (node->theme)
{ g_signal_handlers_disconnect_by_func (node->theme,
g_signal_handler_disconnect (node->theme, node->stylesheets_changed_id); on_custom_stylesheets_changed, node);
node->stylesheets_changed_id = 0;
}
st_theme_node_paint_state_free (&node->cached_state); st_theme_node_paint_state_free (&node->cached_state);
@@ -232,7 +230,6 @@ st_theme_node_new (StThemeContext *context,
if (theme != NULL) if (theme != NULL)
{ {
node->theme = g_object_ref (theme); node->theme = g_object_ref (theme);
node->stylesheets_changed_id =
g_signal_connect (node->theme, "custom-stylesheets-changed", g_signal_connect (node->theme, "custom-stylesheets-changed",
G_CALLBACK (on_custom_stylesheets_changed), node); G_CALLBACK (on_custom_stylesheets_changed), node);
} }
@@ -1139,14 +1136,10 @@ get_length_from_term_int (StThemeNode *node,
{ {
double value; double value;
GetFromTermResult result; GetFromTermResult result;
int scale_factor;
result = get_length_from_term (node, term, use_parent_font, &value); result = get_length_from_term (node, term, use_parent_font, &value);
if (result == VALUE_FOUND) 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; return result;
} }

View File

@@ -65,8 +65,6 @@ struct _StWidgetPrivate
StThemeNodeTransition *transition_animation; StThemeNodeTransition *transition_animation;
guint is_style_dirty : 1; guint is_style_dirty : 1;
guint first_child_dirty : 1;
guint last_child_dirty : 1;
guint draw_bg_color : 1; guint draw_bg_color : 1;
guint draw_border_internal : 1; guint draw_border_internal : 1;
guint track_hover : 1; guint track_hover : 1;
@@ -74,7 +72,6 @@ struct _StWidgetPrivate
guint can_focus : 1; guint can_focus : 1;
gulong texture_file_changed_id; gulong texture_file_changed_id;
guint update_child_styles_id;
AtkObject *accessible; AtkObject *accessible;
AtkRole accessible_role; AtkRole accessible_role;
@@ -326,8 +323,6 @@ st_widget_dispose (GObject *gobject)
g_clear_object (&priv->last_visible_child); g_clear_object (&priv->last_visible_child);
G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject); G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject);
g_clear_handle_id (&priv->update_child_styles_id, g_source_remove);
} }
static void static void
@@ -1613,85 +1608,47 @@ find_nearest_visible_forward (ClutterActor *actor)
return next; 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 static void
st_widget_visible_notify (StWidget *widget, st_widget_visible_notify (StWidget *widget,
GParamSpec *pspec, GParamSpec *pspec,
gpointer data) gpointer data)
{ {
StWidgetPrivate *parent_priv;
ClutterActor *actor = CLUTTER_ACTOR (widget); ClutterActor *actor = CLUTTER_ACTOR (widget);
ClutterActor *parent = clutter_actor_get_parent (actor); ClutterActor *parent = clutter_actor_get_parent (actor);
if (parent == NULL || !ST_IS_WIDGET (parent)) if (parent == NULL || !ST_IS_WIDGET (parent))
return; return;
parent_priv = st_widget_get_instance_private (ST_WIDGET (parent));
if (clutter_actor_is_visible (actor)) if (clutter_actor_is_visible (actor))
{ {
ClutterActor *before, *after; ClutterActor *before, *after;
before = clutter_actor_get_previous_sibling (actor); before = clutter_actor_get_previous_sibling (actor);
if (find_nearest_visible_backwards (before) == NULL) if (find_nearest_visible_backwards (before) == NULL)
parent_priv->first_child_dirty = TRUE; st_widget_set_first_visible_child (ST_WIDGET (parent), actor);
after = clutter_actor_get_next_sibling (actor); after = clutter_actor_get_next_sibling (actor);
if (find_nearest_visible_forward (after) == NULL) if (find_nearest_visible_forward (after) == NULL)
parent_priv->last_child_dirty = TRUE; st_widget_set_last_visible_child (ST_WIDGET (parent), actor);
} }
else else
{ {
if (st_widget_has_style_pseudo_class (widget, "first-child")) if (st_widget_has_style_pseudo_class (widget, "first-child"))
parent_priv->first_child_dirty = TRUE; {
ClutterActor *new_first;
if (st_widget_has_style_pseudo_class (widget, "last-child")) new_first = find_nearest_visible_forward (CLUTTER_ACTOR (widget));
parent_priv->last_child_dirty = TRUE; st_widget_set_first_visible_child (ST_WIDGET (parent), new_first);
} }
if (parent_priv->first_child_dirty || parent_priv->last_child_dirty) if (st_widget_has_style_pseudo_class (widget, "last-child"))
st_widget_queue_child_styles_update (ST_WIDGET (parent)); {
ClutterActor *new_last;
new_last = find_nearest_visible_backwards (CLUTTER_ACTOR (widget));
st_widget_set_last_visible_child (ST_WIDGET (parent), new_last);
}
}
} }
static void static void
@@ -1699,10 +1656,10 @@ st_widget_first_child_notify (StWidget *widget,
GParamSpec *pspec, GParamSpec *pspec,
gpointer data) gpointer data)
{ {
StWidgetPrivate *priv = st_widget_get_instance_private (widget); ClutterActor *first_child;
priv->first_child_dirty = TRUE; first_child = clutter_actor_get_first_child (CLUTTER_ACTOR (widget));
st_widget_queue_child_styles_update (widget); st_widget_set_first_visible_child (widget, find_nearest_visible_forward (first_child));
} }
static void static void
@@ -1710,10 +1667,10 @@ st_widget_last_child_notify (StWidget *widget,
GParamSpec *pspec, GParamSpec *pspec,
gpointer data) gpointer data)
{ {
StWidgetPrivate *priv = st_widget_get_instance_private (widget); ClutterActor *last_child;
priv->last_child_dirty = TRUE; last_child = clutter_actor_get_last_child (CLUTTER_ACTOR (widget));
st_widget_queue_child_styles_update (widget); st_widget_set_last_visible_child (widget, find_nearest_visible_backwards (last_child));
} }
static void static void
@@ -1761,7 +1718,7 @@ st_widget_recompute_style (StWidget *widget,
StThemeNode *new_theme_node = st_widget_get_theme_node (widget); StThemeNode *new_theme_node = st_widget_get_theme_node (widget);
int transition_duration; int transition_duration;
StSettings *settings; StSettings *settings;
gboolean paint_equal, geometry_equal = FALSE; gboolean paint_equal;
gboolean animations_enabled; gboolean animations_enabled;
if (new_theme_node == old_theme_node) if (new_theme_node == old_theme_node)
@@ -1772,9 +1729,8 @@ st_widget_recompute_style (StWidget *widget,
_st_theme_node_apply_margins (new_theme_node, CLUTTER_ACTOR (widget)); _st_theme_node_apply_margins (new_theme_node, CLUTTER_ACTOR (widget));
if (old_theme_node) if (!old_theme_node ||
geometry_equal = st_theme_node_geometry_equal (old_theme_node, new_theme_node); !st_theme_node_geometry_equal (old_theme_node, new_theme_node))
if (!geometry_equal)
clutter_actor_queue_relayout ((ClutterActor *) widget); clutter_actor_queue_relayout ((ClutterActor *) widget);
transition_duration = st_theme_node_get_transition_duration (new_theme_node); transition_duration = st_theme_node_get_transition_duration (new_theme_node);
@@ -1826,11 +1782,7 @@ st_widget_recompute_style (StWidget *widget,
st_theme_node_paint_state_invalidate (current_paint_state (widget)); st_theme_node_paint_state_invalidate (current_paint_state (widget));
} }
if (!paint_equal || !geometry_equal)
g_signal_emit (widget, signals[STYLE_CHANGED], 0); g_signal_emit (widget, signals[STYLE_CHANGED], 0);
else
notify_children_of_style_change ((ClutterActor *) widget);
priv->is_style_dirty = FALSE; priv->is_style_dirty = FALSE;
} }

View File

@@ -70,7 +70,7 @@ static guint manager_signals[LAST_SIGNAL];
#define SYSTEM_TRAY_ORIENTATION_VERT 1 #define SYSTEM_TRAY_ORIENTATION_VERT 1
#ifdef GDK_WINDOWING_X11 #ifdef GDK_WINDOWING_X11
static gboolean na_tray_manager_check_running_screen_x11 (void); static gboolean na_tray_manager_check_running_screen_x11 ();
#endif #endif
static void na_tray_manager_finalize (GObject *object); static void na_tray_manager_finalize (GObject *object);
@@ -808,7 +808,7 @@ na_tray_manager_manage_screen (NaTrayManager *manager)
#ifdef GDK_WINDOWING_X11 #ifdef GDK_WINDOWING_X11
static gboolean static gboolean
na_tray_manager_check_running_screen_x11 (void) na_tray_manager_check_running_screen_x11 ()
{ {
GdkDisplay *display; GdkDisplay *display;
GdkScreen *screen; GdkScreen *screen;
@@ -833,7 +833,7 @@ na_tray_manager_check_running_screen_x11 (void)
#endif #endif
gboolean gboolean
na_tray_manager_check_running (void) na_tray_manager_check_running ()
{ {
#ifdef GDK_WINDOWING_X11 #ifdef GDK_WINDOWING_X11
return na_tray_manager_check_running_screen_x11 (); return na_tray_manager_check_running_screen_x11 ();