Compare commits
118 Commits
wip/jimmac
...
wip/carlos
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7f66aede01 | ||
![]() |
bd5a1121d6 | ||
![]() |
03117d65b2 | ||
![]() |
5520bb3890 | ||
![]() |
4e6b2eb72a | ||
![]() |
2e5295b3a9 | ||
![]() |
3121c9aa29 | ||
![]() |
1ebbd7c768 | ||
![]() |
8572bb97c7 | ||
![]() |
d5ebd8c816 | ||
![]() |
ed999ce926 | ||
![]() |
50b7739076 | ||
![]() |
94995e9c1e | ||
![]() |
fb04dafb0b | ||
![]() |
d57234bec9 | ||
![]() |
38da54fb02 | ||
![]() |
bbd3275dad | ||
![]() |
3a3f9aa008 | ||
![]() |
3c54e863e6 | ||
![]() |
a63ba61194 | ||
![]() |
ab9710ee7b | ||
![]() |
43cef45229 | ||
![]() |
8db4f3c67f | ||
![]() |
594a070029 | ||
![]() |
c2e04e3cfa | ||
![]() |
293f50e8e5 | ||
![]() |
df7fea3407 | ||
![]() |
563412698a | ||
![]() |
2b30146c6c | ||
![]() |
0f531d8c44 | ||
![]() |
218c87994b | ||
![]() |
f74c07b9ac | ||
![]() |
59edea4bb4 | ||
![]() |
4d4d5a0b16 | ||
![]() |
03c4930883 | ||
![]() |
9593e20425 | ||
![]() |
2b1d6e607f | ||
![]() |
1dff32e48a | ||
![]() |
1e3a174de9 | ||
![]() |
7bb84dae80 | ||
![]() |
44fcb9e9af | ||
![]() |
2d30e310bc | ||
![]() |
be2d630348 | ||
![]() |
bea6045aae | ||
![]() |
ad491e7922 | ||
![]() |
fedb8e706a | ||
![]() |
1be933bc49 | ||
![]() |
526bb72f3d | ||
![]() |
49c95cff6c | ||
![]() |
56a361650c | ||
![]() |
d4763b157d | ||
![]() |
d2dc072ba9 | ||
![]() |
ffaca00594 | ||
![]() |
9090b7dc3d | ||
![]() |
a540fe4130 | ||
![]() |
5be61bbb68 | ||
![]() |
8e51fee5c1 | ||
![]() |
9d6fcfdc85 | ||
![]() |
5f5a3b78a5 | ||
![]() |
4e5ca6d376 | ||
![]() |
2fab75f448 | ||
![]() |
22883f2fa2 | ||
![]() |
5d9f80bc73 | ||
![]() |
f7d117488b | ||
![]() |
244a329ee7 | ||
![]() |
044572cb60 | ||
![]() |
746875258d | ||
![]() |
4892a87dfe | ||
![]() |
8b9c8ddb1e | ||
![]() |
eb9000576c | ||
![]() |
862aaf341e | ||
![]() |
a5c75ff58b | ||
![]() |
4541fb9819 | ||
![]() |
9f8edd980c | ||
![]() |
e5b9043435 | ||
![]() |
c0012c2ea4 | ||
![]() |
b77e4975f0 | ||
![]() |
e83f2344f6 | ||
![]() |
de6512be1a | ||
![]() |
0b72ff1896 | ||
![]() |
fea0192772 | ||
![]() |
f81ac498fb | ||
![]() |
5357e0a18c | ||
![]() |
d7632bbd3d | ||
![]() |
1b5e91e4b3 | ||
![]() |
727195c767 | ||
![]() |
9158f55360 | ||
![]() |
8146e9d527 | ||
![]() |
4247251020 | ||
![]() |
7eee0e0ed6 | ||
![]() |
4f0851ca77 | ||
![]() |
911ae49767 | ||
![]() |
5af81d4057 | ||
![]() |
c435889baa | ||
![]() |
49f79d9d5d | ||
![]() |
1767cd0f6c | ||
![]() |
3e0915521a | ||
![]() |
a298943fac | ||
![]() |
df9ddf96a5 | ||
![]() |
4fa5d701d5 | ||
![]() |
b05683d586 | ||
![]() |
2f3f3fbcdb | ||
![]() |
611605a67f | ||
![]() |
0427a782be | ||
![]() |
32baff5906 | ||
![]() |
0089143d06 | ||
![]() |
05e55cee23 | ||
![]() |
31e7f0340f | ||
![]() |
6e317a54fd | ||
![]() |
9c1f62c38c | ||
![]() |
1341d5557f | ||
![]() |
b7d79a5f06 | ||
![]() |
62233a4db4 | ||
![]() |
4a7e2ddff5 | ||
![]() |
fb737ebde0 | ||
![]() |
bf77cb44e7 | ||
![]() |
c72e2bb4a9 | ||
![]() |
68c182b1df |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -80,3 +80,4 @@ tests/run-test.sh
|
|||||||
*~
|
*~
|
||||||
*.patch
|
*.patch
|
||||||
*.sw?
|
*.sw?
|
||||||
|
.vscode
|
||||||
|
@@ -15,10 +15,10 @@ variables:
|
|||||||
- merge_requests
|
- merge_requests
|
||||||
|
|
||||||
check_commit_log:
|
check_commit_log:
|
||||||
image: registry.fedoraproject.org/fedora:latest
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: review
|
stage: review
|
||||||
before_script:
|
variables:
|
||||||
- dnf install -y git
|
GIT_DEPTH: "100"
|
||||||
script:
|
script:
|
||||||
- ./.gitlab-ci/check-commit-log.sh
|
- ./.gitlab-ci/check-commit-log.sh
|
||||||
only:
|
only:
|
||||||
|
@@ -17,15 +17,19 @@ 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 $merge_request_remote $merge_request_branch >/dev/null 2>&1; then
|
if git fetch -q $merge_request_remote $merge_request_branch 2>/dev/null; then
|
||||||
mutter_target=FETCH_HEAD
|
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 $shell_branch)
|
mutter_target=$(git branch -r -l origin/$shell_branch)
|
||||||
|
mutter_target=${mutter_target:-$(git branch -r -l ${shell_branch#remotes/})}
|
||||||
mutter_target=${mutter_target:-origin/master}
|
mutter_target=${mutter_target:-origin/master}
|
||||||
echo Using $mutter_target instead
|
echo Using $mutter_target instead
|
||||||
fi
|
fi
|
||||||
|
|
||||||
git checkout $mutter_target
|
git checkout -q $mutter_target
|
||||||
|
31
NEWS
31
NEWS
@@ -1,3 +1,34 @@
|
|||||||
|
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]
|
||||||
|
@@ -9,9 +9,6 @@
|
|||||||
<method name="ShowOSD">
|
<method name="ShowOSD">
|
||||||
<arg type="a{sv}" direction="in" name="params"/>
|
<arg type="a{sv}" direction="in" name="params"/>
|
||||||
</method>
|
</method>
|
||||||
<method name="ShowMonitorLabels">
|
|
||||||
<arg type="a{uv}" direction="in" name="params"/>
|
|
||||||
</method>
|
|
||||||
<method name="ShowMonitorLabels2">
|
<method name="ShowMonitorLabels2">
|
||||||
<arg type="a{sv}" direction="in" name="params"/>
|
<arg type="a{sv}" direction="in" name="params"/>
|
||||||
</method>
|
</method>
|
||||||
|
@@ -21,10 +21,8 @@
|
|||||||
<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>
|
||||||
|
@@ -157,18 +157,13 @@ StScrollBar {
|
|||||||
|
|
||||||
/* Switches */
|
/* Switches */
|
||||||
.toggle-switch {
|
.toggle-switch {
|
||||||
width: 65px;
|
width: 46px;
|
||||||
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;
|
||||||
@@ -1142,6 +1137,12 @@ StScrollBar {
|
|||||||
|
|
||||||
.ripple-box:rtl { border-radius: 0 0 0 52px; } // just a simple change to the border radius position
|
.ripple-box:rtl { border-radius: 0 0 0 52px; } // just a simple change to the border radius position
|
||||||
|
|
||||||
|
// Rubberband for select-area screenshots
|
||||||
|
.select-area-rubberband {
|
||||||
|
background-color: transparentize($selected_bg_color,0.7);
|
||||||
|
border: 1px solid $selected_bg_color;
|
||||||
|
}
|
||||||
|
|
||||||
// not really top bar only
|
// not really top bar only
|
||||||
.popup-menu-arrow { icon-size: 1.09em; }
|
.popup-menu-arrow { icon-size: 1.09em; }
|
||||||
.popup-menu-icon { icon-size: 1.09em; }
|
.popup-menu-icon { icon-size: 1.09em; }
|
||||||
@@ -1149,25 +1150,23 @@ StScrollBar {
|
|||||||
//close buttons
|
//close buttons
|
||||||
|
|
||||||
.window-close {
|
.window-close {
|
||||||
background-color: white;
|
background-color: $selected_bg_color;
|
||||||
|
color: white;
|
||||||
border-radius: 24px;
|
border-radius: 24px;
|
||||||
border: 4px solid $selected_bg_color;
|
border: 2px 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: 14px;
|
-shell-close-overlap: 11px;
|
||||||
|
box-shadow: -1px 1px 5px 0px transparentize(black, 0.5);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: $selected_bg_color;
|
background-color: lighten($selected_bg_color, 5%);
|
||||||
border-color: white;
|
border-color: lighten($selected_bg_color, 5%);
|
||||||
color: white;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
background-color: mix(white, $selected_bg_color, 75%);
|
background-color: darken($selected_bg_color, 5%);
|
||||||
border-color: $selected_bg_color;
|
border-color: darken($selected_bg_color, 5%);
|
||||||
color: $selected_bg_color;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1232,13 +1231,14 @@ StScrollBar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.window-clone-border {
|
.window-clone-border {
|
||||||
border: 4px solid $selected_bg_color;
|
$_bg: transparentize(white, 0.65);
|
||||||
border-radius: 4px;
|
border: 5px solid $_bg;
|
||||||
|
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 0px 0px 0px 1px $selected_bg_color;
|
box-shadow: inset 0 0 0 1px $_bg;
|
||||||
}
|
}
|
||||||
.window-caption {
|
.window-caption {
|
||||||
spacing: 25px;
|
spacing: 25px;
|
||||||
color: $selected_fg_color;
|
color: $selected_fg_color;
|
||||||
|
@@ -10,124 +10,62 @@
|
|||||||
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="65"
|
width="46"
|
||||||
height="22"
|
height="22"
|
||||||
id="svg2857"
|
viewBox="0 0 46 22"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.5 r10040"
|
id="svg2751"
|
||||||
sodipodi:docname="toggle-off-us.svg">
|
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||||
|
sodipodi:docname="toggle-off-intl.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs2859">
|
id="defs2745">
|
||||||
<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"
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
id="linearGradient3329">
|
||||||
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:#2e3232;stop-opacity:1"
|
style="stop-color:#39393a;stop-opacity:1;"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop76471-7-1-5" />
|
id="stop3325" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
style="stop-color:#302f30;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop76473-9-0-0" />
|
id="stop3327" />
|
||||||
</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
|
||||||
y2="492.52756"
|
inkscape:collect="always"
|
||||||
x2="610.13782"
|
xlink:href="#linearGradient3329"
|
||||||
y1="501.43866"
|
id="linearGradient3331"
|
||||||
x1="610.13782"
|
x1="53"
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-900.56122,-423.92857)"
|
y1="294.42917"
|
||||||
|
x2="53"
|
||||||
|
y2="309.80417"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
id="linearGradient13602"
|
gradientTransform="translate(-42.760724)" />
|
||||||
xlink:href="#linearGradient37802-8"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#000000"
|
pagecolor="#535353"
|
||||||
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="-5.0602834"
|
inkscape:cx="-19.436775"
|
||||||
inkscape:cy="16.473273"
|
inkscape:cy="-13.499723"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="g37994"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="2560"
|
units="px"
|
||||||
inkscape:window-height="1375"
|
inkscape:pagecheckerboard="true"
|
||||||
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="grid12954"
|
id="grid3298" />
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata2862">
|
id="metadata2748">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work
|
<cc:Work
|
||||||
rdf:about="">
|
rdf:about="">
|
||||||
@@ -142,68 +80,24 @@
|
|||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-444.64286,-781.36218)">
|
transform="translate(0,-291.17916)">
|
||||||
<g
|
<rect
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
style="opacity:1;vector-effect:none;fill:#323233;fill-opacity:1;stroke:#272728;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||||
id="g37994">
|
id="rect3296"
|
||||||
<g
|
width="44.446434"
|
||||||
id="g37996"
|
height="20.910645"
|
||||||
transform="translate(-115,1277)">
|
x="0.625"
|
||||||
<rect
|
y="291.71494"
|
||||||
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"
|
rx="10.455324"
|
||||||
id="rect13475"
|
ry="10.073335" />
|
||||||
width="98"
|
<rect
|
||||||
height="25"
|
ry="10.455322"
|
||||||
x="644.5"
|
rx="10.455322"
|
||||||
y="484.61118"
|
y="291.71494"
|
||||||
rx="4.7429576"
|
x="0.5428465"
|
||||||
ry="3.8424656" />
|
height="20.910645"
|
||||||
<rect
|
width="21.142862"
|
||||||
ry="3.8424656"
|
id="rect3300"
|
||||||
rx="4.7429576"
|
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" />
|
||||||
y="483.5"
|
|
||||||
x="644.5"
|
|
||||||
height="25"
|
|
||||||
width="98"
|
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient12311-3-1-0-5-4);fill-opacity:1;fill-rule:nonzero;stroke:#16191a;stroke-width:1.37920942;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="translate(-49.946213,-1.890275)"
|
|
||||||
id="g38002">
|
|
||||||
<g
|
|
||||||
transform="translate(-115,1247)"
|
|
||||||
style="display:inline"
|
|
||||||
id="g38004">
|
|
||||||
<rect
|
|
||||||
ry="3.7972314"
|
|
||||||
rx="4.6871223"
|
|
||||||
y="515.5"
|
|
||||||
x="694.53046"
|
|
||||||
height="25"
|
|
||||||
width="45.969578"
|
|
||||||
id="rect38006"
|
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
id="path38016"
|
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
sodipodi:type="arc"
|
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:2.15627193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
|
||||||
id="path13479"
|
|
||||||
sodipodi:cx="16.4375"
|
|
||||||
sodipodi:cy="10.8125"
|
|
||||||
sodipodi:rx="4.3125"
|
|
||||||
sodipodi:ry="4.3125"
|
|
||||||
d="m 20.75,10.8125 a 4.3125,4.3125 0 1 1 -8.625,0 4.3125,4.3125 0 1 1 8.625,0 z"
|
|
||||||
transform="matrix(1.4212691,0,0,1.1514287,577.38488,1761.1138)" />
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 3.3 KiB |
@@ -1,255 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="65"
|
|
||||||
height="22"
|
|
||||||
id="svg2857"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.5 r10040"
|
|
||||||
sodipodi:docname="toggle-on-intl.svg">
|
|
||||||
<defs
|
|
||||||
id="defs2859">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
id="perspective2865" />
|
|
||||||
<inkscape:perspective
|
|
||||||
id="perspective2843"
|
|
||||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
||||||
inkscape:vp_z="1 : 0.5 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
|
||||||
sodipodi:type="inkscape:persp3d" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
|
||||||
id="linearGradient38024"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient37802"
|
|
||||||
id="linearGradient12311-3-1-0-5"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)"
|
|
||||||
x1="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x2="610.13782"
|
|
||||||
y2="492.52756" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient37802"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop37804"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#2c2c2c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop37806"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#16191a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4-3"
|
|
||||||
id="linearGradient77680"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1,0,0,1.0322581,717.71949,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4-3">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5-7" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0-9" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4-0"
|
|
||||||
is_visible="true" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient37802-8"
|
|
||||||
id="linearGradient12311-3-1-0-5-4"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)"
|
|
||||||
x1="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x2="610.13782"
|
|
||||||
y2="492.52756" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient37802-8"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop37804-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#2c2c2c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop37806-8"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#16191a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
y2="492.52756"
|
|
||||||
x2="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x1="610.13782"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-900.56122,-423.92857)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient13602"
|
|
||||||
xlink:href="#linearGradient37802-8"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#000000"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="1"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="1"
|
|
||||||
inkscape:cx="16.760995"
|
|
||||||
inkscape:cy="21.955673"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="g37994"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="2560"
|
|
||||||
inkscape:window-height="1375"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="false">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata2862">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(-444.64286,-781.36218)">
|
|
||||||
<g
|
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
|
||||||
id="g37994">
|
|
||||||
<g
|
|
||||||
id="g37996"
|
|
||||||
transform="translate(-115,1277)">
|
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837"
|
|
||||||
id="rect13475"
|
|
||||||
width="98"
|
|
||||||
height="25"
|
|
||||||
x="644.5"
|
|
||||||
y="484.61118"
|
|
||||||
rx="4.7429576"
|
|
||||||
ry="3.8424656" />
|
|
||||||
<rect
|
|
||||||
ry="3.8424656"
|
|
||||||
rx="4.7429576"
|
|
||||||
y="483.5"
|
|
||||||
x="644.5"
|
|
||||||
height="25"
|
|
||||||
width="98"
|
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient12311-3-1-0-5-4);fill-opacity:1;fill-rule:nonzero;stroke:#16191a;stroke-width:1.37920942;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="translate(-49.946213,-1.890275)"
|
|
||||||
id="g38002">
|
|
||||||
<g
|
|
||||||
transform="translate(-115,1247)"
|
|
||||||
style="display:inline"
|
|
||||||
id="g38004">
|
|
||||||
<rect
|
|
||||||
ry="3.7972314"
|
|
||||||
rx="4.6871223"
|
|
||||||
y="515.5"
|
|
||||||
x="694.53046"
|
|
||||||
height="25"
|
|
||||||
width="45.969578"
|
|
||||||
id="rect38006"
|
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
id="path38016"
|
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-size:13.79166794px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
|
||||||
x="520.29974"
|
|
||||||
y="1997.0011"
|
|
||||||
id="text75614"
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
transform="scale(1.1236771,0.88993537)"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan75616"
|
|
||||||
x="520.29974"
|
|
||||||
y="1997.0011">OFF</tspan></text>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.8 KiB |
@@ -10,117 +10,69 @@
|
|||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns: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="65"
|
width="46"
|
||||||
height="22"
|
height="22"
|
||||||
id="svg2857"
|
viewBox="0 0 46 22"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.91 r13725"
|
id="svg2751"
|
||||||
|
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||||
sodipodi:docname="toggle-on-intl.svg">
|
sodipodi:docname="toggle-on-intl.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs2859">
|
id="defs2745">
|
||||||
<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"
|
||||||
xlink:href="#linearGradient77461"
|
id="linearGradient3329">
|
||||||
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
|
||||||
id="stop77463"
|
style="stop-color:#39393a;stop-opacity:1;"
|
||||||
offset="0"
|
offset="0"
|
||||||
style="stop-color:#182f4c;stop-opacity:1" />
|
id="stop3325" />
|
||||||
<stop
|
<stop
|
||||||
id="stop77465"
|
style="stop-color:#302f30;stop-opacity:1"
|
||||||
offset="1"
|
offset="1"
|
||||||
style="stop-color:#205b9a;stop-opacity:1" />
|
id="stop3327" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
xlink:href="#linearGradient3329"
|
||||||
id="linearGradient38024"
|
id="linearGradient3331"
|
||||||
|
x1="53"
|
||||||
|
y1="294.42917"
|
||||||
|
x2="53"
|
||||||
|
y2="309.80417"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)"
|
gradientTransform="translate(-19)" />
|
||||||
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="#000000"
|
pagecolor="#535353"
|
||||||
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="37.410841"
|
inkscape:cx="13.588971"
|
||||||
inkscape:cy="16.009314"
|
inkscape:cy="14.124546"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="g37994"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="2560"
|
units="px"
|
||||||
inkscape:window-height="1376"
|
inkscape:pagecheckerboard="true"
|
||||||
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="grid12954"
|
id="grid3298" />
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata2862">
|
id="metadata2748">
|
||||||
<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>
|
||||||
@@ -128,65 +80,24 @@
|
|||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-444.64286,-781.36218)">
|
transform="translate(0,-291.17916)">
|
||||||
<g
|
<rect
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
style="opacity:1;vector-effect:none;fill:#15539e;fill-opacity:1;stroke:#030e1b;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||||
id="g37994">
|
id="rect3296"
|
||||||
<g
|
width="44.446434"
|
||||||
id="g37996"
|
height="20.910645"
|
||||||
transform="translate(-115,1277)">
|
x="0.625"
|
||||||
<rect
|
y="291.71494"
|
||||||
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"
|
rx="10.455324"
|
||||||
id="rect13475"
|
ry="10.073335" />
|
||||||
width="98"
|
<rect
|
||||||
height="25"
|
ry="10.455322"
|
||||||
x="644.5"
|
rx="10.455322"
|
||||||
y="484.61118"
|
y="291.71494"
|
||||||
rx="4.7429576"
|
x="24.30357"
|
||||||
ry="3.8424656" />
|
height="20.910645"
|
||||||
<rect
|
width="21.142862"
|
||||||
ry="3.8424656"
|
id="rect3300"
|
||||||
rx="4.7429576"
|
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" />
|
||||||
y="483.5"
|
|
||||||
x="644.5"
|
|
||||||
height="25"
|
|
||||||
width="98"
|
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient77551);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="translate(2.0625,-2)"
|
|
||||||
id="g38002">
|
|
||||||
<g
|
|
||||||
transform="translate(-115,1247)"
|
|
||||||
style="display:inline"
|
|
||||||
id="g38004">
|
|
||||||
<rect
|
|
||||||
ry="3.7972314"
|
|
||||||
rx="4.6871223"
|
|
||||||
y="515.5"
|
|
||||||
x="694.53046"
|
|
||||||
height="25"
|
|
||||||
width="45.969578"
|
|
||||||
id="rect38006"
|
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
id="path38016"
|
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
|
||||||
id="rect13678"
|
|
||||||
width="3.0646207"
|
|
||||||
height="12.414008"
|
|
||||||
x="554.77728"
|
|
||||||
y="1767.3566" />
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 3.3 KiB |
@@ -1,207 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="65"
|
|
||||||
height="22"
|
|
||||||
id="svg2857"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.91 r13725"
|
|
||||||
sodipodi:docname="toggle-on-us.svg">
|
|
||||||
<defs
|
|
||||||
id="defs2859">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
id="perspective2865" />
|
|
||||||
<inkscape:perspective
|
|
||||||
id="perspective2843"
|
|
||||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
||||||
inkscape:vp_z="1 : 0.5 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
|
||||||
sodipodi:type="inkscape:persp3d" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
|
||||||
id="linearGradient38024"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient77461-1"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop77463-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#182f4c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop77465-4"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#205b9a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient77461-1"
|
|
||||||
id="linearGradient77551-6-5"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.8527367,0,0,0.80554422,-969.41608,-778.00299)"
|
|
||||||
x1="1164.7644"
|
|
||||||
y1="962.93695"
|
|
||||||
x2="1164.7644"
|
|
||||||
y2="970.51404" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient77461-1"
|
|
||||||
id="linearGradient11198"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.3066667,0,0,1,-1066.3709,794.25325)"
|
|
||||||
x1="1322.5831"
|
|
||||||
y1="-312.51855"
|
|
||||||
x2="1322.5831"
|
|
||||||
y2="-306.53461" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#000000"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="1"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="1"
|
|
||||||
inkscape:cx="-26.798898"
|
|
||||||
inkscape:cy="5.3753009"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="g37994"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="2560"
|
|
||||||
inkscape:window-height="1376"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="false">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata2862">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(-444.64286,-781.36218)">
|
|
||||||
<g
|
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
|
||||||
id="g37994">
|
|
||||||
<g
|
|
||||||
id="g37996"
|
|
||||||
transform="translate(-115,1277)">
|
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837"
|
|
||||||
id="rect13475"
|
|
||||||
width="98"
|
|
||||||
height="25"
|
|
||||||
x="644.5"
|
|
||||||
y="484.61118"
|
|
||||||
rx="4.7429576"
|
|
||||||
ry="3.8424656" />
|
|
||||||
<rect
|
|
||||||
ry="3.8424656"
|
|
||||||
rx="4.7429576"
|
|
||||||
y="483.5"
|
|
||||||
x="644.5"
|
|
||||||
height="25"
|
|
||||||
width="98"
|
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient11198);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="translate(2.0625,-2)"
|
|
||||||
id="g38002">
|
|
||||||
<g
|
|
||||||
transform="translate(-115,1247)"
|
|
||||||
style="display:inline"
|
|
||||||
id="g38004">
|
|
||||||
<rect
|
|
||||||
ry="3.7972314"
|
|
||||||
rx="4.6871223"
|
|
||||||
y="515.5"
|
|
||||||
x="694.53046"
|
|
||||||
height="25"
|
|
||||||
width="45.969578"
|
|
||||||
id="rect38006"
|
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
id="path38016"
|
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<text
|
|
||||||
transform="scale(1.1000946,0.90901274)"
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
id="text38018"
|
|
||||||
y="1955.5205"
|
|
||||||
x="495.94223"
|
|
||||||
style="font-size:13.29953671px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
y="1955.5205"
|
|
||||||
x="495.94223"
|
|
||||||
id="tspan38020"
|
|
||||||
sodipodi:role="line">ON</tspan></text>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 7.7 KiB |
@@ -551,9 +551,9 @@ class ExtensionRow extends Gtk.ListBoxRow {
|
|||||||
|
|
||||||
let button = new Gtk.Button({ valign: Gtk.Align.CENTER,
|
let button = new Gtk.Button({ valign: Gtk.Align.CENTER,
|
||||||
no_show_all: true });
|
no_show_all: true });
|
||||||
button.add(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
|
button.set_image(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
|
||||||
icon_size: Gtk.IconSize.BUTTON,
|
icon_size: Gtk.IconSize.BUTTON,
|
||||||
visible: true }));
|
visible: true }));
|
||||||
button.get_style_context().add_class('circular');
|
button.get_style_context().add_class('circular');
|
||||||
hbox.add(button);
|
hbox.add(button);
|
||||||
|
|
||||||
|
@@ -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({ actor: this._button },
|
this._manager = new PopupMenu.PopupMenuManager(this._button,
|
||||||
{ actionMode: Shell.ActionMode.NONE });
|
{ actionMode: Shell.ActionMode.NONE });
|
||||||
this._manager.addMenu(this._menu);
|
this._manager.addMenu(this._menu);
|
||||||
|
|
||||||
|
@@ -366,7 +366,7 @@ class CloseButton extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_computeBoxPointerOffset() {
|
_computeBoxPointerOffset() {
|
||||||
if (!this._boxPointer || !this._boxPointer.actor.get_stage())
|
if (!this._boxPointer || !this._boxPointer.get_stage())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
let side = this._boxPointer.arrowSide;
|
let side = this._boxPointer.arrowSide;
|
||||||
|
@@ -30,6 +30,14 @@ var WeatherClient = class {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._permStore.g_name_owner == null) {
|
||||||
|
// Failed to auto-start, likely because xdg-desktop-portal
|
||||||
|
// isn't installed; don't restrict access to location service
|
||||||
|
this._weatherAuthorized = true;
|
||||||
|
this._updateAutoLocation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this._permStore.LookupRemote('gnome', 'geolocation', (res, error) => {
|
this._permStore.LookupRemote('gnome', 'geolocation', (res, error) => {
|
||||||
if (error)
|
if (error)
|
||||||
log('Error looking up permission: ' + error.message);
|
log('Error looking up permission: ' + error.message);
|
||||||
|
@@ -10,7 +10,7 @@ const Scripting = imports.ui.scripting;
|
|||||||
// someone should be able to get an idea of how well the shell is performing
|
// someone should be able to get an idea of how well the shell is performing
|
||||||
// on a particular system.
|
// on a particular system.
|
||||||
|
|
||||||
let METRICS = {
|
var METRICS = {
|
||||||
overviewLatencyFirst:
|
overviewLatencyFirst:
|
||||||
{ description: "Time to first frame after triggering overview, first time",
|
{ description: "Time to first frame after triggering overview, first time",
|
||||||
units: "us" },
|
units: "us" },
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
const { Clutter, Gio, Gtk, Shell } = imports.gi;
|
const { Clutter, Gio, Shell } = imports.gi;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Scripting = imports.ui.scripting;
|
const Scripting = imports.ui.scripting;
|
||||||
|
|
||||||
let METRICS = {
|
var METRICS = {
|
||||||
timeToDesktop:
|
timeToDesktop:
|
||||||
{ description: "Time from starting graphical.target to desktop showing",
|
{ description: "Time from starting graphical.target to desktop showing",
|
||||||
units: "us" },
|
units: "us" },
|
||||||
@@ -104,7 +104,10 @@ function *run() {
|
|||||||
yield Scripting.waitLeisure();
|
yield Scripting.waitLeisure();
|
||||||
Scripting.scriptEvent('desktopShown');
|
Scripting.scriptEvent('desktopShown');
|
||||||
|
|
||||||
Gtk.Settings.get_default().gtk_enable_animations = false;
|
let interfaceSettings = new Gio.Settings({
|
||||||
|
schema_id: 'org.gnome.desktop.interface'
|
||||||
|
});
|
||||||
|
interfaceSettings.set_boolean('enable-animations', false);
|
||||||
|
|
||||||
Scripting.scriptEvent('overviewShowStart');
|
Scripting.scriptEvent('overviewShowStart');
|
||||||
Main.overview.show();
|
Main.overview.show();
|
||||||
@@ -200,7 +203,7 @@ function *run() {
|
|||||||
|
|
||||||
yield Scripting.sleep(1000);
|
yield Scripting.sleep(1000);
|
||||||
|
|
||||||
Gtk.Settings.get_default().gtk_enable_animations = true;
|
interfaceSettings.set_boolean('enable-animations', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
let overviewShowStart;
|
let overviewShowStart;
|
||||||
|
@@ -477,8 +477,8 @@ var CyclerList = GObject.registerClass({
|
|||||||
var CyclerPopup = GObject.registerClass(
|
var CyclerPopup = GObject.registerClass(
|
||||||
class CyclerPopup extends SwitcherPopup.SwitcherPopup {
|
class CyclerPopup extends SwitcherPopup.SwitcherPopup {
|
||||||
_init() {
|
_init() {
|
||||||
if (new.target === CyclerPopup)
|
if (this.constructor.name === CyclerPopup.prototype.constructor.name)
|
||||||
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
|
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`);
|
||||||
|
|
||||||
super._init();
|
super._init();
|
||||||
|
|
||||||
@@ -619,9 +619,8 @@ class WindowSwitcherPopup extends SwitcherPopup.SwitcherPopup {
|
|||||||
var WindowCyclerPopup = GObject.registerClass(
|
var WindowCyclerPopup = GObject.registerClass(
|
||||||
class WindowCyclerPopup extends CyclerPopup {
|
class WindowCyclerPopup extends CyclerPopup {
|
||||||
_init() {
|
_init() {
|
||||||
super._init();
|
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
|
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
|
||||||
|
super._init();
|
||||||
}
|
}
|
||||||
|
|
||||||
_getWindows() {
|
_getWindows() {
|
||||||
|
@@ -98,8 +98,8 @@ function clamp(value, min, max) {
|
|||||||
|
|
||||||
class BaseAppView {
|
class BaseAppView {
|
||||||
constructor(params, gridParams) {
|
constructor(params, gridParams) {
|
||||||
if (new.target === BaseAppView)
|
if (this.constructor === BaseAppView)
|
||||||
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
|
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`);
|
||||||
|
|
||||||
gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE,
|
gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE,
|
||||||
columnLimit: MAX_COLUMNS,
|
columnLimit: MAX_COLUMNS,
|
||||||
@@ -1301,16 +1301,16 @@ var AppFolderPopup = class AppFolderPopup {
|
|||||||
x_expand: true,
|
x_expand: true,
|
||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
|
|
||||||
this._boxPointer.actor.style_class = 'app-folder-popup';
|
this._boxPointer.style_class = 'app-folder-popup';
|
||||||
this.actor.add_actor(this._boxPointer.actor);
|
this.actor.add_actor(this._boxPointer);
|
||||||
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.actor.bind_property('opacity', this.closeButton, 'opacity',
|
this._boxPointer.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);
|
this._menuManager = new PopupMenu.PopupMenuManager(this.actor);
|
||||||
|
|
||||||
if (isDraggable) {
|
if (isDraggable) {
|
||||||
this._draggable = DND.makeDraggable(this.actor);
|
this._draggable = DND.makeDraggable(this.actor);
|
||||||
@@ -1707,25 +1707,20 @@ var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu {
|
|||||||
w => !w.skip_taskbar
|
w => !w.skip_taskbar
|
||||||
);
|
);
|
||||||
|
|
||||||
// Display the app windows menu items and the separator between windows
|
if (windows.length > 0)
|
||||||
// of the current desktop and other windows.
|
this.addMenuItem(
|
||||||
let workspaceManager = global.workspace_manager;
|
/* Translators: This is the heading of a list of open windows */
|
||||||
let activeWorkspace = workspaceManager.get_active_workspace();
|
new PopupMenu.PopupSeparatorMenuItem(_("Open Windows"))
|
||||||
let separatorShown = windows.length > 0 && windows[0].get_workspace() != activeWorkspace;
|
);
|
||||||
|
|
||||||
for (let i = 0; i < windows.length; i++) {
|
windows.forEach(window => {
|
||||||
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();
|
||||||
|
@@ -14,39 +14,47 @@ const RENAMED_DESKTOP_IDS = {
|
|||||||
'epiphany.desktop': 'org.gnome.Epiphany.desktop',
|
'epiphany.desktop': 'org.gnome.Epiphany.desktop',
|
||||||
'evolution.desktop': 'org.gnome.Evolution.desktop',
|
'evolution.desktop': 'org.gnome.Evolution.desktop',
|
||||||
'file-roller.desktop': 'org.gnome.FileRoller.desktop',
|
'file-roller.desktop': 'org.gnome.FileRoller.desktop',
|
||||||
|
'five-or-more.desktop': 'org.gnome.five-or-more.desktop',
|
||||||
|
'four-in-a-row.desktop': 'org.gnome.Four-in-a-row.desktop',
|
||||||
'gcalctool.desktop': 'org.gnome.Calculator.desktop',
|
'gcalctool.desktop': 'org.gnome.Calculator.desktop',
|
||||||
'geary.desktop': 'org.gnome.Geary.desktop',
|
'geary.desktop': 'org.gnome.Geary.desktop',
|
||||||
'gedit.desktop': 'org.gnome.gedit.desktop',
|
'gedit.desktop': 'org.gnome.gedit.desktop',
|
||||||
'glchess.desktop': 'gnome-chess.desktop',
|
'glchess.desktop': 'org.gnome.Chess.desktop',
|
||||||
'glines.desktop': 'five-or-more.desktop',
|
'glines.desktop': 'org.gnome.five-or-more.desktop',
|
||||||
'gnect.desktop': 'four-in-a-row.desktop',
|
'gnect.desktop': 'org.gnome.Four-in-a-row.desktop',
|
||||||
'gnibbles.desktop': 'org.gnome.Nibbles.desktop',
|
'gnibbles.desktop': 'org.gnome.Nibbles.desktop',
|
||||||
'gnobots2.desktop': 'gnome-robots.desktop',
|
'gnobots2.desktop': 'org.gnome.Robots.desktop',
|
||||||
'gnome-boxes.desktop': 'org.gnome.Boxes.desktop',
|
'gnome-boxes.desktop': 'org.gnome.Boxes.desktop',
|
||||||
'gnome-calculator.desktop': 'org.gnome.Calculator.desktop',
|
'gnome-calculator.desktop': 'org.gnome.Calculator.desktop',
|
||||||
|
'gnome-chess.desktop': 'org.gnome.Chess.desktop',
|
||||||
'gnome-clocks.desktop': 'org.gnome.clocks.desktop',
|
'gnome-clocks.desktop': 'org.gnome.clocks.desktop',
|
||||||
'gnome-contacts.desktop': 'org.gnome.Contacts.desktop',
|
'gnome-contacts.desktop': 'org.gnome.Contacts.desktop',
|
||||||
'gnome-documents.desktop': 'org.gnome.Documents.desktop',
|
'gnome-documents.desktop': 'org.gnome.Documents.desktop',
|
||||||
'gnome-font-viewer.desktop': 'org.gnome.font-viewer.desktop',
|
'gnome-font-viewer.desktop': 'org.gnome.font-viewer.desktop',
|
||||||
|
'gnome-klotski.desktop': 'org.gnome.Klotski.desktop',
|
||||||
'gnome-nibbles.desktop': 'org.gnome.Nibbles.desktop',
|
'gnome-nibbles.desktop': 'org.gnome.Nibbles.desktop',
|
||||||
'gnome-mahjongg.desktop': 'org.gnome.Mahjongg.desktop',
|
'gnome-mahjongg.desktop': 'org.gnome.Mahjongg.desktop',
|
||||||
|
'gnome-mines.desktop': 'org.gnome.Mines.desktop',
|
||||||
'gnome-music.desktop': 'org.gnome.Music.desktop',
|
'gnome-music.desktop': 'org.gnome.Music.desktop',
|
||||||
'gnome-photos.desktop': 'org.gnome.Photos.desktop',
|
'gnome-photos.desktop': 'org.gnome.Photos.desktop',
|
||||||
|
'gnome-robots.desktop': 'org.gnome.Robots.desktop',
|
||||||
'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
|
'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
|
||||||
'gnome-software.desktop': 'org.gnome.Software.desktop',
|
'gnome-software.desktop': 'org.gnome.Software.desktop',
|
||||||
'gnome-terminal.desktop': 'org.gnome.Terminal.desktop',
|
'gnome-terminal.desktop': 'org.gnome.Terminal.desktop',
|
||||||
|
'gnome-tetravex.desktop': 'org.gnome.Tetravex.desktop',
|
||||||
'gnome-tweaks.desktop': 'org.gnome.tweaks.desktop',
|
'gnome-tweaks.desktop': 'org.gnome.tweaks.desktop',
|
||||||
'gnome-weather.desktop': 'org.gnome.Weather.desktop',
|
'gnome-weather.desktop': 'org.gnome.Weather.desktop',
|
||||||
'gnomine.desktop': 'gnome-mines.desktop',
|
'gnomine.desktop': 'org.gnome.Mines.desktop',
|
||||||
'gnotravex.desktop': 'gnome-tetravex.desktop',
|
'gnotravex.desktop': 'org.gnome.Tetravex.desktop',
|
||||||
'gnotski.desktop': 'gnome-klotski.desktop',
|
'gnotski.desktop': 'org.gnome.Klotski.desktop',
|
||||||
'gtali.desktop': 'tali.desktop',
|
'gtali.desktop': 'org.gnome.Tali.desktop',
|
||||||
'iagno.desktop': 'org.gnome.Reversi.desktop',
|
'iagno.desktop': 'org.gnome.Reversi.desktop',
|
||||||
'nautilus.desktop': 'org.gnome.Nautilus.desktop',
|
'nautilus.desktop': 'org.gnome.Nautilus.desktop',
|
||||||
'org.gnome.gnome-2048.desktop': 'org.gnome.TwentyFortyEight.desktop',
|
'org.gnome.gnome-2048.desktop': 'org.gnome.TwentyFortyEight.desktop',
|
||||||
'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop',
|
'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop',
|
||||||
'org.gnome.Weather.Application.desktop': 'org.gnome.Weather.desktop',
|
'org.gnome.Weather.Application.desktop': 'org.gnome.Weather.desktop',
|
||||||
'polari.desktop': 'org.gnome.Polari.desktop',
|
'polari.desktop': 'org.gnome.Polari.desktop',
|
||||||
|
'tali.desktop': 'org.gnome.Tali.desktop',
|
||||||
'totem.desktop': 'org.gnome.Totem.desktop',
|
'totem.desktop': 'org.gnome.Totem.desktop',
|
||||||
'evince.desktop': 'org.gnome.Evince.desktop',
|
'evince.desktop': 'org.gnome.Evince.desktop',
|
||||||
};
|
};
|
||||||
|
@@ -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 });
|
actor._backgroundManager = new PopupMenu.PopupMenuManager(actor);
|
||||||
actor._backgroundManager.addMenu(actor._backgroundMenu);
|
actor._backgroundManager.addMenu(actor._backgroundMenu);
|
||||||
|
|
||||||
function openMenu(x, y) {
|
function openMenu(x, y) {
|
||||||
|
@@ -121,7 +121,8 @@ var BarLevel = class {
|
|||||||
cr.lineTo(x, (height - barLevelHeight) / 2);
|
cr.lineTo(x, (height - barLevelHeight) / 2);
|
||||||
cr.lineTo(x, (height + barLevelHeight) / 2);
|
cr.lineTo(x, (height + barLevelHeight) / 2);
|
||||||
cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2);
|
cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2);
|
||||||
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
if (this._value > 0)
|
||||||
|
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
||||||
cr.fillPreserve();
|
cr.fillPreserve();
|
||||||
Clutter.cairo_set_source_color(cr, barLevelActiveBorderColor);
|
Clutter.cairo_set_source_color(cr, barLevelActiveBorderColor);
|
||||||
cr.setLineWidth(barLevelBorderWidth);
|
cr.setLineWidth(barLevelBorderWidth);
|
||||||
@@ -143,17 +144,19 @@ var BarLevel = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* end progress bar arc */
|
/* end progress bar arc */
|
||||||
if (this._value <= this._overdriveStart)
|
if (this._value > 0) {
|
||||||
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
if (this._value <= this._overdriveStart)
|
||||||
else
|
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
||||||
Clutter.cairo_set_source_color(cr, barLevelOverdriveColor);
|
else
|
||||||
cr.arc(endX, height / 2, barLevelBorderRadius, TAU * 3 / 4, TAU * 1 / 4);
|
Clutter.cairo_set_source_color(cr, barLevelOverdriveColor);
|
||||||
cr.lineTo(Math.floor(endX), (height + barLevelHeight) / 2);
|
cr.arc(endX, height / 2, barLevelBorderRadius, TAU * 3 / 4, TAU * 1 / 4);
|
||||||
cr.lineTo(Math.floor(endX), (height - barLevelHeight) / 2);
|
cr.lineTo(Math.floor(endX), (height + barLevelHeight) / 2);
|
||||||
cr.lineTo(endX, (height - barLevelHeight) / 2);
|
cr.lineTo(Math.floor(endX), (height - barLevelHeight) / 2);
|
||||||
cr.fillPreserve();
|
cr.lineTo(endX, (height - barLevelHeight) / 2);
|
||||||
cr.setLineWidth(barLevelBorderWidth);
|
cr.fillPreserve();
|
||||||
cr.stroke();
|
cr.setLineWidth(barLevelBorderWidth);
|
||||||
|
cr.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
/* draw overdrive separator */
|
/* draw overdrive separator */
|
||||||
if (overdriveActive) {
|
if (overdriveActive) {
|
||||||
|
@@ -24,7 +24,7 @@ var POPUP_ANIMATION_TIME = 0.15;
|
|||||||
* placed. The arrow position may be controlled via
|
* placed. The arrow position may be controlled via
|
||||||
* setArrowOrigin(). The arrow side might be temporarily flipped
|
* setArrowOrigin(). The arrow side might be temporarily flipped
|
||||||
* depending on the box size and source position to keep the box
|
* depending on the box size and source position to keep the box
|
||||||
* totally inside the monitor if possible.
|
* totally inside the monitor workarea if possible.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
var BoxPointer = GObject.registerClass({
|
var BoxPointer = GObject.registerClass({
|
||||||
@@ -33,8 +33,6 @@ 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;
|
||||||
@@ -47,10 +45,6 @@ var BoxPointer = GObject.registerClass({
|
|||||||
this._border.connect('repaint', this._drawBorder.bind(this));
|
this._border.connect('repaint', this._drawBorder.bind(this));
|
||||||
this.add_actor(this._border);
|
this.add_actor(this._border);
|
||||||
this.bin.raise(this._border);
|
this.bin.raise(this._border);
|
||||||
this._xOffset = 0;
|
|
||||||
this._yOffset = 0;
|
|
||||||
this._xPosition = 0;
|
|
||||||
this._yPosition = 0;
|
|
||||||
this._sourceAlignment = 0.5;
|
this._sourceAlignment = 0.5;
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
this._muteInput();
|
this._muteInput();
|
||||||
@@ -118,23 +112,23 @@ var BoxPointer = GObject.registerClass({
|
|||||||
if (animate & PopupAnimation.SLIDE) {
|
if (animate & PopupAnimation.SLIDE) {
|
||||||
switch (this._arrowSide) {
|
switch (this._arrowSide) {
|
||||||
case St.Side.TOP:
|
case St.Side.TOP:
|
||||||
this.yOffset = -rise;
|
this.translation_y = -rise;
|
||||||
break;
|
break;
|
||||||
case St.Side.BOTTOM:
|
case St.Side.BOTTOM:
|
||||||
this.yOffset = rise;
|
this.translation_y = rise;
|
||||||
break;
|
break;
|
||||||
case St.Side.LEFT:
|
case St.Side.LEFT:
|
||||||
this.xOffset = -rise;
|
this.translation_x = -rise;
|
||||||
break;
|
break;
|
||||||
case St.Side.RIGHT:
|
case St.Side.RIGHT:
|
||||||
this.xOffset = rise;
|
this.translation_x = rise;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Tweener.addTween(this, { opacity: 255,
|
Tweener.addTween(this, { opacity: 255,
|
||||||
xOffset: 0,
|
translation_x: 0,
|
||||||
yOffset: 0,
|
translation_y: 0,
|
||||||
transition: 'linear',
|
transition: 'linear',
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
this._unmuteInput();
|
this._unmuteInput();
|
||||||
@@ -148,8 +142,8 @@ var BoxPointer = GObject.registerClass({
|
|||||||
if (!this.visible)
|
if (!this.visible)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let xOffset = 0;
|
let translationX = 0;
|
||||||
let yOffset = 0;
|
let translationY = 0;
|
||||||
let themeNode = this.get_theme_node();
|
let themeNode = this.get_theme_node();
|
||||||
let rise = themeNode.get_length('-arrow-rise');
|
let rise = themeNode.get_length('-arrow-rise');
|
||||||
let fade = (animate & PopupAnimation.FADE);
|
let fade = (animate & PopupAnimation.FADE);
|
||||||
@@ -158,16 +152,16 @@ var BoxPointer = GObject.registerClass({
|
|||||||
if (animate & PopupAnimation.SLIDE) {
|
if (animate & PopupAnimation.SLIDE) {
|
||||||
switch (this._arrowSide) {
|
switch (this._arrowSide) {
|
||||||
case St.Side.TOP:
|
case St.Side.TOP:
|
||||||
yOffset = rise;
|
translationY = rise;
|
||||||
break;
|
break;
|
||||||
case St.Side.BOTTOM:
|
case St.Side.BOTTOM:
|
||||||
yOffset = -rise;
|
translationY = -rise;
|
||||||
break;
|
break;
|
||||||
case St.Side.LEFT:
|
case St.Side.LEFT:
|
||||||
xOffset = rise;
|
translationX = rise;
|
||||||
break;
|
break;
|
||||||
case St.Side.RIGHT:
|
case St.Side.RIGHT:
|
||||||
xOffset = -rise;
|
translationX = -rise;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -176,15 +170,15 @@ var BoxPointer = GObject.registerClass({
|
|||||||
|
|
||||||
Tweener.removeTweens(this);
|
Tweener.removeTweens(this);
|
||||||
Tweener.addTween(this, { opacity: fade ? 0 : 255,
|
Tweener.addTween(this, { opacity: fade ? 0 : 255,
|
||||||
xOffset: xOffset,
|
translation_x: translationX,
|
||||||
yOffset: yOffset,
|
translation_y: translationY,
|
||||||
transition: 'linear',
|
transition: 'linear',
|
||||||
time: animationTime,
|
time: animationTime,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
this.hide();
|
this.hide();
|
||||||
this.opacity = 0;
|
this.opacity = 0;
|
||||||
this.xOffset = 0;
|
this.translation_x = 0;
|
||||||
this.yOffset = 0;
|
this.translation_y = 0;
|
||||||
if (onComplete)
|
if (onComplete)
|
||||||
onComplete();
|
onComplete();
|
||||||
}
|
}
|
||||||
@@ -477,11 +471,15 @@ var BoxPointer = GObject.registerClass({
|
|||||||
_reposition() {
|
_reposition() {
|
||||||
let sourceActor = this._sourceActor;
|
let sourceActor = this._sourceActor;
|
||||||
let alignment = this._arrowAlignment;
|
let alignment = this._arrowAlignment;
|
||||||
|
let monitorIndex = Main.layoutManager.findIndexForActor(sourceActor);
|
||||||
|
|
||||||
|
this._sourceAllocation = Shell.util_get_transformed_allocation(sourceActor);
|
||||||
|
this._workArea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
|
||||||
|
|
||||||
// Position correctly relative to the sourceActor
|
// Position correctly relative to the sourceActor
|
||||||
let sourceNode = sourceActor.get_theme_node();
|
let sourceNode = sourceActor.get_theme_node();
|
||||||
let sourceContentBox = sourceNode.get_content_box(sourceActor.get_allocation_box());
|
let sourceContentBox = sourceNode.get_content_box(sourceActor.get_allocation_box());
|
||||||
let sourceAllocation = Shell.util_get_transformed_allocation(sourceActor);
|
let sourceAllocation = this._sourceAllocation;
|
||||||
let sourceCenterX = sourceAllocation.x1 + sourceContentBox.x1 + (sourceContentBox.x2 - sourceContentBox.x1) * this._sourceAlignment;
|
let sourceCenterX = sourceAllocation.x1 + sourceContentBox.x1 + (sourceContentBox.x2 - sourceContentBox.x1) * this._sourceAlignment;
|
||||||
let sourceCenterY = sourceAllocation.y1 + sourceContentBox.y1 + (sourceContentBox.y2 - sourceContentBox.y1) * this._sourceAlignment;
|
let sourceCenterY = sourceAllocation.y1 + sourceContentBox.y1 + (sourceContentBox.y2 - sourceContentBox.y1) * this._sourceAlignment;
|
||||||
let [minWidth, minHeight, natWidth, natHeight] = this.get_preferred_size();
|
let [minWidth, minHeight, natWidth, natHeight] = this.get_preferred_size();
|
||||||
@@ -489,7 +487,7 @@ var BoxPointer = GObject.registerClass({
|
|||||||
// We also want to keep it onscreen, and separated from the
|
// We also want to keep it onscreen, and separated from the
|
||||||
// edge by the same distance as the main part of the box is
|
// edge by the same distance as the main part of the box is
|
||||||
// separated from its sourceActor
|
// separated from its sourceActor
|
||||||
let monitor = Main.layoutManager.findMonitorForActor(sourceActor);
|
let workarea = this._workArea;
|
||||||
let themeNode = this.get_theme_node();
|
let themeNode = this.get_theme_node();
|
||||||
let borderWidth = themeNode.get_length('-arrow-border-width');
|
let borderWidth = themeNode.get_length('-arrow-border-width');
|
||||||
let arrowBase = themeNode.get_length('-arrow-base');
|
let arrowBase = themeNode.get_length('-arrow-base');
|
||||||
@@ -539,8 +537,8 @@ var BoxPointer = GObject.registerClass({
|
|||||||
case St.Side.BOTTOM:
|
case St.Side.BOTTOM:
|
||||||
resX = sourceCenterX - (halfMargin + (natWidth - margin) * alignment);
|
resX = sourceCenterX - (halfMargin + (natWidth - margin) * alignment);
|
||||||
|
|
||||||
resX = Math.max(resX, monitor.x + padding);
|
resX = Math.max(resX, workarea.x + padding);
|
||||||
resX = Math.min(resX, monitor.x + monitor.width - (padding + natWidth));
|
resX = Math.min(resX, workarea.x + workarea.width - (padding + natWidth));
|
||||||
|
|
||||||
arrowOrigin = sourceCenterX - resX;
|
arrowOrigin = sourceCenterX - resX;
|
||||||
if (arrowOrigin <= (x1 + (borderRadius + halfBase))) {
|
if (arrowOrigin <= (x1 + (borderRadius + halfBase))) {
|
||||||
@@ -558,8 +556,8 @@ var BoxPointer = GObject.registerClass({
|
|||||||
case St.Side.RIGHT:
|
case St.Side.RIGHT:
|
||||||
resY = sourceCenterY - (halfMargin + (natHeight - margin) * alignment);
|
resY = sourceCenterY - (halfMargin + (natHeight - margin) * alignment);
|
||||||
|
|
||||||
resY = Math.max(resY, monitor.y + padding);
|
resY = Math.max(resY, workarea.y + padding);
|
||||||
resY = Math.min(resY, monitor.y + monitor.height - (padding + natHeight));
|
resY = Math.min(resY, workarea.y + workarea.height - (padding + natHeight));
|
||||||
|
|
||||||
arrowOrigin = sourceCenterY - resY;
|
arrowOrigin = sourceCenterY - resY;
|
||||||
if (arrowOrigin <= (y1 + (borderRadius + halfBase))) {
|
if (arrowOrigin <= (y1 + (borderRadius + halfBase))) {
|
||||||
@@ -583,9 +581,9 @@ var BoxPointer = GObject.registerClass({
|
|||||||
parent = parent.get_parent();
|
parent = parent.get_parent();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._xPosition = Math.floor(x);
|
// Actually set the position
|
||||||
this._yPosition = Math.floor(y);
|
this.x = Math.floor(x);
|
||||||
this._shiftActor();
|
this.y = Math.floor(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @origin: Coordinate specifying middle of the arrow, along
|
// @origin: Coordinate specifying middle of the arrow, along
|
||||||
@@ -608,44 +606,30 @@ var BoxPointer = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_shiftActor() {
|
|
||||||
// Since the position of the BoxPointer depends on the allocated size
|
|
||||||
// of the BoxPointer and the position of the source actor, trying
|
|
||||||
// to position the BoxPointer via the x/y properties will result in
|
|
||||||
// allocation loops and warnings. Instead we do the positioning via
|
|
||||||
// the anchor point, which is independent of allocation, and leave
|
|
||||||
// x == y == 0.
|
|
||||||
this.set_anchor_point(-(this._xPosition + this._xOffset),
|
|
||||||
-(this._yPosition + this._yOffset));
|
|
||||||
}
|
|
||||||
|
|
||||||
_calculateArrowSide(arrowSide) {
|
_calculateArrowSide(arrowSide) {
|
||||||
let sourceAllocation = Shell.util_get_transformed_allocation(this._sourceActor);
|
let sourceAllocation = this._sourceAllocation;
|
||||||
let [minWidth, minHeight, boxWidth, boxHeight] = this.get_preferred_size();
|
let [minWidth, minHeight, boxWidth, boxHeight] = this.get_preferred_size();
|
||||||
let monitorActor = this.sourceActor;
|
let workarea = this._workArea;
|
||||||
if (!monitorActor)
|
|
||||||
monitorActor = this;
|
|
||||||
let monitor = Main.layoutManager.findMonitorForActor(monitorActor);
|
|
||||||
|
|
||||||
switch (arrowSide) {
|
switch (arrowSide) {
|
||||||
case St.Side.TOP:
|
case St.Side.TOP:
|
||||||
if (sourceAllocation.y2 + boxHeight > monitor.y + monitor.height &&
|
if (sourceAllocation.y2 + boxHeight > workarea.y + workarea.height &&
|
||||||
boxHeight < sourceAllocation.y1 - monitor.y)
|
boxHeight < sourceAllocation.y1 - workarea.y)
|
||||||
return St.Side.BOTTOM;
|
return St.Side.BOTTOM;
|
||||||
break;
|
break;
|
||||||
case St.Side.BOTTOM:
|
case St.Side.BOTTOM:
|
||||||
if (sourceAllocation.y1 - boxHeight < monitor.y &&
|
if (sourceAllocation.y1 - boxHeight < workarea.y &&
|
||||||
boxHeight < monitor.y + monitor.height - sourceAllocation.y2)
|
boxHeight < workarea.y + workarea.height - sourceAllocation.y2)
|
||||||
return St.Side.TOP;
|
return St.Side.TOP;
|
||||||
break;
|
break;
|
||||||
case St.Side.LEFT:
|
case St.Side.LEFT:
|
||||||
if (sourceAllocation.x2 + boxWidth > monitor.x + monitor.width &&
|
if (sourceAllocation.x2 + boxWidth > workarea.x + workarea.width &&
|
||||||
boxWidth < sourceAllocation.x1 - monitor.x)
|
boxWidth < sourceAllocation.x1 - workarea.x)
|
||||||
return St.Side.RIGHT;
|
return St.Side.RIGHT;
|
||||||
break;
|
break;
|
||||||
case St.Side.RIGHT:
|
case St.Side.RIGHT:
|
||||||
if (sourceAllocation.x1 - boxWidth < monitor.x &&
|
if (sourceAllocation.x1 - boxWidth < workarea.x &&
|
||||||
boxWidth < monitor.x + monitor.width - sourceAllocation.x2)
|
boxWidth < workarea.x + workarea.width - sourceAllocation.x2)
|
||||||
return St.Side.LEFT;
|
return St.Side.LEFT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -667,24 +651,6 @@ var BoxPointer = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set xOffset(offset) {
|
|
||||||
this._xOffset = offset;
|
|
||||||
this._shiftActor();
|
|
||||||
}
|
|
||||||
|
|
||||||
get xOffset() {
|
|
||||||
return this._xOffset;
|
|
||||||
}
|
|
||||||
|
|
||||||
set yOffset(offset) {
|
|
||||||
this._yOffset = offset;
|
|
||||||
this._shiftActor();
|
|
||||||
}
|
|
||||||
|
|
||||||
get yOffset() {
|
|
||||||
return this._yOffset;
|
|
||||||
}
|
|
||||||
|
|
||||||
updateArrowSide(side) {
|
updateArrowSide(side) {
|
||||||
this._arrowSide = side;
|
this._arrowSide = side;
|
||||||
this._border.queue_repaint();
|
this._border.queue_repaint();
|
||||||
|
@@ -584,22 +584,18 @@ var Dash = class Dash {
|
|||||||
let firstButton = iconChildren[0].child;
|
let firstButton = iconChildren[0].child;
|
||||||
let firstIcon = firstButton._delegate.icon;
|
let firstIcon = firstButton._delegate.icon;
|
||||||
|
|
||||||
let minHeight, natHeight;
|
// Enforce valid spacings during the size request
|
||||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
|
||||||
|
|
||||||
// Enforce the current icon size during the size request
|
|
||||||
firstIcon.icon.ensure_style();
|
firstIcon.icon.ensure_style();
|
||||||
let [, currentHeight] = firstIcon.icon.get_size();
|
let [, iconHeight] = firstIcon.icon.get_preferred_height(-1);
|
||||||
firstIcon.icon.set_height(this.iconSize * scaleFactor);
|
let [, buttonHeight] = firstButton.get_preferred_height(-1);
|
||||||
[minHeight, natHeight] = firstButton.get_preferred_height(-1);
|
|
||||||
firstIcon.icon.set_height(currentHeight);
|
|
||||||
|
|
||||||
// Subtract icon padding and box spacing from the available height
|
// Subtract icon padding and box spacing from the available height
|
||||||
availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
|
availHeight -= iconChildren.length * (buttonHeight - iconHeight) +
|
||||||
(iconChildren.length - 1) * spacing;
|
(iconChildren.length - 1) * spacing;
|
||||||
|
|
||||||
let availSize = availHeight / iconChildren.length;
|
let availSize = availHeight / iconChildren.length;
|
||||||
|
|
||||||
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
let iconSizes = baseIconSizes.map(s => s * scaleFactor);
|
let iconSizes = baseIconSizes.map(s => s * scaleFactor);
|
||||||
|
|
||||||
let newIconSize = baseIconSizes[0];
|
let newIconSize = baseIconSizes[0];
|
||||||
|
@@ -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)
|
if (l && l.get_timezone() != null)
|
||||||
this._locations.push({ location: l });
|
this._locations.push({ location: l });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,11 +136,12 @@ var WorldClocksSection = class WorldClocksSection {
|
|||||||
layout.attach(header, 0, 0, 2, 1);
|
layout.attach(header, 0, 0, 2, 1);
|
||||||
this.actor.label_actor = header;
|
this.actor.label_actor = header;
|
||||||
|
|
||||||
|
let localOffset = GLib.DateTime.new_now_local().get_utc_offset();
|
||||||
|
|
||||||
for (let i = 0; i < this._locations.length; i++) {
|
for (let i = 0; i < this._locations.length; i++) {
|
||||||
let l = this._locations[i].location;
|
let l = this._locations[i].location;
|
||||||
|
|
||||||
let name = l.get_level() == GWeather.LocationLevel.NAMED_TIMEZONE ? l.get_name()
|
let name = l.get_city_name() || l.get_name();
|
||||||
: l.get_city_name();
|
|
||||||
let label = new St.Label({ style_class: 'world-clocks-city',
|
let label = new St.Label({ style_class: 'world-clocks-city',
|
||||||
text: name,
|
text: name,
|
||||||
x_align: Clutter.ActorAlign.START,
|
x_align: Clutter.ActorAlign.START,
|
||||||
@@ -149,7 +150,8 @@ var WorldClocksSection = class WorldClocksSection {
|
|||||||
|
|
||||||
let time = new St.Label({ style_class: 'world-clocks-time' });
|
let time = new St.Label({ style_class: 'world-clocks-time' });
|
||||||
|
|
||||||
let offset = l.get_timezone().get_offset() / 60.;
|
let otherOffset = this._getTimeAtLocation(l).get_utc_offset();
|
||||||
|
let offset = (otherOffset - localOffset) / GLib.TIME_SPAN_HOUR;
|
||||||
let fmt = (Math.trunc(offset) == offset) ? '%s%.0f' : '%s%.1f';
|
let fmt = (Math.trunc(offset) == offset) ? '%s%.0f' : '%s%.1f';
|
||||||
let prefix = (offset >= 0) ? '+' : '-';
|
let prefix = (offset >= 0) ? '+' : '-';
|
||||||
let tz = new St.Label({ style_class: 'world-clocks-timezone',
|
let tz = new St.Label({ style_class: 'world-clocks-timezone',
|
||||||
@@ -182,11 +184,15 @@ var WorldClocksSection = class WorldClocksSection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getTimeAtLocation(location) {
|
||||||
|
let tz = GLib.TimeZone.new(location.get_timezone().get_tzid());
|
||||||
|
return GLib.DateTime.new_now(tz);
|
||||||
|
}
|
||||||
|
|
||||||
_updateLabels() {
|
_updateLabels() {
|
||||||
for (let i = 0; i < this._locations.length; i++) {
|
for (let i = 0; i < this._locations.length; i++) {
|
||||||
let l = this._locations[i];
|
let l = this._locations[i];
|
||||||
let tz = GLib.TimeZone.new(l.location.get_timezone().get_tzid());
|
let now = this._getTimeAtLocation(l.location);
|
||||||
let now = GLib.DateTime.new_now(tz);
|
|
||||||
l.actor.text = Util.formatTime(now, { timeOnly: true });
|
l.actor.text = Util.formatTime(now, { timeOnly: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -470,10 +476,9 @@ 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.actor.label_actor = this._clockDisplay;
|
this.label_actor = this._clockDisplay;
|
||||||
this.actor.add_actor(box);
|
this.add_actor(box);
|
||||||
this.actor.add_style_class_name ('clock-display');
|
this.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 });
|
||||||
|
@@ -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_mode: Pango.EllipsizeMode.NONE,
|
let textProps = { ellipsize: Pango.EllipsizeMode.NONE,
|
||||||
line_wrap: true };
|
line_wrap: true };
|
||||||
Object.assign(this._subtitle.clutter_text, textProps);
|
this._subtitle.clutter_text.set(textProps);
|
||||||
Object.assign(this._body.clutter_text, textProps);
|
this._body.clutter_text.set(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';
|
||||||
|
@@ -306,6 +306,9 @@ var _Draggable = class _Draggable {
|
|||||||
* for the draggable.
|
* for the draggable.
|
||||||
*/
|
*/
|
||||||
startDrag(stageX, stageY, time, sequence, device) {
|
startDrag(stageX, stageY, time, sequence, device) {
|
||||||
|
if (currentDraggable)
|
||||||
|
return;
|
||||||
|
|
||||||
if (device == undefined) {
|
if (device == undefined) {
|
||||||
let event = Clutter.get_current_event();
|
let event = Clutter.get_current_event();
|
||||||
|
|
||||||
@@ -447,7 +450,8 @@ var _Draggable = class _Draggable {
|
|||||||
let [stageX, stageY] = event.get_coords();
|
let [stageX, stageY] = event.get_coords();
|
||||||
|
|
||||||
// See if the user has moved the mouse enough to trigger a drag
|
// See if the user has moved the mouse enough to trigger a drag
|
||||||
let threshold = St.Settings.get().drag_threshold;
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
let threshold = St.Settings.get().drag_threshold * scaleFactor;
|
||||||
if (!currentDraggable &&
|
if (!currentDraggable &&
|
||||||
(Math.abs(stageX - this._dragStartX) > threshold ||
|
(Math.abs(stageX - this._dragStartX) > threshold ||
|
||||||
Math.abs(stageY - this._dragStartY) > threshold)) {
|
Math.abs(stageY - this._dragStartY) > threshold)) {
|
||||||
|
@@ -96,6 +96,15 @@ 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() {
|
||||||
|
@@ -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.actor.visible)
|
if (this._boxPointer.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.actor.raise_top();
|
this._boxPointer.raise_top();
|
||||||
} else {
|
} else {
|
||||||
this._boxPointer.close(BoxPointer.PopupAnimation.NONE);
|
this._boxPointer.close(BoxPointer.PopupAnimation.NONE);
|
||||||
}
|
}
|
||||||
|
@@ -43,8 +43,6 @@ 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 });
|
||||||
@@ -104,6 +102,7 @@ class BaseIcon extends St.Bin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vfunc_style_changed() {
|
vfunc_style_changed() {
|
||||||
|
super.vfunc_style_changed();
|
||||||
let node = this.get_theme_node();
|
let node = this.get_theme_node();
|
||||||
|
|
||||||
let size;
|
let size;
|
||||||
@@ -187,8 +186,6 @@ 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,
|
||||||
|
@@ -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.actor);
|
Main.layoutManager.addChrome(this._boxPointer);
|
||||||
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.actor.add_style_class_name('keyboard-subkeys');
|
this._boxPointer.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 = true;
|
this._emojiKeyVisible = Meta.is_wayland_compositor();
|
||||||
|
|
||||||
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));
|
||||||
@@ -1162,7 +1162,7 @@ var Keyboard = class Keyboard {
|
|||||||
this._keyboardController = new KeyboardController();
|
this._keyboardController = new KeyboardController();
|
||||||
|
|
||||||
this._groups = {};
|
this._groups = {};
|
||||||
this._current_page = null;
|
this._currentPage = null;
|
||||||
|
|
||||||
this._suggestions = new Suggestions();
|
this._suggestions = new Suggestions();
|
||||||
this.actor.add(this._suggestions.actor,
|
this.actor.add(this._suggestions.actor,
|
||||||
@@ -1202,10 +1202,12 @@ 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1353,7 +1355,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._current_page, this._latched);
|
this._setCurrentLevelLatched(this._currentPage, this._latched);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1380,8 +1382,8 @@ var Keyboard = class Keyboard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_updateCurrentPageVisible() {
|
_updateCurrentPageVisible() {
|
||||||
if (this._current_page)
|
if (this._currentPage)
|
||||||
this._current_page.visible = !this._emojiActive && !this._keypadVisible;
|
this._currentPage.visible = !this._emojiActive && !this._keypadVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
_setEmojiActive(active) {
|
_setEmojiActive(active) {
|
||||||
@@ -1440,7 +1442,7 @@ var Keyboard = class Keyboard {
|
|||||||
|
|
||||||
_getGridSlots() {
|
_getGridSlots() {
|
||||||
let numOfHorizSlots = 0, numOfVertSlots;
|
let numOfHorizSlots = 0, numOfVertSlots;
|
||||||
let rows = this._current_page.get_children();
|
let rows = this._currentPage.get_children();
|
||||||
numOfVertSlots = rows.length;
|
numOfVertSlots = rows.length;
|
||||||
|
|
||||||
for (let i = 0; i < rows.length; ++i) {
|
for (let i = 0; i < rows.length; ++i) {
|
||||||
@@ -1470,7 +1472,13 @@ var Keyboard = class Keyboard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onKeyboardGroupsChanged(keyboard) {
|
_onKeyboardGroupsChanged(keyboard) {
|
||||||
this._groups = [];
|
let nonGroupActors = [this._emojiSelection.actor, this._keypad.actor];
|
||||||
|
this._aspectContainer.get_children().filter(c => !nonGroupActors.includes(c)).forEach(c => {
|
||||||
|
c.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
|
this._currentPage = null;
|
||||||
|
this._groups = {};
|
||||||
this._onGroupChanged();
|
this._onGroupChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1513,12 +1521,12 @@ var Keyboard = class Keyboard {
|
|||||||
let activeGroupName = this._keyboardController.getCurrentGroup();
|
let activeGroupName = this._keyboardController.getCurrentGroup();
|
||||||
let layers = this._groups[activeGroupName];
|
let layers = this._groups[activeGroupName];
|
||||||
|
|
||||||
if (this._current_page != null) {
|
if (this._currentPage != null) {
|
||||||
this._setCurrentLevelLatched(this._current_page, false);
|
this._setCurrentLevelLatched(this._currentPage, false);
|
||||||
this._current_page.hide();
|
this._currentPage.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._current_page = layers[activeLevel];
|
this._currentPage = layers[activeLevel];
|
||||||
this._updateCurrentPageVisible();
|
this._updateCurrentPageVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -252,7 +252,7 @@ var LayoutManager = GObject.registerClass({
|
|||||||
|
|
||||||
// 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
|
||||||
// position and size set in setDummyCursorGeometry.
|
// position and size set in setDummyCursorGeometry.
|
||||||
this.dummyCursor = new St.Widget({ width: 0, height: 0, visible: false });
|
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);
|
global.stage.remove_actor(global.top_window_group);
|
||||||
|
@@ -18,9 +18,6 @@ var NO_CHANGE = 0.0;
|
|||||||
var POINTER_REST_TIME = 1000; // milliseconds
|
var POINTER_REST_TIME = 1000; // milliseconds
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
|
||||||
const SHOW_KEY = 'screen-magnifier-enabled';
|
|
||||||
|
|
||||||
const MAGNIFIER_SCHEMA = 'org.gnome.desktop.a11y.magnifier';
|
const MAGNIFIER_SCHEMA = 'org.gnome.desktop.a11y.magnifier';
|
||||||
const SCREEN_POSITION_KEY = 'screen-position';
|
const SCREEN_POSITION_KEY = 'screen-position';
|
||||||
const MAG_FACTOR_KEY = 'mag-factor';
|
const MAG_FACTOR_KEY = 'mag-factor';
|
||||||
@@ -56,20 +53,19 @@ var MouseSpriteContent = GObject.registerClass({
|
|||||||
|
|
||||||
vfunc_get_preferred_size() {
|
vfunc_get_preferred_size() {
|
||||||
if (!this._texture)
|
if (!this._texture)
|
||||||
return [0, 0];
|
return [false, 0, 0];
|
||||||
|
|
||||||
return [this._texture.get_width(), this._texture.get_height()];
|
return [true, this._texture.get_width(), this._texture.get_height()];
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_paint_content(actor, node) {
|
vfunc_paint_content(actor, node) {
|
||||||
if (!this._texture)
|
if (!this._texture)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let color = new Clutter.Color();
|
let color = Clutter.Color.get_static(Clutter.StaticColor.WHITE);
|
||||||
|
let [minFilter, magFilter] = actor.get_content_scaling_filters();
|
||||||
let textureNode = new Clutter.TextureNode(this._texture,
|
let textureNode = new Clutter.TextureNode(this._texture,
|
||||||
color,
|
color, minFilter, magFilter);
|
||||||
Clutter.ScalingFilter.NEAREST,
|
|
||||||
Clutter.ScalingFilter.NEAREST);
|
|
||||||
textureNode.set_name('MouseSpriteContent');
|
textureNode.set_name('MouseSpriteContent');
|
||||||
node.add_child(textureNode);
|
node.add_child(textureNode);
|
||||||
|
|
||||||
@@ -84,8 +80,14 @@ var MouseSpriteContent = GObject.registerClass({
|
|||||||
if (this._texture == coglTexture)
|
if (this._texture == coglTexture)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
let oldTexture = this._texture;
|
||||||
this._texture = coglTexture;
|
this._texture = coglTexture;
|
||||||
this.invalidate();
|
this.invalidate();
|
||||||
|
|
||||||
|
if (!oldTexture || !coglTexture ||
|
||||||
|
oldTexture.get_width() != coglTexture.get_width() ||
|
||||||
|
oldTexture.get_height() != coglTexture.get_height())
|
||||||
|
this.invalidate_size();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -100,7 +102,6 @@ var Magnifier = class Magnifier {
|
|||||||
|
|
||||||
this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE });
|
this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE });
|
||||||
this._mouseSprite.content = new MouseSpriteContent();
|
this._mouseSprite.content = new MouseSpriteContent();
|
||||||
this._updateSpriteTexture();
|
|
||||||
|
|
||||||
this._cursorRoot = new Clutter.Actor();
|
this._cursorRoot = new Clutter.Actor();
|
||||||
this._cursorRoot.add_actor(this._mouseSprite);
|
this._cursorRoot.add_actor(this._mouseSprite);
|
||||||
@@ -113,14 +114,16 @@ var Magnifier = class Magnifier {
|
|||||||
|
|
||||||
let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
|
let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
|
||||||
this._zoomRegions.push(aZoomRegion);
|
this._zoomRegions.push(aZoomRegion);
|
||||||
let showAtLaunch = this._settingsInit(aZoomRegion);
|
this._settingsInit(aZoomRegion);
|
||||||
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
|
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
|
||||||
|
|
||||||
cursorTracker.connect('cursor-changed', this._updateMouseSprite.bind(this));
|
St.Settings.get().connect('notify::magnifier-active', () => {
|
||||||
|
this.setActive(St.Settings.get().magnifier_active);
|
||||||
|
});
|
||||||
|
|
||||||
// Export to dbus.
|
// Export to dbus.
|
||||||
magDBusService = new MagnifierDBus.ShellMagnifier();
|
magDBusService = new MagnifierDBus.ShellMagnifier();
|
||||||
this.setActive(showAtLaunch);
|
this.setActive(St.Settings.get().magnifier_active);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -153,9 +156,15 @@ var Magnifier = class Magnifier {
|
|||||||
|
|
||||||
if (isActive != activate) {
|
if (isActive != activate) {
|
||||||
if (activate) {
|
if (activate) {
|
||||||
|
this._updateMouseSprite();
|
||||||
|
this._cursorSpriteChangedId =
|
||||||
|
this._cursorTracker.connect('cursor-changed',
|
||||||
|
this._updateMouseSprite.bind(this));
|
||||||
Meta.disable_unredirect_for_display(global.display);
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
this.startTrackingMouse();
|
this.startTrackingMouse();
|
||||||
} else {
|
} else {
|
||||||
|
this._cursorTracker.disconnect(this._cursorSpriteChangedId);
|
||||||
|
this._mouseSprite.content.texture = null;
|
||||||
Meta.enable_unredirect_for_display(global.display);
|
Meta.enable_unredirect_for_display(global.display);
|
||||||
this.stopTrackingMouse();
|
this.stopTrackingMouse();
|
||||||
}
|
}
|
||||||
@@ -493,13 +502,8 @@ var Magnifier = class Magnifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_settingsInit(zoomRegion) {
|
_settingsInit(zoomRegion) {
|
||||||
this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA });
|
|
||||||
this._settings = new Gio.Settings({ schema_id: MAGNIFIER_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: MAGNIFIER_SCHEMA });
|
||||||
|
|
||||||
this._appSettings.connect('changed::' + SHOW_KEY, () => {
|
|
||||||
this.setActive(this._appSettings.get_boolean(SHOW_KEY));
|
|
||||||
});
|
|
||||||
|
|
||||||
this._settings.connect('changed::' + SCREEN_POSITION_KEY,
|
this._settings.connect('changed::' + SCREEN_POSITION_KEY,
|
||||||
this._updateScreenPosition.bind(this));
|
this._updateScreenPosition.bind(this));
|
||||||
this._settings.connect('changed::' + MAG_FACTOR_KEY,
|
this._settings.connect('changed::' + MAG_FACTOR_KEY,
|
||||||
@@ -606,8 +610,6 @@ var Magnifier = class Magnifier {
|
|||||||
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
|
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
|
||||||
this.addCrosshairs();
|
this.addCrosshairs();
|
||||||
this.setCrosshairsVisible(showCrosshairs);
|
this.setCrosshairsVisible(showCrosshairs);
|
||||||
|
|
||||||
return this._appSettings.get_boolean(SHOW_KEY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateScreenPosition() {
|
_updateScreenPosition() {
|
||||||
@@ -754,13 +756,41 @@ var ZoomRegion = class ZoomRegion {
|
|||||||
|
|
||||||
this._pointerIdleMonitor = Meta.IdleMonitor.get_for_device(Meta.VIRTUAL_CORE_POINTER_ID);
|
this._pointerIdleMonitor = Meta.IdleMonitor.get_for_device(Meta.VIRTUAL_CORE_POINTER_ID);
|
||||||
this._scrollContentsTimerId = 0;
|
this._scrollContentsTimerId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
Main.layoutManager.connect('monitors-changed',
|
_connectSignals() {
|
||||||
this._monitorsChanged.bind(this));
|
if (this._signalConnections)
|
||||||
this._focusCaretTracker.connect('caret-moved',
|
return;
|
||||||
this._updateCaret.bind(this));
|
|
||||||
this._focusCaretTracker.connect('focus-changed',
|
this._signalConnections = [];
|
||||||
this._updateFocus.bind(this));
|
let id = Main.layoutManager.connect('monitors-changed',
|
||||||
|
this._monitorsChanged.bind(this));
|
||||||
|
this._signalConnections.push([Main.layoutManager, id]);
|
||||||
|
|
||||||
|
id = this._focusCaretTracker.connect('caret-moved', this._updateCaret.bind(this));
|
||||||
|
this._signalConnections.push([this._focusCaretTracker, id]);
|
||||||
|
|
||||||
|
id = this._focusCaretTracker.connect('focus-changed', this._updateFocus.bind(this));
|
||||||
|
this._signalConnections.push([this._focusCaretTracker, id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
_disconnectSignals() {
|
||||||
|
for (let [obj, id] of this._signalConnections)
|
||||||
|
obj.disconnect(id);
|
||||||
|
|
||||||
|
delete this._signalConnections;
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateScreenPosition() {
|
||||||
|
if (this._screenPosition == GDesktopEnums.MagnifierScreenPosition.NONE)
|
||||||
|
this._setViewPort({
|
||||||
|
x: this._viewPortX,
|
||||||
|
y: this._viewPortY,
|
||||||
|
width: this._viewPortWidth,
|
||||||
|
height: this._viewPortHeight
|
||||||
|
});
|
||||||
|
else
|
||||||
|
this.setScreenPosition(this._screenPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateFocus(caller, event) {
|
_updateFocus(caller, event) {
|
||||||
@@ -808,10 +838,13 @@ var ZoomRegion = class ZoomRegion {
|
|||||||
this._createActors();
|
this._createActors();
|
||||||
if (this._isMouseOverRegion())
|
if (this._isMouseOverRegion())
|
||||||
this._magnifier.hideSystemCursor();
|
this._magnifier.hideSystemCursor();
|
||||||
|
this._updateScreenPosition();
|
||||||
this._updateMagViewGeometry();
|
this._updateMagViewGeometry();
|
||||||
this._updateCloneGeometry();
|
this._updateCloneGeometry();
|
||||||
this._updateMousePosition();
|
this._updateMousePosition();
|
||||||
|
this._connectSignals();
|
||||||
} else {
|
} else {
|
||||||
|
this._disconnectSignals();
|
||||||
this._destroyActors();
|
this._destroyActors();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1561,18 +1594,8 @@ var ZoomRegion = class ZoomRegion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_monitorsChanged() {
|
_monitorsChanged() {
|
||||||
if (!this.isActive())
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._background.set_size(global.screen_width, global.screen_height);
|
this._background.set_size(global.screen_width, global.screen_height);
|
||||||
|
this._updateScreenPosition();
|
||||||
if (this._screenPosition == GDesktopEnums.MagnifierScreenPosition.NONE)
|
|
||||||
this._setViewPort({ x: this._viewPortX,
|
|
||||||
y: this._viewPortY,
|
|
||||||
width: this._viewPortWidth,
|
|
||||||
height: this._viewPortHeight });
|
|
||||||
else
|
|
||||||
this.setScreenPosition(this._screenPosition);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -211,13 +211,6 @@ function _initializeUI() {
|
|||||||
|
|
||||||
_startDate = new Date();
|
_startDate = new Date();
|
||||||
|
|
||||||
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
|
|
||||||
if (perfModuleName) {
|
|
||||||
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
|
|
||||||
let module = eval('imports.perf.' + perfModuleName + ';');
|
|
||||||
Scripting.runPerfScript(module, perfOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
ExtensionDownloader.init();
|
ExtensionDownloader.init();
|
||||||
ExtensionSystem.init();
|
ExtensionSystem.init();
|
||||||
|
|
||||||
@@ -239,6 +232,13 @@ function _initializeUI() {
|
|||||||
Shell.Global.log_structured('GNOME Shell started at ' + _startDate,
|
Shell.Global.log_structured('GNOME Shell started at ' + _startDate,
|
||||||
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
|
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
|
||||||
|
if (perfModuleName) {
|
||||||
|
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
|
||||||
|
let module = eval('imports.perf.' + perfModuleName + ';');
|
||||||
|
Scripting.runPerfScript(module, perfOutput);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -584,7 +584,6 @@ 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;
|
||||||
|
@@ -95,28 +95,6 @@ var OsdMonitorLabeler = class {
|
|||||||
|
|
||||||
this._reset();
|
this._reset();
|
||||||
|
|
||||||
for (let id in params) {
|
|
||||||
let monitor = this._monitorManager.get_monitor_for_output(id);
|
|
||||||
if (monitor == -1)
|
|
||||||
continue;
|
|
||||||
this._monitorLabels.get(monitor).push(params[id].deep_unpack());
|
|
||||||
}
|
|
||||||
|
|
||||||
// In mirrored display setups, more than one physical outputs
|
|
||||||
// might be showing the same logical monitor. In that case, we
|
|
||||||
// join each output's labels on the same OSD widget.
|
|
||||||
for (let [monitor, labels] of this._monitorLabels.entries()) {
|
|
||||||
labels.sort();
|
|
||||||
this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' ')));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
show2(client, params) {
|
|
||||||
if (!this._trackClient(client))
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._reset();
|
|
||||||
|
|
||||||
for (let connector in params) {
|
for (let connector in params) {
|
||||||
let monitor = this._monitorManager.get_monitor_for_connector(connector);
|
let monitor = this._monitorManager.get_monitor_for_connector(connector);
|
||||||
if (monitor == -1)
|
if (monitor == -1)
|
||||||
|
@@ -369,17 +369,15 @@ class DashSpacer extends St.Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vfunc_get_preferred_width(forHeight) {
|
vfunc_get_preferred_width(forHeight) {
|
||||||
let box = this.get_allocation_box();
|
if (this._bindConstraint)
|
||||||
let minWidth = super.vfunc_get_preferred_width(forHeight)[0];
|
return this._bindConstraint.source.get_preferred_width(forHeight);
|
||||||
let natWidth = box.x2 - box.x1;
|
return super.vfunc_get_preferred_width(forHeight);
|
||||||
return [minWidth, natWidth];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_get_preferred_height(forWidth) {
|
vfunc_get_preferred_height(forWidth) {
|
||||||
let box = this.get_allocation_box();
|
if (this._bindConstraint)
|
||||||
let minHeight = super.vfunc_get_preferred_height(forWidth)[0];
|
return this._bindConstraint.source.get_preferred_height(forWidth);
|
||||||
let natHeight = box.y2 - box.y1;
|
return super.vfunc_get_preferred_height(forWidth);
|
||||||
return [minHeight, natHeight];
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -374,12 +374,12 @@ var PadDiagram = GObject.registerClass({
|
|||||||
svgData += this._cssString();
|
svgData += this._cssString();
|
||||||
svgData += this._wrappingSvgFooter();
|
svgData += this._wrappingSvgFooter();
|
||||||
|
|
||||||
let handle = new Rsvg.Handle();
|
let istream = new Gio.MemoryInputStream();
|
||||||
handle.set_base_uri(GLib.path_get_dirname(this._imagePath));
|
istream.add_bytes(new GLib.Bytes(svgData));
|
||||||
handle.write(svgData);
|
|
||||||
handle.close();
|
|
||||||
|
|
||||||
return handle;
|
return Rsvg.Handle.new_from_stream_sync(istream,
|
||||||
|
Gio.File.new_for_path(this._imagePath),
|
||||||
|
0, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateDiagramScale() {
|
_updateDiagramScale() {
|
||||||
|
105
js/ui/panel.js
105
js/ui/panel.js
@@ -1,6 +1,6 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const { Atk, Clutter, Gio, GLib, GObject, Gtk, Meta, Shell, St } = imports.gi;
|
const { Atk, Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||||
const Cairo = imports.cairo;
|
const Cairo = imports.cairo;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
|
|
||||||
@@ -75,6 +75,9 @@ 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);
|
||||||
|
|
||||||
@@ -105,6 +108,8 @@ class AppMenu extends PopupMenu.PopupMenu {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
this.addAction(_("Quit"), () => {
|
this.addAction(_("Quit"), () => {
|
||||||
this._app.request_quit();
|
this._app.request_quit();
|
||||||
});
|
});
|
||||||
@@ -172,13 +177,6 @@ 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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,21 +194,20 @@ var AppMenuButton = GObject.registerClass({
|
|||||||
_init(panel) {
|
_init(panel) {
|
||||||
super._init(0.0, null, true);
|
super._init(0.0, null, true);
|
||||||
|
|
||||||
this.actor.accessible_role = Atk.Role.MENU;
|
this.accessible_role = Atk.Role.MENU;
|
||||||
|
|
||||||
this._startingApps = [];
|
this._startingApps = [];
|
||||||
|
|
||||||
this._menuManager = panel.menuManager;
|
this._menuManager = panel.menuManager;
|
||||||
this._gtkSettings = Gtk.Settings.get_default();
|
|
||||||
this._targetApp = null;
|
this._targetApp = null;
|
||||||
this._busyNotifyId = 0;
|
this._busyNotifyId = 0;
|
||||||
|
|
||||||
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.actor.add_actor(bin);
|
this.add_actor(bin);
|
||||||
|
|
||||||
this.actor.bind_property("reactive", this.actor, "can-focus", 0);
|
this.bind_property("reactive", this, "can-focus", 0);
|
||||||
this.actor.reactive = false;
|
this.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);
|
||||||
@@ -266,10 +263,10 @@ var AppMenuButton = GObject.registerClass({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._visible = true;
|
this._visible = true;
|
||||||
this.actor.reactive = true;
|
this.reactive = true;
|
||||||
this.show();
|
this.show();
|
||||||
Tweener.removeTweens(this.actor);
|
Tweener.removeTweens(this);
|
||||||
Tweener.addTween(this.actor,
|
Tweener.addTween(this,
|
||||||
{ opacity: 255,
|
{ opacity: 255,
|
||||||
time: Overview.ANIMATION_TIME,
|
time: Overview.ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad' });
|
transition: 'easeOutQuad' });
|
||||||
@@ -280,9 +277,9 @@ var AppMenuButton = GObject.registerClass({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._visible = false;
|
this._visible = false;
|
||||||
this.actor.reactive = false;
|
this.reactive = false;
|
||||||
Tweener.removeTweens(this.actor);
|
Tweener.removeTweens(this);
|
||||||
Tweener.addTween(this.actor,
|
Tweener.addTween(this,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
time: Overview.ANIMATION_TIME,
|
time: Overview.ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
@@ -405,7 +402,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.actor.set_accessible_name(this._targetApp.get_name());
|
this.set_accessible_name(this._targetApp.get_name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,7 +420,7 @@ var AppMenuButton = GObject.registerClass({
|
|||||||
else
|
else
|
||||||
this.stopAnimation();
|
this.stopAnimation();
|
||||||
|
|
||||||
this.actor.reactive = (visible && !isBusy);
|
this.reactive = (visible && !isBusy);
|
||||||
|
|
||||||
this._syncIcon();
|
this._syncIcon();
|
||||||
this.menu.setApp(this._targetApp);
|
this.menu.setApp(this._targetApp);
|
||||||
@@ -462,28 +459,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.actor.accessible_role = Atk.Role.TOGGLE_BUTTON;
|
this.accessible_role = Atk.Role.TOGGLE_BUTTON;
|
||||||
|
|
||||||
this.actor.name = 'panelActivities';
|
this.name = 'panelActivities';
|
||||||
|
|
||||||
/* Translators: If there is no suitable word for "Activities"
|
/* 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.actor.add_actor(this._label);
|
this.add_actor(this._label);
|
||||||
|
|
||||||
this.actor.label_actor = this._label;
|
this.label_actor = this._label;
|
||||||
|
|
||||||
this.actor.connect('captured-event', this._onCapturedEvent.bind(this));
|
this.connect('captured-event', this._onCapturedEvent.bind(this));
|
||||||
this.actor.connect_after('key-release-event', this._onKeyRelease.bind(this));
|
this.connect_after('key-release-event', this._onKeyRelease.bind(this));
|
||||||
|
|
||||||
Main.overview.connect('showing', () => {
|
Main.overview.connect('showing', () => {
|
||||||
this.actor.add_style_pseudo_class('overview');
|
this.add_style_pseudo_class('overview');
|
||||||
this.actor.add_accessible_state (Atk.StateType.CHECKED);
|
this.add_accessible_state (Atk.StateType.CHECKED);
|
||||||
});
|
});
|
||||||
Main.overview.connect('hiding', () => {
|
Main.overview.connect('hiding', () => {
|
||||||
this.actor.remove_style_pseudo_class('overview');
|
this.remove_style_pseudo_class('overview');
|
||||||
this.actor.remove_accessible_state (Atk.StateType.CHECKED);
|
this.remove_accessible_state (Atk.StateType.CHECKED);
|
||||||
});
|
});
|
||||||
|
|
||||||
this._xdndTimeOut = 0;
|
this._xdndTimeOut = 0;
|
||||||
@@ -536,7 +533,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.actor && Main.overview.shouldToggleByCornerOrButton())
|
if (pickedActor == this && Main.overview.shouldToggleByCornerOrButton())
|
||||||
Main.overview.toggle();
|
Main.overview.toggle();
|
||||||
|
|
||||||
Mainloop.source_remove(this._xdndTimeOut);
|
Mainloop.source_remove(this._xdndTimeOut);
|
||||||
@@ -750,7 +747,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.actor.add_child(this._indicators);
|
this.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();
|
||||||
@@ -809,6 +806,7 @@ class AggregateMenu extends PanelMenu.Button {
|
|||||||
menuLayout.addSizeChild(this._location.menu.actor);
|
menuLayout.addSizeChild(this._location.menu.actor);
|
||||||
menuLayout.addSizeChild(this._rfkill.menu.actor);
|
menuLayout.addSizeChild(this._rfkill.menu.actor);
|
||||||
menuLayout.addSizeChild(this._power.menu.actor);
|
menuLayout.addSizeChild(this._power.menu.actor);
|
||||||
|
menuLayout.addSizeChild(this._system.buttonGroup);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -827,9 +825,6 @@ 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;
|
||||||
@@ -882,7 +877,7 @@ class Panel extends St.Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vfunc_allocate(box, flags) {
|
vfunc_allocate(box, flags) {
|
||||||
super.vfunc_allocate(box, flags);
|
this.set_allocation(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;
|
||||||
@@ -976,22 +971,11 @@ 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 allowDrag = dragWindow.maximized_vertically &&
|
let dragWindow = this._getDraggableWindowForPosition(stageX);
|
||||||
stageX > rect.x && stageX < rect.x + rect.width;
|
|
||||||
|
|
||||||
if (!allowDrag)
|
if (!dragWindow)
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
global.display.begin_grab_op(dragWindow,
|
global.display.begin_grab_op(dragWindow,
|
||||||
@@ -1021,7 +1005,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.actor.reactive)
|
if (!indicator.reactive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
menu.toggle();
|
menu.toggle();
|
||||||
@@ -1043,7 +1027,7 @@ class Panel extends St.Widget {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
let menu = indicator.menu;
|
let menu = indicator.menu;
|
||||||
if (!indicator.actor.reactive)
|
if (!indicator.reactive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
menu.close();
|
menu.close();
|
||||||
@@ -1201,4 +1185,21 @@ 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
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
@@ -14,12 +14,11 @@ 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.actor });
|
child: this });
|
||||||
|
|
||||||
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));
|
||||||
@@ -105,9 +104,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.actor);
|
this.menu = new PopupMenu.PopupDummyMenu(this);
|
||||||
else
|
else
|
||||||
this.setMenu(new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0));
|
this.setMenu(new PopupMenu.PopupMenu(this, menuAlignment, St.Side.TOP, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
setSensitive(sensitive) {
|
setSensitive(sensitive) {
|
||||||
@@ -145,7 +144,7 @@ var Button = GObject.registerClass({
|
|||||||
if (!this.menu)
|
if (!this.menu)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!this.actor.visible)
|
if (!this.visible)
|
||||||
this.menu.close();
|
this.menu.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,10 +154,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.actor);
|
let group = global.focus_manager.get_group(this);
|
||||||
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.actor, direction, false);
|
group.navigate_focus(this, direction, false);
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -167,9 +166,9 @@ var Button = GObject.registerClass({
|
|||||||
|
|
||||||
_onOpenStateChanged(menu, open) {
|
_onOpenStateChanged(menu, open) {
|
||||||
if (open)
|
if (open)
|
||||||
this.actor.add_style_pseudo_class('active');
|
this.add_style_pseudo_class('active');
|
||||||
else
|
else
|
||||||
this.actor.remove_style_pseudo_class('active');
|
this.remove_style_pseudo_class('active');
|
||||||
|
|
||||||
// Setting the max-height won't do any good if the minimum height of the
|
// 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
|
||||||
|
@@ -277,12 +277,6 @@ var Switch = class {
|
|||||||
this.actor = new St.Bin({ style_class: 'toggle-switch',
|
this.actor = new St.Bin({ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -403,8 +397,8 @@ var PopupImageMenuItem = class extends PopupBaseMenuItem {
|
|||||||
|
|
||||||
var PopupMenuBase = class {
|
var PopupMenuBase = class {
|
||||||
constructor(sourceActor, styleClass) {
|
constructor(sourceActor, styleClass) {
|
||||||
if (new.target === PopupMenuBase)
|
if (this.constructor === PopupMenuBase)
|
||||||
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
|
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`);
|
||||||
|
|
||||||
this.sourceActor = sourceActor;
|
this.sourceActor = sourceActor;
|
||||||
this._parent = null;
|
this._parent = null;
|
||||||
@@ -859,7 +853,7 @@ var PopupMenu = class extends PopupMenuBase {
|
|||||||
if (this._activeMenuItem)
|
if (this._activeMenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.setActive(false);
|
||||||
|
|
||||||
if (this._boxPointer.actor.visible) {
|
if (this._boxPointer.visible) {
|
||||||
this._boxPointer.close(animate, () => {
|
this._boxPointer.close(animate, () => {
|
||||||
this.emit('menu-closed');
|
this.emit('menu-closed');
|
||||||
});
|
});
|
||||||
@@ -1186,7 +1180,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.actor, grabParams);
|
this._grabHelper = new GrabHelper.GrabHelper(owner, grabParams);
|
||||||
this._menus = [];
|
this._menus = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -810,16 +810,8 @@ var ScreenShield = class {
|
|||||||
|
|
||||||
this._maybeCancelDialog();
|
this._maybeCancelDialog();
|
||||||
|
|
||||||
if (this._longLightbox.actor.visible ||
|
if (this._longLightbox.actor.visible) {
|
||||||
this._isActive) {
|
// We're in the process of showing.
|
||||||
// We're either shown and active, or in the process of
|
|
||||||
// showing.
|
|
||||||
// The latter is a very unlikely condition (it requires
|
|
||||||
// idle-delay < 20), but in any case we have nothing
|
|
||||||
// to do at this point: either isActive is true, or
|
|
||||||
// it will soon be.
|
|
||||||
// isActive can also be true if the lightbox is hidden,
|
|
||||||
// in case the shield is down and the user hasn't unlocked yet
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const { Clutter, Gio, GLib, Gtk, Meta, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const GrabHelper = imports.ui.grabHelper;
|
const GrabHelper = imports.ui.grabHelper;
|
||||||
@@ -227,8 +227,6 @@ var SelectArea = class {
|
|||||||
this._lastY = 0;
|
this._lastY = 0;
|
||||||
this._result = null;
|
this._result = null;
|
||||||
|
|
||||||
this._initRubberbandColors();
|
|
||||||
|
|
||||||
this._group = new St.Widget({ visible: false,
|
this._group = new St.Widget({ visible: false,
|
||||||
reactive: true,
|
reactive: true,
|
||||||
x: 0,
|
x: 0,
|
||||||
@@ -248,10 +246,10 @@ var SelectArea = class {
|
|||||||
coordinate: Clutter.BindCoordinate.ALL });
|
coordinate: Clutter.BindCoordinate.ALL });
|
||||||
this._group.add_constraint(constraint);
|
this._group.add_constraint(constraint);
|
||||||
|
|
||||||
this._rubberband = new Clutter.Rectangle({ color: this._background,
|
this._rubberband = new St.Widget({
|
||||||
has_border: true,
|
style_class: 'select-area-rubberband',
|
||||||
border_width: 1,
|
visible: false
|
||||||
border_color: this._border });
|
});
|
||||||
this._group.add_actor(this._rubberband);
|
this._group.add_actor(this._rubberband);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,25 +263,6 @@ var SelectArea = class {
|
|||||||
this._group.visible = true;
|
this._group.visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_initRubberbandColors() {
|
|
||||||
function colorFromRGBA(rgba) {
|
|
||||||
return new Clutter.Color({ red: rgba.red * 255,
|
|
||||||
green: rgba.green * 255,
|
|
||||||
blue: rgba.blue * 255,
|
|
||||||
alpha: rgba.alpha * 255 });
|
|
||||||
}
|
|
||||||
|
|
||||||
let path = new Gtk.WidgetPath();
|
|
||||||
path.append_type(Gtk.IconView);
|
|
||||||
|
|
||||||
let context = new Gtk.StyleContext();
|
|
||||||
context.set_path(path);
|
|
||||||
context.add_class('rubberband');
|
|
||||||
|
|
||||||
this._background = colorFromRGBA(context.get_background_color(Gtk.StateFlags.NORMAL));
|
|
||||||
this._border = colorFromRGBA(context.get_border_color(Gtk.StateFlags.NORMAL));
|
|
||||||
}
|
|
||||||
|
|
||||||
_getGeometry() {
|
_getGeometry() {
|
||||||
return { x: Math.min(this._startX, this._lastX),
|
return { x: Math.min(this._startX, this._lastX),
|
||||||
y: Math.min(this._startY, this._lastY),
|
y: Math.min(this._startY, this._lastY),
|
||||||
@@ -302,6 +281,7 @@ var SelectArea = class {
|
|||||||
|
|
||||||
this._rubberband.set_position(geometry.x, geometry.y);
|
this._rubberband.set_position(geometry.x, geometry.y);
|
||||||
this._rubberband.set_size(geometry.width, geometry.height);
|
this._rubberband.set_size(geometry.width, geometry.height);
|
||||||
|
this._rubberband.show();
|
||||||
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
@@ -37,16 +37,13 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
|
|||||||
* 'yield Scripting.sleep(500);'
|
* 'yield Scripting.sleep(500);'
|
||||||
*/
|
*/
|
||||||
function sleep(milliseconds) {
|
function sleep(milliseconds) {
|
||||||
let cb;
|
return new Promise(resolve => {
|
||||||
|
let id = Mainloop.timeout_add(milliseconds, () => {
|
||||||
let id = Mainloop.timeout_add(milliseconds, () => {
|
resolve();
|
||||||
if (cb)
|
return GLib.SOURCE_REMOVE;
|
||||||
cb();
|
});
|
||||||
return GLib.SOURCE_REMOVE;
|
GLib.Source.set_name_by_id(id, '[gnome-shell] sleep');
|
||||||
});
|
});
|
||||||
GLib.Source.set_name_by_id(id, '[gnome-shell] sleep');
|
|
||||||
|
|
||||||
return callback => { cb = callback; };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,14 +54,9 @@ function sleep(milliseconds) {
|
|||||||
* 'yield Scripting.waitLeisure();'
|
* 'yield Scripting.waitLeisure();'
|
||||||
*/
|
*/
|
||||||
function waitLeisure() {
|
function waitLeisure() {
|
||||||
let cb;
|
return new Promise(resolve => {
|
||||||
|
global.run_at_leisure(resolve);
|
||||||
global.run_at_leisure(() => {
|
|
||||||
if (cb)
|
|
||||||
cb();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return callback => { cb = callback; };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const PerfHelperIface = loadInterfaceXML('org.gnome.Shell.PerfHelper');
|
const PerfHelperIface = loadInterfaceXML('org.gnome.Shell.PerfHelper');
|
||||||
@@ -82,25 +74,16 @@ function _getPerfHelper() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _callRemote(obj, method, ...args) {
|
function _callRemote(obj, method, ...args) {
|
||||||
let cb;
|
return new Promise((resolve, reject) => {
|
||||||
let errcb;
|
args.push((result, excp) => {
|
||||||
|
if (excp)
|
||||||
|
reject(excp);
|
||||||
|
else
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
|
||||||
args.push((result, excp) => {
|
method.apply(obj, args);
|
||||||
if (excp) {
|
|
||||||
if (errcb)
|
|
||||||
errcb(excp);
|
|
||||||
} else {
|
|
||||||
if (cb)
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
method.apply(obj, args);
|
|
||||||
|
|
||||||
return (callback, error_callback) => {
|
|
||||||
cb = callback;
|
|
||||||
errcb = error_callback;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -192,27 +175,6 @@ function collectStatistics() {
|
|||||||
Shell.PerfLog.get_default().collect_statistics();
|
Shell.PerfLog.get_default().collect_statistics();
|
||||||
}
|
}
|
||||||
|
|
||||||
function _step(g, finish, onError) {
|
|
||||||
try {
|
|
||||||
let waitFunction = g.next();
|
|
||||||
waitFunction(() => {
|
|
||||||
_step(g, finish, onError);
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
if (onError)
|
|
||||||
onError(err);
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
if (err instanceof StopIteration) {
|
|
||||||
if (finish)
|
|
||||||
finish();
|
|
||||||
} else {
|
|
||||||
if (onError)
|
|
||||||
onError(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function _collect(scriptModule, outputFile) {
|
function _collect(scriptModule, outputFile) {
|
||||||
let eventHandlers = {};
|
let eventHandlers = {};
|
||||||
|
|
||||||
@@ -348,23 +310,23 @@ function _collect(scriptModule, outputFile) {
|
|||||||
* After running the script and collecting statistics from the
|
* After running the script and collecting statistics from the
|
||||||
* event log, GNOME Shell will exit.
|
* event log, GNOME Shell will exit.
|
||||||
**/
|
**/
|
||||||
function runPerfScript(scriptModule, outputFile) {
|
async function runPerfScript(scriptModule, outputFile) {
|
||||||
Shell.PerfLog.get_default().set_enabled(true);
|
Shell.PerfLog.get_default().set_enabled(true);
|
||||||
|
|
||||||
let g = scriptModule.run();
|
for (let step of scriptModule.run()) {
|
||||||
|
try {
|
||||||
|
await step;
|
||||||
|
} catch (err) {
|
||||||
|
log(`Script failed: ${err}\n${err.stack}`);
|
||||||
|
Meta.exit(Meta.ExitCode.ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_step(g,
|
try {
|
||||||
() => {
|
_collect(scriptModule, outputFile);
|
||||||
try {
|
} catch (err) {
|
||||||
_collect(scriptModule, outputFile);
|
log(`Script failed: ${err}\n${err.stack}`);
|
||||||
} catch (err) {
|
Meta.exit(Meta.ExitCode.ERROR);
|
||||||
log("Script failed: " + err + "\n" + err.stack);
|
}
|
||||||
Meta.exit(Meta.ExitCode.ERROR);
|
Meta.exit(Meta.ExitCode.SUCCESS);
|
||||||
}
|
|
||||||
Meta.exit(Meta.ExitCode.SUCCESS);
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
log("Script failed: " + err + "\n" + err.stack);
|
|
||||||
Meta.exit(Meta.ExitCode.ERROR);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
@@ -79,14 +79,17 @@ var GnomeShell = class {
|
|||||||
for (let param in params)
|
for (let param in params)
|
||||||
params[param] = params[param].deep_unpack();
|
params[param] = params[param].deep_unpack();
|
||||||
|
|
||||||
let { monitor: monitorIndex,
|
let { connector,
|
||||||
label,
|
label,
|
||||||
level,
|
level,
|
||||||
max_level: maxLevel,
|
max_level: maxLevel,
|
||||||
icon: serializedIcon } = params;
|
icon: serializedIcon } = params;
|
||||||
|
|
||||||
if (monitorIndex === undefined)
|
let monitorIndex = -1;
|
||||||
monitorIndex = -1;
|
if (connector) {
|
||||||
|
let monitorManager = Meta.MonitorManager.get();
|
||||||
|
monitorIndex = monitorManager.get_monitor_for_connector(connector);
|
||||||
|
}
|
||||||
|
|
||||||
let icon = null;
|
let icon = null;
|
||||||
if (serializedIcon)
|
if (serializedIcon)
|
||||||
@@ -203,16 +206,10 @@ var GnomeShell = class {
|
|||||||
this._grabbers.delete(name);
|
this._grabbers.delete(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowMonitorLabelsAsync(params, invocation) {
|
|
||||||
let sender = invocation.get_sender();
|
|
||||||
let [dict] = params;
|
|
||||||
Main.osdMonitorLabeler.show(sender, dict);
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowMonitorLabels2Async(params, invocation) {
|
ShowMonitorLabels2Async(params, invocation) {
|
||||||
let sender = invocation.get_sender();
|
let sender = invocation.get_sender();
|
||||||
let [dict] = params;
|
let [dict] = params;
|
||||||
Main.osdMonitorLabeler.show2(sender, dict);
|
Main.osdMonitorLabeler.show(sender, dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
HideMonitorLabelsAsync(params, invocation) {
|
HideMonitorLabelsAsync(params, invocation) {
|
||||||
|
@@ -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({ actor: entry },
|
entry._menuManager = new PopupMenu.PopupMenuManager(entry,
|
||||||
{ actionMode: params.actionMode });
|
{ actionMode: params.actionMode });
|
||||||
entry._menuManager.addMenu(entry.menu);
|
entry._menuManager.addMenu(entry.menu);
|
||||||
|
|
||||||
|
@@ -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.actor.add_child(this._hbox);
|
this.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.actor.visible = alwaysShow || items.some(f => !!f.state);
|
this.visible = alwaysShow || items.some(f => !!f.state);
|
||||||
|
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
@@ -112,38 +112,22 @@ 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 });
|
||||||
settings.connect('changed::'+key, () => {
|
let widget = this._buildItemExtended(string,
|
||||||
|
settings.get_boolean(key),
|
||||||
|
settings.is_writable(key),
|
||||||
|
enabled => settings.set_boolean(key, enabled));
|
||||||
|
|
||||||
|
settings.connect('changed::' + key, () => {
|
||||||
widget.setToggleState(settings.get_boolean(key));
|
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);
|
||||||
@@ -164,19 +148,30 @@ 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"),
|
||||||
@@ -189,6 +184,15 @@ 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;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -125,8 +125,8 @@ class InputSourceSwitcher extends SwitcherPopup.SwitcherList {
|
|||||||
|
|
||||||
var InputSourceSettings = class {
|
var InputSourceSettings = class {
|
||||||
constructor() {
|
constructor() {
|
||||||
if (new.target === InputSourceSettings)
|
if (this.constructor === InputSourceSettings)
|
||||||
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
|
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
_emitInputSourcesChanged() {
|
_emitInputSourcesChanged() {
|
||||||
@@ -822,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.actor.add_child(this._hbox);
|
this.add_child(this._hbox);
|
||||||
|
|
||||||
this._propSeparator = new PopupMenu.PopupSeparatorMenuItem();
|
this._propSeparator = new PopupMenu.PopupSeparatorMenuItem();
|
||||||
this.menu.addMenuItem(this._propSeparator);
|
this.menu.addMenuItem(this._propSeparator);
|
||||||
@@ -908,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.actor.hide();
|
this.hide();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.actor.show();
|
this.show();
|
||||||
|
|
||||||
this._buildPropSection(newSource.properties);
|
this._buildPropSection(newSource.properties);
|
||||||
|
|
||||||
|
@@ -167,10 +167,10 @@ var NMConnectionItem = class {
|
|||||||
};
|
};
|
||||||
Signals.addSignalMethods(NMConnectionItem.prototype);
|
Signals.addSignalMethods(NMConnectionItem.prototype);
|
||||||
|
|
||||||
var NMConnectionSection = class {
|
var NMConnectionSection = class NMConnectionSection {
|
||||||
constructor(client) {
|
constructor(client) {
|
||||||
if (new.target === NMConnectionSection)
|
if (this.constructor === NMConnectionSection)
|
||||||
throw new TypeError('Cannot instantiate abstract type ' + new.target.name);
|
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
|
||||||
|
|
||||||
this._client = client;
|
this._client = client;
|
||||||
|
|
||||||
@@ -297,12 +297,13 @@ var NMConnectionSection = class {
|
|||||||
};
|
};
|
||||||
Signals.addSignalMethods(NMConnectionSection.prototype);
|
Signals.addSignalMethods(NMConnectionSection.prototype);
|
||||||
|
|
||||||
var NMConnectionDevice = class extends NMConnectionSection {
|
var NMConnectionDevice = class NMConnectionDevice 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 = '';
|
||||||
|
|
||||||
@@ -1673,7 +1674,11 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
|||||||
_readDevices() {
|
_readDevices() {
|
||||||
let devices = this._client.get_devices() || [ ];
|
let devices = this._client.get_devices() || [ ];
|
||||||
for (let i = 0; i < devices.length; ++i) {
|
for (let i = 0; i < devices.length; ++i) {
|
||||||
this._deviceAdded(this._client, devices[i], true);
|
try {
|
||||||
|
this._deviceAdded(this._client, devices[i], true);
|
||||||
|
} catch (e) {
|
||||||
|
log(`Failed to add device ${devices[i]}: ${e}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this._syncDeviceNames();
|
this._syncDeviceNames();
|
||||||
}
|
}
|
||||||
|
@@ -236,6 +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.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'
|
||||||
|
@@ -33,8 +33,8 @@ function primaryModifier(mask) {
|
|||||||
var SwitcherPopup = GObject.registerClass(
|
var SwitcherPopup = GObject.registerClass(
|
||||||
class SwitcherPopup extends St.Widget {
|
class SwitcherPopup extends St.Widget {
|
||||||
_init(items) {
|
_init(items) {
|
||||||
if (new.target === SwitcherPopup)
|
if (this.constructor.name === SwitcherPopup.prototype.constructor.name)
|
||||||
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
|
throw new TypeError(`Cannot instantiate abstract class ${this.constructor.name}`);
|
||||||
|
|
||||||
super._init({ style_class: 'switcher-popup',
|
super._init({ style_class: 'switcher-popup',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
|
@@ -456,13 +456,28 @@ var TilePreview = class {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var TouchpadWorkspaceSwitchAction = class {
|
var TouchpadWorkspaceSwitchAction = class {
|
||||||
constructor(actor) {
|
constructor(actor, allowedModes) {
|
||||||
|
this._allowedModes = allowedModes;
|
||||||
this._dx = 0;
|
this._dx = 0;
|
||||||
this._dy = 0;
|
this._dy = 0;
|
||||||
|
this._enabled = true;
|
||||||
actor.connect('captured-event', this._handleEvent.bind(this));
|
actor.connect('captured-event', this._handleEvent.bind(this));
|
||||||
this._touchpadSettings = new Gio.Settings({schema_id: 'org.gnome.desktop.peripherals.touchpad'});
|
this._touchpadSettings = new Gio.Settings({schema_id: 'org.gnome.desktop.peripherals.touchpad'});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get enabled() {
|
||||||
|
return this._enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
set enabled(enabled) {
|
||||||
|
if (this._enabled == enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._enabled = enabled;
|
||||||
|
if (!enabled)
|
||||||
|
this.emit('cancel');
|
||||||
|
}
|
||||||
|
|
||||||
_checkActivated() {
|
_checkActivated() {
|
||||||
let dir;
|
let dir;
|
||||||
|
|
||||||
@@ -482,15 +497,16 @@ var TouchpadWorkspaceSwitchAction = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_handleEvent(actor, event) {
|
_handleEvent(actor, event) {
|
||||||
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
|
|
||||||
|
|
||||||
if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE)
|
if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE)
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
if (event.get_touchpad_gesture_finger_count() != 4)
|
if (event.get_touchpad_gesture_finger_count() != 4)
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
if ((allowedModes & Main.actionMode) == 0)
|
if ((this._allowedModes & Main.actionMode) == 0)
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
if (!this._enabled)
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) {
|
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) {
|
||||||
@@ -523,10 +539,11 @@ var WorkspaceSwitchAction = GObject.registerClass({
|
|||||||
'motion': { param_types: [GObject.TYPE_DOUBLE, GObject.TYPE_DOUBLE] },
|
'motion': { param_types: [GObject.TYPE_DOUBLE, GObject.TYPE_DOUBLE] },
|
||||||
'cancel': { param_types: [] }},
|
'cancel': { param_types: [] }},
|
||||||
}, class WorkspaceSwitchAction extends Clutter.SwipeAction {
|
}, class WorkspaceSwitchAction extends Clutter.SwipeAction {
|
||||||
_init() {
|
_init(allowedModes) {
|
||||||
super._init();
|
super._init();
|
||||||
this.set_n_touch_points(4);
|
this.set_n_touch_points(4);
|
||||||
this._swept = false;
|
this._swept = false;
|
||||||
|
this._allowedModes = allowedModes;
|
||||||
|
|
||||||
global.display.connect('grab-op-begin', () => {
|
global.display.connect('grab-op-begin', () => {
|
||||||
this.cancel();
|
this.cancel();
|
||||||
@@ -534,14 +551,12 @@ var WorkspaceSwitchAction = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
vfunc_gesture_prepare(actor) {
|
vfunc_gesture_prepare(actor) {
|
||||||
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
|
|
||||||
|
|
||||||
this._swept = false;
|
this._swept = false;
|
||||||
|
|
||||||
if (!super.vfunc_gesture_prepare(actor))
|
if (!super.vfunc_gesture_prepare(actor))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return (allowedModes & Main.actionMode);
|
return (this._allowedModes & Main.actionMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_gesture_progress(actor) {
|
vfunc_gesture_progress(actor) {
|
||||||
@@ -1043,14 +1058,15 @@ var WindowManager = class {
|
|||||||
global.workspace_manager.override_workspace_layout(Meta.DisplayCorner.TOPLEFT,
|
global.workspace_manager.override_workspace_layout(Meta.DisplayCorner.TOPLEFT,
|
||||||
false, -1, 1);
|
false, -1, 1);
|
||||||
|
|
||||||
let gesture = new WorkspaceSwitchAction();
|
let allowedModes = Shell.ActionMode.NORMAL;
|
||||||
|
let gesture = new WorkspaceSwitchAction(allowedModes);
|
||||||
gesture.connect('motion', this._switchWorkspaceMotion.bind(this));
|
gesture.connect('motion', this._switchWorkspaceMotion.bind(this));
|
||||||
gesture.connect('activated', this._actionSwitchWorkspace.bind(this));
|
gesture.connect('activated', this._actionSwitchWorkspace.bind(this));
|
||||||
gesture.connect('cancel', this._switchWorkspaceCancel.bind(this));
|
gesture.connect('cancel', this._switchWorkspaceCancel.bind(this));
|
||||||
global.stage.add_action(gesture);
|
global.stage.add_action(gesture);
|
||||||
|
|
||||||
// This is not a normal Clutter.GestureAction, doesn't need add_action()
|
// This is not a normal Clutter.GestureAction, doesn't need add_action()
|
||||||
gesture = new TouchpadWorkspaceSwitchAction(global.stage);
|
gesture = new TouchpadWorkspaceSwitchAction(global.stage, allowedModes);
|
||||||
gesture.connect('motion', this._switchWorkspaceMotion.bind(this));
|
gesture.connect('motion', this._switchWorkspaceMotion.bind(this));
|
||||||
gesture.connect('activated', this._actionSwitchWorkspace.bind(this));
|
gesture.connect('activated', this._actionSwitchWorkspace.bind(this));
|
||||||
gesture.connect('cancel', this._switchWorkspaceCancel.bind(this));
|
gesture.connect('cancel', this._switchWorkspaceCancel.bind(this));
|
||||||
@@ -1202,6 +1218,10 @@ var WindowManager = class {
|
|||||||
// Same for OR windows
|
// Same for OR windows
|
||||||
if (window.is_override_redirect())
|
if (window.is_override_redirect())
|
||||||
return;
|
return;
|
||||||
|
// Sticky windows don't need moving, in fact moving would
|
||||||
|
// unstick them
|
||||||
|
if (window.on_all_workspaces)
|
||||||
|
return;
|
||||||
// Windows on workspaces below pos don't need moving
|
// Windows on workspaces below pos don't need moving
|
||||||
let index = window.get_workspace().index();
|
let index = window.get_workspace().index();
|
||||||
if (index < pos)
|
if (index < pos)
|
||||||
@@ -1468,8 +1488,13 @@ 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) {
|
||||||
@@ -1530,6 +1555,7 @@ 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;
|
||||||
}
|
}
|
||||||
@@ -1844,17 +1870,25 @@ var WindowManager = class {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_getPositionForDirection(direction) {
|
_getPositionForDirection(direction, fromWs, toWs) {
|
||||||
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 + Main.panel.height;
|
yDest = -global.screen_height + (oldWsIsFullscreen ? 0 : shiftHeight);
|
||||||
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 - Main.panel.height;
|
yDest = global.screen_height - (newWsIsFullscreen ? 0 : shiftHeight);
|
||||||
|
|
||||||
if (direction == Meta.MotionDirection.LEFT ||
|
if (direction == Meta.MotionDirection.LEFT ||
|
||||||
direction == Meta.MotionDirection.UP_LEFT ||
|
direction == Meta.MotionDirection.UP_LEFT ||
|
||||||
@@ -1912,7 +1946,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);
|
let [x, y] = this._getPositionForDirection(dir, curWs, ws);
|
||||||
info.actor.set_position(x, y);
|
info.actor.set_position(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1998,7 +2032,11 @@ var WindowManager = class {
|
|||||||
|
|
||||||
this._switchData.inProgress = true;
|
this._switchData.inProgress = true;
|
||||||
|
|
||||||
let [xDest, yDest] = this._getPositionForDirection(direction);
|
let workspaceManager = global.workspace_manager;
|
||||||
|
let fromWs = workspaceManager.get_workspace_by_index(from);
|
||||||
|
let toWs = workspaceManager.get_workspace_by_index(to);
|
||||||
|
|
||||||
|
let [xDest, yDest] = this._getPositionForDirection(direction, fromWs, toWs);
|
||||||
|
|
||||||
/* @direction is the direction that the "camera" moves, so the
|
/* @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
|
||||||
|
@@ -173,7 +173,7 @@ var WindowMenu = class extends PopupMenu.PopupMenu {
|
|||||||
|
|
||||||
var WindowMenuManager = class {
|
var WindowMenuManager = class {
|
||||||
constructor() {
|
constructor() {
|
||||||
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
|
this._manager = new PopupMenu.PopupMenuManager(Main.layoutManager.dummyCursor);
|
||||||
|
|
||||||
this._sourceActor = new St.Widget({ reactive: true, visible: false });
|
this._sourceActor = new St.Widget({ reactive: true, visible: false });
|
||||||
this._sourceActor.connect('button-press-event', () => {
|
this._sourceActor.connect('button-press-event', () => {
|
||||||
|
@@ -786,8 +786,8 @@ var WindowPositionFlags = {
|
|||||||
|
|
||||||
var LayoutStrategy = class {
|
var LayoutStrategy = class {
|
||||||
constructor(monitor, rowSpacing, columnSpacing) {
|
constructor(monitor, rowSpacing, columnSpacing) {
|
||||||
if (new.target === LayoutStrategy)
|
if (this.constructor === LayoutStrategy)
|
||||||
throw new TypeError('Cannot instantiate abstract type ' + new.target.name);
|
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
|
||||||
|
|
||||||
this._monitor = monitor;
|
this._monitor = monitor;
|
||||||
this._rowSpacing = rowSpacing;
|
this._rowSpacing = rowSpacing;
|
||||||
|
@@ -85,8 +85,6 @@ 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;
|
||||||
@@ -142,7 +140,7 @@ class WorkspaceSwitcherPopup extends St.Widget {
|
|||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
});
|
});
|
||||||
this.actor.show();
|
this.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
display(direction, activeWorkspaceIndex) {
|
display(direction, activeWorkspaceIndex) {
|
||||||
|
@@ -601,8 +601,7 @@ 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.actor = this;
|
this._delegate = 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' });
|
||||||
|
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const { Clutter, Gio, GObject, Meta, St } = imports.gi;
|
const { Clutter, Gio, GObject, Meta, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
const WindowManager = imports.ui.windowManager;
|
||||||
const Workspace = imports.ui.workspace;
|
const Workspace = imports.ui.workspace;
|
||||||
|
|
||||||
var WORKSPACE_SWITCH_TIME = 0.25;
|
var WORKSPACE_SWITCH_TIME = 0.25;
|
||||||
@@ -82,6 +83,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._animatingScroll = false; // programatically updating the adjustment
|
this._animatingScroll = false; // programatically updating the adjustment
|
||||||
|
|
||||||
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
||||||
@@ -211,7 +213,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
|||||||
|
|
||||||
for (let w = 0; w < this._workspaces.length; w++) {
|
for (let w = 0; w < this._workspaces.length; w++) {
|
||||||
let workspace = this._workspaces[w];
|
let workspace = this._workspaces[w];
|
||||||
if (this._animating || this._scrolling) {
|
if (this._animating || this._scrolling || this._gestureActive) {
|
||||||
workspace.actor.show();
|
workspace.actor.show();
|
||||||
} else {
|
} else {
|
||||||
if (this._inDrag)
|
if (this._inDrag)
|
||||||
@@ -223,7 +225,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_updateScrollAdjustment(index) {
|
_updateScrollAdjustment(index) {
|
||||||
if (this._scrolling)
|
if (this._scrolling || this._gestureActive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._animatingScroll = true;
|
this._animatingScroll = true;
|
||||||
@@ -300,6 +302,18 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
|||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startTouchGesture() {
|
||||||
|
this._gestureActive = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
endTouchGesture() {
|
||||||
|
this._gestureActive = false;
|
||||||
|
|
||||||
|
// Make sure title captions etc are shown as necessary
|
||||||
|
this._scrollToActive();
|
||||||
|
this._updateVisibility();
|
||||||
|
}
|
||||||
|
|
||||||
// sync the workspaces' positions to the value of the scroll adjustment
|
// sync the workspaces' positions to the value of the scroll adjustment
|
||||||
// and change the active workspace if appropriate
|
// and change the active workspace if appropriate
|
||||||
_onScroll(adj) {
|
_onScroll(adj) {
|
||||||
@@ -310,7 +324,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
|||||||
let active = workspaceManager.get_active_workspace_index();
|
let active = workspaceManager.get_active_workspace_index();
|
||||||
let current = Math.round(adj.value);
|
let current = Math.round(adj.value);
|
||||||
|
|
||||||
if (active != current) {
|
if (active != current && !this._gestureActive) {
|
||||||
if (!this._workspaces[current]) {
|
if (!this._workspaces[current]) {
|
||||||
// The current workspace was destroyed. This could happen
|
// The current workspace was destroyed. This could happen
|
||||||
// when you are on the last empty workspace, and consolidate
|
// when you are on the last empty workspace, and consolidate
|
||||||
@@ -391,6 +405,12 @@ var ExtraWorkspaceView = class extends WorkspacesViewBase {
|
|||||||
|
|
||||||
endSwipeScroll() {
|
endSwipeScroll() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startTouchGesture() {
|
||||||
|
}
|
||||||
|
|
||||||
|
endTouchGesture() {
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var DelegateFocusNavigator = GObject.registerClass(
|
var DelegateFocusNavigator = GObject.registerClass(
|
||||||
@@ -430,27 +450,41 @@ var WorkspacesDisplay = class {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
this._startSwipeScroll();
|
||||||
this._workspacesViews[i].startSwipeScroll();
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
panAction.connect('gesture-cancel', () => {
|
panAction.connect('gesture-cancel', () => {
|
||||||
clickAction.release();
|
clickAction.release();
|
||||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
this._endSwipeScroll();
|
||||||
this._workspacesViews[i].endSwipeScroll();
|
|
||||||
});
|
});
|
||||||
panAction.connect('gesture-end', () => {
|
panAction.connect('gesture-end', () => {
|
||||||
clickAction.release();
|
clickAction.release();
|
||||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
this._endSwipeScroll();
|
||||||
this._workspacesViews[i].endSwipeScroll();
|
|
||||||
});
|
});
|
||||||
Main.overview.addAction(panAction);
|
Main.overview.addAction(panAction);
|
||||||
this.actor.bind_property('mapped', panAction, 'enabled', GObject.BindingFlags.SYNC_CREATE);
|
this.actor.bind_property('mapped', panAction, 'enabled', GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
|
||||||
|
let allowedModes = Shell.ActionMode.OVERVIEW;
|
||||||
|
let switchGesture = new WindowManager.WorkspaceSwitchAction(allowedModes);
|
||||||
|
switchGesture.connect('motion', this._onSwitchWorkspaceMotion.bind(this));
|
||||||
|
switchGesture.connect('activated', this._onSwitchWorkspaceActivated.bind(this));
|
||||||
|
switchGesture.connect('cancel', this._endTouchGesture.bind(this));
|
||||||
|
Main.overview.addAction(switchGesture);
|
||||||
|
this.actor.bind_property('mapped', switchGesture, 'enabled', GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
|
||||||
|
switchGesture = new WindowManager.TouchpadWorkspaceSwitchAction(global.stage, allowedModes);
|
||||||
|
switchGesture.connect('motion', this._onSwitchWorkspaceMotion.bind(this));
|
||||||
|
switchGesture.connect('activated', this._onSwitchWorkspaceActivated.bind(this));
|
||||||
|
switchGesture.connect('cancel', this._endTouchGesture.bind(this));
|
||||||
|
this.actor.connect('notify::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',
|
||||||
@@ -474,6 +508,47 @@ var WorkspacesDisplay = class {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_startSwipeScroll() {
|
||||||
|
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||||
|
this._workspacesViews[i].startSwipeScroll();
|
||||||
|
}
|
||||||
|
|
||||||
|
_endSwipeScroll() {
|
||||||
|
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||||
|
this._workspacesViews[i].endSwipeScroll();
|
||||||
|
}
|
||||||
|
|
||||||
|
_startTouchGesture() {
|
||||||
|
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||||
|
this._workspacesViews[i].startTouchGesture();
|
||||||
|
}
|
||||||
|
|
||||||
|
_endTouchGesture() {
|
||||||
|
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||||
|
this._workspacesViews[i].endTouchGesture();
|
||||||
|
}
|
||||||
|
|
||||||
|
_onSwitchWorkspaceMotion(action, xRel, yRel) {
|
||||||
|
// We don't have a way to hook into start of touchpad actions,
|
||||||
|
// luckily this is safe to call repeatedly.
|
||||||
|
this._startTouchGesture();
|
||||||
|
|
||||||
|
let workspaceManager = global.workspace_manager;
|
||||||
|
let active = workspaceManager.get_active_workspace_index();
|
||||||
|
let adjustment = this._scrollAdjustment;
|
||||||
|
adjustment.value = (active - yRel / this.actor.height) * adjustment.page_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
_onSwitchWorkspaceActivated(action, direction) {
|
||||||
|
let workspaceManager = global.workspace_manager;
|
||||||
|
let activeWorkspace = workspaceManager.get_active_workspace();
|
||||||
|
let newWs = activeWorkspace.get_neighbor(direction);
|
||||||
|
if (newWs != activeWorkspace)
|
||||||
|
newWs.activate(global.get_current_time());
|
||||||
|
|
||||||
|
this._endTouchGesture();
|
||||||
|
}
|
||||||
|
|
||||||
navigateFocus(from, direction) {
|
navigateFocus(from, direction) {
|
||||||
return this._getPrimaryView().actor.navigate_focus(from, direction, false);
|
return this._getPrimaryView().actor.navigate_focus(from, direction, false);
|
||||||
}
|
}
|
||||||
|
44
meson.build
44
meson.build
@@ -1,5 +1,5 @@
|
|||||||
project('gnome-shell', 'c',
|
project('gnome-shell', 'c',
|
||||||
version: '3.32.0',
|
version: '3.32.1',
|
||||||
meson_version: '>= 0.47.0',
|
meson_version: '>= 0.47.0',
|
||||||
license: 'GPLv2+'
|
license: 'GPLv2+'
|
||||||
)
|
)
|
||||||
@@ -167,6 +167,48 @@ 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',
|
||||||
|
1043
po/en_GB.po
1043
po/en_GB.po
File diff suppressed because it is too large
Load Diff
193
po/eo.po
193
po/eo.po
@@ -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-02-21 18:43+0000\n"
|
"POT-Creation-Date: 2019-04-17 19:29+0000\n"
|
||||||
"PO-Revision-Date: 2019-02-22 13:19+0100\n"
|
"PO-Revision-Date: 2019-05-01 16:29+0200\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: Poedit 2.2.1\n"
|
"X-Generator: Gtranslator 3.32.0\n"
|
||||||
"X-DamnedLies-Scope: partial\n"
|
"X-DamnedLies-Scope: partial\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
@@ -185,8 +185,8 @@ msgstr "Klavkombino por malfermi la “Montri aplikaĵojn”-vidon"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Keybinding to open the “Show Applications” view of the Activities Overview."
|
"Keybinding to open the “Show Applications” view of the Activities Overview."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Klavkombino por malfermi la “Montri aplikaĵojn” vidon de la aktivecoj "
|
"Klavkombino por malfermi la “Montri aplikaĵojn” vidon de la Aktivecoj-"
|
||||||
"superrigardo."
|
"Superrigardo."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:124
|
#: data/org.gnome.shell.gschema.xml.in:124
|
||||||
msgid "Keybinding to open the overview"
|
msgid "Keybinding to open the overview"
|
||||||
@@ -194,7 +194,7 @@ msgstr "Klavkombino por malfermi la superrigardon"
|
|||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:125
|
#: data/org.gnome.shell.gschema.xml.in:125
|
||||||
msgid "Keybinding to open the Activities Overview."
|
msgid "Keybinding to open the Activities Overview."
|
||||||
msgstr "Klavkombino por malfermi la aktivecoj superrigardon."
|
msgstr "Klavkombino por malfermi la Aktivecoj-Superrigardon."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:131
|
#: data/org.gnome.shell.gschema.xml.in:131
|
||||||
msgid "Keybinding to toggle the visibility of the notification list"
|
msgid "Keybinding to toggle the visibility of the notification list"
|
||||||
@@ -334,11 +334,6 @@ msgstr "En musa reĝimo, prokrasti ŝanĝi fokuson ĝis la musmontrilo haltas"
|
|||||||
msgid "Network Login"
|
msgid "Network Login"
|
||||||
msgstr "Reta saluto"
|
msgstr "Reta saluto"
|
||||||
|
|
||||||
#. 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 "Something’s gone wrong"
|
msgid "Something’s gone wrong"
|
||||||
msgstr "Io fiaskis"
|
msgstr "Io fiaskis"
|
||||||
@@ -419,7 +414,7 @@ msgstr "Ĉu ne en listo?"
|
|||||||
|
|
||||||
#. 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:880
|
#: js/gdm/loginDialog.js:884
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(ekzemple, uzanto aŭ %s)"
|
msgstr "(ekzemple, uzanto aŭ %s)"
|
||||||
@@ -427,12 +422,12 @@ msgstr "(ekzemple, uzanto aŭ %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:885 js/ui/components/networkAgent.js:243
|
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
|
||||||
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
|
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Uzantonomo: "
|
msgstr "Uzantonomo: "
|
||||||
|
|
||||||
#: js/gdm/loginDialog.js:1223
|
#: js/gdm/loginDialog.js:1227
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Salutfenestro"
|
msgstr "Salutfenestro"
|
||||||
|
|
||||||
@@ -686,32 +681,38 @@ msgstr "Oftaj"
|
|||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Ĉiuj"
|
msgstr "Ĉiuj"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1737 js/ui/panel.js:83
|
#. Translators: This is the heading of a list of open windows
|
||||||
|
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79
|
||||||
|
#| msgid "Windows"
|
||||||
|
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:1751
|
#: js/ui/appDisplay.js:1746
|
||||||
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:1778 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:1773 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:1784
|
#: js/ui/appDisplay.js:1779
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Aldoni al preferataj"
|
msgstr "Aldoni al preferataj"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1794 js/ui/panel.js:94
|
#: js/ui/appDisplay.js:1789 js/ui/panel.js:97
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Montri detalojn"
|
msgstr "Montri detalojn"
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:141
|
#: js/ui/appFavorites.js:149
|
||||||
#, 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:175
|
#: js/ui/appFavorites.js:183
|
||||||
#, 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."
|
||||||
@@ -993,7 +994,7 @@ msgstr "Portebla larĝkapacita retopasvorto"
|
|||||||
msgid "A password is required to connect to “%s”."
|
msgid "A password is required to connect to “%s”."
|
||||||
msgstr "Pasvorto estas bezonata 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 +1066,23 @@ msgstr "Aldoni mondajn horloĝojn…"
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Mondaj horloĝoj"
|
msgstr "Mondaj horloĝoj"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:222
|
#: js/ui/dateMenu.js:228
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Vetero"
|
msgstr "Vetero"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:305
|
#: js/ui/dateMenu.js:311
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Elekti lokon…"
|
msgstr "Elekti lokon…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:313
|
#: js/ui/dateMenu.js:319
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Ŝargante…"
|
msgstr "Ŝargante…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:323
|
#: js/ui/dateMenu.js:329
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Enretigi por veterinformoj"
|
msgstr "Enretigi por veterinformoj"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:325
|
#: js/ui/dateMenu.js:331
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Veterinformoj ĉimomente nehaveblas"
|
msgstr "Veterinformoj ĉimomente nehaveblas"
|
||||||
|
|
||||||
@@ -1240,26 +1241,26 @@ msgid "Download and install “%s” from extensions.gnome.org?"
|
|||||||
msgstr "Ĉu elŝuti kaj instali “%s” de extensions.gnome.org?"
|
msgstr "Ĉu elŝuti kaj instali “%s” de extensions.gnome.org?"
|
||||||
|
|
||||||
#. Translators: %s is an application name like "Settings"
|
#. Translators: %s is an application name like "Settings"
|
||||||
#: js/ui/inhibitShortcutsDialog.js:50
|
#: js/ui/inhibitShortcutsDialog.js:78
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s wants to inhibit shortcuts"
|
msgid "%s wants to inhibit shortcuts"
|
||||||
msgstr "%s volas malebligi klavkombinojn"
|
msgstr "%s volas malebligi klavkombinojn"
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:51
|
#: js/ui/inhibitShortcutsDialog.js:79
|
||||||
msgid "Application wants to inhibit shortcuts"
|
msgid "Application wants to inhibit shortcuts"
|
||||||
msgstr "Aplikaĵo volas malebligi klavkombinojn"
|
msgstr "Aplikaĵo volas malebligi klavkombinojn"
|
||||||
|
|
||||||
#. Translators: %s is a keyboard shortcut like "Super+x"
|
#. Translators: %s is a keyboard shortcut like "Super+x"
|
||||||
#: js/ui/inhibitShortcutsDialog.js:60
|
#: js/ui/inhibitShortcutsDialog.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "You can restore shortcuts by pressing %s."
|
msgid "You can restore shortcuts by pressing %s."
|
||||||
msgstr "Vi povas restaŭri klavkombinojn per premi %s."
|
msgstr "Vi povas restaŭri klavkombinojn per premi %s."
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:65
|
#: js/ui/inhibitShortcutsDialog.js:93
|
||||||
msgid "Deny"
|
msgid "Deny"
|
||||||
msgstr "Rifuzi"
|
msgstr "Rifuzi"
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:71
|
#: js/ui/inhibitShortcutsDialog.js:100
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Akcepti"
|
msgstr "Akcepti"
|
||||||
|
|
||||||
@@ -1310,13 +1311,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:310
|
#: 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"
|
||||||
@@ -1326,59 +1327,59 @@ msgstr "Malŝalti"
|
|||||||
msgid "Leave Off"
|
msgid "Leave Off"
|
||||||
msgstr "Lasi malŝaltita"
|
msgstr "Lasi malŝaltita"
|
||||||
|
|
||||||
#: js/ui/keyboard.js:203
|
#: js/ui/keyboard.js:200
|
||||||
msgid "Region & Language Settings"
|
msgid "Region & Language Settings"
|
||||||
msgstr "Regiono & lingvo agordoj"
|
msgstr "Regiono & lingvo agordoj"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:614
|
#: js/ui/lookingGlass.js:615
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Neniu kromprogramo instalita"
|
msgstr "Neniu kromprogramo instalita"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID.
|
#. Translators: argument is an extension UUID.
|
||||||
#: js/ui/lookingGlass.js:668
|
#: js/ui/lookingGlass.js:669
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "%s ne eligintaj ajnaj eraroj."
|
msgstr "%s ne eligintaj ajnaj eraroj."
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:674
|
#: js/ui/lookingGlass.js:675
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Kaŝi erarojn"
|
msgstr "Kaŝi erarojn"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:678 js/ui/lookingGlass.js:738
|
#: js/ui/lookingGlass.js:679 js/ui/lookingGlass.js:739
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Montri erarojn"
|
msgstr "Montri erarojn"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:687
|
#: js/ui/lookingGlass.js:688
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Enŝaltita"
|
msgstr "Enŝaltita"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: js/ui/lookingGlass.js:690 subprojects/gvc/gvc-mixer-control.c:1866
|
#: js/ui/lookingGlass.js:691 subprojects/gvc/gvc-mixer-control.c:1864
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Elŝaltita"
|
msgstr "Elŝaltita"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:692
|
#: js/ui/lookingGlass.js:693
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Eraro"
|
msgstr "Eraro"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:694
|
#: js/ui/lookingGlass.js:695
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Neaktuala"
|
msgstr "Neaktuala"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:696
|
#: js/ui/lookingGlass.js:697
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Elŝutante"
|
msgstr "Elŝutante"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:720
|
#: js/ui/lookingGlass.js:721
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Montri fonton"
|
msgstr "Montri fonton"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:729
|
#: js/ui/lookingGlass.js:730
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Retpaĝo"
|
msgstr "Retpaĝo"
|
||||||
|
|
||||||
#: js/ui/messageTray.js:1474
|
#: js/ui/messageTray.js:1480
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Sisteminformoj"
|
msgstr "Sisteminformoj"
|
||||||
|
|
||||||
@@ -1404,13 +1405,14 @@ msgstr "Malfari"
|
|||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Superrigardo"
|
msgstr "Superrigardo"
|
||||||
|
|
||||||
|
# Imperativo
|
||||||
#. Translators: this is the text displayed
|
#. Translators: this is the text displayed
|
||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: js/ui/overview.js:226
|
#: js/ui/overview.js:226
|
||||||
msgid "Type to search…"
|
msgid "Type to search…"
|
||||||
msgstr "Tajpi por serĉi…"
|
msgstr "Tajpu por serĉi…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:92
|
#: js/ui/padOsd.js:92
|
||||||
msgid "New shortcut…"
|
msgid "New shortcut…"
|
||||||
@@ -1456,34 +1458,25 @@ 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:108
|
#: js/ui/panel.js:113
|
||||||
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:466
|
#: js/ui/panel.js:468
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktivecoj"
|
msgstr "Aktivecoj"
|
||||||
|
|
||||||
#: js/ui/panel.js:741
|
#: js/ui/panel.js:743
|
||||||
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:864
|
||||||
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"
|
||||||
@@ -1520,7 +1513,7 @@ msgid_plural "%d new notifications"
|
|||||||
msgstr[0] "%d nova sciigo"
|
msgstr[0] "%d nova sciigo"
|
||||||
msgstr[1] "%d novaj sciigoj"
|
msgstr[1] "%d novaj sciigoj"
|
||||||
|
|
||||||
#: js/ui/screenShield.js:449 js/ui/status/system.js:270
|
#: js/ui/screenShield.js:449 js/ui/status/system.js:271
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Ŝlosi"
|
msgstr "Ŝlosi"
|
||||||
|
|
||||||
@@ -1535,11 +1528,11 @@ msgstr "GNOME bezonas ŝlosi la ekranon"
|
|||||||
#.
|
#.
|
||||||
#. 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:834 js/ui/screenShield.js:1307
|
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1299
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Ne eblas ŝlosi"
|
msgstr "Ne eblas ŝlosi"
|
||||||
|
|
||||||
#: js/ui/screenShield.js:835 js/ui/screenShield.js:1308
|
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Ŝloso estis blokita de aplikaĵo"
|
msgstr "Ŝloso estis blokita de aplikaĵo"
|
||||||
|
|
||||||
@@ -1701,7 +1694,7 @@ msgid "<unknown>"
|
|||||||
msgstr "<nekonata>"
|
msgstr "<nekonata>"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:416 js/ui/status/network.js:1293
|
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Off"
|
msgid "%s Off"
|
||||||
msgstr "%s malŝaltita"
|
msgstr "%s malŝaltita"
|
||||||
@@ -1727,7 +1720,7 @@ 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:434 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"
|
||||||
@@ -1767,7 +1760,7 @@ 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:553 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"
|
||||||
@@ -1832,72 +1825,72 @@ 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 nekonektita"
|
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:1702
|
#: js/ui/status/network.js:1705
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Konekto malsukcesis"
|
msgstr "Konekto malsukcesis"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1703
|
#: js/ui/status/network.js:1706
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Aktivigo de reto-konekto malsukcesis"
|
msgstr "Aktivigo de reto-konekto malsukcesis"
|
||||||
|
|
||||||
@@ -1979,15 +1972,15 @@ msgstr "Adiaŭi"
|
|||||||
msgid "Account Settings"
|
msgid "Account Settings"
|
||||||
msgstr "Kontoagordoj"
|
msgstr "Kontoagordoj"
|
||||||
|
|
||||||
#: js/ui/status/system.js:255
|
#: js/ui/status/system.js:256
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Orientiĝa ŝloso"
|
msgstr "Orientiĝa ŝloso"
|
||||||
|
|
||||||
#: js/ui/status/system.js:281
|
#: js/ui/status/system.js:282
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Dormeti"
|
msgstr "Dormeti"
|
||||||
|
|
||||||
#: js/ui/status/system.js:291
|
#: js/ui/status/system.js:292
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Malŝalti"
|
msgstr "Malŝalti"
|
||||||
|
|
||||||
@@ -2102,7 +2095,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:662
|
#: js/ui/windowManager.js:677
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d × %d"
|
msgid "%d × %d"
|
||||||
msgstr "%d × %d"
|
msgstr "%d × %d"
|
||||||
@@ -2175,11 +2168,6 @@ msgstr "Movi al dekstra ekrano"
|
|||||||
msgid "Evolution Calendar"
|
msgid "Evolution Calendar"
|
||||||
msgstr "Evolucio-kalendaro"
|
msgstr "Evolucio-kalendaro"
|
||||||
|
|
||||||
#. 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 "Presi version"
|
msgstr "Presi version"
|
||||||
@@ -2196,12 +2184,12 @@ msgstr "Uzi specifan reĝimon, ekz. “gdm” por la salut-ekrano"
|
|||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Listigi eblajn reĝimojn"
|
msgstr "Listigi eblajn reĝimojn"
|
||||||
|
|
||||||
#: src/shell-app.c:260
|
#: src/shell-app.c:264
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Nekonata"
|
msgstr "Nekonata"
|
||||||
|
|
||||||
#: src/shell-app.c:511
|
#: src/shell-app.c:515
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Malsukcesis lanĉi “%s”"
|
msgstr "Malsukcesis lanĉi “%s”"
|
||||||
@@ -2220,7 +2208,7 @@ msgstr "La uzanto malakceptis la aŭtentigan dialogon"
|
|||||||
|
|
||||||
#. 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:1873
|
#: subprojects/gvc/gvc-mixer-control.c:1871
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Output"
|
msgid "%u Output"
|
||||||
msgid_plural "%u Outputs"
|
msgid_plural "%u Outputs"
|
||||||
@@ -2229,17 +2217,26 @@ msgstr[1] "%u eligoj"
|
|||||||
|
|
||||||
#. 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:1883
|
#: subprojects/gvc/gvc-mixer-control.c:1881
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Input"
|
msgid "%u Input"
|
||||||
msgid_plural "%u Inputs"
|
msgid_plural "%u Inputs"
|
||||||
msgstr[0] "%u enigo"
|
msgstr[0] "%u enigo"
|
||||||
msgstr[1] "%u enigoj"
|
msgstr[1] "%u enigoj"
|
||||||
|
|
||||||
#: subprojects/gvc/gvc-mixer-control.c:2738
|
#: subprojects/gvc/gvc-mixer-control.c:2736
|
||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sistemsonoj"
|
msgstr "Sistemsonoj"
|
||||||
|
|
||||||
|
#~ msgid "toggle-switch-us"
|
||||||
|
#~ msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
|
#~ msgid "network-workgroup"
|
||||||
|
#~ msgstr "network-workgroup"
|
||||||
|
|
||||||
|
#~ 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 "Eraro okazis dum ŝarĝado de la agorda dialogo de %s:"
|
#~ msgstr "Eraro okazis dum ŝarĝado de la agorda dialogo de %s:"
|
||||||
|
|
||||||
|
114
po/fr.po
114
po/fr.po
@@ -14,23 +14,23 @@
|
|||||||
# Alain Lojewski <allomervan@gmail.com>, 2014-2018.
|
# Alain Lojewski <allomervan@gmail.com>, 2014-2018.
|
||||||
# Erwan Georget <egeorget@opmbx.org>, 2016.
|
# Erwan Georget <egeorget@opmbx.org>, 2016.
|
||||||
# Claude Paroz <claude@2xlibre.net>, 2010-2011, 2016.
|
# Claude Paroz <claude@2xlibre.net>, 2010-2011, 2016.
|
||||||
# Charles Monzat <charles.monzat@numericable.fr>, 2016-2018.
|
|
||||||
# Julien Humbert <julroy67@gmail.com>, 2019.
|
# Julien Humbert <julroy67@gmail.com>, 2019.
|
||||||
|
# Charles Monzat <charles.monzat@free.fr>, 2016-2019.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master fr\n"
|
"Project-Id-Version: gnome-shell master fr\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-02-28 03:16+0000\n"
|
"POT-Creation-Date: 2019-03-13 20:47+0000\n"
|
||||||
"PO-Revision-Date: 2019-02-28 08:29+0100\n"
|
"PO-Revision-Date: 2019-03-17 19:15+0100\n"
|
||||||
"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
|
"Last-Translator: Charles Monzat <charles.monzat@free.fr>\n"
|
||||||
"Language-Team: français <gnomefr@traduc.org>\n"
|
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
|
||||||
"Language: fr\n"
|
"Language: fr\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: Poedit 2.2.1\n"
|
"X-Generator: Gtranslator 3.32.0\n"
|
||||||
|
|
||||||
#: data/50-gnome-shell-system.xml:6
|
#: data/50-gnome-shell-system.xml:6
|
||||||
msgid "System"
|
msgid "System"
|
||||||
@@ -482,7 +482,7 @@ msgstr "Absent de la liste ?"
|
|||||||
|
|
||||||
#. 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:880
|
#: js/gdm/loginDialog.js:884
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(par ex. utilisateur ou %s)"
|
msgstr "(par ex. utilisateur ou %s)"
|
||||||
@@ -490,12 +490,12 @@ msgstr "(par ex. utilisateur ou %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:885 js/ui/components/networkAgent.js:243
|
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
|
||||||
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
|
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Nom d’utilisateur : "
|
msgstr "Nom d’utilisateur : "
|
||||||
|
|
||||||
#: js/gdm/loginDialog.js:1223
|
#: js/gdm/loginDialog.js:1227
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Fenêtre de connexion"
|
msgstr "Fenêtre de connexion"
|
||||||
|
|
||||||
@@ -1075,7 +1075,7 @@ msgstr "Mot de passe de la connexion mobile"
|
|||||||
msgid "A password is required to connect to “%s”."
|
msgid "A password is required to connect to “%s”."
|
||||||
msgstr "Un mot de passe est requis pour se connecter à « %s »."
|
msgstr "Un mot de passe est requis pour se connecter à « %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 "Gestionnaire de réseau"
|
msgstr "Gestionnaire de réseau"
|
||||||
|
|
||||||
@@ -1335,26 +1335,26 @@ msgid "Download and install “%s” from extensions.gnome.org?"
|
|||||||
msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?"
|
msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?"
|
||||||
|
|
||||||
#. Translators: %s is an application name like "Settings"
|
#. Translators: %s is an application name like "Settings"
|
||||||
#: js/ui/inhibitShortcutsDialog.js:50
|
#: js/ui/inhibitShortcutsDialog.js:78
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s wants to inhibit shortcuts"
|
msgid "%s wants to inhibit shortcuts"
|
||||||
msgstr "%s veut neutraliser les raccourcis"
|
msgstr "%s veut neutraliser les raccourcis"
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:51
|
#: js/ui/inhibitShortcutsDialog.js:79
|
||||||
msgid "Application wants to inhibit shortcuts"
|
msgid "Application wants to inhibit shortcuts"
|
||||||
msgstr "L’application veut neutraliser les raccourcis"
|
msgstr "L’application veut neutraliser les raccourcis"
|
||||||
|
|
||||||
#. Translators: %s is a keyboard shortcut like "Super+x"
|
#. Translators: %s is a keyboard shortcut like "Super+x"
|
||||||
#: js/ui/inhibitShortcutsDialog.js:60
|
#: js/ui/inhibitShortcutsDialog.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "You can restore shortcuts by pressing %s."
|
msgid "You can restore shortcuts by pressing %s."
|
||||||
msgstr "Pour restaurer les raccourcis, appuyez sur %s."
|
msgstr "Pour restaurer les raccourcis, appuyez sur %s."
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:65
|
#: js/ui/inhibitShortcutsDialog.js:93
|
||||||
msgid "Deny"
|
msgid "Deny"
|
||||||
msgstr "Refuser"
|
msgstr "Refuser"
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:71
|
#: js/ui/inhibitShortcutsDialog.js:100
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Autoriser"
|
msgstr "Autoriser"
|
||||||
|
|
||||||
@@ -1407,13 +1407,13 @@ msgid "Leave On"
|
|||||||
msgstr "Laisser activé"
|
msgstr "Laisser activé"
|
||||||
|
|
||||||
#: 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 "Activer"
|
msgstr "Activer"
|
||||||
|
|
||||||
#: 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: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"
|
||||||
@@ -1423,59 +1423,59 @@ msgstr "Éteindre"
|
|||||||
msgid "Leave Off"
|
msgid "Leave Off"
|
||||||
msgstr "Laisser éteint"
|
msgstr "Laisser éteint"
|
||||||
|
|
||||||
#: js/ui/keyboard.js:203
|
#: js/ui/keyboard.js:200
|
||||||
msgid "Region & Language Settings"
|
msgid "Region & Language Settings"
|
||||||
msgstr "Paramètres de langue et région"
|
msgstr "Paramètres de langue et région"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:614
|
#: js/ui/lookingGlass.js:615
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Aucune extension installée"
|
msgstr "Aucune extension installée"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID.
|
#. Translators: argument is an extension UUID.
|
||||||
#: js/ui/lookingGlass.js:668
|
#: js/ui/lookingGlass.js:669
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "%s n’a émis aucune erreur."
|
msgstr "%s n’a émis aucune erreur."
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:674
|
#: js/ui/lookingGlass.js:675
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Masquer les erreurs"
|
msgstr "Masquer les erreurs"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:678 js/ui/lookingGlass.js:738
|
#: js/ui/lookingGlass.js:679 js/ui/lookingGlass.js:739
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Afficher les erreurs"
|
msgstr "Afficher les erreurs"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:687
|
#: js/ui/lookingGlass.js:688
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Activé"
|
msgstr "Activé"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: js/ui/lookingGlass.js:690 subprojects/gvc/gvc-mixer-control.c:1866
|
#: js/ui/lookingGlass.js:691 subprojects/gvc/gvc-mixer-control.c:1864
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Désactivé"
|
msgstr "Désactivé"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:692
|
#: js/ui/lookingGlass.js:693
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Erreur"
|
msgstr "Erreur"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:694
|
#: js/ui/lookingGlass.js:695
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Périmé"
|
msgstr "Périmé"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:696
|
#: js/ui/lookingGlass.js:697
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Téléchargement"
|
msgstr "Téléchargement"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:720
|
#: js/ui/lookingGlass.js:721
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Afficher la source"
|
msgstr "Afficher la source"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:729
|
#: js/ui/lookingGlass.js:730
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Page Web"
|
msgstr "Page Web"
|
||||||
|
|
||||||
#: js/ui/messageTray.js:1474
|
#: js/ui/messageTray.js:1480
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informations du système"
|
msgstr "Informations du système"
|
||||||
|
|
||||||
@@ -1559,16 +1559,16 @@ msgstr "Quitter"
|
|||||||
|
|
||||||
#. 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:466
|
#: js/ui/panel.js:471
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Activités"
|
msgstr "Activités"
|
||||||
|
|
||||||
#: js/ui/panel.js:741
|
#: js/ui/panel.js:746
|
||||||
msgctxt "System menu in the top bar"
|
msgctxt "System menu in the top bar"
|
||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr "Système"
|
msgstr "Système"
|
||||||
|
|
||||||
#: js/ui/panel.js:861
|
#: js/ui/panel.js:866
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Barre supérieure"
|
msgstr "Barre supérieure"
|
||||||
|
|
||||||
@@ -1800,7 +1800,7 @@ msgid "<unknown>"
|
|||||||
msgstr "<inconnu>"
|
msgstr "<inconnu>"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:416 js/ui/status/network.js:1293
|
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Off"
|
msgid "%s Off"
|
||||||
msgstr "%s éteint"
|
msgstr "%s éteint"
|
||||||
@@ -1826,7 +1826,7 @@ msgid "%s Disconnecting"
|
|||||||
msgstr "Déconnexion de %s en cours"
|
msgstr "Déconnexion de %s en cours"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:434 js/ui/status/network.js:1285
|
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Connecting"
|
msgid "%s Connecting"
|
||||||
msgstr "Connexion de %s en cours"
|
msgstr "Connexion de %s en cours"
|
||||||
@@ -1866,7 +1866,7 @@ msgid "Mobile Broadband Settings"
|
|||||||
msgstr "Paramètres connexion mobile"
|
msgstr "Paramètres connexion mobile"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:553 js/ui/status/network.js:1290
|
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Hardware Disabled"
|
msgid "%s Hardware Disabled"
|
||||||
msgstr "Équipement %s désactivé"
|
msgstr "Équipement %s désactivé"
|
||||||
@@ -1931,72 +1931,72 @@ msgid "Wi-Fi Settings"
|
|||||||
msgstr "Paramètres Wi-Fi"
|
msgstr "Paramètres 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 "Point d’accès %s actif"
|
msgstr "Point d’accès %s actif"
|
||||||
|
|
||||||
#. 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 non connecté"
|
msgstr "%s non connecté"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1393
|
#: js/ui/status/network.js:1392
|
||||||
msgid "connecting…"
|
msgid "connecting…"
|
||||||
msgstr "connexion…"
|
msgstr "connexion…"
|
||||||
|
|
||||||
#. 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 "authentification nécessaire"
|
msgstr "authentification nécessaire"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1398
|
#: js/ui/status/network.js:1397
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "échec de connexion"
|
msgstr "échec de connexion"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1448
|
#: js/ui/status/network.js:1447
|
||||||
msgid "VPN Settings"
|
msgid "VPN Settings"
|
||||||
msgstr "Paramètres VPN"
|
msgstr "Paramètres 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 désactivé"
|
msgstr "VPN désactivé"
|
||||||
|
|
||||||
#: 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 "Paramètres du réseau"
|
msgstr "Paramètres du réseau"
|
||||||
|
|
||||||
#: 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 connexion filaire."
|
msgstr[0] "%s connexion filaire."
|
||||||
msgstr[1] "%s connexions filaires."
|
msgstr[1] "%s connexions filaires."
|
||||||
|
|
||||||
#: 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 connexion Wi-Fi."
|
msgstr[0] "%s connexion Wi-Fi."
|
||||||
msgstr[1] "%s connexions Wi-Fi."
|
msgstr[1] "%s connexions Wi-Fi."
|
||||||
|
|
||||||
#: 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 connexion à un modem."
|
msgstr[0] "%s connexion à un modem."
|
||||||
msgstr[1] "%s connexions à des modems."
|
msgstr[1] "%s connexions à des modems."
|
||||||
|
|
||||||
#: js/ui/status/network.js:1702
|
#: js/ui/status/network.js:1701
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Échec de connexion"
|
msgstr "Échec de connexion"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1703
|
#: js/ui/status/network.js:1702
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "L’activation de la connexion réseau a échoué"
|
msgstr "L’activation de la connexion réseau a échoué"
|
||||||
|
|
||||||
@@ -2049,7 +2049,7 @@ msgstr "%d∶%02d avant chargement complet (%d %%)"
|
|||||||
#: js/ui/status/power.js:117 js/ui/status/power.js:119
|
#: js/ui/status/power.js:117 js/ui/status/power.js:119
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d %%"
|
msgid "%d %%"
|
||||||
msgstr "%d %%"
|
msgstr "%d %%"
|
||||||
|
|
||||||
#: js/ui/status/remoteAccess.js:42
|
#: js/ui/status/remoteAccess.js:42
|
||||||
msgid "Screen is Being Shared"
|
msgid "Screen is Being Shared"
|
||||||
@@ -2298,12 +2298,12 @@ msgstr ""
|
|||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Lister les modes possibles"
|
msgstr "Lister les modes possibles"
|
||||||
|
|
||||||
#: src/shell-app.c:260
|
#: src/shell-app.c:264
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Inconnu"
|
msgstr "Inconnu"
|
||||||
|
|
||||||
#: src/shell-app.c:511
|
#: src/shell-app.c:515
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Impossible de lancer « %s »"
|
msgstr "Impossible de lancer « %s »"
|
||||||
@@ -2322,7 +2322,7 @@ msgstr "La fenêtre d’authentification a été écartée par l’utilisateur"
|
|||||||
|
|
||||||
#. 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:1873
|
#: subprojects/gvc/gvc-mixer-control.c:1871
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Output"
|
msgid "%u Output"
|
||||||
msgid_plural "%u Outputs"
|
msgid_plural "%u Outputs"
|
||||||
@@ -2331,14 +2331,14 @@ msgstr[1] "%u sorties"
|
|||||||
|
|
||||||
#. 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:1883
|
#: subprojects/gvc/gvc-mixer-control.c:1881
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Input"
|
msgid "%u Input"
|
||||||
msgid_plural "%u Inputs"
|
msgid_plural "%u Inputs"
|
||||||
msgstr[0] "%u entrée"
|
msgstr[0] "%u entrée"
|
||||||
msgstr[1] "%u entrées"
|
msgstr[1] "%u entrées"
|
||||||
|
|
||||||
#: subprojects/gvc/gvc-mixer-control.c:2738
|
#: subprojects/gvc/gvc-mixer-control.c:2736
|
||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sons système"
|
msgstr "Sons système"
|
||||||
|
|
||||||
|
178
po/id.po
178
po/id.po
@@ -4,12 +4,13 @@
|
|||||||
# 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-02-21 18:43+0000\n"
|
"POT-Creation-Date: 2019-04-17 19:29+0000\n"
|
||||||
"PO-Revision-Date: 2019-02-14 22:18+0700\n"
|
"PO-Revision-Date: 2019-04-25 14:54+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"
|
||||||
@@ -376,11 +377,6 @@ 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 "Something’s gone wrong"
|
msgid "Something’s gone wrong"
|
||||||
msgstr "Ada yang tidak beres"
|
msgstr "Ada yang tidak beres"
|
||||||
@@ -461,7 +457,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:880
|
#: js/gdm/loginDialog.js:884
|
||||||
#, 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)"
|
||||||
@@ -469,12 +465,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:885 js/ui/components/networkAgent.js:243
|
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
|
||||||
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
|
#: 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:1223
|
#: js/gdm/loginDialog.js:1227
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Jendela Log Masuk"
|
msgstr "Jendela Log Masuk"
|
||||||
|
|
||||||
@@ -728,32 +724,37 @@ msgstr "Sering"
|
|||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Semua"
|
msgstr "Semua"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1737 js/ui/panel.js:83
|
#. Translators: This is the heading of a list of open windows
|
||||||
|
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79
|
||||||
|
msgid "Open Windows"
|
||||||
|
msgstr "Buka Jendela"
|
||||||
|
|
||||||
|
#: js/ui/appDisplay.js:1732 js/ui/panel.js:86
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Jendela Baru"
|
msgstr "Jendela Baru"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1751
|
#: js/ui/appDisplay.js:1746
|
||||||
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:1778 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:1773 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:1784
|
#: js/ui/appDisplay.js:1779
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Tambah ke Favorit"
|
msgstr "Tambah ke Favorit"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1794 js/ui/panel.js:94
|
#: js/ui/appDisplay.js:1789 js/ui/panel.js:97
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Tampilkan Rincian"
|
msgstr "Tampilkan Rincian"
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:141
|
#: js/ui/appFavorites.js:149
|
||||||
#, 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:175
|
#: js/ui/appFavorites.js:183
|
||||||
#, 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."
|
||||||
@@ -1039,7 +1040,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:1665
|
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Manajer Jaringan"
|
msgstr "Manajer Jaringan"
|
||||||
|
|
||||||
@@ -1109,23 +1110,23 @@ msgstr "Tambah jam dunia…"
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Jam Dunia"
|
msgstr "Jam Dunia"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:222
|
#: js/ui/dateMenu.js:228
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Cuaca"
|
msgstr "Cuaca"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:305
|
#: js/ui/dateMenu.js:311
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Pilih lokasi…"
|
msgstr "Pilih lokasi…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:313
|
#: js/ui/dateMenu.js:319
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Memuat…"
|
msgstr "Memuat…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:323
|
#: js/ui/dateMenu.js:329
|
||||||
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:325
|
#: js/ui/dateMenu.js:331
|
||||||
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"
|
||||||
|
|
||||||
@@ -1288,26 +1289,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:50
|
#: js/ui/inhibitShortcutsDialog.js:78
|
||||||
#, 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:51
|
#: js/ui/inhibitShortcutsDialog.js:79
|
||||||
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:60
|
#: js/ui/inhibitShortcutsDialog.js:88
|
||||||
#, 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:65
|
#: js/ui/inhibitShortcutsDialog.js:93
|
||||||
msgid "Deny"
|
msgid "Deny"
|
||||||
msgstr "Tolak"
|
msgstr "Tolak"
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:71
|
#: js/ui/inhibitShortcutsDialog.js:100
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Izinkan"
|
msgstr "Izinkan"
|
||||||
|
|
||||||
@@ -1358,13 +1359,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:1264
|
#: js/ui/status/network.js:1263
|
||||||
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: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"
|
||||||
@@ -1374,59 +1375,59 @@ msgstr "Matikan"
|
|||||||
msgid "Leave Off"
|
msgid "Leave Off"
|
||||||
msgstr "Biarkan Mati"
|
msgstr "Biarkan Mati"
|
||||||
|
|
||||||
#: js/ui/keyboard.js:203
|
#: js/ui/keyboard.js:200
|
||||||
msgid "Region & Language Settings"
|
msgid "Region & Language Settings"
|
||||||
msgstr "Pengaturan Wilayah & Bahasa"
|
msgstr "Pengaturan Wilayah & Bahasa"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:614
|
#: js/ui/lookingGlass.js:615
|
||||||
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:668
|
#: js/ui/lookingGlass.js:669
|
||||||
#, 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:674
|
#: js/ui/lookingGlass.js:675
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Sembunyikan Galat"
|
msgstr "Sembunyikan Galat"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:678 js/ui/lookingGlass.js:738
|
#: js/ui/lookingGlass.js:679 js/ui/lookingGlass.js:739
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Tampilkan Galat"
|
msgstr "Tampilkan Galat"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:687
|
#: js/ui/lookingGlass.js:688
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Diaktifkan"
|
msgstr "Diaktifkan"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: js/ui/lookingGlass.js:690 subprojects/gvc/gvc-mixer-control.c:1866
|
#: js/ui/lookingGlass.js:691 subprojects/gvc/gvc-mixer-control.c:1864
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Dinonaktifkan"
|
msgstr "Dinonaktifkan"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:692
|
#: js/ui/lookingGlass.js:693
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Galat"
|
msgstr "Galat"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:694
|
#: js/ui/lookingGlass.js:695
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Kadaluarsa"
|
msgstr "Kadaluarsa"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:696
|
#: js/ui/lookingGlass.js:697
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Mengunduh"
|
msgstr "Mengunduh"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:720
|
#: js/ui/lookingGlass.js:721
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Tilik Sumber"
|
msgstr "Tilik Sumber"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:729
|
#: js/ui/lookingGlass.js:730
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Halaman Web"
|
msgstr "Halaman Web"
|
||||||
|
|
||||||
#: js/ui/messageTray.js:1474
|
#: js/ui/messageTray.js:1480
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informasi Sistem"
|
msgstr "Informasi Sistem"
|
||||||
|
|
||||||
@@ -1504,35 +1505,25 @@ 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:108
|
#: js/ui/panel.js:113
|
||||||
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:466
|
#: js/ui/panel.js:468
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktivitas"
|
msgstr "Aktivitas"
|
||||||
|
|
||||||
#: js/ui/panel.js:741
|
#: js/ui/panel.js:743
|
||||||
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:861
|
#: js/ui/panel.js:864
|
||||||
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"
|
||||||
@@ -1569,7 +1560,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:270
|
#: js/ui/screenShield.js:449 js/ui/status/system.js:271
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Kunci"
|
msgstr "Kunci"
|
||||||
|
|
||||||
@@ -1584,11 +1575,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:834 js/ui/screenShield.js:1307
|
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1299
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Tak bisa mengunci"
|
msgstr "Tak bisa mengunci"
|
||||||
|
|
||||||
#: js/ui/screenShield.js:835 js/ui/screenShield.js:1308
|
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Kunci diblokir oleh suatu aplikasi"
|
msgstr "Kunci diblokir oleh suatu aplikasi"
|
||||||
|
|
||||||
@@ -1750,7 +1741,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: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 Mati"
|
msgstr "%s Mati"
|
||||||
@@ -1776,7 +1767,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: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 Menyambung"
|
msgstr "%s Menyambung"
|
||||||
@@ -1816,7 +1807,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: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 Perangkat Keras Dinonaktifkan"
|
msgstr "%s Perangkat Keras Dinonaktifkan"
|
||||||
@@ -1881,72 +1872,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:1281
|
#: js/ui/status/network.js:1280
|
||||||
#, 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:1296
|
#: js/ui/status/network.js:1295
|
||||||
#, 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:1393
|
#: js/ui/status/network.js:1392
|
||||||
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:1396
|
#: js/ui/status/network.js:1395
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "diperlukan otentikasi"
|
msgstr "diperlukan otentikasi"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1398
|
#: js/ui/status/network.js:1397
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "koneksi gagal"
|
msgstr "koneksi gagal"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1448
|
#: js/ui/status/network.js:1447
|
||||||
msgid "VPN Settings"
|
msgid "VPN Settings"
|
||||||
msgstr "Pengaturan VPN"
|
msgstr "Pengaturan 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 Mati"
|
msgstr "VPN Mati"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82
|
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Pengaturan Jaringan"
|
msgstr "Pengaturan Jaringan"
|
||||||
|
|
||||||
#: 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 Koneksi Kabel"
|
msgstr[0] "%s Koneksi Kabel"
|
||||||
msgstr[1] "%s Koneksi Kabel"
|
msgstr[1] "%s Koneksi Kabel"
|
||||||
|
|
||||||
#: 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 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: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 Koneksi Modem"
|
msgstr[0] "%s Koneksi Modem"
|
||||||
msgstr[1] "%s Koneksi Modem"
|
msgstr[1] "%s Koneksi Modem"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1702
|
#: js/ui/status/network.js:1705
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Koneksi gagal"
|
msgstr "Koneksi gagal"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1703
|
#: js/ui/status/network.js:1706
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Aktivasi koneksi jaringan gagal"
|
msgstr "Aktivasi koneksi jaringan gagal"
|
||||||
|
|
||||||
@@ -2028,15 +2019,15 @@ msgstr "Keluar"
|
|||||||
msgid "Account Settings"
|
msgid "Account Settings"
|
||||||
msgstr "Pengaturan Akun"
|
msgstr "Pengaturan Akun"
|
||||||
|
|
||||||
#: js/ui/status/system.js:255
|
#: js/ui/status/system.js:256
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Kunci Orientasi"
|
msgstr "Kunci Orientasi"
|
||||||
|
|
||||||
#: js/ui/status/system.js:281
|
#: js/ui/status/system.js:282
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspensi"
|
msgstr "Suspensi"
|
||||||
|
|
||||||
#: js/ui/status/system.js:291
|
#: js/ui/status/system.js:292
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Matikan"
|
msgstr "Matikan"
|
||||||
|
|
||||||
@@ -2152,7 +2143,7 @@ msgstr[1] "Perubahan tatanan akan dikembalikan dalam %d detik"
|
|||||||
|
|
||||||
#. Translators: This represents the size of a window. The first number is
|
#. 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:662
|
#: js/ui/windowManager.js:677
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d × %d"
|
msgid "%d × %d"
|
||||||
msgstr "%d × %d"
|
msgstr "%d × %d"
|
||||||
@@ -2225,11 +2216,6 @@ 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"
|
||||||
@@ -2246,12 +2232,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:260
|
#: src/shell-app.c:264
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Tak dikenal"
|
msgstr "Tak dikenal"
|
||||||
|
|
||||||
#: src/shell-app.c:511
|
#: src/shell-app.c:515
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Gagal meluncurkan \"%s\""
|
msgstr "Gagal meluncurkan \"%s\""
|
||||||
@@ -2270,7 +2256,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:1873
|
#: subprojects/gvc/gvc-mixer-control.c:1871
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Output"
|
msgid "%u Output"
|
||||||
msgid_plural "%u Outputs"
|
msgid_plural "%u Outputs"
|
||||||
@@ -2279,17 +2265,27 @@ 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:1883
|
#: subprojects/gvc/gvc-mixer-control.c:1881
|
||||||
#, 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:2738
|
#: subprojects/gvc/gvc-mixer-control.c:2736
|
||||||
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:"
|
||||||
|
|
||||||
|
144
po/tg.po
144
po/tg.po
@@ -8,7 +8,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: Tajik Gnome\n"
|
"Project-Id-Version: Tajik Gnome\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-03-02 10:57+0000\n"
|
"POT-Creation-Date: 2019-03-02 10:57+0000\n"
|
||||||
"PO-Revision-Date: 2019-03-06 20:14+0500\n"
|
"PO-Revision-Date: 2019-03-13 21:44+0500\n"
|
||||||
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: tg\n"
|
"Language: tg\n"
|
||||||
@@ -32,7 +32,7 @@ msgstr "Марказонидани огоҳии фаъол"
|
|||||||
|
|
||||||
#: data/50-gnome-shell-system.xml:15
|
#: data/50-gnome-shell-system.xml:15
|
||||||
msgid "Show the overview"
|
msgid "Show the overview"
|
||||||
msgstr "Намоиш додани хулоса"
|
msgstr "Намоиш додани ҷамъбаст"
|
||||||
|
|
||||||
#: data/50-gnome-shell-system.xml:18
|
#: data/50-gnome-shell-system.xml:18
|
||||||
msgid "Show all applications"
|
msgid "Show all applications"
|
||||||
@@ -82,7 +82,7 @@ msgstr "Ғайрифаъол кардани васеъшавиҳои корба
|
|||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:27
|
#: data/org.gnome.shell.gschema.xml.in:27
|
||||||
msgid "Disable all extensions the user has enabled without affecting the “enabled-extension” setting."
|
msgid "Disable all extensions the user has enabled without affecting the “enabled-extension” setting."
|
||||||
msgstr ""
|
msgstr "Ҳамаи васеъшавиҳое, ки корбар фаъол кард, бе расонидани таъсир ба танзими “васеъшавиии-фаъол” ғайрифаъол карда мешаванд."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:34
|
#: data/org.gnome.shell.gschema.xml.in:34
|
||||||
msgid "Disables the validation of extension version compatibility"
|
msgid "Disables the validation of extension version compatibility"
|
||||||
@@ -188,11 +188,11 @@ msgstr "Тугмабандӣ барои иваз кардани намоёнии
|
|||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:138
|
#: data/org.gnome.shell.gschema.xml.in:138
|
||||||
msgid "Keybinding to focus the active notification"
|
msgid "Keybinding to focus the active notification"
|
||||||
msgstr "Тугмабандӣ барои гузоштани фокус ба огоҳии фаъол"
|
msgstr "Тугмабандӣ барои марказонидани огоҳии фаъол"
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:139
|
#: data/org.gnome.shell.gschema.xml.in:139
|
||||||
msgid "Keybinding to focus the active notification."
|
msgid "Keybinding to focus the active notification."
|
||||||
msgstr "Тугмабандӣ барои гузоштани фокус ба огоҳии фаъол."
|
msgstr "Тугмабандӣ барои марказонидани огоҳии фаъол."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:145
|
#: data/org.gnome.shell.gschema.xml.in:145
|
||||||
msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes"
|
msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes"
|
||||||
@@ -245,11 +245,11 @@ msgstr "Гузариш ба барномаи 9"
|
|||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:190
|
#: data/org.gnome.shell.gschema.xml.in:190
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Клавиатураро интихоб кунед"
|
msgstr "Клавиатураро интихоб намоед"
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:191
|
#: data/org.gnome.shell.gschema.xml.in:191
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Намуди клавиатура барои истифода."
|
msgstr "Навъи клавиатурае, ки истифода мешавад."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:202
|
#: data/org.gnome.shell.gschema.xml.in:202
|
||||||
#: data/org.gnome.shell.gschema.xml.in:229
|
#: data/org.gnome.shell.gschema.xml.in:229
|
||||||
@@ -308,15 +308,15 @@ msgstr "Воридшавии шабакавӣ"
|
|||||||
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
||||||
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
|
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
|
||||||
msgid "network-workgroup"
|
msgid "network-workgroup"
|
||||||
msgstr ""
|
msgstr "network-workgroup"
|
||||||
|
|
||||||
#: js/extensionPrefs/main.js:116
|
#: js/extensionPrefs/main.js:116
|
||||||
msgid "Something’s gone wrong"
|
msgid "Something’s gone wrong"
|
||||||
msgstr ""
|
msgstr "Чизе нодуруст ба миён омад"
|
||||||
|
|
||||||
#: js/extensionPrefs/main.js:123
|
#: js/extensionPrefs/main.js:123
|
||||||
msgid "We’re very sorry, but there’s been a problem: the settings for this extension can’t be displayed. We recommend that you report the issue to the extension authors."
|
msgid "We’re very sorry, but there’s been a problem: the settings for this extension can’t be displayed. We recommend that you report the issue to the extension authors."
|
||||||
msgstr ""
|
msgstr "Мутаассифона, хатое ба вуҷуд омад: танзимот барои ин васеъшавӣ нишон дода намешавад. Тавсия дода мешавад, ки шумо дар бораи хато ба муаллифони васеъшавӣ гузориш диҳед."
|
||||||
|
|
||||||
#: js/extensionPrefs/main.js:130
|
#: js/extensionPrefs/main.js:130
|
||||||
#| msgid "Show Details"
|
#| msgid "Show Details"
|
||||||
@@ -330,7 +330,7 @@ msgstr "Намоиш додани хатоҳо"
|
|||||||
|
|
||||||
#: js/extensionPrefs/main.js:185
|
#: js/extensionPrefs/main.js:185
|
||||||
msgid "Homepage"
|
msgid "Homepage"
|
||||||
msgstr ""
|
msgstr "Саҳифаи асосӣ"
|
||||||
|
|
||||||
#: js/extensionPrefs/main.js:186
|
#: js/extensionPrefs/main.js:186
|
||||||
#| msgid "UUIDs of extensions to enable"
|
#| msgid "UUIDs of extensions to enable"
|
||||||
@@ -340,15 +340,15 @@ msgstr "Рамзҳои UUID барои пасвандҳои фаъолшаван
|
|||||||
#: js/extensionPrefs/main.js:449
|
#: js/extensionPrefs/main.js:449
|
||||||
#| msgid "No extensions installed"
|
#| msgid "No extensions installed"
|
||||||
msgid "No Extensions Installed"
|
msgid "No Extensions Installed"
|
||||||
msgstr "Ягон пасванд насб нашудааст"
|
msgstr "Ягон васеъшавӣ насб нашудааст"
|
||||||
|
|
||||||
#: js/extensionPrefs/main.js:459
|
#: js/extensionPrefs/main.js:459
|
||||||
msgid "Extensions can be installed through Software or <a href=\"https://extensions.gnome.org\">extensions.gnome.org</a>."
|
msgid "Extensions can be installed through Software or <a href=\"https://extensions.gnome.org\">extensions.gnome.org</a>."
|
||||||
msgstr ""
|
msgstr "Васеъшавиҳо ба воситаи низоми нармафзор ё <a href=\"https://extensions.gnome.org\">extensions.gnome.org</a> ҷорӣ карда мешаванд."
|
||||||
|
|
||||||
#: js/extensionPrefs/main.js:474
|
#: js/extensionPrefs/main.js:474
|
||||||
msgid "Browse in Software"
|
msgid "Browse in Software"
|
||||||
msgstr ""
|
msgstr "Намоиш дар низоми нармафзор"
|
||||||
|
|
||||||
#: 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
|
||||||
@@ -430,7 +430,7 @@ msgstr ""
|
|||||||
#: js/misc/systemActions.js:95
|
#: js/misc/systemActions.js:95
|
||||||
msgctxt "search-result"
|
msgctxt "search-result"
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr ""
|
msgstr "Қулф кардани экран"
|
||||||
|
|
||||||
#. 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
|
||||||
#: js/misc/systemActions.js:98
|
#: js/misc/systemActions.js:98
|
||||||
@@ -454,13 +454,13 @@ msgstr ""
|
|||||||
#| msgid "Suspend"
|
#| msgid "Suspend"
|
||||||
msgctxt "search-result"
|
msgctxt "search-result"
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Таваққуф кардан"
|
msgstr "Таваққуф кардани низом"
|
||||||
|
|
||||||
#. 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
|
||||||
#| msgid "Suspend"
|
#| msgid "Suspend"
|
||||||
msgid "suspend;sleep"
|
msgid "suspend;sleep"
|
||||||
msgstr "Таваққуф"
|
msgstr "таваққуф;хоб"
|
||||||
|
|
||||||
#. Translators: The name of the switch user action in search
|
#. Translators: The name of the switch user action in search
|
||||||
#: js/misc/systemActions.js:116
|
#: js/misc/systemActions.js:116
|
||||||
@@ -473,14 +473,14 @@ msgstr "Иваз кардани корбар"
|
|||||||
#: js/misc/systemActions.js:119
|
#: js/misc/systemActions.js:119
|
||||||
#| msgid "Switch User"
|
#| msgid "Switch User"
|
||||||
msgid "switch user"
|
msgid "switch user"
|
||||||
msgstr "Таъвизи корбар"
|
msgstr "ивази корбар"
|
||||||
|
|
||||||
#. Translators: The name of the lock orientation action in search
|
#. Translators: The name of the lock orientation action in search
|
||||||
#: js/misc/systemActions.js:123
|
#: js/misc/systemActions.js:123
|
||||||
#| msgid "Orientation Lock"
|
#| msgid "Orientation Lock"
|
||||||
msgctxt "search-result"
|
msgctxt "search-result"
|
||||||
msgid "Lock Orientation"
|
msgid "Lock Orientation"
|
||||||
msgstr "Қулфи самт"
|
msgstr "Қулфи самти экран"
|
||||||
|
|
||||||
#. 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
|
||||||
#: js/misc/systemActions.js:126
|
#: js/misc/systemActions.js:126
|
||||||
@@ -504,7 +504,7 @@ msgstr "Иҷрокунии “%s” қатъ шудааст:"
|
|||||||
|
|
||||||
#: js/misc/util.js:175
|
#: js/misc/util.js:175
|
||||||
msgid "Just now"
|
msgid "Just now"
|
||||||
msgstr ""
|
msgstr "Ҳоли ҳозир"
|
||||||
|
|
||||||
#: js/misc/util.js:177
|
#: js/misc/util.js:177
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
@@ -533,29 +533,29 @@ msgstr "Дирӯз"
|
|||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d рӯз пеш"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d рӯз пеш"
|
||||||
|
|
||||||
#: js/misc/util.js:188
|
#: js/misc/util.js:188
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d ҳафта пеш"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d ҳафта пеш"
|
||||||
|
|
||||||
#: js/misc/util.js:191
|
#: js/misc/util.js:191
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d month ago"
|
msgid "%d month ago"
|
||||||
msgid_plural "%d months ago"
|
msgid_plural "%d months ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d моҳ пеш"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d моҳ пеш"
|
||||||
|
|
||||||
#: js/misc/util.js:193
|
#: js/misc/util.js:193
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d year ago"
|
msgid "%d year ago"
|
||||||
msgid_plural "%d years ago"
|
msgid_plural "%d years ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d сол пеш"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d сол пеш"
|
||||||
|
|
||||||
#. Translators: Time in 24h format
|
#. Translators: Time in 24h format
|
||||||
#: js/misc/util.js:223
|
#: js/misc/util.js:223
|
||||||
@@ -635,22 +635,22 @@ msgstr "%B %d %Y, %l∶%M %p"
|
|||||||
#: js/portalHelper/main.js:40
|
#: js/portalHelper/main.js:40
|
||||||
#| msgid "Hotspot Active"
|
#| msgid "Hotspot Active"
|
||||||
msgid "Hotspot Login"
|
msgid "Hotspot Login"
|
||||||
msgstr "Hotspot фаъол аст"
|
msgstr "Воридшавӣ ба нуқтаи пайваст"
|
||||||
|
|
||||||
#: js/portalHelper/main.js:86
|
#: js/portalHelper/main.js:86
|
||||||
msgid "Your connection to this hotspot login is not secure. Passwords or other information you enter on this page can be viewed by people nearby."
|
msgid "Your connection to this hotspot login is not secure. Passwords or other information you enter on this page can be viewed by people nearby."
|
||||||
msgstr ""
|
msgstr "Пайвасти воридшавии шумо ба нуқтаи пайвасти ҷорӣ бехатар намебошад. Ниҳонвожаҳо ё маълумоти дигаре, ки дар ин саҳифа ворид карда мешавад, метавонанд бо одамони дар гидру атроф ошкор карда шаванд."
|
||||||
|
|
||||||
#. No support for non-modal system dialogs, so ignore the option
|
#. No support for non-modal system dialogs, so ignore the option
|
||||||
#. let modal = options['modal'] || true;
|
#. let modal = options['modal'] || true;
|
||||||
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
|
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
|
||||||
msgid "Deny Access"
|
msgid "Deny Access"
|
||||||
msgstr ""
|
msgstr "Манъ кардани дастрасӣ"
|
||||||
|
|
||||||
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
|
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
|
||||||
#| msgid "Always grant access"
|
#| msgid "Always grant access"
|
||||||
msgid "Grant Access"
|
msgid "Grant Access"
|
||||||
msgstr "Ҳамеша иҷозат додан"
|
msgstr "Иҷозат додани дастрасӣ"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:660
|
#: js/ui/appDisplay.js:660
|
||||||
msgid "Frequently used applications will appear here"
|
msgid "Frequently used applications will appear here"
|
||||||
@@ -697,7 +697,7 @@ msgstr "%s аз баргузидаҳои шумо тоза шудааст."
|
|||||||
#: js/ui/audioDeviceSelection.js:42
|
#: js/ui/audioDeviceSelection.js:42
|
||||||
#| msgid "Send Files to Device…"
|
#| msgid "Send Files to Device…"
|
||||||
msgid "Select Audio Device"
|
msgid "Select Audio Device"
|
||||||
msgstr "Фиристодани файлҳо ба дастгоҳ..."
|
msgstr "Интихоби дастгоҳи аудиоӣ"
|
||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:53
|
#: js/ui/audioDeviceSelection.js:53
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
@@ -705,11 +705,11 @@ msgstr "Танзимоти садо"
|
|||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:62
|
#: js/ui/audioDeviceSelection.js:62
|
||||||
msgid "Headphones"
|
msgid "Headphones"
|
||||||
msgstr ""
|
msgstr "Гӯшмонакҳо"
|
||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:64
|
#: js/ui/audioDeviceSelection.js:64
|
||||||
msgid "Headset"
|
msgid "Headset"
|
||||||
msgstr ""
|
msgstr "Гӯшмонак бо микрофон"
|
||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
|
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
@@ -717,7 +717,7 @@ msgstr "Микрофон"
|
|||||||
|
|
||||||
#: js/ui/backgroundMenu.js:13
|
#: js/ui/backgroundMenu.js:13
|
||||||
msgid "Change Background…"
|
msgid "Change Background…"
|
||||||
msgstr "Тағйир додани пазсамина..."
|
msgstr "Тағйир додани пазсамина…"
|
||||||
|
|
||||||
#: js/ui/backgroundMenu.js:15 js/ui/status/nightLight.js:43
|
#: js/ui/backgroundMenu.js:15 js/ui/status/nightLight.js:43
|
||||||
msgid "Display Settings"
|
msgid "Display Settings"
|
||||||
@@ -800,7 +800,7 @@ msgstr "%OB"
|
|||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:342
|
#: js/ui/calendar.js:342
|
||||||
msgid "%OB %Y"
|
msgid "%OB %Y"
|
||||||
msgstr ""
|
msgstr "%OB %Y"
|
||||||
|
|
||||||
#: js/ui/calendar.js:399
|
#: js/ui/calendar.js:399
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
@@ -854,14 +854,14 @@ msgstr "Ягон рӯйдод нест"
|
|||||||
|
|
||||||
#: js/ui/calendar.js:1075
|
#: js/ui/calendar.js:1075
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr ""
|
msgstr "Пок кардан"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/closeDialog.js:42
|
#: js/ui/closeDialog.js:42
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
#| msgid "“%s” is ready"
|
#| msgid "“%s” is ready"
|
||||||
msgid "“%s” is not responding."
|
msgid "“%s” is not responding."
|
||||||
msgstr "“%s” омода аст"
|
msgstr "“%s” ҷавоб намедиҳад."
|
||||||
|
|
||||||
#: js/ui/closeDialog.js:43
|
#: js/ui/closeDialog.js:43
|
||||||
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
|
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
|
||||||
@@ -869,11 +869,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: js/ui/closeDialog.js:59
|
#: js/ui/closeDialog.js:59
|
||||||
msgid "Force Quit"
|
msgid "Force Quit"
|
||||||
msgstr ""
|
msgstr "Маҷбуран пӯшида шавад"
|
||||||
|
|
||||||
#: js/ui/closeDialog.js:62
|
#: js/ui/closeDialog.js:62
|
||||||
msgid "Wait"
|
msgid "Wait"
|
||||||
msgstr ""
|
msgstr "Интизор шавед"
|
||||||
|
|
||||||
#: js/ui/components/automountManager.js:86
|
#: js/ui/components/automountManager.js:86
|
||||||
msgid "External drive connected"
|
msgid "External drive connected"
|
||||||
@@ -910,24 +910,24 @@ msgstr "Пайваст шудан"
|
|||||||
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
|
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
|
||||||
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
|
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
|
||||||
msgid "Password: "
|
msgid "Password: "
|
||||||
msgstr "Ниҳонвожа:"
|
msgstr "Ниҳонвожа: "
|
||||||
|
|
||||||
#. static WEP
|
#. static WEP
|
||||||
#: js/ui/components/networkAgent.js:216
|
#: js/ui/components/networkAgent.js:216
|
||||||
msgid "Key: "
|
msgid "Key: "
|
||||||
msgstr "Калид:"
|
msgstr "Калид: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
|
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
|
||||||
msgid "Private key password: "
|
msgid "Private key password: "
|
||||||
msgstr "Пароли калиди шахсӣ:"
|
msgstr "Ниҳонвожаи калиди шахсӣ: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:269
|
#: js/ui/components/networkAgent.js:269
|
||||||
msgid "Identity: "
|
msgid "Identity: "
|
||||||
msgstr "Шахсият:"
|
msgstr "Шахсият: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:283
|
#: js/ui/components/networkAgent.js:283
|
||||||
msgid "Service: "
|
msgid "Service: "
|
||||||
msgstr "Хидмат:"
|
msgstr "Хидмат: "
|
||||||
|
|
||||||
#: 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"
|
||||||
@@ -944,7 +944,7 @@ msgstr "Санҷиши ҳаққонияти 802.1X-и симдор"
|
|||||||
|
|
||||||
#: js/ui/components/networkAgent.js:319
|
#: js/ui/components/networkAgent.js:319
|
||||||
msgid "Network name: "
|
msgid "Network name: "
|
||||||
msgstr "Номи шабака:"
|
msgstr "Номи шабака: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
|
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
|
||||||
msgid "DSL authentication"
|
msgid "DSL authentication"
|
||||||
@@ -960,7 +960,7 @@ msgstr "Барои дастгоҳи паҳннавори мобилӣ рамзи
|
|||||||
|
|
||||||
#: js/ui/components/networkAgent.js:333
|
#: js/ui/components/networkAgent.js:333
|
||||||
msgid "PIN: "
|
msgid "PIN: "
|
||||||
msgstr "PIN:"
|
msgstr "PIN: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
|
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
|
||||||
msgid "Mobile broadband network password"
|
msgid "Mobile broadband network password"
|
||||||
@@ -1051,12 +1051,12 @@ msgstr "Обу ҳаво"
|
|||||||
#: js/ui/dateMenu.js:305
|
#: js/ui/dateMenu.js:305
|
||||||
#| msgid "Select a network"
|
#| msgid "Select a network"
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Интихоб кардани шабака"
|
msgstr "Интихоби ҷойгиршавӣ…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:313
|
#: js/ui/dateMenu.js:313
|
||||||
#| msgid "Searching…"
|
#| msgid "Searching…"
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Ҷустуҷӯ рафта истодааст..."
|
msgstr "Бор шуда истодааст…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:323
|
#: js/ui/dateMenu.js:323
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
@@ -1274,7 +1274,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: js/ui/kbdA11yDialog.js:57
|
#: js/ui/kbdA11yDialog.js:57
|
||||||
msgid "Leave On"
|
msgid "Leave On"
|
||||||
msgstr ""
|
msgstr "Ҳамеша фаъол"
|
||||||
|
|
||||||
#: 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:1264
|
||||||
@@ -1287,11 +1287,11 @@ msgstr "Фаъол кардан"
|
|||||||
#: 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"
|
||||||
msgstr "Хомӯш кардан"
|
msgstr "Ғайрифаъол кардан"
|
||||||
|
|
||||||
#: js/ui/kbdA11yDialog.js:65
|
#: js/ui/kbdA11yDialog.js:65
|
||||||
msgid "Leave Off"
|
msgid "Leave Off"
|
||||||
msgstr ""
|
msgstr "Ҳамеша ғайрифаъол"
|
||||||
|
|
||||||
#: js/ui/keyboard.js:203
|
#: js/ui/keyboard.js:203
|
||||||
msgid "Region & Language Settings"
|
msgid "Region & Language Settings"
|
||||||
@@ -1327,7 +1327,7 @@ msgstr "Ғайрифаъол"
|
|||||||
|
|
||||||
#: js/ui/lookingGlass.js:693
|
#: js/ui/lookingGlass.js:693
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Хатогӣ"
|
msgstr "Хато"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:695
|
#: js/ui/lookingGlass.js:695
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
@@ -1372,7 +1372,7 @@ msgstr "Ботил сохтан"
|
|||||||
#. activities. See also note for "Activities" string.
|
#. activities. See also note for "Activities" string.
|
||||||
#: js/ui/overview.js:100
|
#: js/ui/overview.js:100
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Хулоса"
|
msgstr "Ҷамъбаст"
|
||||||
|
|
||||||
#. Translators: this is the text displayed
|
#. Translators: this is the text displayed
|
||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
@@ -1380,20 +1380,20 @@ msgstr "Хулоса"
|
|||||||
#. characters.
|
#. characters.
|
||||||
#: js/ui/overview.js:226
|
#: js/ui/overview.js:226
|
||||||
msgid "Type to search…"
|
msgid "Type to search…"
|
||||||
msgstr "Ҷустуҷӯ кардан..."
|
msgstr "Барои ҷустуҷӯ чизеро чоп намоед…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:92
|
#: js/ui/padOsd.js:92
|
||||||
msgid "New shortcut…"
|
msgid "New shortcut…"
|
||||||
msgstr ""
|
msgstr "Миёнбури нав…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:141
|
#: js/ui/padOsd.js:141
|
||||||
#| msgid "Applications"
|
#| msgid "Applications"
|
||||||
msgid "Application defined"
|
msgid "Application defined"
|
||||||
msgstr "Барномаҳо"
|
msgstr "Барномаи муайяншуда"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:142
|
#: js/ui/padOsd.js:142
|
||||||
msgid "Show on-screen help"
|
msgid "Show on-screen help"
|
||||||
msgstr ""
|
msgstr "Намоиш додани кумаки экранӣ"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:143
|
#: js/ui/padOsd.js:143
|
||||||
#| msgid "Switch User"
|
#| msgid "Switch User"
|
||||||
@@ -1406,7 +1406,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: js/ui/padOsd.js:209
|
#: js/ui/padOsd.js:209
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr ""
|
msgstr "Тайёр"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:721
|
#: js/ui/padOsd.js:721
|
||||||
msgid "Edit…"
|
msgid "Edit…"
|
||||||
@@ -1414,19 +1414,19 @@ msgstr "Таҳрир кардан…"
|
|||||||
|
|
||||||
#: js/ui/padOsd.js:763 js/ui/padOsd.js:868
|
#: js/ui/padOsd.js:763 js/ui/padOsd.js:868
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Ҳеҷ"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:822
|
#: js/ui/padOsd.js:822
|
||||||
msgid "Press a button to configure"
|
msgid "Press a button to configure"
|
||||||
msgstr ""
|
msgstr "Барои идома тугмаеро пахш намоед"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:823
|
#: js/ui/padOsd.js:823
|
||||||
msgid "Press Esc to exit"
|
msgid "Press Esc to exit"
|
||||||
msgstr ""
|
msgstr "Барои баромад тугмаи Esc-ро пахш намоед"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:826
|
#: js/ui/padOsd.js:826
|
||||||
msgid "Press any key to exit"
|
msgid "Press any key to exit"
|
||||||
msgstr ""
|
msgstr "Барои баромад тугмаи дилхоҳро пахш намоед"
|
||||||
|
|
||||||
#: js/ui/panel.js:108
|
#: js/ui/panel.js:108
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
@@ -1446,7 +1446,7 @@ msgstr "Низом"
|
|||||||
|
|
||||||
#: js/ui/panel.js:861
|
#: js/ui/panel.js:861
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Панели боло"
|
msgstr "Лавҳаии болоӣ"
|
||||||
|
|
||||||
#. Translators: this MUST be either "toggle-switch-us"
|
#. Translators: this MUST be either "toggle-switch-us"
|
||||||
#. (for toggle switches containing the English words
|
#. (for toggle switches containing the English words
|
||||||
@@ -1519,7 +1519,7 @@ msgstr "Қулф аз тарави барнома баста шудааст"
|
|||||||
|
|
||||||
#: js/ui/search.js:635
|
#: js/ui/search.js:635
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Ҷустуҷӯ рафта истодааст..."
|
msgstr "Дар ҳоли ҷустуҷӯ…"
|
||||||
|
|
||||||
#: js/ui/search.js:637
|
#: js/ui/search.js:637
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
@@ -1836,7 +1836,7 @@ msgstr "%s пайваст нашудааст"
|
|||||||
#: js/ui/status/network.js:1393
|
#: js/ui/status/network.js:1393
|
||||||
#| msgid "Connecting"
|
#| msgid "Connecting"
|
||||||
msgid "connecting…"
|
msgid "connecting…"
|
||||||
msgstr "Пайвастшавӣ"
|
msgstr "пайваст шуда истодааст…"
|
||||||
|
|
||||||
#. 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:1396
|
||||||
@@ -1894,7 +1894,7 @@ msgstr "Пайваст қатъ шудааст"
|
|||||||
|
|
||||||
#: js/ui/status/network.js:1703
|
#: js/ui/status/network.js:1703
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
|
msgstr "Фаъолсозии пайвасти шабака қатъ шуд"
|
||||||
|
|
||||||
#: js/ui/status/nightLight.js:60
|
#: js/ui/status/nightLight.js:60
|
||||||
#| msgid "Networking is disabled"
|
#| msgid "Networking is disabled"
|
||||||
@@ -1929,7 +1929,7 @@ msgstr ""
|
|||||||
#. to estimate battery life
|
#. to estimate battery life
|
||||||
#: js/ui/status/power.js:70 js/ui/status/power.js:76
|
#: js/ui/status/power.js:70 js/ui/status/power.js:76
|
||||||
msgid "Estimating…"
|
msgid "Estimating…"
|
||||||
msgstr "Ҳисоб шуда истодааст..."
|
msgstr "Ҳисоб шуда истодааст…"
|
||||||
|
|
||||||
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
|
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
|
||||||
#: js/ui/status/power.js:84
|
#: js/ui/status/power.js:84
|
||||||
@@ -1948,7 +1948,7 @@ msgstr "%d∶%02d то пур шудан (%d%%)"
|
|||||||
#: js/ui/status/power.js:117 js/ui/status/power.js:119
|
#: js/ui/status/power.js:117 js/ui/status/power.js:119
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d %%"
|
msgid "%d %%"
|
||||||
msgstr ""
|
msgstr "%d %%"
|
||||||
|
|
||||||
#: js/ui/status/remoteAccess.js:42
|
#: js/ui/status/remoteAccess.js:42
|
||||||
msgid "Screen is Being Shared"
|
msgid "Screen is Being Shared"
|
||||||
@@ -1978,11 +1978,11 @@ msgstr "Баромад аз мизи корӣ"
|
|||||||
#: js/ui/status/system.js:227
|
#: js/ui/status/system.js:227
|
||||||
#| msgid "Sound Settings"
|
#| msgid "Sound Settings"
|
||||||
msgid "Account Settings"
|
msgid "Account Settings"
|
||||||
msgstr "Танзимоти садо"
|
msgstr "Танзимоти ҳисоб"
|
||||||
|
|
||||||
#: js/ui/status/system.js:255
|
#: js/ui/status/system.js:255
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Қулфи самт"
|
msgstr "Қулфи самти экран"
|
||||||
|
|
||||||
#: js/ui/status/system.js:281
|
#: js/ui/status/system.js:281
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
|
1007
po/zh_TW.po
1007
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@@ -1078,7 +1078,7 @@ main (int argc,
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void
|
static void __attribute__((format(printf, 1, 0)))
|
||||||
print_debug (const gchar *format, ...)
|
print_debug (const gchar *format, ...)
|
||||||
{
|
{
|
||||||
gchar *s;
|
gchar *s;
|
||||||
|
@@ -266,7 +266,7 @@ main (int argc,
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void
|
static void __attribute__((format(printf, 1, 0)))
|
||||||
print_debug (const gchar *format, ...)
|
print_debug (const gchar *format, ...)
|
||||||
{
|
{
|
||||||
gchar *s;
|
gchar *s;
|
||||||
|
@@ -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 (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app);
|
g_signal_connect_object (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app, 0);
|
||||||
g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app);
|
g_signal_connect_object (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app, 0);
|
||||||
g_signal_connect (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app);
|
g_signal_connect_object (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app, 0);
|
||||||
|
|
||||||
shell_app_update_app_actions (app, window);
|
shell_app_update_app_actions (app, window);
|
||||||
shell_app_ensure_busy_watch (app);
|
shell_app_ensure_busy_watch (app);
|
||||||
@@ -1183,13 +1183,26 @@ _shell_app_handle_startup_sequence (ShellApp *app,
|
|||||||
gboolean
|
gboolean
|
||||||
shell_app_request_quit (ShellApp *app)
|
shell_app_request_quit (ShellApp *app)
|
||||||
{
|
{
|
||||||
|
GActionGroup *group = NULL;
|
||||||
GSList *iter;
|
GSList *iter;
|
||||||
|
|
||||||
if (shell_app_get_state (app) != SHELL_APP_STATE_RUNNING)
|
if (shell_app_get_state (app) != SHELL_APP_STATE_RUNNING)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* TODO - check for an XSMP connection; we could probably use that */
|
/* First, check whether the app exports an explicit "quit" action
|
||||||
|
* that we can activate on the bus
|
||||||
|
*/
|
||||||
|
group = G_ACTION_GROUP (app->running_state->muxer);
|
||||||
|
|
||||||
|
if (g_action_group_has_action (group, "app.quit") &&
|
||||||
|
g_action_group_get_action_parameter_type (group, "app.quit") == NULL)
|
||||||
|
{
|
||||||
|
g_action_group_activate_action (group, "app.quit", NULL);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, fall back to closing all the app's windows */
|
||||||
for (iter = app->running_state->windows; iter; iter = iter->next)
|
for (iter = app->running_state->windows; iter; iter = iter->next)
|
||||||
{
|
{
|
||||||
MetaWindow *win = iter->data;
|
MetaWindow *win = iter->data;
|
||||||
|
@@ -863,6 +863,7 @@ _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);
|
||||||
|
@@ -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_TEXTURE_TYPE_2D);
|
cogl_pipeline_set_layer_null_texture (priv->pipeline, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -186,9 +186,7 @@ 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,
|
cogl_pipeline_set_layer_null_texture (klass->base_pipeline, 0);
|
||||||
0, /* layer number */
|
|
||||||
COGL_TEXTURE_TYPE_2D);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self->pipeline = cogl_pipeline_copy (klass->base_pipeline);
|
self->pipeline = cogl_pipeline_copy (klass->base_pipeline);
|
||||||
|
@@ -17,15 +17,13 @@
|
|||||||
#include <meta/meta-cursor-tracker.h>
|
#include <meta/meta-cursor-tracker.h>
|
||||||
#include <meta/display.h>
|
#include <meta/display.h>
|
||||||
#include <meta/compositor-mutter.h>
|
#include <meta/compositor-mutter.h>
|
||||||
|
#include <st/st.h>
|
||||||
|
|
||||||
#include "shell-global.h"
|
#include "shell-global.h"
|
||||||
#include "shell-recorder-src.h"
|
#include "shell-recorder-src.h"
|
||||||
#include "shell-recorder.h"
|
#include "shell-recorder.h"
|
||||||
#include "shell-util.h"
|
#include "shell-util.h"
|
||||||
|
|
||||||
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
|
|
||||||
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RECORDER_STATE_CLOSED,
|
RECORDER_STATE_CLOSED,
|
||||||
RECORDER_STATE_RECORDING
|
RECORDER_STATE_RECORDING
|
||||||
@@ -58,7 +56,6 @@ struct _ShellRecorder {
|
|||||||
int pointer_x;
|
int pointer_x;
|
||||||
int pointer_y;
|
int pointer_y;
|
||||||
|
|
||||||
GSettings *a11y_settings;
|
|
||||||
gboolean draw_cursor;
|
gboolean draw_cursor;
|
||||||
MetaCursorTracker *cursor_tracker;
|
MetaCursorTracker *cursor_tracker;
|
||||||
cairo_surface_t *cursor_image;
|
cairo_surface_t *cursor_image;
|
||||||
@@ -213,8 +210,6 @@ shell_recorder_init (ShellRecorder *recorder)
|
|||||||
|
|
||||||
recorder->memory_target = get_memory_target();
|
recorder->memory_target = get_memory_target();
|
||||||
|
|
||||||
recorder->a11y_settings = g_settings_new (A11Y_APPS_SCHEMA);
|
|
||||||
|
|
||||||
recorder->state = RECORDER_STATE_CLOSED;
|
recorder->state = RECORDER_STATE_CLOSED;
|
||||||
recorder->framerate = DEFAULT_FRAMES_PER_SECOND;
|
recorder->framerate = DEFAULT_FRAMES_PER_SECOND;
|
||||||
recorder->draw_cursor = TRUE;
|
recorder->draw_cursor = TRUE;
|
||||||
@@ -239,8 +234,6 @@ shell_recorder_finalize (GObject *object)
|
|||||||
|
|
||||||
recorder_remove_redraw_timeout (recorder);
|
recorder_remove_redraw_timeout (recorder);
|
||||||
|
|
||||||
g_clear_object (&recorder->a11y_settings);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (shell_recorder_parent_class)->finalize (object);
|
G_OBJECT_CLASS (shell_recorder_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -465,9 +458,16 @@ recorder_record_frame (ShellRecorder *recorder,
|
|||||||
|
|
||||||
GST_BUFFER_PTS(buffer) = now;
|
GST_BUFFER_PTS(buffer) = now;
|
||||||
|
|
||||||
if (recorder->draw_cursor &&
|
if (recorder->draw_cursor)
|
||||||
!g_settings_get_boolean (recorder->a11y_settings, MAGNIFIER_ACTIVE_KEY))
|
{
|
||||||
recorder_draw_cursor (recorder, buffer);
|
StSettings *settings = st_settings_get ();
|
||||||
|
gboolean magnifier_active = FALSE;
|
||||||
|
|
||||||
|
g_object_get (settings, "magnifier-active", &magnifier_active, NULL);
|
||||||
|
|
||||||
|
if (magnifier_active)
|
||||||
|
recorder_draw_cursor (recorder, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
shell_recorder_src_add_buffer (SHELL_RECORDER_SRC (recorder->current_pipeline->src), buffer);
|
shell_recorder_src_add_buffer (SHELL_RECORDER_SRC (recorder->current_pipeline->src), buffer);
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
|
@@ -7,14 +7,12 @@
|
|||||||
#include <meta/meta-plugin.h>
|
#include <meta/meta-plugin.h>
|
||||||
#include <meta/meta-shaped-texture.h>
|
#include <meta/meta-shaped-texture.h>
|
||||||
#include <meta/meta-cursor-tracker.h>
|
#include <meta/meta-cursor-tracker.h>
|
||||||
|
#include <st/st.h>
|
||||||
|
|
||||||
#include "shell-global.h"
|
#include "shell-global.h"
|
||||||
#include "shell-screenshot.h"
|
#include "shell-screenshot.h"
|
||||||
#include "shell-util.h"
|
#include "shell-util.h"
|
||||||
|
|
||||||
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
|
|
||||||
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
|
|
||||||
|
|
||||||
typedef struct _ShellScreenshotPrivate ShellScreenshotPrivate;
|
typedef struct _ShellScreenshotPrivate ShellScreenshotPrivate;
|
||||||
|
|
||||||
struct _ShellScreenshot
|
struct _ShellScreenshot
|
||||||
@@ -202,6 +200,9 @@ write_screenshot_thread (GTask *result,
|
|||||||
cairo_image_surface_get_height (priv->image));
|
cairo_image_surface_get_height (priv->image));
|
||||||
creation_time = g_date_time_format (priv->datetime, "%c");
|
creation_time = g_date_time_format (priv->datetime, "%c");
|
||||||
|
|
||||||
|
if (!creation_time)
|
||||||
|
creation_time = g_date_time_format (priv->datetime, "%FT%T%z");
|
||||||
|
|
||||||
if (gdk_pixbuf_save_to_stream (pixbuf, stream, "png", NULL, NULL,
|
if (gdk_pixbuf_save_to_stream (pixbuf, stream, "png", NULL, NULL,
|
||||||
"tEXt::Software", "gnome-screenshot",
|
"tEXt::Software", "gnome-screenshot",
|
||||||
"tEXt::Creation Time", creation_time,
|
"tEXt::Creation Time", creation_time,
|
||||||
@@ -268,9 +269,12 @@ should_draw_cursor_image (ShellScreenshotMode mode)
|
|||||||
{
|
{
|
||||||
if (mode == SHELL_SCREENSHOT_WINDOW || !meta_is_wayland_compositor ())
|
if (mode == SHELL_SCREENSHOT_WINDOW || !meta_is_wayland_compositor ())
|
||||||
{
|
{
|
||||||
g_autoptr (GSettings) settings = g_settings_new (A11Y_APPS_SCHEMA);
|
StSettings *settings = st_settings_get ();
|
||||||
|
gboolean magnifier_active = FALSE;
|
||||||
|
|
||||||
if (!g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY))
|
g_object_get (settings, "magnifier-active", &magnifier_active, NULL);
|
||||||
|
|
||||||
|
if (!magnifier_active)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
ClutterActor *texture;
|
MetaShapedTexture *texture;
|
||||||
ClutterContent *content;
|
ClutterContent *content;
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
cairo_rectangle_int_t clip;
|
cairo_rectangle_int_t clip;
|
||||||
@@ -453,8 +453,7 @@ shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
|
|||||||
clip.width = ceilf (window_rect->width * resource_scale);
|
clip.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 (META_SHAPED_TEXTURE (texture),
|
surface = meta_shaped_texture_get_image (texture, &clip);
|
||||||
&clip);
|
|
||||||
|
|
||||||
content = clutter_canvas_new ();
|
content = clutter_canvas_new ();
|
||||||
clutter_canvas_set_size (CLUTTER_CANVAS (content),
|
clutter_canvas_set_size (CLUTTER_CANVAS (content),
|
||||||
|
@@ -125,7 +125,7 @@ st_cflags = [
|
|||||||
libst = shared_library('st-1.0',
|
libst = shared_library('st-1.0',
|
||||||
sources: st_gir_sources + st_non_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, x11_dep, m_dep],
|
dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_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,
|
||||||
@@ -152,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, 'Gtk-3.0'],
|
includes: ['Clutter-' + mutter_api_version, 'Cally-' + mutter_api_version, 'Meta-' + 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'],
|
||||||
|
@@ -19,251 +19,49 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION:st-clipboard
|
* SECTION:st-clipboard
|
||||||
* @short_description: a simple representation of the X clipboard
|
* @short_description: a simple representation of the clipboard
|
||||||
*
|
*
|
||||||
* #StCliboard is a very simple object representation of the clipboard
|
* #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>
|
|
||||||
|
|
||||||
struct _StClipboardPrivate
|
#include <meta/display.h>
|
||||||
{
|
#include <meta/meta-selection-source-memory.h>
|
||||||
Window clipboard_window;
|
#include <meta/meta-selection.h>
|
||||||
gchar *clipboard_text;
|
|
||||||
|
|
||||||
Atom *supported_targets;
|
G_DEFINE_TYPE (StClipboard, st_clipboard, G_TYPE_OBJECT)
|
||||||
gint n_targets;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (StClipboard, st_clipboard, G_TYPE_OBJECT)
|
typedef struct _TransferData TransferData;
|
||||||
|
struct _TransferData
|
||||||
typedef struct _EventFilterData EventFilterData;
|
|
||||||
struct _EventFilterData
|
|
||||||
{
|
{
|
||||||
StClipboard *clipboard;
|
StClipboard *clipboard;
|
||||||
StClipboardCallbackFunc callback;
|
StClipboardCallbackFunc callback;
|
||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
|
GOutputStream *stream;
|
||||||
};
|
};
|
||||||
|
|
||||||
static Atom __atom_primary = None;
|
const char *supported_mimetypes[] = {
|
||||||
static Atom __atom_clip = None;
|
"text/plain;charset=utf-8",
|
||||||
static Atom __utf8_string = None;
|
"UTF8_STRING",
|
||||||
static Atom __atom_targets = None;
|
"text/plain",
|
||||||
|
"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 *) ¬ify_event);
|
|
||||||
/* Make it happen non async */
|
|
||||||
XSync (GDK_DISPLAY_XDISPLAY (display), FALSE);
|
|
||||||
|
|
||||||
if (gdk_x11_display_error_trap_pop (display))
|
|
||||||
{
|
|
||||||
/* FIXME: Warn here on fail ? */
|
|
||||||
}
|
|
||||||
|
|
||||||
return GDK_FILTER_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -287,10 +85,57 @@ st_clipboard_get_default (void)
|
|||||||
return default_clipboard;
|
return default_clipboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Atom
|
static gboolean
|
||||||
atom_for_clipboard_type (StClipboardType type)
|
convert_type (StClipboardType type,
|
||||||
|
MetaSelectionType *type_out)
|
||||||
{
|
{
|
||||||
return type == ST_CLIPBOARD_TYPE_CLIPBOARD ? __atom_clip : __atom_primary;
|
if (type == ST_CLIPBOARD_TYPE_PRIMARY)
|
||||||
|
*type_out = META_SELECTION_PRIMARY;
|
||||||
|
else if (type == ST_CLIPBOARD_TYPE_CLIPBOARD)
|
||||||
|
*type_out = META_SELECTION_CLIPBOARD;
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
pick_mimetype (MetaSelection *meta_selection,
|
||||||
|
MetaSelectionType selection_type)
|
||||||
|
{
|
||||||
|
const char *selected_mimetype = NULL;
|
||||||
|
GList *mimetypes;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
mimetypes = meta_selection_get_mimetypes (meta_selection, selection_type);
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (supported_mimetypes); i++)
|
||||||
|
{
|
||||||
|
if (g_list_find_custom (mimetypes, supported_mimetypes[i],
|
||||||
|
(GCompareFunc) g_strcmp0))
|
||||||
|
{
|
||||||
|
selected_mimetype = supported_mimetypes[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_list_free_full (mimetypes, g_free);
|
||||||
|
return selected_mimetype;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
transfer_cb (MetaSelection *selection,
|
||||||
|
GAsyncResult *res,
|
||||||
|
TransferData *data)
|
||||||
|
{
|
||||||
|
const gchar *text = NULL;
|
||||||
|
|
||||||
|
if (meta_selection_transfer_finish (selection, res, NULL))
|
||||||
|
text = g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (data->stream));
|
||||||
|
|
||||||
|
data->callback (data->clipboard, text, data->user_data);
|
||||||
|
g_object_unref (data->stream);
|
||||||
|
g_free (data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -310,37 +155,35 @@ st_clipboard_get_text (StClipboard *clipboard,
|
|||||||
StClipboardCallbackFunc callback,
|
StClipboardCallbackFunc callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
EventFilterData *data;
|
MetaSelectionType selection_type;
|
||||||
GdkDisplay *gdk_display;
|
TransferData *data;
|
||||||
Display *dpy;
|
const char *mimetype = NULL;
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
data = g_new0 (EventFilterData, 1);
|
if (convert_type (type, &selection_type))
|
||||||
|
mimetype = pick_mimetype (meta_selection, selection_type);
|
||||||
|
|
||||||
|
if (!mimetype)
|
||||||
|
{
|
||||||
|
callback (clipboard, NULL, user_data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = g_new0 (TransferData, 1);
|
||||||
data->clipboard = clipboard;
|
data->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 ();
|
||||||
|
|
||||||
gdk_window_add_filter (NULL, /* all windows */
|
meta_selection_transfer_async (meta_selection,
|
||||||
st_clipboard_x11_event_filter,
|
selection_type,
|
||||||
data);
|
mimetype, -1,
|
||||||
|
data->stream, NULL,
|
||||||
gdk_display = gdk_display_get_default ();
|
(GAsyncReadyCallback) transfer_cb,
|
||||||
dpy = GDK_DISPLAY_XDISPLAY (gdk_display);
|
data);
|
||||||
|
|
||||||
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 */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -356,31 +199,26 @@ st_clipboard_set_text (StClipboard *clipboard,
|
|||||||
StClipboardType type,
|
StClipboardType type,
|
||||||
const gchar *text)
|
const gchar *text)
|
||||||
{
|
{
|
||||||
StClipboardPrivate *priv;
|
MetaSelectionType selection_type;
|
||||||
GdkDisplay *gdk_display;
|
MetaSelectionSource *source;
|
||||||
Display *dpy;
|
GBytes *bytes;
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
priv = clipboard->priv;
|
if (!convert_type (type, &selection_type))
|
||||||
|
return;
|
||||||
|
|
||||||
/* make a copy of the text */
|
bytes = g_bytes_new_take (g_strdup (text), strlen (text));
|
||||||
g_free (priv->clipboard_text);
|
source = meta_selection_source_memory_new ("text/plain;charset=utf-8", bytes);
|
||||||
priv->clipboard_text = g_strdup (text);
|
g_bytes_unref (bytes);
|
||||||
|
|
||||||
/* tell X we own the clipboard selection */
|
meta_selection_set_owner (meta_selection, selection_type, source);
|
||||||
gdk_display = gdk_display_get_default ();
|
}
|
||||||
dpy = GDK_DISPLAY_XDISPLAY (gdk_display);
|
|
||||||
|
void
|
||||||
gdk_x11_display_error_trap_push (gdk_display);
|
st_clipboard_set_selection (MetaSelection *selection)
|
||||||
|
{
|
||||||
XSetSelectionOwner (dpy, atom_for_clipboard_type (type), priv->clipboard_window, CurrentTime);
|
meta_selection = selection;
|
||||||
|
|
||||||
XSync (dpy, FALSE);
|
|
||||||
|
|
||||||
if (gdk_x11_display_error_trap_pop (gdk_display))
|
|
||||||
{
|
|
||||||
/* FIXME */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#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
|
||||||
|
|
||||||
@@ -32,7 +33,6 @@ 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,7 +44,6 @@ struct _StClipboard
|
|||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GObject parent;
|
GObject parent;
|
||||||
StClipboardPrivate *priv;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@@ -74,6 +73,8 @@ 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 */
|
||||||
|
@@ -206,8 +206,8 @@ st_icon_style_changed (StWidget *widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
priv->theme_icon_size = (int)(0.5 + st_theme_node_get_length (theme_node, "icon-size"));
|
priv->theme_icon_size = (int)(0.5 + st_theme_node_get_length (theme_node, "icon-size"));
|
||||||
st_icon_update_icon_size (self);
|
if (st_icon_update_icon_size (self))
|
||||||
st_icon_update (self);
|
st_icon_update (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -204,9 +204,7 @@ _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,
|
cogl_pipeline_set_layer_null_texture (texture_pipeline_template, 0);
|
||||||
0, /* layer */
|
|
||||||
COGL_TEXTURE_TYPE_2D);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (texture_pipeline_template);
|
pipeline = cogl_pipeline_copy (texture_pipeline_template);
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#define KEY_DRAG_THRESHOLD "drag-threshold"
|
#define KEY_DRAG_THRESHOLD "drag-threshold"
|
||||||
#define KEY_GTK_THEME "gtk-theme"
|
#define KEY_GTK_THEME "gtk-theme"
|
||||||
#define KEY_GTK_ICON_THEME "icon-theme"
|
#define KEY_GTK_ICON_THEME "icon-theme"
|
||||||
|
#define KEY_MAGNIFIER_ACTIVE "screen-magnifier-enabled"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
@@ -38,6 +39,7 @@ enum {
|
|||||||
PROP_DRAG_THRESHOLD,
|
PROP_DRAG_THRESHOLD,
|
||||||
PROP_GTK_THEME,
|
PROP_GTK_THEME,
|
||||||
PROP_GTK_ICON_THEME,
|
PROP_GTK_ICON_THEME,
|
||||||
|
PROP_MAGNIFIER_ACTIVE,
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,11 +50,13 @@ struct _StSettings
|
|||||||
GObject parent_object;
|
GObject parent_object;
|
||||||
GSettings *interface_settings;
|
GSettings *interface_settings;
|
||||||
GSettings *mouse_settings;
|
GSettings *mouse_settings;
|
||||||
|
GSettings *a11y_settings;
|
||||||
|
|
||||||
gchar *gtk_theme;
|
gchar *gtk_theme;
|
||||||
gchar *gtk_icon_theme;
|
gchar *gtk_icon_theme;
|
||||||
gboolean enable_animations;
|
gboolean enable_animations;
|
||||||
gboolean primary_paste;
|
gboolean primary_paste;
|
||||||
|
gboolean magnifier_active;
|
||||||
gint drag_threshold;
|
gint drag_threshold;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -105,6 +109,9 @@ st_settings_get_property (GObject *object,
|
|||||||
case PROP_GTK_ICON_THEME:
|
case PROP_GTK_ICON_THEME:
|
||||||
g_value_set_string (value, settings->gtk_icon_theme);
|
g_value_set_string (value, settings->gtk_icon_theme);
|
||||||
break;
|
break;
|
||||||
|
case PROP_MAGNIFIER_ACTIVE:
|
||||||
|
g_value_set_boolean (value, settings->magnifier_active);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
@@ -144,6 +151,11 @@ st_settings_class_init (StSettingsClass *klass)
|
|||||||
"GTK+ Icon Theme",
|
"GTK+ Icon Theme",
|
||||||
"",
|
"",
|
||||||
G_PARAM_READABLE);
|
G_PARAM_READABLE);
|
||||||
|
props[PROP_MAGNIFIER_ACTIVE] = g_param_spec_boolean("magnifier-active",
|
||||||
|
"Magnifier is active",
|
||||||
|
"Weather the a11y magnifier is active",
|
||||||
|
FALSE,
|
||||||
|
G_PARAM_READABLE);
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, N_PROPS, props);
|
g_object_class_install_properties (object_class, N_PROPS, props);
|
||||||
}
|
}
|
||||||
@@ -190,6 +202,18 @@ on_mouse_settings_changed (GSettings *g_settings,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_a11y_settings_changed (GSettings *g_settings,
|
||||||
|
const gchar *key,
|
||||||
|
StSettings *settings)
|
||||||
|
{
|
||||||
|
if (g_str_equal (key, KEY_MAGNIFIER_ACTIVE))
|
||||||
|
{
|
||||||
|
settings->magnifier_active = g_settings_get_boolean (g_settings, key);
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_MAGNIFIER_ACTIVE]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_settings_init (StSettings *settings)
|
st_settings_init (StSettings *settings)
|
||||||
{
|
{
|
||||||
@@ -201,6 +225,10 @@ st_settings_init (StSettings *settings)
|
|||||||
g_signal_connect (settings->interface_settings, "changed",
|
g_signal_connect (settings->interface_settings, "changed",
|
||||||
G_CALLBACK (on_mouse_settings_changed), settings);
|
G_CALLBACK (on_mouse_settings_changed), settings);
|
||||||
|
|
||||||
|
settings->a11y_settings = g_settings_new ("org.gnome.desktop.a11y.applications");
|
||||||
|
g_signal_connect (settings->a11y_settings, "changed",
|
||||||
|
G_CALLBACK (on_a11y_settings_changed), settings);
|
||||||
|
|
||||||
settings->enable_animations = g_settings_get_boolean (settings->interface_settings,
|
settings->enable_animations = g_settings_get_boolean (settings->interface_settings,
|
||||||
KEY_ENABLE_ANIMATIONS);
|
KEY_ENABLE_ANIMATIONS);
|
||||||
settings->primary_paste = g_settings_get_boolean (settings->interface_settings,
|
settings->primary_paste = g_settings_get_boolean (settings->interface_settings,
|
||||||
@@ -211,6 +239,8 @@ st_settings_init (StSettings *settings)
|
|||||||
KEY_GTK_ICON_THEME);
|
KEY_GTK_ICON_THEME);
|
||||||
settings->drag_threshold = g_settings_get_int (settings->mouse_settings,
|
settings->drag_threshold = g_settings_get_int (settings->mouse_settings,
|
||||||
KEY_DRAG_THRESHOLD);
|
KEY_DRAG_THRESHOLD);
|
||||||
|
settings->magnifier_active = g_settings_get_boolean (settings->a11y_settings,
|
||||||
|
KEY_MAGNIFIER_ACTIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -24,6 +24,8 @@
|
|||||||
#ifndef __ST_SETTINGS_H__
|
#ifndef __ST_SETTINGS_H__
|
||||||
#define __ST_SETTINGS_H__
|
#define __ST_SETTINGS_H__
|
||||||
|
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define ST_TYPE_SETTINGS (st_settings_get_type ())
|
#define ST_TYPE_SETTINGS (st_settings_get_type ())
|
||||||
@@ -31,4 +33,6 @@ G_DECLARE_FINAL_TYPE (StSettings, st_settings, ST, SETTINGS, GObject)
|
|||||||
|
|
||||||
StSettings * st_settings_get (void);
|
StSettings * st_settings_get (void);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __ST_SETTINGS_H__ */
|
#endif /* __ST_SETTINGS_H__ */
|
||||||
|
@@ -496,15 +496,31 @@ pixbuf_to_st_content_image (GdkPixbuf *pixbuf,
|
|||||||
ClutterContent *image;
|
ClutterContent *image;
|
||||||
g_autoptr(GError) error = NULL;
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
if (width < 0)
|
float native_width, native_height;
|
||||||
width = ceilf (gdk_pixbuf_get_width (pixbuf) / resource_scale);
|
|
||||||
else
|
|
||||||
width *= paint_scale;
|
|
||||||
|
|
||||||
if (height < 0)
|
native_width = ceilf (gdk_pixbuf_get_width (pixbuf) / resource_scale);
|
||||||
height = ceilf (gdk_pixbuf_get_height (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
|
||||||
height *= paint_scale;
|
{
|
||||||
|
width *= 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),
|
||||||
|
@@ -107,6 +107,8 @@ 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;
|
||||||
|
@@ -111,9 +111,11 @@ st_theme_node_dispose (GObject *gobject)
|
|||||||
node->icon_colors = NULL;
|
node->icon_colors = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node->theme)
|
if (node->theme && node->stylesheets_changed_id)
|
||||||
g_signal_handlers_disconnect_by_func (node->theme,
|
{
|
||||||
on_custom_stylesheets_changed, node);
|
g_signal_handler_disconnect (node->theme, node->stylesheets_changed_id);
|
||||||
|
node->stylesheets_changed_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
st_theme_node_paint_state_free (&node->cached_state);
|
st_theme_node_paint_state_free (&node->cached_state);
|
||||||
|
|
||||||
@@ -230,8 +232,9 @@ st_theme_node_new (StThemeContext *context,
|
|||||||
if (theme != NULL)
|
if (theme != NULL)
|
||||||
{
|
{
|
||||||
node->theme = g_object_ref (theme);
|
node->theme = g_object_ref (theme);
|
||||||
g_signal_connect (node->theme, "custom-stylesheets-changed",
|
node->stylesheets_changed_id =
|
||||||
G_CALLBACK (on_custom_stylesheets_changed), node);
|
g_signal_connect (node->theme, "custom-stylesheets-changed",
|
||||||
|
G_CALLBACK (on_custom_stylesheets_changed), node);
|
||||||
}
|
}
|
||||||
|
|
||||||
node->element_type = element_type;
|
node->element_type = element_type;
|
||||||
@@ -1136,10 +1139,14 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1718,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;
|
gboolean paint_equal, geometry_equal = FALSE;
|
||||||
gboolean animations_enabled;
|
gboolean animations_enabled;
|
||||||
|
|
||||||
if (new_theme_node == old_theme_node)
|
if (new_theme_node == old_theme_node)
|
||||||
@@ -1729,8 +1729,9 @@ 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)
|
||||||
!st_theme_node_geometry_equal (old_theme_node, new_theme_node))
|
geometry_equal = 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);
|
||||||
@@ -1782,7 +1783,11 @@ 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_signal_emit (widget, signals[STYLE_CHANGED], 0);
|
if (!paint_equal || !geometry_equal)
|
||||||
|
g_signal_emit (widget, signals[STYLE_CHANGED], 0);
|
||||||
|
else
|
||||||
|
notify_children_of_style_change ((ClutterActor *) widget);
|
||||||
|
|
||||||
priv->is_style_dirty = FALSE;
|
priv->is_style_dirty = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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 ();
|
static gboolean na_tray_manager_check_running_screen_x11 (void);
|
||||||
#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 ()
|
na_tray_manager_check_running_screen_x11 (void)
|
||||||
{
|
{
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
GdkScreen *screen;
|
GdkScreen *screen;
|
||||||
@@ -833,7 +833,7 @@ na_tray_manager_check_running_screen_x11 ()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
na_tray_manager_check_running ()
|
na_tray_manager_check_running (void)
|
||||||
{
|
{
|
||||||
#ifdef GDK_WINDOWING_X11
|
#ifdef GDK_WINDOWING_X11
|
||||||
return na_tray_manager_check_running_screen_x11 ();
|
return na_tray_manager_check_running_screen_x11 ();
|
||||||
|
Reference in New Issue
Block a user