Compare commits
157 Commits
gbsneto/au
...
wip/jimmac
Author | SHA1 | Date | |
---|---|---|---|
![]() |
04b0f86433 | ||
![]() |
43584e1d35 | ||
![]() |
2f6323afc2 | ||
![]() |
d25bcbc3a7 | ||
![]() |
dd5d7d3b70 | ||
![]() |
771b1a0788 | ||
![]() |
5a9d094f3e | ||
![]() |
9ca8433170 | ||
![]() |
0ada312748 | ||
![]() |
88697add1b | ||
![]() |
4730b7a094 | ||
![]() |
aa3e64aec3 | ||
![]() |
af26e2b212 | ||
![]() |
8167f20972 | ||
![]() |
bd4aac8f49 | ||
![]() |
785dd5c5f7 | ||
![]() |
71e469a59c | ||
![]() |
6d4b9d29b8 | ||
![]() |
33f5bb39cd | ||
![]() |
a1c3900630 | ||
![]() |
cdaf164c01 | ||
![]() |
2bd80579ed | ||
![]() |
54039c3552 | ||
![]() |
b197a1affb | ||
![]() |
51655be6a3 | ||
![]() |
9697c209c0 | ||
![]() |
6ecb0a4546 | ||
![]() |
30861d4800 | ||
![]() |
a23391ea28 | ||
![]() |
58e0b80cac | ||
![]() |
41dd744b74 | ||
![]() |
bdf66d7b62 | ||
![]() |
4258ae3ec2 | ||
![]() |
9b379c49ba | ||
![]() |
7e70dd8453 | ||
![]() |
2e209a82f9 | ||
![]() |
ab0ecc469f | ||
![]() |
7d75ddf635 | ||
![]() |
271e43a1ed | ||
![]() |
2702a82896 | ||
![]() |
8ad33d8752 | ||
![]() |
d84bbb8770 | ||
![]() |
c0c2edf2e1 | ||
![]() |
de0c3251dd | ||
![]() |
0afd600ea4 | ||
![]() |
598407b14a | ||
![]() |
d9bfa16f05 | ||
![]() |
03117d65b2 | ||
![]() |
5520bb3890 | ||
![]() |
4e6b2eb72a | ||
![]() |
2e5295b3a9 | ||
![]() |
3121c9aa29 | ||
![]() |
1ebbd7c768 | ||
![]() |
8572bb97c7 | ||
![]() |
d5ebd8c816 | ||
![]() |
ed999ce926 | ||
![]() |
50b7739076 | ||
![]() |
94995e9c1e | ||
![]() |
fb04dafb0b | ||
![]() |
d57234bec9 | ||
![]() |
38da54fb02 | ||
![]() |
bbd3275dad | ||
![]() |
3a3f9aa008 | ||
![]() |
3c54e863e6 | ||
![]() |
a63ba61194 | ||
![]() |
ab9710ee7b | ||
![]() |
43cef45229 | ||
![]() |
8db4f3c67f | ||
![]() |
594a070029 | ||
![]() |
c2e04e3cfa | ||
![]() |
293f50e8e5 | ||
![]() |
df7fea3407 | ||
![]() |
563412698a | ||
![]() |
2b30146c6c | ||
![]() |
0f531d8c44 | ||
![]() |
218c87994b | ||
![]() |
f74c07b9ac | ||
![]() |
59edea4bb4 | ||
![]() |
4d4d5a0b16 | ||
![]() |
03c4930883 | ||
![]() |
9593e20425 | ||
![]() |
2b1d6e607f | ||
![]() |
1dff32e48a | ||
![]() |
1e3a174de9 | ||
![]() |
7bb84dae80 | ||
![]() |
44fcb9e9af | ||
![]() |
2d30e310bc | ||
![]() |
be2d630348 | ||
![]() |
bea6045aae | ||
![]() |
ad491e7922 | ||
![]() |
fedb8e706a | ||
![]() |
1be933bc49 | ||
![]() |
526bb72f3d | ||
![]() |
49c95cff6c | ||
![]() |
56a361650c | ||
![]() |
d4763b157d | ||
![]() |
d2dc072ba9 | ||
![]() |
ffaca00594 | ||
![]() |
9090b7dc3d | ||
![]() |
a540fe4130 | ||
![]() |
5be61bbb68 | ||
![]() |
8e51fee5c1 | ||
![]() |
9d6fcfdc85 | ||
![]() |
5f5a3b78a5 | ||
![]() |
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 |
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:
|
||||||
@@ -40,7 +40,7 @@ js_check:
|
|||||||
when: on_failure
|
when: on_failure
|
||||||
|
|
||||||
build:
|
build:
|
||||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: build
|
stage: build
|
||||||
before_script:
|
before_script:
|
||||||
- .gitlab-ci/checkout-mutter.sh
|
- .gitlab-ci/checkout-mutter.sh
|
||||||
@@ -58,7 +58,7 @@ build:
|
|||||||
- build
|
- build
|
||||||
|
|
||||||
test:
|
test:
|
||||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: test
|
stage: test
|
||||||
before_script:
|
before_script:
|
||||||
- ninja -C mutter/build install
|
- ninja -C mutter/build install
|
||||||
@@ -72,7 +72,7 @@ test:
|
|||||||
when: on_failure
|
when: on_failure
|
||||||
|
|
||||||
test-pot:
|
test-pot:
|
||||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||||
stage: test
|
stage: test
|
||||||
before_script:
|
before_script:
|
||||||
- ninja -C mutter/build install
|
- ninja -C mutter/build install
|
||||||
|
@@ -1,19 +0,0 @@
|
|||||||
FROM registry.gitlab.gnome.org/gnome/mutter/master:v1
|
|
||||||
|
|
||||||
RUN dnf -y update && dnf -y upgrade && \
|
|
||||||
dnf install -y 'dnf-command(copr)' && \
|
|
||||||
dnf copr enable -y fmuellner/gnome-shell-ci && \
|
|
||||||
dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \
|
|
||||||
|
|
||||||
# bt only exports HAVE_BLUETOOTH to js, rest are outdated build-requires
|
|
||||||
dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel \
|
|
||||||
upower-devel python3-devel && \
|
|
||||||
|
|
||||||
# We'll build mutter ourselves
|
|
||||||
dnf remove -y --noautoremove mutter mutter-devel && \
|
|
||||||
|
|
||||||
# Needed for tests
|
|
||||||
dnf install -y '*/xvfb-run' gdm-lib accountsservice-libs && \
|
|
||||||
|
|
||||||
dnf clean all && \
|
|
||||||
rm -rf /var/cache/dnf
|
|
@@ -17,15 +17,19 @@ if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
|
|||||||
merge_request_branch=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
|
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
|
||||||
|
77
NEWS
77
NEWS
@@ -1,3 +1,80 @@
|
|||||||
|
3.33.2
|
||||||
|
======
|
||||||
|
* Fix keeping actors visible in scrollviews [Marco; #1061]
|
||||||
|
* Move some chrome above popup windows [Jonas D.; !358]
|
||||||
|
* Include 'sandboxed-app-id' in winodw introspection info [Florian; #1289]
|
||||||
|
* Port to libecal-2.0 [Milan; !501]
|
||||||
|
* Support TCRYPT in mount password dialog [segfault; !126]
|
||||||
|
* Misc. bug fixes and cleanups [Florian, Marco, Veerasamy; !517, #745, !499,
|
||||||
|
!510, !515, !546, !549]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Cosimo Cecchi, Milan Crha, Jonas Dreßler, Florian Müllner, segfault,
|
||||||
|
Veerasamy Sevagen, Marco Trevisan (Treviño)
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Mustieles [es]
|
||||||
|
|
||||||
|
3.33.1
|
||||||
|
======
|
||||||
|
* Refine the app menu [Florian; #968]
|
||||||
|
* Refine window preview style [Feichtmeier; !461]
|
||||||
|
* Only emit ::style-changed on actual changes [Carlos; #1153]
|
||||||
|
* Disable emoji on-screen keyboard support on X11 [Florian; #1172]
|
||||||
|
* Fix tablet button mapping overlay [Carlos; #1220]
|
||||||
|
* Don't crash for world clock locations with no timezone [Florian; #1062]
|
||||||
|
* Don't leak old on-screen keyboard layout groups [Carlos; mutter#556]
|
||||||
|
* Fix ellipsization in dialog subtitles/bodies [Marco; !531]
|
||||||
|
* Fix glitch of fullscreen window in workspace switch animation [Jonas D.; !322]
|
||||||
|
* Fix distortion of some image contents [Florian; !525]
|
||||||
|
* Allow dragging unfocused tiled/maximized windows from top bar [Dylan; #679290]
|
||||||
|
* Handle network interface name changes [Fabrice; !534]
|
||||||
|
* Avoid unnecessary style changes when computing :first/:last-child
|
||||||
|
[Florian; !529]
|
||||||
|
* Misc. bug fixes and cleanups [Florian, Marco, Robert, Georges, Carlos, Simon,
|
||||||
|
Jonas D.; !487, !441, !502, !503, !504, !506, #822, !551, !512, !509, !511,
|
||||||
|
#1054, !524, #1065, !331, !540]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Fabrice Bellet, Jonas Dreßler, Feichtmeier, Carlos Garnacho, Robert Mader,
|
||||||
|
Dylan McCall, Simon McVittie, Florian Müllner, Georges Basile Stavracas Neto,
|
||||||
|
Marco Trevisan (Treviño)
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Mustieles [es], Kukuh Syafaat [id], Fabio Tomat [fur],
|
||||||
|
Carmen Bianca BAKKER [eo], Dingzhong Chen [zh_CN], Tim Sabsch [de]
|
||||||
|
|
||||||
|
3.32.1
|
||||||
|
======
|
||||||
|
* Fix avatar scaling on login screen [Florian; #1024]
|
||||||
|
* Fix distortion of desktop zoom [Florian; #646]
|
||||||
|
* Fix mouse cursor visibility when using desktop zoom [Florian, Marco; #1020]
|
||||||
|
* Fix screen dimming after wake-up on lock screen [Xiaoguang; #900]
|
||||||
|
* Fix Alt+Esc switcher [Florian; #1064]
|
||||||
|
* Respect struts for popover placement [Andrea; #1102]
|
||||||
|
* Fix app icons updates after theme changes [Florian; #1117]
|
||||||
|
* Fix desktop zoom after resolution changes [Marco; #1120]
|
||||||
|
* Implement stick-to-finger workspace switch overview gestures [Florian; #516]
|
||||||
|
* Make World Clocks offsets relative to local time [Florian; #1157]
|
||||||
|
* Fix top app icon disappearing from dash [Florian; #1053]
|
||||||
|
* Update switch style to match new Adwaita [Jakub; !496]
|
||||||
|
* Ensure CSS units are pixel-aligned when scaling is used [Carlos; #91]
|
||||||
|
* Misc. bug fixes and cleanups [Florian, Jakub, Robert, Alex, Carlos, Phil,
|
||||||
|
Marco, Benjamin, AsciiWolf, Ray, verdre; !444, #1016, #1018, !449, #1036,
|
||||||
|
!455, #1094, !440, #1023, #624, #1017, !476, !473, !480, #1130, !485, !481,
|
||||||
|
!490, !489, #1151, !435, #1160, !482, #1150, #1166, !384]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
AsciiWolf, Andrea Azzarone, Benjamin Berg, Carlos Garnacho, Victor Ibragimov,
|
||||||
|
Robert Mader, Alex Monday, Florian Müllner, Jakub Steiner, Ray Strode,
|
||||||
|
Marco Trevisan (Treviño), verdre, Xiaoguang Wang, Phil Wyett
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Victor Ibragimov [tg, af, et, ja], Bruce Cowan [en_GB], Piotr Drąg [tg],
|
||||||
|
Charles Monzat [fr], Khaled Hosny [ar], Goran Vidović [hr],
|
||||||
|
Cheng-Chia Tseng [zh_TW], Carmen Bianca BAKKER [eo], Daniel Mustieles [es],
|
||||||
|
Dušan Kazik [sk]
|
||||||
|
|
||||||
3.32.0
|
3.32.0
|
||||||
======
|
======
|
||||||
* Fix sizing issues in on-screen-keyboard emoji panel [Carlos; !439]
|
* Fix sizing issues in on-screen-keyboard emoji panel [Carlos; !439]
|
||||||
|
@@ -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>
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
$variant: 'light';
|
||||||
|
|
||||||
@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
|
@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
|
||||||
@import "gnome-shell-sass/_drawing";
|
@import "gnome-shell-sass/_drawing";
|
||||||
@import "gnome-shell-sass/_common";
|
@import "gnome-shell-sass/_common";
|
||||||
|
@@ -11,6 +11,7 @@ $selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 20%));
|
|||||||
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
|
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
|
||||||
$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%));
|
$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%));
|
||||||
$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93));
|
$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93));
|
||||||
|
$alt_borders_color: if($variant == 'light', darken($bg_color, 24%), darken($bg_color, 18%));
|
||||||
$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
|
$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
|
||||||
$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
|
$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
|
||||||
$top_hilight: $borders_edge;
|
$top_hilight: $borders_edge;
|
||||||
@@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec;
|
|||||||
$osd_bg_color: #2e3436;
|
$osd_bg_color: #2e3436;
|
||||||
$osd_borders_color: transparentize(black, 0.3);
|
$osd_borders_color: transparentize(black, 0.3);
|
||||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||||
|
$shadow_color: transparentize(black, 0.9);
|
||||||
|
|
||||||
$tooltip_borders_color: $osd_outer_borders_color;
|
$tooltip_borders_color: $osd_outer_borders_color;
|
||||||
|
|
||||||
|
@@ -157,16 +157,11 @@ 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 */
|
||||||
@@ -387,7 +382,6 @@ StScrollBar {
|
|||||||
|
|
||||||
.prompt-dialog-password-box {
|
.prompt-dialog-password-box {
|
||||||
spacing: 1em;
|
spacing: 1em;
|
||||||
padding-bottom: 1em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.prompt-dialog-error-label {
|
.prompt-dialog-error-label {
|
||||||
@@ -410,6 +404,23 @@ StScrollBar {
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.prompt-dialog-pim-box {
|
||||||
|
spacing: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prompt-dialog-grid {
|
||||||
|
spacing-rows: 15px;
|
||||||
|
spacing-columns: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prompt-dialog-keyfiles-box {
|
||||||
|
spacing: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prompt-dialog-button.button {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Polkit Dialog */
|
/* Polkit Dialog */
|
||||||
|
|
||||||
@@ -1001,8 +1012,11 @@ StScrollBar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.message-list-clear-button.button {
|
.message-list-clear-button.button {
|
||||||
background-color: transparent;
|
@include button(normal);
|
||||||
&:hover,&:focus { background-color: lighten($bg_color,5%); }
|
&:insensitive { @include button(insensitive); }
|
||||||
|
&:hover { @include button(hover); }
|
||||||
|
&:focus { @include button(focus); }
|
||||||
|
&:active { @include button(active); }
|
||||||
margin: 1.5em 1.5em 0;
|
margin: 1.5em 1.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1142,6 +1156,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 +1169,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,12 +1250,13 @@ 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;
|
||||||
@@ -1521,12 +1540,12 @@ StScrollBar {
|
|||||||
width: 34em;
|
width: 34em;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
color: $_bubble_fg_color;
|
color: $fg_color;
|
||||||
background-color: $_bubble_bg_color;
|
background-color: $bg_color;
|
||||||
border: 1px solid $borders_color;
|
border: 1px solid $borders_color;
|
||||||
//box-shadow: 0 1px 4px black;
|
box-shadow: 0 1px 4px black;
|
||||||
&:hover { background-color: $_bubble_bg_color; }
|
//&:hover { background-color: $bg_color; }
|
||||||
&:focus { background-color: $_bubble_bg_color; }
|
//&:focus { background-color: $bg_color; }
|
||||||
|
|
||||||
.notification-icon { padding: 5px; }
|
.notification-icon { padding: 5px; }
|
||||||
.notification-content { padding: 5px; spacing: 5px; }
|
.notification-content { padding: 5px; spacing: 5px; }
|
||||||
@@ -1541,7 +1560,6 @@ StScrollBar {
|
|||||||
background-color: darken($_bubble_bg_color,5%);
|
background-color: darken($_bubble_bg_color,5%);
|
||||||
&:first-child { border-radius: 0 0 0 6px; }
|
&:first-child { border-radius: 0 0 0 6px; }
|
||||||
&:last-child { border-radius: 0 0 6px 0; }
|
&:last-child { border-radius: 0 0 6px 0; }
|
||||||
&:hover, &focus { background-color: darken($_bubble_bg_color,2%); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.summary-source-counter {
|
.summary-source-counter {
|
||||||
|
@@ -111,7 +111,59 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) {
|
@function _border_color($c, $darker: false) {
|
||||||
|
@if $darker == true { @return darken($c, 20%); }
|
||||||
|
@else { @return darken($c, 10%); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@function _text_shadow_color ($tc: $fg_color, $bg: $bg_color) {
|
||||||
|
//
|
||||||
|
// calculate the color of text shadows
|
||||||
|
//
|
||||||
|
// $tc is the text color
|
||||||
|
// $bg is the background color
|
||||||
|
//
|
||||||
|
$_lbg: lightness($bg)/100%;
|
||||||
|
@if lightness($tc)<50% { @return transparentize(white, 1-$_lbg/($_lbg*1.3)); }
|
||||||
|
@else { @return transparentize(black, $_lbg*0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@function _button_hilight_color($c) {
|
||||||
|
//
|
||||||
|
// calculate the right top hilight color for buttons
|
||||||
|
//
|
||||||
|
// $c: base color;
|
||||||
|
//
|
||||||
|
@if lightness($c)>95% { @return white; }
|
||||||
|
@else if lightness($c)>90% { @return transparentize(white, 0.2); }
|
||||||
|
@else if lightness($c)>80% { @return transparentize(white, 0.5); }
|
||||||
|
@else if lightness($c)>50% { @return transparentize(white, 0.8); }
|
||||||
|
@else if lightness($c)>40% { @return transparentize(white, 0.9); }
|
||||||
|
@else { @return transparentize(white, 0.98); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin _button_text_shadow ($tc:$fg_color, $bg:$bg_color) {
|
||||||
|
//
|
||||||
|
// helper function for the text emboss effect
|
||||||
|
//
|
||||||
|
// $tc is the optional text color, not the shadow color
|
||||||
|
//
|
||||||
|
// TODO: this functions needs a way to deal with special cases
|
||||||
|
//
|
||||||
|
|
||||||
|
$_shadow: _text_shadow_color($tc, $bg);
|
||||||
|
|
||||||
|
@if lightness($tc)<50% {
|
||||||
|
text-shadow: 0 1px $_shadow;
|
||||||
|
-gtk-icon-shadow: 0 1px $_shadow;
|
||||||
|
}
|
||||||
|
@else {
|
||||||
|
text-shadow: 0 -1px $_shadow;
|
||||||
|
-gtk-icon-shadow: 0 -1px $_shadow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin button($t, $c:$bg_color, $tc:$fg_color, $edge: none) {
|
||||||
//
|
//
|
||||||
// Button drawing function
|
// Button drawing function
|
||||||
//
|
//
|
||||||
@@ -126,55 +178,177 @@
|
|||||||
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
|
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
|
||||||
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
|
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
|
||||||
//
|
//
|
||||||
|
// This mixin sets the $button_fill global variable which containts the button background-image
|
||||||
|
//
|
||||||
$_hilight_color: _button_hilight_color($c);
|
$_hilight_color: _button_hilight_color($c);
|
||||||
$_button_edge: if($edge == none, none, _widget_edge($edge));
|
$_button_edge: if($edge == none, none, _widget_edge($edge));
|
||||||
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
|
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
|
||||||
|
$_button_shadow: 0 1px 2px transparentize($shadow_color, 0.03);
|
||||||
|
|
||||||
@if $t==normal {
|
@if $t==normal {
|
||||||
//
|
//
|
||||||
// normal button
|
// normal button
|
||||||
//
|
//
|
||||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
|
color: $tc;
|
||||||
$osd_bg_color);
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||||
color: $osd_fg_color;
|
border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
background-color: $_bg;
|
$button_fill: if($variant == 'light', linear-gradient(to top, darken($c, 4%) 2px, $c),
|
||||||
border-color: $osd_borders_color;
|
linear-gradient(to top, darken($c,1%) 2px, $c)) !global;
|
||||||
box-shadow: inset 0 1px lighten($osd_bg_color,10%);
|
background-image: $button_fill;
|
||||||
text-shadow: 0 1px black;
|
@include _button_text_shadow($tc, $c);
|
||||||
icon-shadow: 0 1px black;
|
@include _shadows(inset 0 1px $_hilight_color, $_button_edge, $_button_shadow);
|
||||||
}
|
|
||||||
@if $t==focus {
|
|
||||||
//
|
|
||||||
// focused button
|
|
||||||
//
|
|
||||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
|
||||||
lighten($osd_bg_color,3%));
|
|
||||||
|
|
||||||
color: $osd_fg_color;
|
|
||||||
text-shadow: 0 1px black;
|
|
||||||
icon-shadow: 0 1px black;
|
|
||||||
box-shadow: inset 0px 0px 0px 1px $selected_bg_color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@else if $t==hover {
|
@else if $t==hover {
|
||||||
//
|
//
|
||||||
|
// hovered button
|
||||||
|
//
|
||||||
|
color: $tc;
|
||||||
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||||
|
border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
|
@if $variant == 'light' {
|
||||||
|
$button_fill: linear-gradient(to top, $c, lighten($c, 1%) 1px) !global;
|
||||||
|
@include _button_text_shadow($tc, lighten($c, 6%));
|
||||||
|
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)), $_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
@else {
|
||||||
|
$button_fill: linear-gradient(to top, darken($c,1%), lighten($c, 1%) 1px) !global;
|
||||||
|
@include _button_text_shadow($tc,lighten($c, 6%));
|
||||||
|
@include _shadows(inset 0 1px _button_hilight_color(darken($c, 2%)), $_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
background-image: $button_fill;
|
||||||
|
}
|
||||||
|
|
||||||
|
@if $t==normal-alt {
|
||||||
|
//
|
||||||
|
// normal button alternative look
|
||||||
|
//
|
||||||
|
color: $tc;
|
||||||
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
|
@include _button_text_shadow($tc, $c);
|
||||||
|
@if $variant == 'light' {
|
||||||
|
background-image: linear-gradient(to bottom, lighten($c, 5%) 20%, $c 90%);
|
||||||
|
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)),
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
@else {
|
||||||
|
background-image: linear-gradient(to bottom, darken($c, 3%) 20%, darken($c, 6%) 90%);
|
||||||
|
@include _shadows(inset 0 1px $_hilight_color,
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==hover-alt {
|
||||||
|
//
|
||||||
|
// hovered button alternative look
|
||||||
|
//
|
||||||
|
color: $tc;
|
||||||
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||||
|
@if $variant == 'light' {
|
||||||
|
$button_fill: linear-gradient(to bottom, lighten($c, 9%) 10%, lighten($c, 4%) 90%) !global;
|
||||||
|
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)),
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
@else {
|
||||||
|
$button_fill: linear-gradient(to bottom, $c 20%, darken($c, 4%) 90%) !global;
|
||||||
|
@include _shadows(inset 0 1px $_hilight_color,
|
||||||
|
$_button_edge, $_button_shadow);
|
||||||
|
}
|
||||||
|
background-image: $button_fill;
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==active {
|
||||||
|
//
|
||||||
|
// pushed button
|
||||||
|
//
|
||||||
|
color: $tc;
|
||||||
|
outline-color: transparentize($tc, 0.7);
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||||
|
$button_fill: if($variant == 'light', image(darken($c, 14%)), image(darken($c, 9%))) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
@include _shadows(inset 0 1px transparentize($_hilight_color, 1), $_button_edge);
|
||||||
|
|
||||||
|
text-shadow: none;
|
||||||
|
-gtk-icon-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==insensitive {
|
||||||
|
//
|
||||||
|
// insensitive button
|
||||||
|
//
|
||||||
|
$_bg: if($c != $bg_color, mix($c, $base_color, 85%), $insensitive_bg_color);
|
||||||
|
|
||||||
|
label, & { color: if($tc != $fg_color, mix($tc, $_bg, 50%), $insensitive_fg_color); }
|
||||||
|
|
||||||
|
border-color: if($c != $bg_color, _border_color($c), $insensitive_borders_color);
|
||||||
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
text-shadow: none;
|
||||||
|
-gtk-icon-shadow: none;
|
||||||
|
// white with 0 alpha to avoid an ugly transition, since no color means
|
||||||
|
// black with 0 alpha
|
||||||
|
@include _shadows(inset 0 1px transparentize(white, 1), $_button_edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==insensitive-active {
|
||||||
|
//
|
||||||
|
// insensitive pushed button
|
||||||
|
//
|
||||||
|
$_bg: if($variant == 'light', darken(mix($c, $base_color, 85%), 8%), darken(mix($c, $base_color, 85%), 6%));
|
||||||
|
$_bc: if($c != $bg_color, _border_color($c), $insensitive_borders_color);
|
||||||
|
|
||||||
|
label, & { color: if($c != $bg_color, mix($tc, $_bg, 60%), $insensitive_fg_color); }
|
||||||
|
|
||||||
|
border-color: $_bc;
|
||||||
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
// white with 0 alpha to avoid an ugly transition, since no color means
|
||||||
|
// black with 0 alpha
|
||||||
|
@include _shadows(inset 0 1px transparentize(white, 1), $_button_edge);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@else if $t==osd {
|
||||||
|
//
|
||||||
|
// normal osd button
|
||||||
|
//
|
||||||
|
$_bg: if($c != $bg_color, transparentize($c, 0.5), $osd_bg_color);
|
||||||
|
|
||||||
|
color: $osd_fg_color;
|
||||||
|
border-color: $osd_borders_color;
|
||||||
|
background-color: transparent;
|
||||||
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
background-clip: padding-box;
|
||||||
|
box-shadow: inset 0 1px transparentize(white, 0.9);
|
||||||
|
text-shadow: 0 1px black;
|
||||||
|
-gtk-icon-shadow: 0 1px black;
|
||||||
|
outline-color: transparentize($osd_fg_color, 0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@else if $t==osd-hover {
|
||||||
|
//
|
||||||
// active osd button
|
// active osd button
|
||||||
//
|
//
|
||||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
$_bg: if($c != $bg_color, transparentize($c, 0.3), lighten($osd_bg_color, 12%));
|
||||||
lighten($osd_bg_color,3%));
|
|
||||||
|
|
||||||
color: white;
|
color: white;
|
||||||
border-color: $osd_borders_color;
|
border-color: $osd_borders_color;
|
||||||
background-color: $_bg;
|
background-color: transparent;
|
||||||
box-shadow: inset 0 1px lighten($osd_bg_color,20%);
|
$button_fill: image($_bg) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
background-clip: padding-box;
|
||||||
|
box-shadow: inset 0 1px transparentize(white, 0.9);
|
||||||
text-shadow: 0 1px black;
|
text-shadow: 0 1px black;
|
||||||
icon-shadow: 0 1px black;
|
-gtk-icon-shadow: 0 1px black;
|
||||||
|
outline-color: transparentize($osd_fg_color, 0.7);
|
||||||
}
|
}
|
||||||
@else if $t==active {
|
|
||||||
|
@else if $t==osd-active {
|
||||||
//
|
//
|
||||||
// active osd button
|
// active osd button
|
||||||
//
|
//
|
||||||
@@ -182,40 +356,44 @@
|
|||||||
|
|
||||||
color: white;
|
color: white;
|
||||||
border-color: $osd_borders_color;
|
border-color: $osd_borders_color;
|
||||||
background-color: $selected_bg_color;
|
background-color: transparent;
|
||||||
// This should be none, but it's creating some issues with borders, so to
|
$button_fill: image($_bg) !global;
|
||||||
// workaround it for now, use inset wich goes through a different code path.
|
background-image: $button_fill;
|
||||||
// see https://bugzilla.gnome.org/show_bug.cgi?id=752934
|
background-clip: padding-box;
|
||||||
box-shadow: inset 0 0 black;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none;
|
-gtk-icon-shadow: none;
|
||||||
|
outline-color: transparentize($osd_fg_color, 0.7);
|
||||||
}
|
}
|
||||||
@else if $t==insensitive {
|
|
||||||
|
@else if $t==osd-insensitive {
|
||||||
//
|
//
|
||||||
// insensitive osd button
|
// insensitive osd button
|
||||||
//
|
//
|
||||||
$_bg: transparentize(mix($insensitive_fg_color,$osd_bg_color,20%),0.3);
|
color: $osd_insensitive_fg_color;
|
||||||
|
|
||||||
color: $insensitive_fg_color;
|
|
||||||
border-color: $osd_borders_color;
|
border-color: $osd_borders_color;
|
||||||
background-color: $_bg;
|
background-color: transparent;
|
||||||
|
$button_fill: image($osd_insensitive_bg_color) !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
background-clip: padding-box;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none;
|
-gtk-icon-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@else if $t==undecorated {
|
@else if $t==undecorated {
|
||||||
//
|
//
|
||||||
// reset
|
// reset
|
||||||
//
|
//
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
background-image: none;
|
$button_fill: none !global;
|
||||||
|
background-image: $button_fill;
|
||||||
|
|
||||||
@include _shadows(inset 0 1px transparentize(white,1),
|
@include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge);
|
||||||
$_blank_edge);
|
|
||||||
|
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none;
|
-gtk-icon-shadow: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@ $selected_fg_color: #ffffff;
|
|||||||
$selected_bg_color: darken(#4a90d9,20%);
|
$selected_bg_color: darken(#4a90d9,20%);
|
||||||
$selected_borders_color: darken($selected_bg_color, 20%);
|
$selected_borders_color: darken($selected_bg_color, 20%);
|
||||||
$borders_color: darken($bg_color,12%);
|
$borders_color: darken($bg_color,12%);
|
||||||
|
$alt_borders_color: darken($bg_color,12%);
|
||||||
$borders_edge: transparentize($fg_color, 0.9);
|
$borders_edge: transparentize($fg_color, 0.9);
|
||||||
$link_color: lighten($selected_bg_color,20%);
|
$link_color: lighten($selected_bg_color,20%);
|
||||||
$link_visited_color: lighten($selected_bg_color,10%);
|
$link_visited_color: lighten($selected_bg_color,10%);
|
||||||
@@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec;
|
|||||||
$osd_bg_color: #2e3436;
|
$osd_bg_color: #2e3436;
|
||||||
$osd_borders_color: transparentize(black, 0.3);
|
$osd_borders_color: transparentize(black, 0.3);
|
||||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||||
|
$shadow_color: rgba(0,0,0,0);
|
||||||
|
|
||||||
$tooltip_borders_color: $osd_outer_borders_color;
|
$tooltip_borders_color: $osd_outer_borders_color;
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
$variant: 'dark';
|
$variant: 'light';
|
||||||
|
|
||||||
@import "gnome-shell-sass/_colors"; //use gtk colors
|
@import "gnome-shell-sass/_colors"; //use gtk colors
|
||||||
@import "gnome-shell-sass/_drawing";
|
@import "gnome-shell-sass/_drawing";
|
||||||
|
@@ -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
|
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
|
||||||
id="g37994">
|
|
||||||
<g
|
|
||||||
id="g37996"
|
|
||||||
transform="translate(-115,1277)">
|
|
||||||
<rect
|
<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"
|
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="rect13475"
|
id="rect3296"
|
||||||
width="98"
|
width="44.446434"
|
||||||
height="25"
|
height="20.910645"
|
||||||
x="644.5"
|
x="0.625"
|
||||||
y="484.61118"
|
y="291.71494"
|
||||||
rx="4.7429576"
|
rx="10.455324"
|
||||||
ry="3.8424656" />
|
ry="10.073335" />
|
||||||
<rect
|
<rect
|
||||||
ry="3.8424656"
|
ry="10.455322"
|
||||||
rx="4.7429576"
|
rx="10.455322"
|
||||||
y="483.5"
|
y="291.71494"
|
||||||
x="644.5"
|
x="0.5428465"
|
||||||
height="25"
|
height="20.910645"
|
||||||
width="98"
|
width="21.142862"
|
||||||
id="rect38000"
|
id="rect3300"
|
||||||
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" />
|
style="opacity:1;vector-effect:none;fill:url(#linearGradient3331);fill-opacity:1;stroke:#151515;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||||
</g>
|
|
||||||
<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
|
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
|
||||||
id="g37994">
|
|
||||||
<g
|
|
||||||
id="g37996"
|
|
||||||
transform="translate(-115,1277)">
|
|
||||||
<rect
|
<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"
|
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="rect13475"
|
id="rect3296"
|
||||||
width="98"
|
width="44.446434"
|
||||||
height="25"
|
height="20.910645"
|
||||||
x="644.5"
|
x="0.625"
|
||||||
y="484.61118"
|
y="291.71494"
|
||||||
rx="4.7429576"
|
rx="10.455324"
|
||||||
ry="3.8424656" />
|
ry="10.073335" />
|
||||||
<rect
|
<rect
|
||||||
ry="3.8424656"
|
ry="10.455322"
|
||||||
rx="4.7429576"
|
rx="10.455322"
|
||||||
y="483.5"
|
y="291.71494"
|
||||||
x="644.5"
|
x="24.30357"
|
||||||
height="25"
|
height="20.910645"
|
||||||
width="98"
|
width="21.142862"
|
||||||
id="rect38000"
|
id="rect3300"
|
||||||
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" />
|
style="opacity:1;vector-effect:none;fill:url(#linearGradient3331);fill-opacity:1;stroke:#030e1b;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||||
</g>
|
|
||||||
<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,7 +551,7 @@ 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');
|
||||||
|
@@ -124,7 +124,7 @@ var Batch = class extends Task {
|
|||||||
}
|
}
|
||||||
|
|
||||||
process() {
|
process() {
|
||||||
throw new Error('Not implemented');
|
throw new GObject.NotImplementedError(`process in ${this.constructor.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
runTask() {
|
runTask() {
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
@@ -652,7 +652,7 @@ var LoginDialog = GObject.registerClass({
|
|||||||
bannerAllocation.x2 = Math.floor(centerX - centerGap / 2);
|
bannerAllocation.x2 = Math.floor(centerX - centerGap / 2);
|
||||||
bannerAllocation.x1 = Math.floor(bannerAllocation.x2 - wideBannerWidth);
|
bannerAllocation.x1 = Math.floor(bannerAllocation.x2 - wideBannerWidth);
|
||||||
|
|
||||||
// figure out how tall it would like to be and try to accomodate
|
// figure out how tall it would like to be and try to accommodate
|
||||||
// but don't let it get too close to the logo
|
// but don't let it get too close to the logo
|
||||||
let [wideMinHeight, wideBannerHeight] = this._bannerView.get_preferred_height(wideBannerWidth);
|
let [wideMinHeight, wideBannerHeight] = this._bannerView.get_preferred_height(wideBannerWidth);
|
||||||
|
|
||||||
|
@@ -42,8 +42,6 @@ var IntrospectService = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_isStandaloneApp(app) {
|
_isStandaloneApp(app) {
|
||||||
let windows = app.get_windows();
|
|
||||||
|
|
||||||
return app.get_windows().some(w => w.transient_for == null);
|
return app.get_windows().some(w => w.transient_for == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,6 +53,11 @@ var IntrospectService = class {
|
|||||||
return APP_WHITELIST.includes(sender);
|
return APP_WHITELIST.includes(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getSandboxedAppId(app) {
|
||||||
|
let ids = app.get_windows().map(w => w.get_sandboxed_app_id());
|
||||||
|
return ids.find(id => id != null);
|
||||||
|
}
|
||||||
|
|
||||||
_syncRunningApplications() {
|
_syncRunningApplications() {
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
let apps = this._appSystem.get_running();
|
let apps = this._appSystem.get_running();
|
||||||
@@ -76,6 +79,10 @@ var IntrospectService = class {
|
|||||||
newActiveApplication = app.get_id();
|
newActiveApplication = app.get_id();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let sandboxedAppId = this._getSandboxedAppId(app);
|
||||||
|
if (sandboxedAppId)
|
||||||
|
appInfo['sandboxed-app-id'] = new GLib.Variant('s', sandboxedAppId);
|
||||||
|
|
||||||
newRunningApplications[app.get_id()] = appInfo;
|
newRunningApplications[app.get_id()] = appInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,6 +144,7 @@ var IntrospectService = class {
|
|||||||
let frameRect = window.get_frame_rect();
|
let frameRect = window.get_frame_rect();
|
||||||
let title = window.get_title();
|
let title = window.get_title();
|
||||||
let wmClass = window.get_wm_class();
|
let wmClass = window.get_wm_class();
|
||||||
|
let sandboxedAppId = window.get_sandboxed_app_id();
|
||||||
|
|
||||||
windowsList[windowId] = {
|
windowsList[windowId] = {
|
||||||
'app-id': GLib.Variant.new('s', app.get_id()),
|
'app-id': GLib.Variant.new('s', app.get_id()),
|
||||||
@@ -153,6 +161,10 @@ var IntrospectService = class {
|
|||||||
|
|
||||||
if (wmClass != null)
|
if (wmClass != null)
|
||||||
windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass);
|
windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass);
|
||||||
|
|
||||||
|
if (sandboxedAppId != null)
|
||||||
|
windowsList[windowId]['sandboxed-app-id'] =
|
||||||
|
GLib.Variant.new('s', sandboxedAppId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));
|
invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));
|
||||||
|
@@ -88,42 +88,42 @@ const SystemActions = GObject.registerClass({
|
|||||||
name: C_("search-result", "Power Off"),
|
name: C_("search-result", "Power Off"),
|
||||||
iconName: 'system-shutdown-symbolic',
|
iconName: 'system-shutdown-symbolic',
|
||||||
// Translators: A list of keywords that match the power-off action, separated by semicolons
|
// Translators: A list of keywords that match the power-off action, separated by semicolons
|
||||||
keywords: _("power off;shutdown;reboot;restart").split(';'),
|
keywords: _("power off;shutdown;reboot;restart").split(/[; ]/),
|
||||||
available: false });
|
available: false });
|
||||||
this._actions.set(LOCK_SCREEN_ACTION_ID,
|
this._actions.set(LOCK_SCREEN_ACTION_ID,
|
||||||
{ // Translators: The name of the lock screen action in search
|
{ // Translators: The name of the lock screen action in search
|
||||||
name: C_("search-result", "Lock Screen"),
|
name: C_("search-result", "Lock Screen"),
|
||||||
iconName: 'system-lock-screen-symbolic',
|
iconName: 'system-lock-screen-symbolic',
|
||||||
// Translators: A list of keywords that match the lock screen action, separated by semicolons
|
// Translators: A list of keywords that match the lock screen action, separated by semicolons
|
||||||
keywords: _("lock screen").split(';'),
|
keywords: _("lock screen").split(/[; ]/),
|
||||||
available: false });
|
available: false });
|
||||||
this._actions.set(LOGOUT_ACTION_ID,
|
this._actions.set(LOGOUT_ACTION_ID,
|
||||||
{ // Translators: The name of the logout action in search
|
{ // Translators: The name of the logout action in search
|
||||||
name: C_("search-result", "Log Out"),
|
name: C_("search-result", "Log Out"),
|
||||||
iconName: 'application-exit-symbolic',
|
iconName: 'application-exit-symbolic',
|
||||||
// Translators: A list of keywords that match the logout action, separated by semicolons
|
// Translators: A list of keywords that match the logout action, separated by semicolons
|
||||||
keywords: _("logout;sign off").split(';'),
|
keywords: _("logout;log out;sign off").split(/[; ]/),
|
||||||
available: false });
|
available: false });
|
||||||
this._actions.set(SUSPEND_ACTION_ID,
|
this._actions.set(SUSPEND_ACTION_ID,
|
||||||
{ // Translators: The name of the suspend action in search
|
{ // Translators: The name of the suspend action in search
|
||||||
name: C_("search-result", "Suspend"),
|
name: C_("search-result", "Suspend"),
|
||||||
iconName: 'media-playback-pause-symbolic',
|
iconName: 'media-playback-pause-symbolic',
|
||||||
// Translators: A list of keywords that match the suspend action, separated by semicolons
|
// Translators: A list of keywords that match the suspend action, separated by semicolons
|
||||||
keywords: _("suspend;sleep").split(';'),
|
keywords: _("suspend;sleep").split(/[; ]/),
|
||||||
available: false });
|
available: false });
|
||||||
this._actions.set(SWITCH_USER_ACTION_ID,
|
this._actions.set(SWITCH_USER_ACTION_ID,
|
||||||
{ // Translators: The name of the switch user action in search
|
{ // Translators: The name of the switch user action in search
|
||||||
name: C_("search-result", "Switch User"),
|
name: C_("search-result", "Switch User"),
|
||||||
iconName: 'system-switch-user-symbolic',
|
iconName: 'system-switch-user-symbolic',
|
||||||
// Translators: A list of keywords that match the switch user action, separated by semicolons
|
// Translators: A list of keywords that match the switch user action, separated by semicolons
|
||||||
keywords: _("switch user").split(';'),
|
keywords: _("switch user").split(/[; ]/),
|
||||||
available: false });
|
available: false });
|
||||||
this._actions.set(LOCK_ORIENTATION_ACTION_ID,
|
this._actions.set(LOCK_ORIENTATION_ACTION_ID,
|
||||||
{ // Translators: The name of the lock orientation action in search
|
{ // Translators: The name of the lock orientation action in search
|
||||||
name: C_("search-result", "Lock Orientation"),
|
name: C_("search-result", "Lock Orientation"),
|
||||||
iconName: '',
|
iconName: '',
|
||||||
// Translators: A list of keywords that match the lock orientation action, separated by semicolons
|
// Translators: A list of keywords that match the lock orientation action, separated by semicolons
|
||||||
keywords: _("lock orientation;screen;rotation").split(';'),
|
keywords: _("lock orientation;screen;rotation").split(/[; ]/),
|
||||||
available: false });
|
available: false });
|
||||||
|
|
||||||
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
||||||
@@ -262,7 +262,7 @@ const SystemActions = GObject.registerClass({
|
|||||||
let results = [];
|
let results = [];
|
||||||
|
|
||||||
for (let [key, {available, keywords}] of this._actions)
|
for (let [key, {available, keywords}] of this._actions)
|
||||||
if (available && terms.every(t => keywords.some(k => (k.indexOf(t) >= 0))))
|
if (available && terms.every(t => keywords.some(k => k.startsWith(t))))
|
||||||
results.push(key);
|
results.push(key);
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
|
@@ -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;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
const { Clutter, Gio, GLib, Shell } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Shell } = imports.gi;
|
||||||
|
|
||||||
const CheckBox = imports.ui.checkBox;
|
const CheckBox = imports.ui.checkBox;
|
||||||
const Dialog = imports.ui.dialog;
|
const Dialog = imports.ui.dialog;
|
||||||
@@ -15,9 +15,10 @@ var DialogResponse = {
|
|||||||
CLOSED: 2
|
CLOSED: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
var AccessDialog = class extends ModalDialog.ModalDialog {
|
var AccessDialog = GObject.registerClass(
|
||||||
constructor(invocation, handle, title, subtitle, body, options) {
|
class AccessDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'access-dialog' });
|
_init(invocation, handle, title, subtitle, body, options) {
|
||||||
|
super._init({ styleClass: 'access-dialog' });
|
||||||
|
|
||||||
this._invocation = invocation;
|
this._invocation = invocation;
|
||||||
this._handle = handle;
|
this._handle = handle;
|
||||||
@@ -109,7 +110,7 @@ var AccessDialog = class extends ModalDialog.ModalDialog {
|
|||||||
});
|
});
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var AccessDialogDBus = class {
|
var AccessDialogDBus = class {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@@ -474,12 +474,10 @@ var CyclerList = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var CyclerPopup = GObject.registerClass(
|
var CyclerPopup = GObject.registerClass({
|
||||||
class CyclerPopup extends SwitcherPopup.SwitcherPopup {
|
GTypeFlags: GObject.TypeFlags.ABSTRACT
|
||||||
|
}, class CyclerPopup extends SwitcherPopup.SwitcherPopup {
|
||||||
_init() {
|
_init() {
|
||||||
if (new.target === CyclerPopup)
|
|
||||||
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
|
|
||||||
|
|
||||||
super._init();
|
super._init();
|
||||||
|
|
||||||
this._items = this._getWindows();
|
this._items = this._getWindows();
|
||||||
@@ -619,9 +617,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,
|
||||||
@@ -414,7 +414,7 @@ var AllView = class AllView extends BaseAppView {
|
|||||||
this._refilterApps();
|
this._refilterApps();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overriden from BaseAppView
|
// Overridden from BaseAppView
|
||||||
animate(animationDirection, onComplete) {
|
animate(animationDirection, onComplete) {
|
||||||
this._scrollView.reactive = false;
|
this._scrollView.reactive = false;
|
||||||
let completionFunc = () => {
|
let completionFunc = () => {
|
||||||
@@ -1017,7 +1017,7 @@ var FolderView = class FolderView extends BaseAppView {
|
|||||||
Util.ensureActorVisibleInScrollView(this.actor, actor);
|
Util.ensureActorVisibleInScrollView(this.actor, actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overriden from BaseAppView
|
// Overridden from BaseAppView
|
||||||
animate(animationDirection) {
|
animate(animationDirection) {
|
||||||
this._grid.animatePulse(animationDirection);
|
this._grid.animatePulse(animationDirection);
|
||||||
}
|
}
|
||||||
@@ -1081,7 +1081,7 @@ var FolderView = class FolderView extends BaseAppView {
|
|||||||
|
|
||||||
let contentBox = this.actor.get_theme_node().get_content_box(pageBox);
|
let contentBox = this.actor.get_theme_node().get_content_box(pageBox);
|
||||||
// We only can show icons inside the collection view boxPointer
|
// We only can show icons inside the collection view boxPointer
|
||||||
// so we have to substract the required padding etc of the boxpointer
|
// so we have to subtract the required padding etc of the boxpointer
|
||||||
return [(contentBox.x2 - contentBox.x1) - 2 * this._offsetForEachSide, (contentBox.y2 - contentBox.y1) - 2 * this._offsetForEachSide];
|
return [(contentBox.x2 - contentBox.x1) - 2 * this._offsetForEachSide, (contentBox.y2 - contentBox.y1) - 2 * this._offsetForEachSide];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1301,15 +1301,15 @@ var AppFolderPopup = class AppFolderPopup {
|
|||||||
x_expand: true,
|
x_expand: true,
|
||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
|
|
||||||
this._boxPointer.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',
|
||||||
};
|
};
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
@@ -13,10 +13,11 @@ var AudioDevice = {
|
|||||||
|
|
||||||
const AudioDeviceSelectionIface = loadInterfaceXML('org.gnome.Shell.AudioDeviceSelection');
|
const AudioDeviceSelectionIface = loadInterfaceXML('org.gnome.Shell.AudioDeviceSelection');
|
||||||
|
|
||||||
var AudioDeviceSelectionDialog =
|
var AudioDeviceSelectionDialog = GObject.registerClass({
|
||||||
class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
Signals: { 'device-selected': { param_types: [GObject.TYPE_UINT] } }
|
||||||
constructor(devices) {
|
}, class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'audio-device-selection-dialog' });
|
_init(devices) {
|
||||||
|
super._init({ styleClass: 'audio-device-selection-dialog' });
|
||||||
|
|
||||||
this._deviceItems = {};
|
this._deviceItems = {};
|
||||||
|
|
||||||
@@ -33,10 +34,6 @@ class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
|||||||
throw new Error('Too few devices for a selection');
|
throw new Error('Too few devices for a selection');
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
|
||||||
super.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
_buildLayout(devices) {
|
_buildLayout(devices) {
|
||||||
let title = new St.Label({ style_class: 'audio-selection-title',
|
let title = new St.Label({ style_class: 'audio-selection-title',
|
||||||
text: _("Select Audio Device"),
|
text: _("Select Audio Device"),
|
||||||
@@ -125,7 +122,7 @@ class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
|||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
app.activate();
|
app.activate();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var AudioDeviceSelectionDBus = class AudioDeviceSelectionDBus {
|
var AudioDeviceSelectionDBus = class AudioDeviceSelectionDBus {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@@ -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,6 +121,7 @@ var BarLevel = class {
|
|||||||
cr.lineTo(x, (height - barLevelHeight) / 2);
|
cr.lineTo(x, (height - barLevelHeight) / 2);
|
||||||
cr.lineTo(x, (height + barLevelHeight) / 2);
|
cr.lineTo(x, (height + barLevelHeight) / 2);
|
||||||
cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2);
|
cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2);
|
||||||
|
if (this._value > 0)
|
||||||
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
||||||
cr.fillPreserve();
|
cr.fillPreserve();
|
||||||
Clutter.cairo_set_source_color(cr, barLevelActiveBorderColor);
|
Clutter.cairo_set_source_color(cr, barLevelActiveBorderColor);
|
||||||
@@ -143,6 +144,7 @@ var BarLevel = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* end progress bar arc */
|
/* end progress bar arc */
|
||||||
|
if (this._value > 0) {
|
||||||
if (this._value <= this._overdriveStart)
|
if (this._value <= this._overdriveStart)
|
||||||
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
|
||||||
else
|
else
|
||||||
@@ -154,6 +156,7 @@ var BarLevel = class {
|
|||||||
cr.fillPreserve();
|
cr.fillPreserve();
|
||||||
cr.setLineWidth(barLevelBorderWidth);
|
cr.setLineWidth(barLevelBorderWidth);
|
||||||
cr.stroke();
|
cr.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
/* draw overdrive separator */
|
/* draw overdrive separator */
|
||||||
if (overdriveActive) {
|
if (overdriveActive) {
|
||||||
|
@@ -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();
|
||||||
|
@@ -5,6 +5,7 @@ const Mainloop = imports.mainloop;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
const GnomeSession = imports.misc.gnomeSession;
|
const GnomeSession = imports.misc.gnomeSession;
|
||||||
|
const Main = imports.ui.main;
|
||||||
const ShellMountOperation = imports.ui.shellMountOperation;
|
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||||
|
|
||||||
var GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
|
var GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
|
||||||
@@ -199,12 +200,20 @@ var AutomountManager = class {
|
|||||||
// error strings are not unique for the cases in the comments below.
|
// error strings are not unique for the cases in the comments below.
|
||||||
if (e.message.includes('No key available with this passphrase') || // cryptsetup
|
if (e.message.includes('No key available with this passphrase') || // cryptsetup
|
||||||
e.message.includes('No key available to unlock device') || // udisks (no password)
|
e.message.includes('No key available to unlock device') || // udisks (no password)
|
||||||
e.message.includes('Error unlocking')) { // udisks (wrong password)
|
// libblockdev wrong password opening LUKS device
|
||||||
|
e.message.includes('Failed to activate device: Incorrect passphrase') ||
|
||||||
|
// cryptsetup returns EINVAL in many cases, including wrong TCRYPT password/parameters
|
||||||
|
e.message.includes('Failed to load device\'s parameters: Invalid argument')) {
|
||||||
|
|
||||||
this._reaskPassword(volume);
|
this._reaskPassword(volume);
|
||||||
} else {
|
} else {
|
||||||
|
if (e.message.includes('Compiled against a version of libcryptsetup that does not support the VeraCrypt PIM setting')) {
|
||||||
|
Main.notifyError(_("Unable to unlock volume"),
|
||||||
|
_("The installed udisks version does not support the PIM setting"));
|
||||||
|
}
|
||||||
|
|
||||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
|
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
|
||||||
log('Unable to mount volume ' + volume.get_name() + ': ' + e.toString());
|
log('Unable to mount volume ' + volume.get_name() + ': ' + e.toString());
|
||||||
|
|
||||||
this._closeOperation(volume);
|
this._closeOperation(volume);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,9 +10,10 @@ const CheckBox = imports.ui.checkBox;
|
|||||||
|
|
||||||
var WORK_SPINNER_ICON_SIZE = 16;
|
var WORK_SPINNER_ICON_SIZE = 16;
|
||||||
|
|
||||||
var KeyringDialog = class extends ModalDialog.ModalDialog {
|
var KeyringDialog = GObject.registerClass(
|
||||||
constructor() {
|
class KeyringDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'prompt-dialog' });
|
_init() {
|
||||||
|
super._init({ styleClass: 'prompt-dialog' });
|
||||||
|
|
||||||
this.prompt = new Shell.KeyringPrompt();
|
this.prompt = new Shell.KeyringPrompt();
|
||||||
this.prompt.connect('show-password', this._onShowPassword.bind(this));
|
this.prompt.connect('show-password', this._onShowPassword.bind(this));
|
||||||
@@ -23,20 +24,8 @@ var KeyringDialog = class extends ModalDialog.ModalDialog {
|
|||||||
this._content = new Dialog.MessageDialogContent({ icon });
|
this._content = new Dialog.MessageDialogContent({ icon });
|
||||||
this.contentLayout.add(this._content);
|
this.contentLayout.add(this._content);
|
||||||
|
|
||||||
// FIXME: Why does this break now?
|
|
||||||
/*
|
|
||||||
this.prompt.bind_property('message', this._content, 'title', GObject.BindingFlags.SYNC_CREATE);
|
this.prompt.bind_property('message', this._content, 'title', GObject.BindingFlags.SYNC_CREATE);
|
||||||
this.prompt.bind_property('description', this._content, 'body', GObject.BindingFlags.SYNC_CREATE);
|
this.prompt.bind_property('description', this._content, 'body', GObject.BindingFlags.SYNC_CREATE);
|
||||||
*/
|
|
||||||
this.prompt.connect('notify::message', () => {
|
|
||||||
this._content.title = this.prompt.message;
|
|
||||||
});
|
|
||||||
this._content.title = this.prompt.message;
|
|
||||||
|
|
||||||
this.prompt.connect('notify::description', () => {
|
|
||||||
this._content.body = this.prompt.description;
|
|
||||||
});
|
|
||||||
this._content.body = this.prompt.description;
|
|
||||||
|
|
||||||
this._workSpinner = null;
|
this._workSpinner = null;
|
||||||
this._controlTable = null;
|
this._controlTable = null;
|
||||||
@@ -224,7 +213,7 @@ var KeyringDialog = class extends ModalDialog.ModalDialog {
|
|||||||
_onCancelButton() {
|
_onCancelButton() {
|
||||||
this.prompt.cancel();
|
this.prompt.cancel();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var KeyringDummyDialog = class {
|
var KeyringDummyDialog = class {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@@ -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, NM, Pango, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, NM, Pango, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
@@ -12,9 +12,10 @@ const ShellEntry = imports.ui.shellEntry;
|
|||||||
|
|
||||||
const VPN_UI_GROUP = 'VPN Plugin UI';
|
const VPN_UI_GROUP = 'VPN Plugin UI';
|
||||||
|
|
||||||
var NetworkSecretDialog = class extends ModalDialog.ModalDialog {
|
var NetworkSecretDialog = GObject.registerClass(
|
||||||
constructor(agent, requestId, connection, settingName, hints, flags, contentOverride) {
|
class NetworkSecretDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'prompt-dialog' });
|
_init(agent, requestId, connection, settingName, hints, flags, contentOverride) {
|
||||||
|
super._init({ styleClass: 'prompt-dialog' });
|
||||||
|
|
||||||
this._agent = agent;
|
this._agent = agent;
|
||||||
this._requestId = requestId;
|
this._requestId = requestId;
|
||||||
@@ -347,7 +348,7 @@ var NetworkSecretDialog = class extends ModalDialog.ModalDialog {
|
|||||||
|
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var VPNRequestHandler = class {
|
var VPNRequestHandler = class {
|
||||||
constructor(agent, requestId, authHelper, serviceType, connection, hints, flags) {
|
constructor(agent, requestId, authHelper, serviceType, connection, hints, flags) {
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const { AccountsService, Clutter, Gio, GLib,
|
const { AccountsService, Clutter, Gio, GLib,
|
||||||
Pango, PolkitAgent, Polkit, Shell, St } = imports.gi;
|
GObject, Pango, PolkitAgent, Polkit, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const Animation = imports.ui.animation;
|
const Animation = imports.ui.animation;
|
||||||
@@ -15,9 +15,11 @@ var DIALOG_ICON_SIZE = 48;
|
|||||||
|
|
||||||
var WORK_SPINNER_ICON_SIZE = 16;
|
var WORK_SPINNER_ICON_SIZE = 16;
|
||||||
|
|
||||||
var AuthenticationDialog = class extends ModalDialog.ModalDialog {
|
var AuthenticationDialog = GObject.registerClass({
|
||||||
constructor(actionId, body, cookie, userNames) {
|
Signals: { 'done': { param_types: [GObject.TYPE_BOOLEAN] } }
|
||||||
super({ styleClass: 'prompt-dialog' });
|
}, class AuthenticationDialog extends ModalDialog.ModalDialog {
|
||||||
|
_init(actionId, body, cookie, userNames) {
|
||||||
|
super._init({ styleClass: 'prompt-dialog' });
|
||||||
|
|
||||||
this.actionId = actionId;
|
this.actionId = actionId;
|
||||||
this.message = body;
|
this.message = body;
|
||||||
@@ -25,7 +27,7 @@ var AuthenticationDialog = class extends ModalDialog.ModalDialog {
|
|||||||
this._wasDismissed = false;
|
this._wasDismissed = false;
|
||||||
|
|
||||||
this._sessionUpdatedId = Main.sessionMode.connect('updated', () => {
|
this._sessionUpdatedId = Main.sessionMode.connect('updated', () => {
|
||||||
this._group.visible = !Main.sessionMode.isLocked;
|
this.visible = !Main.sessionMode.isLocked;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.connect('closed', this._onDialogClosed.bind(this));
|
this.connect('closed', this._onDialogClosed.bind(this));
|
||||||
@@ -326,8 +328,7 @@ var AuthenticationDialog = class extends ModalDialog.ModalDialog {
|
|||||||
|
|
||||||
this._destroySession();
|
this._destroySession();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(AuthenticationDialog.prototype);
|
|
||||||
|
|
||||||
var AuthenticationAgent = class {
|
var AuthenticationAgent = class {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@@ -401,7 +401,7 @@ var ChatSource = class extends MessageTray.Source {
|
|||||||
if (this._client.is_handling_channel(this._channel)) {
|
if (this._client.is_handling_channel(this._channel)) {
|
||||||
// We are handling the channel, try to pass it to Empathy or Polari
|
// We are handling the channel, try to pass it to Empathy or Polari
|
||||||
// (depending on the channel type)
|
// (depending on the channel type)
|
||||||
// We don't check if either app is availble - mission control will
|
// We don't check if either app is available - mission control will
|
||||||
// fallback to something else if activation fails
|
// fallback to something else if activation fails
|
||||||
|
|
||||||
let target;
|
let target;
|
||||||
|
@@ -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];
|
||||||
@@ -903,7 +899,7 @@ var Dash = class Dash {
|
|||||||
favPos++;
|
favPos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No drag placeholder means we don't wan't to favorite the app
|
// No drag placeholder means we don't want to favorite the app
|
||||||
// and we are dragging it to its original position
|
// and we are dragging it to its original position
|
||||||
if (!this._dragPlaceholder)
|
if (!this._dragPlaceholder)
|
||||||
return true;
|
return true;
|
||||||
|
@@ -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';
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
|
|
||||||
const { AccountsService, Clutter, Gio,
|
const { AccountsService, Clutter, Gio,
|
||||||
GLib, Pango, Polkit, Shell, St } = imports.gi;
|
GLib, GObject, Pango, Polkit, Shell, St } = imports.gi;
|
||||||
|
|
||||||
const CheckBox = imports.ui.checkBox;
|
const CheckBox = imports.ui.checkBox;
|
||||||
const GnomeSession = imports.misc.gnomeSession;
|
const GnomeSession = imports.misc.gnomeSession;
|
||||||
@@ -226,9 +226,10 @@ function init() {
|
|||||||
_endSessionDialog = new EndSessionDialog();
|
_endSessionDialog = new EndSessionDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
|
var EndSessionDialog = GObject.registerClass(
|
||||||
constructor() {
|
class EndSessionDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'end-session-dialog',
|
_init() {
|
||||||
|
super._init({ styleClass: 'end-session-dialog',
|
||||||
destroyOnClose: false });
|
destroyOnClose: false });
|
||||||
|
|
||||||
this._loginManager = LoginManager.getLoginManager();
|
this._loginManager = LoginManager.getLoginManager();
|
||||||
@@ -747,4 +748,4 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
|
|||||||
Close(parameters, invocation) {
|
Close(parameters, invocation) {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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, Soup, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Soup, St } = imports.gi;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
@@ -176,10 +176,10 @@ function checkForUpdates() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var InstallExtensionDialog =
|
var InstallExtensionDialog = GObject.registerClass(
|
||||||
class InstallExtensionDialog extends ModalDialog.ModalDialog {
|
class InstallExtensionDialog extends ModalDialog.ModalDialog {
|
||||||
constructor(uuid, info, invocation) {
|
_init(uuid, info, invocation) {
|
||||||
super({ styleClass: 'extension-dialog' });
|
super._init({ styleClass: 'extension-dialog' });
|
||||||
|
|
||||||
this._uuid = uuid;
|
this._uuid = uuid;
|
||||||
this._info = info;
|
this._info = info;
|
||||||
@@ -255,7 +255,7 @@ class InstallExtensionDialog extends ModalDialog.ModalDialog {
|
|||||||
|
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
_httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true });
|
_httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true });
|
||||||
|
@@ -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 });
|
||||||
@@ -81,7 +79,7 @@ class BaseIcon extends St.Bin {
|
|||||||
// This can be overridden by a subclass, or by the createIcon
|
// This can be overridden by a subclass, or by the createIcon
|
||||||
// parameter to _init()
|
// parameter to _init()
|
||||||
createIcon(size) {
|
createIcon(size) {
|
||||||
throw new Error('no implementation of createIcon in ' + this);
|
throw new GObject.NotImplementedError(`createIcon in ${this.constructor.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
setIconSize(size) {
|
setIconSize(size) {
|
||||||
@@ -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,
|
||||||
@@ -419,7 +416,8 @@ var IconGrid = GObject.registerClass({
|
|||||||
|
|
||||||
animatePulse(animationDirection) {
|
animatePulse(animationDirection) {
|
||||||
if (animationDirection != AnimationDirection.IN)
|
if (animationDirection != AnimationDirection.IN)
|
||||||
throw new Error("Pulse animation only implements 'in' animation direction");
|
throw new GObject.NotImplementedError("Pulse animation only implements " +
|
||||||
|
"'in' animation direction");
|
||||||
|
|
||||||
this._cancelAnimation();
|
this._cancelAnimation();
|
||||||
|
|
||||||
@@ -843,7 +841,7 @@ var PaginatedIconGrid = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overriden from IconGrid
|
// Overridden from IconGrid
|
||||||
_getChildrenToAnimate() {
|
_getChildrenToAnimate() {
|
||||||
let children = this._getVisibleChildren();
|
let children = this._getVisibleChildren();
|
||||||
let firstIndex = this._childrenPerPage * this.currentPage;
|
let firstIndex = this._childrenPerPage * this.currentPage;
|
||||||
|
@@ -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));
|
||||||
@@ -1144,6 +1144,7 @@ var Keyboard = class Keyboard {
|
|||||||
this._keyboardController.disconnect(this._keypadVisibleId);
|
this._keyboardController.disconnect(this._keypadVisibleId);
|
||||||
if (this._focusNotifyId)
|
if (this._focusNotifyId)
|
||||||
global.stage.disconnect(this._focusNotifyId);
|
global.stage.disconnect(this._focusNotifyId);
|
||||||
|
this._clearShowIdle();
|
||||||
this._keyboard = null;
|
this._keyboard = null;
|
||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
this.actor = null;
|
this.actor = null;
|
||||||
@@ -1162,7 +1163,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 +1203,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1227,6 +1230,7 @@ var Keyboard = class Keyboard {
|
|||||||
if (!this._showIdleId) {
|
if (!this._showIdleId) {
|
||||||
this._showIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
|
this._showIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
|
||||||
this.show(Main.layoutManager.focusIndex);
|
this.show(Main.layoutManager.focusIndex);
|
||||||
|
this._showIdleId = 0;
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
});
|
});
|
||||||
GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show');
|
GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show');
|
||||||
@@ -1353,7 +1357,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 +1384,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 +1444,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 +1474,12 @@ 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._groups = {};
|
||||||
this._onGroupChanged();
|
this._onGroupChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1512,13 +1521,24 @@ var Keyboard = class Keyboard {
|
|||||||
_setActiveLayer(activeLevel) {
|
_setActiveLayer(activeLevel) {
|
||||||
let activeGroupName = this._keyboardController.getCurrentGroup();
|
let activeGroupName = this._keyboardController.getCurrentGroup();
|
||||||
let layers = this._groups[activeGroupName];
|
let layers = this._groups[activeGroupName];
|
||||||
|
let currentPage = layers[activeLevel];
|
||||||
|
|
||||||
if (this._current_page != null) {
|
if (this._currentPage == currentPage) {
|
||||||
this._setCurrentLevelLatched(this._current_page, false);
|
this._updateCurrentPageVisible();
|
||||||
this._current_page.hide();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._current_page = layers[activeLevel];
|
if (this._currentPage != null) {
|
||||||
|
this._setCurrentLevelLatched(this._currentPage, false);
|
||||||
|
this._currentPage.disconnect(this._currentPage._destroyID);
|
||||||
|
this._currentPage.hide();
|
||||||
|
delete this._currentPage._destroyID;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._currentPage = currentPage;
|
||||||
|
this._currentPage._destroyID = this._currentPage.connect('destroy', () => {
|
||||||
|
this._currentPage = null;
|
||||||
|
});
|
||||||
this._updateCurrentPageVisible();
|
this._updateCurrentPageVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1606,18 +1626,6 @@ var Keyboard = class Keyboard {
|
|||||||
this.setCursorLocation(null);
|
this.setCursorLocation(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
_hideSubkeys() {
|
|
||||||
if (this._subkeysBoxPointer) {
|
|
||||||
this._subkeysBoxPointer.hide(BoxPointer.PopupAnimation.FULL);
|
|
||||||
this._subkeysBoxPointer = null;
|
|
||||||
}
|
|
||||||
if (this._capturedEventId) {
|
|
||||||
this.actor.disconnect(this._capturedEventId);
|
|
||||||
this._capturedEventId = 0;
|
|
||||||
}
|
|
||||||
this._capturedPress = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
resetSuggestions() {
|
resetSuggestions() {
|
||||||
if (this._suggestions)
|
if (this._suggestions)
|
||||||
this._suggestions.clear();
|
this._suggestions.clear();
|
||||||
|
@@ -216,10 +216,17 @@ var LayoutManager = GObject.registerClass({
|
|||||||
this.uiGroup = new UiActor({ name: 'uiGroup' });
|
this.uiGroup = new UiActor({ name: 'uiGroup' });
|
||||||
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
|
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
|
||||||
|
|
||||||
|
global.stage.add_child(this.uiGroup);
|
||||||
|
|
||||||
global.stage.remove_actor(global.window_group);
|
global.stage.remove_actor(global.window_group);
|
||||||
this.uiGroup.add_actor(global.window_group);
|
this.uiGroup.add_actor(global.window_group);
|
||||||
|
|
||||||
global.stage.add_child(this.uiGroup);
|
// Using addChrome() to add actors to uiGroup will position actors
|
||||||
|
// underneath the top_window_group.
|
||||||
|
// To insert actors at the top of uiGroup, we use addTopChrome() or
|
||||||
|
// add the actor directly using uiGroup.add_actor().
|
||||||
|
global.stage.remove_actor(global.top_window_group);
|
||||||
|
this.uiGroup.add_actor(global.top_window_group);
|
||||||
|
|
||||||
this.overviewGroup = new St.Widget({ name: 'overviewGroup',
|
this.overviewGroup = new St.Widget({ name: 'overviewGroup',
|
||||||
visible: false,
|
visible: false,
|
||||||
@@ -231,7 +238,7 @@ var LayoutManager = GObject.registerClass({
|
|||||||
clip_to_allocation: true,
|
clip_to_allocation: true,
|
||||||
layout_manager: new Clutter.BinLayout(),
|
layout_manager: new Clutter.BinLayout(),
|
||||||
});
|
});
|
||||||
this.addChrome(this.screenShieldGroup);
|
this.addTopChrome(this.screenShieldGroup);
|
||||||
|
|
||||||
this.panelBox = new St.BoxLayout({ name: 'panelBox',
|
this.panelBox = new St.BoxLayout({ name: 'panelBox',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
@@ -247,17 +254,14 @@ var LayoutManager = GObject.registerClass({
|
|||||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
track_hover: true });
|
track_hover: true });
|
||||||
this.addChrome(this.keyboardBox);
|
this.addTopChrome(this.keyboardBox);
|
||||||
this._keyboardHeightNotifyId = 0;
|
this._keyboardHeightNotifyId = 0;
|
||||||
|
|
||||||
// A dummy actor that tracks the mouse or text cursor, based on the
|
// A dummy actor that tracks the mouse or text cursor, based on the
|
||||||
// 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);
|
|
||||||
this.uiGroup.add_actor(global.top_window_group);
|
|
||||||
|
|
||||||
let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
|
let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
|
||||||
global.stage.remove_actor(feedbackGroup);
|
global.stage.remove_actor(feedbackGroup);
|
||||||
this.uiGroup.add_actor(feedbackGroup);
|
this.uiGroup.add_actor(feedbackGroup);
|
||||||
@@ -802,6 +806,16 @@ var LayoutManager = GObject.registerClass({
|
|||||||
this._trackActor(actor, params);
|
this._trackActor(actor, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// addTopChrome:
|
||||||
|
// @actor: an actor to add to the chrome
|
||||||
|
// @params: (optional) additional params
|
||||||
|
//
|
||||||
|
// Like addChrome(), but adds @actor above all windows, including popups.
|
||||||
|
addTopChrome(actor, params) {
|
||||||
|
this.uiGroup.add_actor(actor);
|
||||||
|
this._trackActor(actor, params);
|
||||||
|
}
|
||||||
|
|
||||||
// trackChrome:
|
// trackChrome:
|
||||||
// @actor: a descendant of the chrome to begin tracking
|
// @actor: a descendant of the chrome to begin tracking
|
||||||
// @params: parameters describing how to track @actor
|
// @params: parameters describing how to track @actor
|
||||||
@@ -1058,7 +1072,6 @@ var LayoutManager = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Meta.is_wayland_compositor())
|
|
||||||
global.set_stage_input_region(rects);
|
global.set_stage_input_region(rects);
|
||||||
this._isPopupWindowVisible = isPopupMenuVisible;
|
this._isPopupWindowVisible = isPopupMenuVisible;
|
||||||
|
|
||||||
|
@@ -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() {
|
||||||
|
if (this._signalConnections)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._signalConnections = [];
|
||||||
|
let id = Main.layoutManager.connect('monitors-changed',
|
||||||
this._monitorsChanged.bind(this));
|
this._monitorsChanged.bind(this));
|
||||||
this._focusCaretTracker.connect('caret-moved',
|
this._signalConnections.push([Main.layoutManager, id]);
|
||||||
this._updateCaret.bind(this));
|
|
||||||
this._focusCaretTracker.connect('focus-changed',
|
id = this._focusCaretTracker.connect('caret-moved', this._updateCaret.bind(this));
|
||||||
this._updateFocus.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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1239,7 +1272,7 @@ var ZoomRegion = class ZoomRegion {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* getContrast:
|
* getContrast:
|
||||||
* Retreive the contrast of the magnified view.
|
* Retrieve the contrast of the magnified view.
|
||||||
* @return Object containing the contrast for the red, green,
|
* @return Object containing the contrast for the red, green,
|
||||||
* and blue channels.
|
* and blue channels.
|
||||||
*/
|
*/
|
||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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, Meta, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
|
|
||||||
const AccessDialog = imports.ui.accessDialog;
|
const AccessDialog = imports.ui.accessDialog;
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -636,7 +636,7 @@ function _queueBeforeRedraw(workId) {
|
|||||||
* initialization as well, under the assumption that new actors
|
* initialization as well, under the assumption that new actors
|
||||||
* will need it.
|
* will need it.
|
||||||
*
|
*
|
||||||
* Returns: A string work identifer
|
* Returns: A string work identifier
|
||||||
*/
|
*/
|
||||||
function initializeDeferredWork(actor, callback, props) {
|
function initializeDeferredWork(actor, callback, props) {
|
||||||
// Turn into a string so we can use as an object property
|
// Turn into a string so we can use as an object property
|
||||||
@@ -689,9 +689,10 @@ function queueDeferredWork(workId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var RestartMessage = class extends ModalDialog.ModalDialog {
|
var RestartMessage = GObject.registerClass(
|
||||||
constructor(message) {
|
class RestartMessage extends ModalDialog.ModalDialog {
|
||||||
super({ shellReactive: true,
|
_init(message) {
|
||||||
|
super._init({ shellReactive: true,
|
||||||
styleClass: 'restart-message headline',
|
styleClass: 'restart-message headline',
|
||||||
shouldFadeIn: false,
|
shouldFadeIn: false,
|
||||||
destroyOnClose: true });
|
destroyOnClose: true });
|
||||||
@@ -704,7 +705,7 @@ var RestartMessage = class extends ModalDialog.ModalDialog {
|
|||||||
y_align: St.Align.MIDDLE });
|
y_align: St.Align.MIDDLE });
|
||||||
this.buttonLayout.hide();
|
this.buttonLayout.hide();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
function showRestartMessage(message) {
|
function showRestartMessage(message) {
|
||||||
let restartMessage = new RestartMessage(message);
|
let restartMessage = new RestartMessage(message);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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, Shell, St } = imports.gi;
|
const { Atk, Clutter, GObject, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const Dialog = imports.ui.dialog;
|
const Dialog = imports.ui.dialog;
|
||||||
@@ -21,8 +21,20 @@ var State = {
|
|||||||
FADED_OUT: 4
|
FADED_OUT: 4
|
||||||
};
|
};
|
||||||
|
|
||||||
var ModalDialog = class {
|
var ModalDialog = GObject.registerClass({
|
||||||
constructor(params) {
|
Properties: { 'state': GObject.ParamSpec.int('state', 'Dialog state', 'state',
|
||||||
|
GObject.ParamFlags.READABLE,
|
||||||
|
Math.min(...Object.values(State)),
|
||||||
|
Math.max(...Object.values(State)),
|
||||||
|
State.CLOSED) },
|
||||||
|
Signals: { 'opened': {}, 'closed': {} }
|
||||||
|
}, class ModalDialog extends St.Widget {
|
||||||
|
_init(params) {
|
||||||
|
super._init({ visible: false,
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
accessible_role: Atk.Role.DIALOG });
|
||||||
|
|
||||||
params = Params.parse(params, { shellReactive: false,
|
params = Params.parse(params, { shellReactive: false,
|
||||||
styleClass: null,
|
styleClass: null,
|
||||||
actionMode: Shell.ActionMode.SYSTEM_MODAL,
|
actionMode: Shell.ActionMode.SYSTEM_MODAL,
|
||||||
@@ -30,7 +42,7 @@ var ModalDialog = class {
|
|||||||
shouldFadeOut: true,
|
shouldFadeOut: true,
|
||||||
destroyOnClose: true });
|
destroyOnClose: true });
|
||||||
|
|
||||||
this.state = State.CLOSED;
|
this._state = State.CLOSED;
|
||||||
this._hasModal = false;
|
this._hasModal = false;
|
||||||
this._actionMode = params.actionMode;
|
this._actionMode = params.actionMode;
|
||||||
this._shellReactive = params.shellReactive;
|
this._shellReactive = params.shellReactive;
|
||||||
@@ -38,31 +50,25 @@ var ModalDialog = class {
|
|||||||
this._shouldFadeOut = params.shouldFadeOut;
|
this._shouldFadeOut = params.shouldFadeOut;
|
||||||
this._destroyOnClose = params.destroyOnClose;
|
this._destroyOnClose = params.destroyOnClose;
|
||||||
|
|
||||||
this._group = new St.Widget({ visible: false,
|
Main.layoutManager.modalDialogGroup.add_actor(this);
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
accessible_role: Atk.Role.DIALOG });
|
|
||||||
Main.layoutManager.modalDialogGroup.add_actor(this._group);
|
|
||||||
|
|
||||||
let constraint = new Clutter.BindConstraint({ source: global.stage,
|
let constraint = new Clutter.BindConstraint({ source: global.stage,
|
||||||
coordinate: Clutter.BindCoordinate.ALL });
|
coordinate: Clutter.BindCoordinate.ALL });
|
||||||
this._group.add_constraint(constraint);
|
this.add_constraint(constraint);
|
||||||
|
|
||||||
this._group.connect('destroy', this._onGroupDestroy.bind(this));
|
|
||||||
|
|
||||||
this.backgroundStack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
this.backgroundStack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
||||||
this._backgroundBin = new St.Bin({ child: this.backgroundStack,
|
this._backgroundBin = new St.Bin({ child: this.backgroundStack,
|
||||||
x_fill: true, y_fill: true });
|
x_fill: true, y_fill: true });
|
||||||
this._monitorConstraint = new Layout.MonitorConstraint();
|
this._monitorConstraint = new Layout.MonitorConstraint();
|
||||||
this._backgroundBin.add_constraint(this._monitorConstraint);
|
this._backgroundBin.add_constraint(this._monitorConstraint);
|
||||||
this._group.add_actor(this._backgroundBin);
|
this.add_actor(this._backgroundBin);
|
||||||
|
|
||||||
this.dialogLayout = new Dialog.Dialog(this.backgroundStack, params.styleClass);
|
this.dialogLayout = new Dialog.Dialog(this.backgroundStack, params.styleClass);
|
||||||
this.contentLayout = this.dialogLayout.contentLayout;
|
this.contentLayout = this.dialogLayout.contentLayout;
|
||||||
this.buttonLayout = this.dialogLayout.buttonLayout;
|
this.buttonLayout = this.dialogLayout.buttonLayout;
|
||||||
|
|
||||||
if (!this._shellReactive) {
|
if (!this._shellReactive) {
|
||||||
this._lightbox = new Lightbox.Lightbox(this._group,
|
this._lightbox = new Lightbox.Lightbox(this,
|
||||||
{ inhibitEvents: true,
|
{ inhibitEvents: true,
|
||||||
radialEffect: true });
|
radialEffect: true });
|
||||||
this._lightbox.highlight(this._backgroundBin);
|
this._lightbox.highlight(this._backgroundBin);
|
||||||
@@ -77,8 +83,16 @@ var ModalDialog = class {
|
|||||||
this._savedKeyFocus = null;
|
this._savedKeyFocus = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
get state() {
|
||||||
this._group.destroy();
|
return this._state;
|
||||||
|
}
|
||||||
|
|
||||||
|
_setState(state) {
|
||||||
|
if (this._state == state)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._state = state;
|
||||||
|
this.notify('state');
|
||||||
}
|
}
|
||||||
|
|
||||||
clearButtons() {
|
clearButtons() {
|
||||||
@@ -96,29 +110,25 @@ var ModalDialog = class {
|
|||||||
return this.dialogLayout.addButton(buttonInfo);
|
return this.dialogLayout.addButton(buttonInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onGroupDestroy() {
|
|
||||||
this.emit('destroy');
|
|
||||||
}
|
|
||||||
|
|
||||||
_fadeOpen(onPrimary) {
|
_fadeOpen(onPrimary) {
|
||||||
if (onPrimary)
|
if (onPrimary)
|
||||||
this._monitorConstraint.primary = true;
|
this._monitorConstraint.primary = true;
|
||||||
else
|
else
|
||||||
this._monitorConstraint.index = global.display.get_current_monitor();
|
this._monitorConstraint.index = global.display.get_current_monitor();
|
||||||
|
|
||||||
this.state = State.OPENING;
|
this._setState(State.OPENING);
|
||||||
|
|
||||||
this.dialogLayout.opacity = 255;
|
this.dialogLayout.opacity = 255;
|
||||||
if (this._lightbox)
|
if (this._lightbox)
|
||||||
this._lightbox.show();
|
this._lightbox.show();
|
||||||
this._group.opacity = 0;
|
this.opacity = 0;
|
||||||
this._group.show();
|
this.show();
|
||||||
Tweener.addTween(this._group,
|
Tweener.addTween(this,
|
||||||
{ opacity: 255,
|
{ opacity: 255,
|
||||||
time: this._shouldFadeIn ? OPEN_AND_CLOSE_TIME : 0,
|
time: this._shouldFadeIn ? OPEN_AND_CLOSE_TIME : 0,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
this.state = State.OPENED;
|
this._setState(State.OPENED);
|
||||||
this.emit('opened');
|
this.emit('opened');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -148,8 +158,8 @@ var ModalDialog = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_closeComplete() {
|
_closeComplete() {
|
||||||
this.state = State.CLOSED;
|
this._setState(State.CLOSED);
|
||||||
this._group.hide();
|
this.hide();
|
||||||
this.emit('closed');
|
this.emit('closed');
|
||||||
|
|
||||||
if (this._destroyOnClose)
|
if (this._destroyOnClose)
|
||||||
@@ -160,12 +170,12 @@ var ModalDialog = class {
|
|||||||
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.state = State.CLOSING;
|
this._setState(State.CLOSING);
|
||||||
this.popModal(timestamp);
|
this.popModal(timestamp);
|
||||||
this._savedKeyFocus = null;
|
this._savedKeyFocus = null;
|
||||||
|
|
||||||
if (this._shouldFadeOut)
|
if (this._shouldFadeOut)
|
||||||
Tweener.addTween(this._group,
|
Tweener.addTween(this,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
time: OPEN_AND_CLOSE_TIME,
|
time: OPEN_AND_CLOSE_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
@@ -183,11 +193,11 @@ var ModalDialog = class {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
let focus = global.stage.key_focus;
|
let focus = global.stage.key_focus;
|
||||||
if (focus && this._group.contains(focus))
|
if (focus && this.contains(focus))
|
||||||
this._savedKeyFocus = focus;
|
this._savedKeyFocus = focus;
|
||||||
else
|
else
|
||||||
this._savedKeyFocus = null;
|
this._savedKeyFocus = null;
|
||||||
Main.popModal(this._group, timestamp);
|
Main.popModal(this, timestamp);
|
||||||
this._hasModal = false;
|
this._hasModal = false;
|
||||||
|
|
||||||
if (!this._shellReactive)
|
if (!this._shellReactive)
|
||||||
@@ -201,7 +211,7 @@ var ModalDialog = class {
|
|||||||
let params = { actionMode: this._actionMode };
|
let params = { actionMode: this._actionMode };
|
||||||
if (timestamp)
|
if (timestamp)
|
||||||
params['timestamp'] = timestamp;
|
params['timestamp'] = timestamp;
|
||||||
if (!Main.pushModal(this._group, params))
|
if (!Main.pushModal(this, params))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
this._hasModal = true;
|
this._hasModal = true;
|
||||||
@@ -224,10 +234,10 @@ var ModalDialog = class {
|
|||||||
// can be dismissed by a close call.
|
// can be dismissed by a close call.
|
||||||
//
|
//
|
||||||
// The main point of this method is to give some indication to the user
|
// The main point of this method is to give some indication to the user
|
||||||
// that the dialog reponse has been acknowledged but will take a few
|
// that the dialog response has been acknowledged but will take a few
|
||||||
// moments before being processed.
|
// moments before being processed.
|
||||||
// e.g., if a user clicked "Log Out" then the dialog should go away
|
// e.g., if a user clicked "Log Out" then the dialog should go away
|
||||||
// imediately, but the lightbox should remain until the logout is
|
// immediately, but the lightbox should remain until the logout is
|
||||||
// complete.
|
// complete.
|
||||||
_fadeOutDialog(timestamp) {
|
_fadeOutDialog(timestamp) {
|
||||||
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
||||||
@@ -242,9 +252,8 @@ var ModalDialog = class {
|
|||||||
time: FADE_OUT_DIALOG_TIME,
|
time: FADE_OUT_DIALOG_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
this.state = State.FADED_OUT;
|
this._setState(State.FADED_OUT);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(ModalDialog.prototype);
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -122,7 +122,7 @@ var SlidingControl = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_getSlide() {
|
_getSlide() {
|
||||||
throw new Error('getSlide() must be overridden');
|
throw new GObject.NotImplementedError(`_getSlide in ${this.constructor.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateSlide() {
|
_updateSlide() {
|
||||||
@@ -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() {
|
||||||
|
109
js/ui/panel.js
109
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();
|
||||||
});
|
});
|
||||||
@@ -117,7 +122,7 @@ class AppMenu extends PopupMenu.PopupMenu {
|
|||||||
|
|
||||||
_updateDetailsVisibility() {
|
_updateDetailsVisibility() {
|
||||||
let sw = this._appSystem.lookup_app('org.gnome.Software.desktop');
|
let sw = this._appSystem.lookup_app('org.gnome.Software.desktop');
|
||||||
this._detailsItem.actor.visible = (sw != null);
|
this._detailsItem.visible = (sw != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
isEmpty() {
|
isEmpty() {
|
||||||
@@ -155,7 +160,7 @@ class AppMenu extends PopupMenu.PopupMenu {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this._newWindowItem.actor.visible =
|
this._newWindowItem.visible =
|
||||||
app && app.can_open_new_window() && !actions.includes('new-window');
|
app && app.can_open_new_window() && !actions.includes('new-window');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,13 +177,6 @@ class AppMenu extends PopupMenu.PopupMenu {
|
|||||||
Main.activateWindow(window, event.get_time());
|
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
|
||||||
|
@@ -51,49 +51,64 @@ function arrowIcon(side) {
|
|||||||
return arrow;
|
return arrow;
|
||||||
}
|
}
|
||||||
|
|
||||||
var PopupBaseMenuItem = class {
|
var PopupBaseMenuItem = GObject.registerClass({
|
||||||
constructor(params) {
|
Properties: {
|
||||||
|
'active': GObject.ParamSpec.boolean('active', 'active', 'active',
|
||||||
|
GObject.ParamFlags.READWRITE,
|
||||||
|
GObject.TYPE_BOOLEAN,
|
||||||
|
false),
|
||||||
|
'sensitive': GObject.ParamSpec.boolean('sensitive', 'sensitive', 'sensitive',
|
||||||
|
GObject.ParamFlags.READWRITE,
|
||||||
|
GObject.TYPE_BOOLEAN,
|
||||||
|
true),
|
||||||
|
},
|
||||||
|
Signals: {
|
||||||
|
'activate': { param_types: [Clutter.Event.$gtype] },
|
||||||
|
}
|
||||||
|
}, class PopupBaseMenuItem extends St.BoxLayout {
|
||||||
|
_init(params) {
|
||||||
params = Params.parse (params, { reactive: true,
|
params = Params.parse (params, { reactive: true,
|
||||||
activate: true,
|
activate: true,
|
||||||
hover: true,
|
hover: true,
|
||||||
style_class: null,
|
style_class: null,
|
||||||
can_focus: true
|
can_focus: true
|
||||||
});
|
});
|
||||||
|
super._init({ style_class: 'popup-menu-item',
|
||||||
this.actor = new St.BoxLayout({ style_class: 'popup-menu-item',
|
|
||||||
reactive: params.reactive,
|
reactive: params.reactive,
|
||||||
track_hover: params.reactive,
|
track_hover: params.reactive,
|
||||||
can_focus: params.can_focus,
|
can_focus: params.can_focus,
|
||||||
accessible_role: Atk.Role.MENU_ITEM });
|
accessible_role: Atk.Role.MENU_ITEM });
|
||||||
this.actor._delegate = this;
|
this._delegate = this;
|
||||||
|
|
||||||
this._ornament = Ornament.NONE;
|
this._ornament = Ornament.NONE;
|
||||||
this._ornamentLabel = new St.Label({ style_class: 'popup-menu-ornament' });
|
this._ornamentLabel = new St.Label({ style_class: 'popup-menu-ornament' });
|
||||||
this.actor.add(this._ornamentLabel);
|
this.add(this._ornamentLabel);
|
||||||
|
|
||||||
this._parent = null;
|
this._parent = null;
|
||||||
this.active = false;
|
this._active = false;
|
||||||
this._activatable = params.reactive && params.activate;
|
this._activatable = params.reactive && params.activate;
|
||||||
this._sensitive = true;
|
this._sensitive = true;
|
||||||
|
|
||||||
if (!this._activatable)
|
if (!this._activatable)
|
||||||
this.actor.add_style_class_name('popup-inactive-menu-item');
|
this.add_style_class_name('popup-inactive-menu-item');
|
||||||
|
|
||||||
if (params.style_class)
|
if (params.style_class)
|
||||||
this.actor.add_style_class_name(params.style_class);
|
this.add_style_class_name(params.style_class);
|
||||||
|
|
||||||
if (this._activatable) {
|
if (this._activatable) {
|
||||||
this.actor.connect('button-press-event', this._onButtonPressEvent.bind(this));
|
this.connect('button-press-event', this._onButtonPressEvent.bind(this));
|
||||||
this.actor.connect('button-release-event', this._onButtonReleaseEvent.bind(this));
|
this.connect('button-release-event', this._onButtonReleaseEvent.bind(this));
|
||||||
this.actor.connect('touch-event', this._onTouchEvent.bind(this));
|
this.connect('touch-event', this._onTouchEvent.bind(this));
|
||||||
this.actor.connect('key-press-event', this._onKeyPressEvent.bind(this));
|
this.connect('key-press-event', this._onKeyPressEvent.bind(this));
|
||||||
}
|
}
|
||||||
if (params.reactive && params.hover)
|
if (params.reactive && params.hover)
|
||||||
this.actor.connect('notify::hover', this._onHoverChanged.bind(this));
|
this.bind_property('hover', this, 'active', GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
}
|
||||||
|
|
||||||
this.actor.connect('key-focus-in', this._onKeyFocusIn.bind(this));
|
get actor() {
|
||||||
this.actor.connect('key-focus-out', this._onKeyFocusOut.bind(this));
|
/* This is kept for compatibility with current implementation, and we
|
||||||
this.actor.connect('destroy', this._onDestroy.bind(this));
|
don't want to warn here yet since PopupMenu depends on this */
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
_getTopMenu() {
|
_getTopMenu() {
|
||||||
@@ -109,24 +124,24 @@ var PopupBaseMenuItem = class {
|
|||||||
|
|
||||||
_onButtonPressEvent(actor, event) {
|
_onButtonPressEvent(actor, event) {
|
||||||
// This is the CSS active state
|
// This is the CSS active state
|
||||||
this.actor.add_style_pseudo_class ('active');
|
this.add_style_pseudo_class('active');
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onButtonReleaseEvent(actor, event) {
|
_onButtonReleaseEvent(actor, event) {
|
||||||
this.actor.remove_style_pseudo_class ('active');
|
this.remove_style_pseudo_class('active');
|
||||||
this.activate(event);
|
this.activate(event);
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onTouchEvent(actor, event) {
|
_onTouchEvent(actor, event) {
|
||||||
if (event.type() == Clutter.EventType.TOUCH_END) {
|
if (event.type() == Clutter.EventType.TOUCH_END) {
|
||||||
this.actor.remove_style_pseudo_class ('active');
|
this.remove_style_pseudo_class('active');
|
||||||
this.activate(event);
|
this.activate(event);
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
} else if (event.type() == Clutter.EventType.TOUCH_BEGIN) {
|
} else if (event.type() == Clutter.EventType.TOUCH_BEGIN) {
|
||||||
// This is the CSS active state
|
// This is the CSS active state
|
||||||
this.actor.add_style_pseudo_class ('active');
|
this.add_style_pseudo_class('active');
|
||||||
}
|
}
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
@@ -151,54 +166,56 @@ var PopupBaseMenuItem = class {
|
|||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onKeyFocusIn(actor) {
|
vfunc_key_focus_in() {
|
||||||
this.setActive(true);
|
super.vfunc_key_focus_in();
|
||||||
|
this.active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onKeyFocusOut(actor) {
|
vfunc_key_focus_out() {
|
||||||
this.setActive(false);
|
super.vfunc_key_focus_out();
|
||||||
}
|
this.active = false;
|
||||||
|
|
||||||
_onHoverChanged(actor) {
|
|
||||||
this.setActive(actor.hover);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
activate(event) {
|
activate(event) {
|
||||||
this.emit('activate', event);
|
this.emit('activate', event);
|
||||||
}
|
}
|
||||||
|
|
||||||
setActive(active) {
|
get active() {
|
||||||
|
return this._active;
|
||||||
|
}
|
||||||
|
|
||||||
|
set active(active) {
|
||||||
let activeChanged = active != this.active;
|
let activeChanged = active != this.active;
|
||||||
if (activeChanged) {
|
if (activeChanged) {
|
||||||
this.active = active;
|
this._active = active;
|
||||||
if (active) {
|
if (active) {
|
||||||
this.actor.add_style_class_name('selected');
|
this.add_style_class_name('selected');
|
||||||
if (this.actor.can_focus)
|
if (this.can_focus)
|
||||||
this.actor.grab_key_focus();
|
this.grab_key_focus();
|
||||||
} else {
|
} else {
|
||||||
this.actor.remove_style_class_name('selected');
|
this.remove_style_class_name('selected');
|
||||||
// Remove the CSS active state if the user press the button and
|
// Remove the CSS active state if the user press the button and
|
||||||
// while holding moves to another menu item, so we don't paint all items.
|
// while holding moves to another menu item, so we don't paint all items.
|
||||||
// The correct behaviour would be to set the new item with the CSS
|
// The correct behaviour would be to set the new item with the CSS
|
||||||
// active state as well, but button-press-event is not trigered,
|
// active state as well, but button-press-event is not trigered,
|
||||||
// so we should track it in our own, which would involve some work
|
// so we should track it in our own, which would involve some work
|
||||||
// in the container
|
// in the container
|
||||||
this.actor.remove_style_pseudo_class ('active');
|
this.remove_style_pseudo_class('active');
|
||||||
}
|
}
|
||||||
this.emit('active-changed', active);
|
this.notify('active');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
syncSensitive() {
|
syncSensitive() {
|
||||||
let sensitive = this.getSensitive();
|
let sensitive = this.sensitive;
|
||||||
this.actor.reactive = sensitive;
|
this.reactive = sensitive;
|
||||||
this.actor.can_focus = sensitive;
|
this.can_focus = sensitive;
|
||||||
this.emit('sensitive-changed');
|
this.notify('sensitive');
|
||||||
return sensitive;
|
return sensitive;
|
||||||
}
|
}
|
||||||
|
|
||||||
getSensitive() {
|
getSensitive() {
|
||||||
let parentSensitive = this._parent ? this._parent.getSensitive() : true;
|
let parentSensitive = this._parent ? this._parent.sensitive : true;
|
||||||
return this._activatable && this._sensitive && parentSensitive;
|
return this._activatable && this._sensitive && parentSensitive;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,12 +227,12 @@ var PopupBaseMenuItem = class {
|
|||||||
this.syncSensitive();
|
this.syncSensitive();
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
get sensitive() {
|
||||||
this.actor.destroy();
|
return this.getSensitive();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
set sensitive(sensitive) {
|
||||||
this.emit('destroy');
|
this.setSensitive(sensitive);
|
||||||
}
|
}
|
||||||
|
|
||||||
setOrnament(ornament) {
|
setOrnament(ornament) {
|
||||||
@@ -226,36 +243,38 @@ var PopupBaseMenuItem = class {
|
|||||||
|
|
||||||
if (ornament == Ornament.DOT) {
|
if (ornament == Ornament.DOT) {
|
||||||
this._ornamentLabel.text = '\u2022';
|
this._ornamentLabel.text = '\u2022';
|
||||||
this.actor.add_accessible_state(Atk.StateType.CHECKED);
|
this.add_accessible_state(Atk.StateType.CHECKED);
|
||||||
} else if (ornament == Ornament.CHECK) {
|
} else if (ornament == Ornament.CHECK) {
|
||||||
this._ornamentLabel.text = '\u2713';
|
this._ornamentLabel.text = '\u2713';
|
||||||
this.actor.add_accessible_state(Atk.StateType.CHECKED);
|
this.add_accessible_state(Atk.StateType.CHECKED);
|
||||||
} else if (ornament == Ornament.NONE) {
|
} else if (ornament == Ornament.NONE) {
|
||||||
this._ornamentLabel.text = '';
|
this._ornamentLabel.text = '';
|
||||||
this.actor.remove_accessible_state(Atk.StateType.CHECKED);
|
this.remove_accessible_state(Atk.StateType.CHECKED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(PopupBaseMenuItem.prototype);
|
|
||||||
|
|
||||||
var PopupMenuItem = class extends PopupBaseMenuItem {
|
var PopupMenuItem = GObject.registerClass(
|
||||||
constructor(text, params) {
|
class PopupMenuItem extends PopupBaseMenuItem {
|
||||||
super(params);
|
_init(text, params) {
|
||||||
|
super._init(params);
|
||||||
|
|
||||||
this.label = new St.Label({ text: text });
|
this.label = new St.Label({ text: text });
|
||||||
this.actor.add_child(this.label);
|
this.add_child(this.label);
|
||||||
this.actor.label_actor = this.label
|
this.label_actor = this.label
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var PopupSeparatorMenuItem = class extends PopupBaseMenuItem {
|
|
||||||
constructor(text) {
|
var PopupSeparatorMenuItem = GObject.registerClass(
|
||||||
super({ reactive: false,
|
class PopupSeparatorMenuItem extends PopupBaseMenuItem {
|
||||||
|
_init(text) {
|
||||||
|
super._init({ reactive: false,
|
||||||
can_focus: false });
|
can_focus: false });
|
||||||
|
|
||||||
this.label = new St.Label({ text: text || '' });
|
this.label = new St.Label({ text: text || '' });
|
||||||
this.actor.add(this.label);
|
this.add(this.label);
|
||||||
this.actor.label_actor = this.label;
|
this.label_actor = this.label;
|
||||||
|
|
||||||
this.label.connect('notify::text',
|
this.label.connect('notify::text',
|
||||||
this._syncVisibility.bind(this));
|
this._syncVisibility.bind(this));
|
||||||
@@ -264,81 +283,78 @@ var PopupSeparatorMenuItem = class extends PopupBaseMenuItem {
|
|||||||
this._separator = new St.Widget({ style_class: 'popup-separator-menu-item',
|
this._separator = new St.Widget({ style_class: 'popup-separator-menu-item',
|
||||||
y_expand: true,
|
y_expand: true,
|
||||||
y_align: Clutter.ActorAlign.CENTER });
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
this.actor.add(this._separator, { expand: true });
|
this.add(this._separator, { expand: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
_syncVisibility() {
|
_syncVisibility() {
|
||||||
this.label.visible = this.label.text != '';
|
this.label.visible = this.label.text != '';
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var Switch = class {
|
var Switch = GObject.registerClass(
|
||||||
constructor(state) {
|
class Switch extends St.Bin {
|
||||||
this.actor = new St.Bin({ style_class: 'toggle-switch',
|
_init(state) {
|
||||||
|
super._init({ style_class: 'toggle-switch',
|
||||||
accessible_role: Atk.Role.CHECK_BOX,
|
accessible_role: Atk.Role.CHECK_BOX,
|
||||||
can_focus: true });
|
can_focus: true });
|
||||||
// Translators: this MUST be either "toggle-switch-us"
|
|
||||||
// (for toggle switches containing the English words
|
|
||||||
// "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
|
||||||
// switches containing "◯" and "|"). Other values will
|
|
||||||
// simply result in invisible toggle switches.
|
|
||||||
this.actor.add_style_class_name(_("toggle-switch-us"));
|
|
||||||
this.setToggleState(state);
|
this.setToggleState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
setToggleState(state) {
|
setToggleState(state) {
|
||||||
if (state)
|
if (state)
|
||||||
this.actor.add_style_pseudo_class('checked');
|
this.add_style_pseudo_class('checked');
|
||||||
else
|
else
|
||||||
this.actor.remove_style_pseudo_class('checked');
|
this.remove_style_pseudo_class('checked');
|
||||||
this.state = state;
|
this.state = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle() {
|
toggle() {
|
||||||
this.setToggleState(!this.state);
|
this.setToggleState(!this.state);
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var PopupSwitchMenuItem = class extends PopupBaseMenuItem {
|
var PopupSwitchMenuItem = GObject.registerClass({
|
||||||
constructor(text, active, params) {
|
Signals: { 'toggled': { param_types: [GObject.TYPE_BOOLEAN] }, },
|
||||||
super(params);
|
},
|
||||||
|
class PopupSwitchMenuItem extends PopupBaseMenuItem {
|
||||||
|
_init(text, active, params) {
|
||||||
|
super._init(params);
|
||||||
|
|
||||||
this.label = new St.Label({ text: text });
|
this.label = new St.Label({ text: text });
|
||||||
this._switch = new Switch(active);
|
this._switch = new Switch(active);
|
||||||
|
|
||||||
this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM;
|
this.accessible_role = Atk.Role.CHECK_MENU_ITEM;
|
||||||
this.checkAccessibleState();
|
this.checkAccessibleState();
|
||||||
this.actor.label_actor = this.label;
|
this.label_actor = this.label;
|
||||||
|
|
||||||
this.actor.add_child(this.label);
|
this.add_child(this.label);
|
||||||
|
|
||||||
this._statusBin = new St.Bin({ x_align: St.Align.END });
|
this._statusBin = new St.Bin({ x_align: St.Align.END });
|
||||||
this.actor.add(this._statusBin, { expand: true, x_align: St.Align.END });
|
this.add(this._statusBin, { expand: true, x_align: St.Align.END });
|
||||||
|
|
||||||
this._statusLabel = new St.Label({ text: '',
|
this._statusLabel = new St.Label({ text: '',
|
||||||
style_class: 'popup-status-menu-item'
|
style_class: 'popup-status-menu-item'
|
||||||
});
|
});
|
||||||
this._statusBin.child = this._switch.actor;
|
this._statusBin.child = this._switch;
|
||||||
}
|
}
|
||||||
|
|
||||||
setStatus(text) {
|
setStatus(text) {
|
||||||
if (text != null) {
|
if (text != null) {
|
||||||
this._statusLabel.text = text;
|
this._statusLabel.text = text;
|
||||||
this._statusBin.child = this._statusLabel;
|
this._statusBin.child = this._statusLabel;
|
||||||
this.actor.reactive = false;
|
this.reactive = false;
|
||||||
this.actor.accessible_role = Atk.Role.MENU_ITEM;
|
this.accessible_role = Atk.Role.MENU_ITEM;
|
||||||
} else {
|
} else {
|
||||||
this._statusBin.child = this._switch.actor;
|
this._statusBin.child = this._switch;
|
||||||
this.actor.reactive = true;
|
this.reactive = true;
|
||||||
this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM;
|
this.accessible_role = Atk.Role.CHECK_MENU_ITEM;
|
||||||
}
|
}
|
||||||
this.checkAccessibleState();
|
this.checkAccessibleState();
|
||||||
}
|
}
|
||||||
|
|
||||||
activate(event) {
|
activate(event) {
|
||||||
if (this._switch.actor.mapped) {
|
if (this._switch.mapped)
|
||||||
this.toggle();
|
this.toggle();
|
||||||
}
|
|
||||||
|
|
||||||
// we allow pressing space to toggle the switch
|
// we allow pressing space to toggle the switch
|
||||||
// without closing the menu
|
// without closing the menu
|
||||||
@@ -365,29 +381,30 @@ var PopupSwitchMenuItem = class extends PopupBaseMenuItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
checkAccessibleState() {
|
checkAccessibleState() {
|
||||||
switch (this.actor.accessible_role) {
|
switch (this.accessible_role) {
|
||||||
case Atk.Role.CHECK_MENU_ITEM:
|
case Atk.Role.CHECK_MENU_ITEM:
|
||||||
if (this._switch.state)
|
if (this._switch.state)
|
||||||
this.actor.add_accessible_state (Atk.StateType.CHECKED);
|
this.add_accessible_state(Atk.StateType.CHECKED);
|
||||||
else
|
else
|
||||||
this.actor.remove_accessible_state (Atk.StateType.CHECKED);
|
this.remove_accessible_state(Atk.StateType.CHECKED);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
this.actor.remove_accessible_state (Atk.StateType.CHECKED);
|
this.remove_accessible_state(Atk.StateType.CHECKED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var PopupImageMenuItem = class extends PopupBaseMenuItem {
|
var PopupImageMenuItem = GObject.registerClass(
|
||||||
constructor(text, icon, params) {
|
class PopupImageMenuItem extends PopupBaseMenuItem {
|
||||||
super(params);
|
_init(text, icon, params) {
|
||||||
|
super._init(params);
|
||||||
|
|
||||||
this._icon = new St.Icon({ style_class: 'popup-menu-icon',
|
this._icon = new St.Icon({ style_class: 'popup-menu-icon',
|
||||||
x_align: Clutter.ActorAlign.END });
|
x_align: Clutter.ActorAlign.END });
|
||||||
this.actor.add_child(this._icon);
|
this.add_child(this._icon);
|
||||||
this.label = new St.Label({ text: text });
|
this.label = new St.Label({ text: text });
|
||||||
this.actor.add_child(this.label);
|
this.add_child(this.label);
|
||||||
this.actor.label_actor = this.label;
|
this.label_actor = this.label;
|
||||||
|
|
||||||
this.setIcon(icon);
|
this.setIcon(icon);
|
||||||
}
|
}
|
||||||
@@ -399,12 +416,12 @@ var PopupImageMenuItem = class extends PopupBaseMenuItem {
|
|||||||
else
|
else
|
||||||
this._icon.icon_name = icon;
|
this._icon.icon_name = icon;
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var PopupMenuBase = class {
|
var PopupMenuBase = class {
|
||||||
constructor(sourceActor, styleClass) {
|
constructor(sourceActor, styleClass) {
|
||||||
if (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;
|
||||||
@@ -443,13 +460,21 @@ var PopupMenuBase = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSensitive() {
|
getSensitive() {
|
||||||
let parentSensitive = this._parent ? this._parent.getSensitive() : true;
|
let parentSensitive = this._parent ? this._parent.sensitive : true;
|
||||||
return this._sensitive && parentSensitive;
|
return this._sensitive && parentSensitive;
|
||||||
}
|
}
|
||||||
|
|
||||||
setSensitive(sensitive) {
|
setSensitive(sensitive) {
|
||||||
this._sensitive = sensitive;
|
this._sensitive = sensitive;
|
||||||
this.emit('sensitive-changed');
|
this.emit('notify::sensitive');
|
||||||
|
}
|
||||||
|
|
||||||
|
get sensitive() {
|
||||||
|
return this.getSensitive();
|
||||||
|
}
|
||||||
|
|
||||||
|
set sensitive(sensitive) {
|
||||||
|
this.setSensitive(sensitive);
|
||||||
}
|
}
|
||||||
|
|
||||||
_sessionUpdated() {
|
_sessionUpdated() {
|
||||||
@@ -485,7 +510,7 @@ var PopupMenuBase = class {
|
|||||||
app.activate();
|
app.activate();
|
||||||
});
|
});
|
||||||
|
|
||||||
menuItem.actor.visible = Main.sessionMode.allowSettings;
|
menuItem.visible = Main.sessionMode.allowSettings;
|
||||||
this._settingsActions[desktopFile] = menuItem;
|
this._settingsActions[desktopFile] = menuItem;
|
||||||
|
|
||||||
return menuItem;
|
return menuItem;
|
||||||
@@ -494,7 +519,7 @@ var PopupMenuBase = class {
|
|||||||
_setSettingsVisibility(visible) {
|
_setSettingsVisibility(visible) {
|
||||||
for (let id in this._settingsActions) {
|
for (let id in this._settingsActions) {
|
||||||
let item = this._settingsActions[id];
|
let item = this._settingsActions[id];
|
||||||
item.actor.visible = visible;
|
item.visible = visible;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -517,16 +542,17 @@ var PopupMenuBase = class {
|
|||||||
|
|
||||||
_subMenuActiveChanged(submenu, submenuItem) {
|
_subMenuActiveChanged(submenu, submenuItem) {
|
||||||
if (this._activeMenuItem && this._activeMenuItem != submenuItem)
|
if (this._activeMenuItem && this._activeMenuItem != submenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.active = false;
|
||||||
this._activeMenuItem = submenuItem;
|
this._activeMenuItem = submenuItem;
|
||||||
this.emit('active-changed', submenuItem);
|
this.emit('active-changed', submenuItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
_connectItemSignals(menuItem) {
|
_connectItemSignals(menuItem) {
|
||||||
menuItem._activeChangeId = menuItem.connect('active-changed', (menuItem, active) => {
|
menuItem._activeChangeId = menuItem.connect('notify::active', (menuItem) => {
|
||||||
|
let active = menuItem.active;
|
||||||
if (active && this._activeMenuItem != menuItem) {
|
if (active && this._activeMenuItem != menuItem) {
|
||||||
if (this._activeMenuItem)
|
if (this._activeMenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.active = false;
|
||||||
this._activeMenuItem = menuItem;
|
this._activeMenuItem = menuItem;
|
||||||
this.emit('active-changed', menuItem);
|
this.emit('active-changed', menuItem);
|
||||||
} else if (!active && this._activeMenuItem == menuItem) {
|
} else if (!active && this._activeMenuItem == menuItem) {
|
||||||
@@ -534,8 +560,8 @@ var PopupMenuBase = class {
|
|||||||
this.emit('active-changed', null);
|
this.emit('active-changed', null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
menuItem._sensitiveChangeId = menuItem.connect('sensitive-changed', () => {
|
menuItem._sensitiveChangeId = menuItem.connect('notify::sensitive', () => {
|
||||||
let sensitive = menuItem.getSensitive();
|
let sensitive = menuItem.sensitive;
|
||||||
if (!sensitive && this._activeMenuItem == menuItem) {
|
if (!sensitive && this._activeMenuItem == menuItem) {
|
||||||
if (!this.actor.navigate_focus(menuItem.actor,
|
if (!this.actor.navigate_focus(menuItem.actor,
|
||||||
St.DirectionType.TAB_FORWARD,
|
St.DirectionType.TAB_FORWARD,
|
||||||
@@ -551,7 +577,7 @@ var PopupMenuBase = class {
|
|||||||
this.itemActivated(BoxPointer.PopupAnimation.FULL);
|
this.itemActivated(BoxPointer.PopupAnimation.FULL);
|
||||||
});
|
});
|
||||||
|
|
||||||
menuItem._parentSensitiveChangeId = this.connect('sensitive-changed', () => {
|
menuItem._parentSensitiveChangeId = this.connect('notify::sensitive', () => {
|
||||||
menuItem.syncSensitive();
|
menuItem.syncSensitive();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -603,7 +629,7 @@ var PopupMenuBase = class {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
menuItem.actor.show();
|
menuItem.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
moveMenuItem(menuItem, position) {
|
moveMenuItem(menuItem, position) {
|
||||||
@@ -650,8 +676,8 @@ var PopupMenuBase = class {
|
|||||||
let parentClosingId = this.connect('menu-closed', () => {
|
let parentClosingId = this.connect('menu-closed', () => {
|
||||||
menuItem.emit('menu-closed');
|
menuItem.emit('menu-closed');
|
||||||
});
|
});
|
||||||
let subMenuSensitiveChangedId = this.connect('sensitive-changed', () => {
|
let subMenuSensitiveChangedId = this.connect('notify::sensitive', () => {
|
||||||
menuItem.emit('sensitive-changed');
|
menuItem.emit('notify::sensitive');
|
||||||
});
|
});
|
||||||
|
|
||||||
menuItem.connect('destroy', () => {
|
menuItem.connect('destroy', () => {
|
||||||
@@ -857,9 +883,9 @@ var PopupMenu = class extends PopupMenuBase {
|
|||||||
|
|
||||||
close(animate) {
|
close(animate) {
|
||||||
if (this._activeMenuItem)
|
if (this._activeMenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.active = false;
|
||||||
|
|
||||||
if (this._boxPointer.actor.visible) {
|
if (this._boxPointer.visible) {
|
||||||
this._boxPointer.close(animate, () => {
|
this._boxPointer.close(animate, () => {
|
||||||
this.emit('menu-closed');
|
this.emit('menu-closed');
|
||||||
});
|
});
|
||||||
@@ -890,6 +916,10 @@ var PopupDummyMenu = class {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get sensitive() {
|
||||||
|
return this.getSensitive();
|
||||||
|
}
|
||||||
|
|
||||||
open() { this.emit('open-state-changed', true); }
|
open() { this.emit('open-state-changed', true); }
|
||||||
close() { this.emit('open-state-changed', false); }
|
close() { this.emit('open-state-changed', false); }
|
||||||
toggle() {}
|
toggle() {}
|
||||||
@@ -929,7 +959,11 @@ var PopupSubMenu = class extends PopupMenuBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSensitive() {
|
getSensitive() {
|
||||||
return this._sensitive && this.sourceActor._delegate.getSensitive();
|
return this._sensitive && this.sourceActor.sensitive;
|
||||||
|
}
|
||||||
|
|
||||||
|
get sensitive() {
|
||||||
|
return this.getSensitive();
|
||||||
}
|
}
|
||||||
|
|
||||||
open(animate) {
|
open(animate) {
|
||||||
@@ -996,7 +1030,7 @@ var PopupSubMenu = class extends PopupMenuBase {
|
|||||||
this.emit('open-state-changed', false);
|
this.emit('open-state-changed', false);
|
||||||
|
|
||||||
if (this._activeMenuItem)
|
if (this._activeMenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.active = false;
|
||||||
|
|
||||||
if (animate && this._needsScrollbar())
|
if (animate && this._needsScrollbar())
|
||||||
animate = false;
|
animate = false;
|
||||||
@@ -1028,7 +1062,7 @@ var PopupSubMenu = class extends PopupMenuBase {
|
|||||||
|
|
||||||
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
|
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
|
||||||
this.close(BoxPointer.PopupAnimation.FULL);
|
this.close(BoxPointer.PopupAnimation.FULL);
|
||||||
this.sourceActor._delegate.setActive(true);
|
this.sourceActor._delegate.active = true;
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1059,25 +1093,26 @@ var PopupMenuSection = class extends PopupMenuBase {
|
|||||||
close() { this.emit('open-state-changed', false); }
|
close() { this.emit('open-state-changed', false); }
|
||||||
};
|
};
|
||||||
|
|
||||||
var PopupSubMenuMenuItem = class extends PopupBaseMenuItem {
|
var PopupSubMenuMenuItem = GObject.registerClass(
|
||||||
constructor(text, wantIcon) {
|
class PopupSubMenuMenuItem extends PopupBaseMenuItem {
|
||||||
super();
|
_init(text, wantIcon) {
|
||||||
|
super._init();
|
||||||
|
|
||||||
this.actor.add_style_class_name('popup-submenu-menu-item');
|
this.add_style_class_name('popup-submenu-menu-item');
|
||||||
|
|
||||||
if (wantIcon) {
|
if (wantIcon) {
|
||||||
this.icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
this.icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
||||||
this.actor.add_child(this.icon);
|
this.add_child(this.icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.label = new St.Label({ text: text,
|
this.label = new St.Label({ text: text,
|
||||||
y_expand: true,
|
y_expand: true,
|
||||||
y_align: Clutter.ActorAlign.CENTER });
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
this.actor.add_child(this.label);
|
this.add_child(this.label);
|
||||||
this.actor.label_actor = this.label;
|
this.label_actor = this.label;
|
||||||
|
|
||||||
let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
|
let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
|
||||||
this.actor.add(expander, { expand: true });
|
this.add(expander, { expand: true });
|
||||||
|
|
||||||
this._triangle = arrowIcon(St.Side.RIGHT);
|
this._triangle = arrowIcon(St.Side.RIGHT);
|
||||||
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });
|
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });
|
||||||
@@ -1086,11 +1121,12 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem {
|
|||||||
y_align: Clutter.ActorAlign.CENTER });
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
this._triangleBin.add_child(this._triangle);
|
this._triangleBin.add_child(this._triangle);
|
||||||
|
|
||||||
this.actor.add_child(this._triangleBin);
|
this.add_child(this._triangleBin);
|
||||||
this.actor.add_accessible_state (Atk.StateType.EXPANDABLE);
|
this.add_accessible_state(Atk.StateType.EXPANDABLE);
|
||||||
|
|
||||||
this.menu = new PopupSubMenu(this.actor, this._triangle);
|
this.menu = new PopupSubMenu(this, this._triangle);
|
||||||
this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this));
|
this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this));
|
||||||
|
this.connect('destroy', () => { this.menu.destroy(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
_setParent(parent) {
|
_setParent(parent) {
|
||||||
@@ -1107,24 +1143,18 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem {
|
|||||||
|
|
||||||
_subMenuOpenStateChanged(menu, open) {
|
_subMenuOpenStateChanged(menu, open) {
|
||||||
if (open) {
|
if (open) {
|
||||||
this.actor.add_style_pseudo_class('open');
|
this.add_style_pseudo_class('open');
|
||||||
this._getTopMenu()._setOpenedSubMenu(this.menu);
|
this._getTopMenu()._setOpenedSubMenu(this.menu);
|
||||||
this.actor.add_accessible_state (Atk.StateType.EXPANDED);
|
this.add_accessible_state(Atk.StateType.EXPANDED);
|
||||||
this.actor.add_style_pseudo_class('checked');
|
this.add_style_pseudo_class('checked');
|
||||||
} else {
|
} else {
|
||||||
this.actor.remove_style_pseudo_class('open');
|
this.remove_style_pseudo_class('open');
|
||||||
this._getTopMenu()._setOpenedSubMenu(null);
|
this._getTopMenu()._setOpenedSubMenu(null);
|
||||||
this.actor.remove_accessible_state (Atk.StateType.EXPANDED);
|
this.remove_accessible_state (Atk.StateType.EXPANDED);
|
||||||
this.actor.remove_style_pseudo_class('checked');
|
this.remove_style_pseudo_class('checked');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
|
||||||
this.menu.destroy();
|
|
||||||
|
|
||||||
super.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
setSubmenuShown(open) {
|
setSubmenuShown(open) {
|
||||||
if (open)
|
if (open)
|
||||||
this.menu.open(BoxPointer.PopupAnimation.FULL);
|
this.menu.open(BoxPointer.PopupAnimation.FULL);
|
||||||
@@ -1162,7 +1192,7 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem {
|
|||||||
_onButtonReleaseEvent(actor) {
|
_onButtonReleaseEvent(actor) {
|
||||||
// Since we override the parent, we need to manage what the parent does
|
// Since we override the parent, we need to manage what the parent does
|
||||||
// with the active style class
|
// with the active style class
|
||||||
this.actor.remove_style_pseudo_class ('active');
|
this.remove_style_pseudo_class('active');
|
||||||
this._setOpenState(!this._getOpenState());
|
this._setOpenState(!this._getOpenState());
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
@@ -1171,12 +1201,12 @@ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem {
|
|||||||
if (event.type() == Clutter.EventType.TOUCH_END) {
|
if (event.type() == Clutter.EventType.TOUCH_END) {
|
||||||
// Since we override the parent, we need to manage what the parent does
|
// Since we override the parent, we need to manage what the parent does
|
||||||
// with the active style class
|
// with the active style class
|
||||||
this.actor.remove_style_pseudo_class ('active');
|
this.remove_style_pseudo_class('active');
|
||||||
this._setOpenState(!this._getOpenState());
|
this._setOpenState(!this._getOpenState());
|
||||||
}
|
}
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
/* Basic implementation of a menu manager.
|
/* Basic implementation of a menu manager.
|
||||||
* Call addMenu to add menus
|
* Call addMenu to add menus
|
||||||
@@ -1186,7 +1216,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 = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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, Meta, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@@ -23,9 +23,10 @@ const EXEC_ARG_KEY = 'exec-arg';
|
|||||||
|
|
||||||
var DIALOG_GROW_TIME = 0.1;
|
var DIALOG_GROW_TIME = 0.1;
|
||||||
|
|
||||||
var RunDialog = class extends ModalDialog.ModalDialog {
|
var RunDialog = GObject.registerClass(
|
||||||
constructor() {
|
class RunDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'run-dialog',
|
_init() {
|
||||||
|
super._init({ styleClass: 'run-dialog',
|
||||||
destroyOnClose: false });
|
destroyOnClose: false });
|
||||||
|
|
||||||
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
|
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
|
||||||
@@ -282,5 +283,4 @@ var RunDialog = class extends ModalDialog.ModalDialog {
|
|||||||
|
|
||||||
super.open();
|
super.open();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(RunDialog.prototype);
|
|
||||||
|
@@ -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, () => {
|
||||||
if (cb)
|
resolve();
|
||||||
cb();
|
|
||||||
return GLib.SOURCE_REMOVE;
|
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) => {
|
args.push((result, excp) => {
|
||||||
if (excp) {
|
if (excp)
|
||||||
if (errcb)
|
reject(excp);
|
||||||
errcb(excp);
|
else
|
||||||
} else {
|
resolve();
|
||||||
if (cb)
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
method.apply(obj, args);
|
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 {
|
try {
|
||||||
_collect(scriptModule, outputFile);
|
_collect(scriptModule, outputFile);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log("Script failed: " + err + "\n" + err.stack);
|
log(`Script failed: ${err}\n${err.stack}`);
|
||||||
Meta.exit(Meta.ExitCode.ERROR);
|
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);
|
||||||
|
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const { Clutter, Gio, GLib, Pango, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Pango, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
|
const Animation = imports.ui.animation;
|
||||||
const CheckBox = imports.ui.checkBox;
|
const CheckBox = imports.ui.checkBox;
|
||||||
const Dialog = imports.ui.dialog;
|
const Dialog = imports.ui.dialog;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@@ -14,6 +15,7 @@ const ShellEntry = imports.ui.shellEntry;
|
|||||||
const { loadInterfaceXML } = imports.misc.fileUtils;
|
const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||||
|
|
||||||
var LIST_ITEM_ICON_SIZE = 48;
|
var LIST_ITEM_ICON_SIZE = 48;
|
||||||
|
var WORK_SPINNER_ICON_SIZE = 16;
|
||||||
|
|
||||||
const REMEMBER_MOUNT_PASSWORD_KEY = 'remember-mount-password';
|
const REMEMBER_MOUNT_PASSWORD_KEY = 'remember-mount-password';
|
||||||
|
|
||||||
@@ -148,7 +150,7 @@ var ShellMountOperation = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._dialogId = this._dialog.connect('response',
|
this._dialogId = this._dialog.connect('response',
|
||||||
(object, choice, password, remember) => {
|
(object, choice, password, remember, hiddenVolume, systemVolume, pim) => {
|
||||||
if (choice == -1) {
|
if (choice == -1) {
|
||||||
this.mountOp.reply(Gio.MountOperationResult.ABORTED);
|
this.mountOp.reply(Gio.MountOperationResult.ABORTED);
|
||||||
} else {
|
} else {
|
||||||
@@ -158,6 +160,9 @@ var ShellMountOperation = class {
|
|||||||
this.mountOp.set_password_save(Gio.PasswordSave.NEVER);
|
this.mountOp.set_password_save(Gio.PasswordSave.NEVER);
|
||||||
|
|
||||||
this.mountOp.set_password(password);
|
this.mountOp.set_password(password);
|
||||||
|
this.mountOp.set_is_tcrypt_hidden_volume(hiddenVolume);
|
||||||
|
this.mountOp.set_is_tcrypt_system_volume(systemVolume);
|
||||||
|
this.mountOp.set_pim(pim);
|
||||||
this.mountOp.reply(Gio.MountOperationResult.HANDLED);
|
this.mountOp.reply(Gio.MountOperationResult.HANDLED);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -264,9 +269,11 @@ var ShellUnmountNotifier = class extends MessageTray.Source {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var ShellMountQuestionDialog = class extends ModalDialog.ModalDialog {
|
var ShellMountQuestionDialog = GObject.registerClass({
|
||||||
constructor(icon) {
|
Signals: { 'response': { param_types: [GObject.TYPE_INT] } }
|
||||||
super({ styleClass: 'mount-dialog' });
|
}, class ShellMountQuestionDialog extends ModalDialog.ModalDialog {
|
||||||
|
_init(icon) {
|
||||||
|
super._init({ styleClass: 'mount-dialog' });
|
||||||
|
|
||||||
this._content = new Dialog.MessageDialogContent({ icon });
|
this._content = new Dialog.MessageDialogContent({ icon });
|
||||||
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
|
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
|
||||||
@@ -276,34 +283,107 @@ var ShellMountQuestionDialog = class extends ModalDialog.ModalDialog {
|
|||||||
_setLabelsForMessage(this._content, message);
|
_setLabelsForMessage(this._content, message);
|
||||||
_setButtonsForChoices(this, choices);
|
_setButtonsForChoices(this, choices);
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(ShellMountQuestionDialog.prototype);
|
|
||||||
|
|
||||||
var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
var ShellMountPasswordDialog = GObject.registerClass({
|
||||||
constructor(message, icon, flags) {
|
Signals: { 'response': { param_types: [GObject.TYPE_INT,
|
||||||
|
GObject.TYPE_STRING,
|
||||||
|
GObject.TYPE_BOOLEAN,
|
||||||
|
GObject.TYPE_BOOLEAN,
|
||||||
|
GObject.TYPE_BOOLEAN,
|
||||||
|
GObject.TYPE_UINT] } }
|
||||||
|
}, class ShellMountPasswordDialog extends ModalDialog.ModalDialog {
|
||||||
|
_init(message, icon, flags) {
|
||||||
let strings = message.split('\n');
|
let strings = message.split('\n');
|
||||||
let title = strings.shift() || null;
|
let title = strings.shift() || null;
|
||||||
let body = strings.shift() || null;
|
let body = strings.shift() || null;
|
||||||
super({ styleClass: 'prompt-dialog' });
|
super._init({ styleClass: 'prompt-dialog' });
|
||||||
|
|
||||||
|
let disksApp = Shell.AppSystem.get_default().lookup_app('org.gnome.DiskUtility.desktop');
|
||||||
|
|
||||||
let content = new Dialog.MessageDialogContent({ icon, title, body });
|
let content = new Dialog.MessageDialogContent({ icon, title, body });
|
||||||
this.contentLayout.add_actor(content);
|
this.contentLayout.add_actor(content);
|
||||||
|
content._body.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
|
||||||
this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });
|
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
|
||||||
content.messageBox.add(this._passwordBox);
|
let grid = new St.Widget({ style_class: 'prompt-dialog-grid',
|
||||||
|
layout_manager: layout });
|
||||||
|
layout.hookup_style(grid);
|
||||||
|
let rtl = grid.get_text_direction() === Clutter.TextDirection.RTL;
|
||||||
|
|
||||||
this._passwordLabel = new St.Label(({ style_class: 'prompt-dialog-password-label',
|
if (flags & Gio.AskPasswordFlags.TCRYPT) {
|
||||||
text: _("Password") }));
|
this._keyfilesLabel = new St.Label(({ style_class: 'prompt-dialog-keyfiles-label',
|
||||||
this._passwordBox.add(this._passwordLabel, { y_fill: false, y_align: St.Align.MIDDLE });
|
visible: false }));
|
||||||
|
|
||||||
|
this._hiddenVolume = new CheckBox.CheckBox(_("Hidden Volume"));
|
||||||
|
content.messageBox.add(this._hiddenVolume.actor);
|
||||||
|
|
||||||
|
this._systemVolume = new CheckBox.CheckBox(_("Windows System Volume"));
|
||||||
|
content.messageBox.add(this._systemVolume.actor);
|
||||||
|
|
||||||
|
this._keyfilesCheckbox = new CheckBox.CheckBox(_("Uses Keyfiles"));
|
||||||
|
this._keyfilesCheckbox.actor.connect("clicked", this._onKeyfilesCheckboxClicked.bind(this));
|
||||||
|
content.messageBox.add(this._keyfilesCheckbox.actor);
|
||||||
|
|
||||||
|
this._keyfilesLabel.clutter_text.set_markup(
|
||||||
|
/* Translators: %s is the Disks application */
|
||||||
|
_("To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead.").format(disksApp.get_name())
|
||||||
|
);
|
||||||
|
this._keyfilesLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
this._keyfilesLabel.clutter_text.line_wrap = true;
|
||||||
|
content.messageBox.add(this._keyfilesLabel, { y_fill: false, y_align: St.Align.MIDDLE, expand: true });
|
||||||
|
|
||||||
|
this._pimLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
|
||||||
|
text: _("PIM Number"),
|
||||||
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
|
this._pimEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
|
||||||
|
can_focus: true,
|
||||||
|
x_expand: true });
|
||||||
|
this._pimEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
|
||||||
|
this._pimEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
|
||||||
|
ShellEntry.addContextMenu(this._pimEntry, { isPassword: true });
|
||||||
|
|
||||||
|
if (rtl) {
|
||||||
|
layout.attach(this._pimEntry, 0, 0, 1, 1);
|
||||||
|
layout.attach(this._pimLabel, 1, 0, 1, 1);
|
||||||
|
} else {
|
||||||
|
layout.attach(this._pimLabel, 0, 0, 1, 1);
|
||||||
|
layout.attach(this._pimEntry, 1, 0, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._pimErrorMessageLabel = new St.Label({ style_class: 'prompt-dialog-password-entry',
|
||||||
|
text: _("The PIM must be a number or empty."),
|
||||||
|
visible: false });
|
||||||
|
layout.attach(this._pimErrorMessageLabel, 0, 2, 2, 1);
|
||||||
|
} else {
|
||||||
|
this._hiddenVolume = null;
|
||||||
|
this._systemVolume = null;
|
||||||
|
this._pimEntry = null;
|
||||||
|
this._pimErrorMessageLabel = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._passwordLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
|
||||||
|
text: _("Password"),
|
||||||
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
|
this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
|
||||||
text: "",
|
can_focus: true,
|
||||||
can_focus: true});
|
x_expand: true });
|
||||||
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
|
|
||||||
this._passwordEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
|
this._passwordEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
|
||||||
this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
|
this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
|
||||||
this._passwordBox.add(this._passwordEntry, {expand: true });
|
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
|
||||||
this.setInitialKeyFocus(this._passwordEntry);
|
this.setInitialKeyFocus(this._passwordEntry);
|
||||||
|
this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);
|
||||||
|
this._passwordEntry.secondary_icon = this._workSpinner.actor;
|
||||||
|
|
||||||
|
if (rtl) {
|
||||||
|
layout.attach(this._passwordEntry, 0, 1, 1, 1);
|
||||||
|
layout.attach(this._passwordLabel, 1, 1, 1, 1);
|
||||||
|
} else {
|
||||||
|
layout.attach(this._passwordLabel, 0, 1, 1, 1);
|
||||||
|
layout.attach(this._passwordEntry, 1, 1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
content.messageBox.add(grid);
|
||||||
|
|
||||||
this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label',
|
this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label',
|
||||||
text: _("Sorry, that didn’t work. Please try again.") });
|
text: _("Sorry, that didn’t work. Please try again.") });
|
||||||
@@ -313,8 +393,7 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
|||||||
content.messageBox.add(this._errorMessageLabel);
|
content.messageBox.add(this._errorMessageLabel);
|
||||||
|
|
||||||
if (flags & Gio.AskPasswordFlags.SAVING_SUPPORTED) {
|
if (flags & Gio.AskPasswordFlags.SAVING_SUPPORTED) {
|
||||||
this._rememberChoice = new CheckBox.CheckBox();
|
this._rememberChoice = new CheckBox.CheckBox(_("Remember Password"));
|
||||||
this._rememberChoice.getLabelActor().text = _("Remember Password");
|
|
||||||
this._rememberChoice.actor.checked =
|
this._rememberChoice.actor.checked =
|
||||||
global.settings.get_boolean(REMEMBER_MOUNT_PASSWORD_KEY);
|
global.settings.get_boolean(REMEMBER_MOUNT_PASSWORD_KEY);
|
||||||
content.messageBox.add(this._rememberChoice.actor);
|
content.messageBox.add(this._rememberChoice.actor);
|
||||||
@@ -322,7 +401,7 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
|||||||
this._rememberChoice = null;
|
this._rememberChoice = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
let buttons = [{ label: _("Cancel"),
|
this._defaultButtons = [{ label: _("Cancel"),
|
||||||
action: this._onCancelButton.bind(this),
|
action: this._onCancelButton.bind(this),
|
||||||
key: Clutter.Escape
|
key: Clutter.Escape
|
||||||
},
|
},
|
||||||
@@ -331,16 +410,27 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
|||||||
default: true
|
default: true
|
||||||
}];
|
}];
|
||||||
|
|
||||||
this.setButtons(buttons);
|
this._usesKeyfilesButtons = [{ label: _("Cancel"),
|
||||||
|
action: this._onCancelButton.bind(this),
|
||||||
|
key: Clutter.Escape
|
||||||
|
},
|
||||||
|
{ /* Translators: %s is the Disks application */
|
||||||
|
label: _("Open %s").format(disksApp.get_name()),
|
||||||
|
action: this._onOpenDisksButton.bind(this),
|
||||||
|
default: true
|
||||||
|
}];
|
||||||
|
|
||||||
|
this.setButtons(this._defaultButtons);
|
||||||
}
|
}
|
||||||
|
|
||||||
reaskPassword() {
|
reaskPassword() {
|
||||||
this._passwordEntry.set_text('');
|
this._passwordEntry.set_text('');
|
||||||
this._errorMessageLabel.show();
|
this._errorMessageLabel.show();
|
||||||
|
this._workSpinner.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onCancelButton() {
|
_onCancelButton() {
|
||||||
this.emit('response', -1, '', false);
|
this.emit('response', -1, '', false, false, false, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onUnlockButton() {
|
_onUnlockButton() {
|
||||||
@@ -348,18 +438,68 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onEntryActivate() {
|
_onEntryActivate() {
|
||||||
|
let pim = 0;
|
||||||
|
if (this._pimEntry !== null)
|
||||||
|
pim = this._pimEntry.get_text();
|
||||||
|
if (isNaN(pim)) {
|
||||||
|
this._pimEntry.set_text('');
|
||||||
|
this._pimErrorMessageLabel.show();
|
||||||
|
return;
|
||||||
|
} else if (this._pimErrorMessageLabel !== null) {
|
||||||
|
this._pimErrorMessageLabel.hide();
|
||||||
|
}
|
||||||
|
|
||||||
global.settings.set_boolean(REMEMBER_MOUNT_PASSWORD_KEY,
|
global.settings.set_boolean(REMEMBER_MOUNT_PASSWORD_KEY,
|
||||||
this._rememberChoice && this._rememberChoice.actor.checked);
|
this._rememberChoice && this._rememberChoice.actor.checked);
|
||||||
|
|
||||||
|
this._workSpinner.play();
|
||||||
this.emit('response', 1,
|
this.emit('response', 1,
|
||||||
this._passwordEntry.get_text(),
|
this._passwordEntry.get_text(),
|
||||||
this._rememberChoice &&
|
this._rememberChoice &&
|
||||||
this._rememberChoice.actor.checked);
|
this._rememberChoice.actor.checked,
|
||||||
|
this._hiddenVolume &&
|
||||||
|
this._hiddenVolume.actor.checked,
|
||||||
|
this._systemVolume &&
|
||||||
|
this._systemVolume.actor.checked,
|
||||||
|
parseInt(pim));
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
var ShellProcessesDialog = class extends ModalDialog.ModalDialog {
|
_onKeyfilesCheckboxClicked() {
|
||||||
constructor(icon) {
|
let useKeyfiles = this._keyfilesCheckbox.actor.checked;
|
||||||
super({ styleClass: 'mount-dialog' });
|
this._passwordEntry.reactive = !useKeyfiles;
|
||||||
|
this._passwordEntry.can_focus = !useKeyfiles;
|
||||||
|
this._passwordEntry.clutter_text.editable = !useKeyfiles;
|
||||||
|
this._passwordEntry.clutter_text.selectable = !useKeyfiles;
|
||||||
|
this._pimEntry.reactive = !useKeyfiles;
|
||||||
|
this._pimEntry.can_focus = !useKeyfiles;
|
||||||
|
this._pimEntry.clutter_text.editable = !useKeyfiles;
|
||||||
|
this._pimEntry.clutter_text.selectable = !useKeyfiles;
|
||||||
|
this._rememberChoice.actor.reactive = !useKeyfiles;
|
||||||
|
this._rememberChoice.actor.can_focus = !useKeyfiles;
|
||||||
|
this._keyfilesLabel.visible = useKeyfiles;
|
||||||
|
this.setButtons(useKeyfiles ? this._usesKeyfilesButtons : this._defaultButtons);
|
||||||
|
}
|
||||||
|
|
||||||
|
_onOpenDisksButton() {
|
||||||
|
let app = Shell.AppSystem.get_default().lookup_app('org.gnome.DiskUtility.desktop');
|
||||||
|
if (app)
|
||||||
|
app.activate();
|
||||||
|
else
|
||||||
|
Main.notifyError(
|
||||||
|
/* Translators: %s is the Disks application */
|
||||||
|
_("Unable to start %s").format(app.get_name()),
|
||||||
|
/* Translators: %s is the Disks application */
|
||||||
|
_("Couldn't find the %s application").format(app.get_name())
|
||||||
|
);
|
||||||
|
this._onCancelButton();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var ShellProcessesDialog = GObject.registerClass({
|
||||||
|
Signals: { 'response': { param_types: [GObject.TYPE_INT] } }
|
||||||
|
}, class ShellProcessesDialog extends ModalDialog.ModalDialog {
|
||||||
|
_init(icon) {
|
||||||
|
super._init({ styleClass: 'mount-dialog' });
|
||||||
|
|
||||||
this._content = new Dialog.MessageDialogContent({ icon });
|
this._content = new Dialog.MessageDialogContent({ icon });
|
||||||
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
|
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
|
||||||
@@ -412,8 +552,7 @@ var ShellProcessesDialog = class extends ModalDialog.ModalDialog {
|
|||||||
_setLabelsForMessage(this._content, message);
|
_setLabelsForMessage(this._content, message);
|
||||||
_setButtonsForChoices(this, choices);
|
_setButtonsForChoices(this, choices);
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(ShellProcessesDialog.prototype);
|
|
||||||
|
|
||||||
const GnomeShellMountOpIface = loadInterfaceXML('org.Gtk.MountOperationHandler');
|
const GnomeShellMountOpIface = loadInterfaceXML('org.Gtk.MountOperationHandler');
|
||||||
|
|
||||||
@@ -515,7 +654,7 @@ var GnomeShellMountOpHandler = class {
|
|||||||
|
|
||||||
this._dialog = new ShellMountPasswordDialog(message, this._createGIcon(iconName), flags);
|
this._dialog = new ShellMountPasswordDialog(message, this._createGIcon(iconName), flags);
|
||||||
this._dialog.connect('response',
|
this._dialog.connect('response',
|
||||||
(object, choice, password, remember) => {
|
(object, choice, password, remember, hiddenVolume, systemVolume, pim) => {
|
||||||
let details = {};
|
let details = {};
|
||||||
let response;
|
let response;
|
||||||
|
|
||||||
@@ -527,6 +666,9 @@ var GnomeShellMountOpHandler = class {
|
|||||||
let passSave = remember ? Gio.PasswordSave.PERMANENTLY : Gio.PasswordSave.NEVER;
|
let passSave = remember ? Gio.PasswordSave.PERMANENTLY : Gio.PasswordSave.NEVER;
|
||||||
details['password_save'] = GLib.Variant.new('u', passSave);
|
details['password_save'] = GLib.Variant.new('u', passSave);
|
||||||
details['password'] = GLib.Variant.new('s', password);
|
details['password'] = GLib.Variant.new('s', password);
|
||||||
|
details['hidden_volume'] = GLib.Variant.new('b', hiddenVolume);
|
||||||
|
details['system_volume'] = GLib.Variant.new('b', systemVolume);
|
||||||
|
details['pim'] = GLib.Variant.new('u', pim);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._clearCurrentRequest(response, details);
|
this._clearCurrentRequest(response, details);
|
||||||
|
@@ -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 });
|
||||||
|
let widget = this._buildItemExtended(string,
|
||||||
|
settings.get_boolean(key),
|
||||||
|
settings.is_writable(key),
|
||||||
|
enabled => settings.set_boolean(key, enabled));
|
||||||
|
|
||||||
settings.connect('changed::' + key, () => {
|
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;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -118,9 +118,9 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
// Remember if there were setup devices and show the menu
|
// Remember if there were setup devices and show the menu
|
||||||
// if we've seen setup devices and we're not hard blocked
|
// if we've seen setup devices and we're not hard blocked
|
||||||
if (nDevices > 0)
|
if (nDevices > 0)
|
||||||
this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode;
|
this._item.visible = !this._proxy.BluetoothHardwareAirplaneMode;
|
||||||
else
|
else
|
||||||
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
|
this._item.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
|
||||||
|
|
||||||
if (nConnectedDevices > 0)
|
if (nConnectedDevices > 0)
|
||||||
/* Translators: this is the number of connected bluetooth devices */
|
/* Translators: this is the number of connected bluetooth devices */
|
||||||
|
@@ -37,12 +37,12 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
|
|
||||||
let icon = new St.Icon({ icon_name: 'display-brightness-symbolic',
|
let icon = new St.Icon({ icon_name: 'display-brightness-symbolic',
|
||||||
style_class: 'popup-menu-icon' });
|
style_class: 'popup-menu-icon' });
|
||||||
this._item.actor.add(icon);
|
this._item.add(icon);
|
||||||
this._item.actor.add(this._slider.actor, { expand: true });
|
this._item.add(this._slider.actor, { expand: true });
|
||||||
this._item.actor.connect('button-press-event', (actor, event) => {
|
this._item.connect('button-press-event', (actor, event) => {
|
||||||
return this._slider.startDragging(event);
|
return this._slider.startDragging(event);
|
||||||
});
|
});
|
||||||
this._item.actor.connect('key-press-event', (actor, event) => {
|
this._item.connect('key-press-event', (actor, event) => {
|
||||||
return this._slider.onKeyPressEvent(actor, event);
|
return this._slider.onKeyPressEvent(actor, event);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
let visible = this._proxy.Brightness >= 0;
|
let visible = this._proxy.Brightness >= 0;
|
||||||
this._item.actor.visible = visible;
|
this._item.visible = visible;
|
||||||
if (visible)
|
if (visible)
|
||||||
this._slider.setValue(this._proxy.Brightness / 100.0);
|
this._slider.setValue(this._proxy.Brightness / 100.0);
|
||||||
}
|
}
|
||||||
|
@@ -15,17 +15,18 @@ const Util = imports.misc.util;
|
|||||||
const INPUT_SOURCE_TYPE_XKB = 'xkb';
|
const INPUT_SOURCE_TYPE_XKB = 'xkb';
|
||||||
const INPUT_SOURCE_TYPE_IBUS = 'ibus';
|
const INPUT_SOURCE_TYPE_IBUS = 'ibus';
|
||||||
|
|
||||||
var LayoutMenuItem = class extends PopupMenu.PopupBaseMenuItem {
|
var LayoutMenuItem = GObject.registerClass(
|
||||||
constructor(displayName, shortName) {
|
class LayoutMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||||
super();
|
_init(displayName, shortName) {
|
||||||
|
super._init();
|
||||||
|
|
||||||
this.label = new St.Label({ text: displayName });
|
this.label = new St.Label({ text: displayName });
|
||||||
this.indicator = new St.Label({ text: shortName });
|
this.indicator = new St.Label({ text: shortName });
|
||||||
this.actor.add(this.label, { expand: true });
|
this.add(this.label, { expand: true });
|
||||||
this.actor.add(this.indicator);
|
this.add(this.indicator);
|
||||||
this.actor.label_actor = this.label;
|
this.label_actor = this.label;
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var InputSource = class {
|
var InputSource = class {
|
||||||
constructor(type, id, displayName, shortName, index) {
|
constructor(type, id, displayName, shortName, index) {
|
||||||
@@ -125,8 +126,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 +823,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);
|
||||||
@@ -857,7 +858,7 @@ class InputSourceIndicator extends PanelMenu.Button {
|
|||||||
// but at least for now it is used as "allow popping up windows
|
// but at least for now it is used as "allow popping up windows
|
||||||
// from shell menus"; we can always add a separate sessionMode
|
// from shell menus"; we can always add a separate sessionMode
|
||||||
// option if need arises.
|
// option if need arises.
|
||||||
this._showLayoutItem.actor.visible = Main.sessionMode.allowSettings;
|
this._showLayoutItem.visible = Main.sessionMode.allowSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
_sourcesChanged() {
|
_sourcesChanged() {
|
||||||
@@ -908,11 +909,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);
|
||||||
|
|
||||||
|
@@ -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, Shell } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Shell } = imports.gi;
|
||||||
|
|
||||||
const Dialog = imports.ui.dialog;
|
const Dialog = imports.ui.dialog;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@@ -101,12 +101,12 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
_syncIndicator() {
|
_syncIndicator() {
|
||||||
if (this._managerProxy == null) {
|
if (this._managerProxy == null) {
|
||||||
this._indicator.visible = false;
|
this._indicator.visible = false;
|
||||||
this._item.actor.visible = false;
|
this._item.visible = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._indicator.visible = this._managerProxy.InUse;
|
this._indicator.visible = this._managerProxy.InUse;
|
||||||
this._item.actor.visible = this._indicator.visible;
|
this._item.visible = this._indicator.visible;
|
||||||
this._updateMenuLabels();
|
this._updateMenuLabels();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,9 +342,11 @@ var AppAuthorizer = class {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var GeolocationDialog = class extends ModalDialog.ModalDialog {
|
var GeolocationDialog = GObject.registerClass({
|
||||||
constructor(name, subtitle, reqAccuracyLevel) {
|
Signals: { 'response': { param_types: [GObject.TYPE_UINT] } }
|
||||||
super({ styleClass: 'geolocation-dialog' });
|
}, class GeolocationDialog extends ModalDialog.ModalDialog {
|
||||||
|
_init(name, subtitle, reqAccuracyLevel) {
|
||||||
|
super._init({ styleClass: 'geolocation-dialog' });
|
||||||
this.reqAccuracyLevel = reqAccuracyLevel;
|
this.reqAccuracyLevel = reqAccuracyLevel;
|
||||||
|
|
||||||
let icon = new Gio.ThemedIcon({ name: 'find-location-symbolic' });
|
let icon = new Gio.ThemedIcon({ name: 'find-location-symbolic' });
|
||||||
@@ -375,5 +377,4 @@ var GeolocationDialog = class extends ModalDialog.ModalDialog {
|
|||||||
this.emit('response', GeoclueAccuracyLevel.NONE);
|
this.emit('response', GeoclueAccuracyLevel.NONE);
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(GeolocationDialog.prototype);
|
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
@@ -235,14 +235,14 @@ var NMConnectionSection = class {
|
|||||||
if (!this._connectionValid(connection))
|
if (!this._connectionValid(connection))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// This function is called everytime connection is added or updated
|
// This function is called every time the connection is added or updated.
|
||||||
// In the usual case, we already added this connection and UUID
|
// In the usual case, we already added this connection and UUID
|
||||||
// didn't change. So we need to check if we already have an item,
|
// didn't change. So we need to check if we already have an item,
|
||||||
// and update it for properties in the connection that changed
|
// and update it for properties in the connection that changed
|
||||||
// (the only one we care about is the name)
|
// (the only one we care about is the name)
|
||||||
// But it's also possible we didn't know about this connection
|
// But it's also possible we didn't know about this connection
|
||||||
// (eg, during coldplug, or because it was updated and suddenly
|
// (eg, during coldplug, or because it was updated and suddenly
|
||||||
// it's valid for this device), in which case we add a new item
|
// it's valid for this device), in which case we add a new item.
|
||||||
|
|
||||||
let item = this._connectionItems.get(connection.get_uuid());
|
let item = this._connectionItems.get(connection.get_uuid());
|
||||||
if (item)
|
if (item)
|
||||||
@@ -297,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 = '';
|
||||||
|
|
||||||
@@ -388,8 +389,8 @@ var NMConnectionDevice = class extends NMConnectionSection {
|
|||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
let nItems = this._connectionItems.size;
|
let nItems = this._connectionItems.size;
|
||||||
this._autoConnectItem.actor.visible = (nItems == 0);
|
this._autoConnectItem.visible = (nItems == 0);
|
||||||
this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED;
|
this._deactivateItem.visible = this._device.state > NM.DeviceState.DISCONNECTED;
|
||||||
|
|
||||||
if (this._activeConnection == null) {
|
if (this._activeConnection == null) {
|
||||||
let activeConnection = this._device.active_connection;
|
let activeConnection = this._device.active_connection;
|
||||||
@@ -476,7 +477,7 @@ var NMDeviceWired = class extends NMConnectionDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
this.item.actor.visible = this._hasCarrier();
|
this.item.visible = this._hasCarrier();
|
||||||
super._sync();
|
super._sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -612,31 +613,36 @@ var NMDeviceBluetooth = class extends NMConnectionDevice {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var NMWirelessDialogItem = class {
|
var NMWirelessDialogItem = GObject.registerClass({
|
||||||
constructor(network) {
|
Signals: {
|
||||||
|
'selected': {},
|
||||||
|
}
|
||||||
|
}, class NMWirelessDialogItem extends St.BoxLayout {
|
||||||
|
_init(network) {
|
||||||
this._network = network;
|
this._network = network;
|
||||||
this._ap = network.accessPoints[0];
|
this._ap = network.accessPoints[0];
|
||||||
|
|
||||||
this.actor = new St.BoxLayout({ style_class: 'nm-dialog-item',
|
super._init({ style_class: 'nm-dialog-item',
|
||||||
can_focus: true,
|
can_focus: true,
|
||||||
reactive: true });
|
reactive: true });
|
||||||
this.actor.connect('key-focus-in', () => { this.emit('selected'); });
|
|
||||||
|
this.connect('key-focus-in', () => { this.emit('selected'); });
|
||||||
let action = new Clutter.ClickAction();
|
let action = new Clutter.ClickAction();
|
||||||
action.connect('clicked', () => { this.actor.grab_key_focus(); });
|
action.connect('clicked', () => { this.grab_key_focus(); });
|
||||||
this.actor.add_action(action);
|
this.add_action(action);
|
||||||
|
|
||||||
let title = ssidToLabel(this._ap.get_ssid());
|
let title = ssidToLabel(this._ap.get_ssid());
|
||||||
this._label = new St.Label({ text: title });
|
this._label = new St.Label({ text: title });
|
||||||
|
|
||||||
this.actor.label_actor = this._label;
|
this.label_actor = this._label;
|
||||||
this.actor.add(this._label, { x_align: St.Align.START });
|
this.add(this._label, { x_align: St.Align.START });
|
||||||
|
|
||||||
this._selectedIcon = new St.Icon({ style_class: 'nm-dialog-icon',
|
this._selectedIcon = new St.Icon({ style_class: 'nm-dialog-icon',
|
||||||
icon_name: 'object-select-symbolic' });
|
icon_name: 'object-select-symbolic' });
|
||||||
this.actor.add(this._selectedIcon);
|
this.add(this._selectedIcon);
|
||||||
|
|
||||||
this._icons = new St.BoxLayout({ style_class: 'nm-dialog-icons' });
|
this._icons = new St.BoxLayout({ style_class: 'nm-dialog-icons' });
|
||||||
this.actor.add(this._icons, { expand: true, x_fill: false, x_align: St.Align.END });
|
this.add(this._icons, { expand: true, x_fill: false, x_align: St.Align.END });
|
||||||
|
|
||||||
this._secureIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
|
this._secureIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
|
||||||
if (this._ap._secType != NMAccessPointSecurity.NONE)
|
if (this._ap._secType != NMAccessPointSecurity.NONE)
|
||||||
@@ -668,12 +674,12 @@ var NMWirelessDialogItem = class {
|
|||||||
else
|
else
|
||||||
return 'network-wireless-signal-' + signalToIcon(this._ap.strength) + '-symbolic';
|
return 'network-wireless-signal-' + signalToIcon(this._ap.strength) + '-symbolic';
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
Signals.addSignalMethods(NMWirelessDialogItem.prototype);
|
|
||||||
|
|
||||||
var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
var NMWirelessDialog = GObject.registerClass(
|
||||||
constructor(client, device) {
|
class NMWirelessDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'nm-dialog' });
|
_init(client, device) {
|
||||||
|
super._init({ styleClass: 'nm-dialog' });
|
||||||
|
|
||||||
this._client = client;
|
this._client = client;
|
||||||
this._device = device;
|
this._device = device;
|
||||||
@@ -719,9 +725,11 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
|||||||
Main.sessionMode.disconnect(id);
|
Main.sessionMode.disconnect(id);
|
||||||
this.close();
|
this.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
_onDestroy() {
|
||||||
if (this._apAddedId) {
|
if (this._apAddedId) {
|
||||||
GObject.Object.prototype.disconnect.call(this._device, this._apAddedId);
|
GObject.Object.prototype.disconnect.call(this._device, this._apAddedId);
|
||||||
this._apAddedId = 0;
|
this._apAddedId = 0;
|
||||||
@@ -747,8 +755,6 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
|||||||
Mainloop.source_remove(this._scanTimeoutId);
|
Mainloop.source_remove(this._scanTimeoutId);
|
||||||
this._scanTimeoutId = 0;
|
this._scanTimeoutId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
super.destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onScanTimeout() {
|
_onScanTimeout() {
|
||||||
@@ -1075,7 +1081,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
|||||||
|
|
||||||
let newPos = Util.insertSorted(this._networks, network, this._networkSortFunction);
|
let newPos = Util.insertSorted(this._networks, network, this._networkSortFunction);
|
||||||
this._createNetworkItem(network);
|
this._createNetworkItem(network);
|
||||||
this._itemBox.insert_child_at_index(network.item.actor, newPos);
|
this._itemBox.insert_child_at_index(network.item, newPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._syncView();
|
this._syncView();
|
||||||
@@ -1093,7 +1099,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
|||||||
network.accessPoints.splice(res.ap, 1);
|
network.accessPoints.splice(res.ap, 1);
|
||||||
|
|
||||||
if (network.accessPoints.length == 0) {
|
if (network.accessPoints.length == 0) {
|
||||||
network.item.actor.destroy();
|
network.item.destroy();
|
||||||
this._networks.splice(res.network, 1);
|
this._networks.splice(res.network, 1);
|
||||||
} else {
|
} else {
|
||||||
network.item.updateBestAP(network.accessPoints[0]);
|
network.item.updateBestAP(network.accessPoints[0]);
|
||||||
@@ -1109,7 +1115,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
|||||||
|
|
||||||
this._itemBox.remove_all_children();
|
this._itemBox.remove_all_children();
|
||||||
this._networks.forEach(network => {
|
this._networks.forEach(network => {
|
||||||
this._itemBox.add_child(network.item.actor);
|
this._itemBox.add_child(network.item);
|
||||||
});
|
});
|
||||||
|
|
||||||
adjustment.value = scrollValue;
|
adjustment.value = scrollValue;
|
||||||
@@ -1117,29 +1123,29 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
|||||||
|
|
||||||
_selectNetwork(network) {
|
_selectNetwork(network) {
|
||||||
if (this._selectedNetwork)
|
if (this._selectedNetwork)
|
||||||
this._selectedNetwork.item.actor.remove_style_pseudo_class('selected');
|
this._selectedNetwork.item.remove_style_pseudo_class('selected');
|
||||||
|
|
||||||
this._selectedNetwork = network;
|
this._selectedNetwork = network;
|
||||||
this._updateSensitivity();
|
this._updateSensitivity();
|
||||||
|
|
||||||
if (this._selectedNetwork)
|
if (this._selectedNetwork)
|
||||||
this._selectedNetwork.item.actor.add_style_pseudo_class('selected');
|
this._selectedNetwork.item.add_style_pseudo_class('selected');
|
||||||
}
|
}
|
||||||
|
|
||||||
_createNetworkItem(network) {
|
_createNetworkItem(network) {
|
||||||
network.item = new NMWirelessDialogItem(network);
|
network.item = new NMWirelessDialogItem(network);
|
||||||
network.item.setActive(network == this._selectedNetwork);
|
network.item.setActive(network == this._selectedNetwork);
|
||||||
network.item.connect('selected', () => {
|
network.item.connect('selected', () => {
|
||||||
Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor);
|
Util.ensureActorVisibleInScrollView(this._scrollView, network.item);
|
||||||
this._selectNetwork(network);
|
this._selectNetwork(network);
|
||||||
});
|
});
|
||||||
network.item.actor.connect('destroy', () => {
|
network.item.connect('destroy', () => {
|
||||||
let keyFocus = global.stage.key_focus;
|
let keyFocus = global.stage.key_focus;
|
||||||
if (keyFocus && keyFocus.contains(network.item.actor))
|
if (keyFocus && keyFocus.contains(network.item))
|
||||||
this._itemBox.grab_key_focus();
|
this._itemBox.grab_key_focus();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var NMDeviceWireless = class {
|
var NMDeviceWireless = class {
|
||||||
constructor(client, device) {
|
constructor(client, device) {
|
||||||
@@ -1261,7 +1267,7 @@ var NMDeviceWireless = class {
|
|||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
|
this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
|
||||||
this._toggleItem.actor.visible = this._client.wireless_hardware_enabled;
|
this._toggleItem.visible = this._client.wireless_hardware_enabled;
|
||||||
|
|
||||||
this.item.icon.icon_name = this._getMenuIcon();
|
this.item.icon.icon_name = this._getMenuIcon();
|
||||||
this.item.label.text = this._getStatus();
|
this.item.label.text = this._getStatus();
|
||||||
@@ -1451,7 +1457,7 @@ var NMVpnSection = class extends NMConnectionSection {
|
|||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
let nItems = this._connectionItems.size;
|
let nItems = this._connectionItems.size;
|
||||||
this.item.actor.visible = (nItems > 0);
|
this.item.visible = (nItems > 0);
|
||||||
|
|
||||||
super._sync();
|
super._sync();
|
||||||
}
|
}
|
||||||
@@ -1534,7 +1540,7 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection {
|
|||||||
|
|
||||||
this._summaryItem.menu.addSettingsAction(_('Network Settings'),
|
this._summaryItem.menu.addSettingsAction(_('Network Settings'),
|
||||||
'gnome-network-panel.desktop');
|
'gnome-network-panel.desktop');
|
||||||
this._summaryItem.actor.hide();
|
this._summaryItem.hide();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1543,7 +1549,7 @@ var DeviceCategory = class extends PopupMenu.PopupMenuSection {
|
|||||||
(prev, child) => prev + (child.visible ? 1 : 0), 0);
|
(prev, child) => prev + (child.visible ? 1 : 0), 0);
|
||||||
this._summaryItem.label.text = this._getSummaryLabel(nDevices);
|
this._summaryItem.label.text = this._getSummaryLabel(nDevices);
|
||||||
let shouldSummarize = nDevices > MAX_DEVICE_ITEMS;
|
let shouldSummarize = nDevices > MAX_DEVICE_ITEMS;
|
||||||
this._summaryItem.actor.visible = shouldSummarize;
|
this._summaryItem.visible = shouldSummarize;
|
||||||
this.section.actor.visible = !shouldSummarize;
|
this.section.actor.visible = !shouldSummarize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1673,7 +1679,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) {
|
||||||
|
try {
|
||||||
this._deviceAdded(this._client, devices[i], true);
|
this._deviceAdded(this._client, devices[i], true);
|
||||||
|
} catch (e) {
|
||||||
|
log(`Failed to add device ${devices[i]}: ${e}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this._syncDeviceNames();
|
this._syncDeviceNames();
|
||||||
}
|
}
|
||||||
@@ -1726,6 +1736,17 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
|||||||
this._addDeviceWrapper(wrapper);
|
this._addDeviceWrapper(wrapper);
|
||||||
|
|
||||||
this._nmDevices.push(device);
|
this._nmDevices.push(device);
|
||||||
|
this._deviceChanged(device, skipSyncDeviceNames);
|
||||||
|
|
||||||
|
device.connect('notify::interface', () => {
|
||||||
|
this._deviceChanged(device, false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_deviceChanged(device, skipSyncDeviceNames) {
|
||||||
|
let wrapper = device._delegate;
|
||||||
|
|
||||||
if (!skipSyncDeviceNames)
|
if (!skipSyncDeviceNames)
|
||||||
this._syncDeviceNames();
|
this._syncDeviceNames();
|
||||||
|
|
||||||
@@ -1735,7 +1756,6 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
_addDeviceWrapper(wrapper) {
|
_addDeviceWrapper(wrapper) {
|
||||||
wrapper._activationFailedId = wrapper.connect('activation-failed',
|
wrapper._activationFailedId = wrapper.connect('activation-failed',
|
||||||
|
@@ -61,6 +61,6 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
: _("Night Light On");
|
: _("Night Light On");
|
||||||
this._disableItem.label.text = disabled ? _("Resume")
|
this._disableItem.label.text = disabled ? _("Resume")
|
||||||
: _("Disable Until Tomorrow");
|
: _("Disable Until Tomorrow");
|
||||||
this._item.actor.visible = this._indicator.visible = visible;
|
this._item.visible = this._indicator.visible = visible;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -96,11 +96,11 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
// Do we have batteries or a UPS?
|
// Do we have batteries or a UPS?
|
||||||
let visible = this._proxy.IsPresent;
|
let visible = this._proxy.IsPresent;
|
||||||
if (visible) {
|
if (visible) {
|
||||||
this._item.actor.show();
|
this._item.show();
|
||||||
this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE);
|
this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE);
|
||||||
} else {
|
} else {
|
||||||
// If there's no battery, then we use the power icon.
|
// If there's no battery, then we use the power icon.
|
||||||
this._item.actor.hide();
|
this._item.hide();
|
||||||
this._indicator.icon_name = 'system-shutdown-symbolic';
|
this._indicator.icon_name = 'system-shutdown-symbolic';
|
||||||
this._percentageLabel.hide();
|
this._percentageLabel.hide();
|
||||||
return;
|
return;
|
||||||
|
@@ -53,10 +53,10 @@ var RemoteAccessApplet = class extends PanelMenu.SystemIndicator {
|
|||||||
_sync() {
|
_sync() {
|
||||||
if (this._handles.size == 0) {
|
if (this._handles.size == 0) {
|
||||||
this._indicator.visible = false;
|
this._indicator.visible = false;
|
||||||
this._item.actor.visible = false;
|
this._item.visible = false;
|
||||||
} else {
|
} else {
|
||||||
this._indicator.visible = true;
|
this._indicator.visible = true;
|
||||||
this._item.actor.visible = true;
|
this._item.visible = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -97,7 +97,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
let showAirplaneMode = this._manager.shouldShowAirplaneMode;
|
let showAirplaneMode = this._manager.shouldShowAirplaneMode;
|
||||||
|
|
||||||
this._indicator.visible = (airplaneMode && showAirplaneMode);
|
this._indicator.visible = (airplaneMode && showAirplaneMode);
|
||||||
this._item.actor.visible = (airplaneMode && showAirplaneMode);
|
this._item.visible = (airplaneMode && showAirplaneMode);
|
||||||
this._offItem.setSensitive(!hwAirplaneMode);
|
this._offItem.setSensitive(!hwAirplaneMode);
|
||||||
|
|
||||||
if (hwAirplaneMode)
|
if (hwAirplaneMode)
|
||||||
|
@@ -116,9 +116,9 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
|
|
||||||
this._createSubMenu();
|
this._createSubMenu();
|
||||||
|
|
||||||
this._loginScreenItem.actor.connect('notify::visible',
|
this._loginScreenItem.connect('notify::visible',
|
||||||
() => { this._updateMultiUser(); });
|
() => { this._updateMultiUser(); });
|
||||||
this._logoutItem.actor.connect('notify::visible',
|
this._logoutItem.connect('notify::visible',
|
||||||
() => { this._updateMultiUser(); });
|
() => { this._updateMultiUser(); });
|
||||||
// Whether shutdown is available or not depends on both lockdown
|
// Whether shutdown is available or not depends on both lockdown
|
||||||
// settings (disable-log-out) and Polkit policy - the latter doesn't
|
// settings (disable-log-out) and Polkit policy - the latter doesn't
|
||||||
@@ -142,7 +142,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
this._lockScreenAction.visible ||
|
this._lockScreenAction.visible ||
|
||||||
this._altSwitcher.actor.visible);
|
this._altSwitcher.actor.visible);
|
||||||
|
|
||||||
this._actionsItem.actor.visible = visible;
|
this.buttonGroup.visible = visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
_sessionUpdated() {
|
_sessionUpdated() {
|
||||||
@@ -150,10 +150,10 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_updateMultiUser() {
|
_updateMultiUser() {
|
||||||
let hasSwitchUser = this._loginScreenItem.actor.visible;
|
let hasSwitchUser = this._loginScreenItem.visible;
|
||||||
let hasLogout = this._logoutItem.actor.visible;
|
let hasLogout = this._logoutItem.visible;
|
||||||
|
|
||||||
this._switchUserSubMenu.actor.visible = hasSwitchUser || hasLogout;
|
this._switchUserSubMenu.visible = hasSwitchUser || hasLogout;
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateSwitchUserSubMenu() {
|
_updateSwitchUserSubMenu() {
|
||||||
@@ -208,7 +208,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
this._switchUserSubMenu.menu.addMenuItem(item);
|
this._switchUserSubMenu.menu.addMenuItem(item);
|
||||||
this._loginScreenItem = item;
|
this._loginScreenItem = item;
|
||||||
this._systemActions.bind_property('can-switch-user',
|
this._systemActions.bind_property('can-switch-user',
|
||||||
this._loginScreenItem.actor,
|
this._loginScreenItem,
|
||||||
'visible',
|
'visible',
|
||||||
bindFlags);
|
bindFlags);
|
||||||
|
|
||||||
@@ -220,7 +220,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
this._switchUserSubMenu.menu.addMenuItem(item);
|
this._switchUserSubMenu.menu.addMenuItem(item);
|
||||||
this._logoutItem = item;
|
this._logoutItem = item;
|
||||||
this._systemActions.bind_property('can-logout',
|
this._systemActions.bind_property('can-logout',
|
||||||
this._logoutItem.actor,
|
this._logoutItem,
|
||||||
'visible',
|
'visible',
|
||||||
bindFlags);
|
bindFlags);
|
||||||
|
|
||||||
@@ -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;
|
||||||
|
|
||||||
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'
|
||||||
@@ -250,14 +251,14 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
log('Missing required core component Settings, expect trouble…');
|
log('Missing required core component Settings, expect trouble…');
|
||||||
this._settingsAction = new St.Widget();
|
this._settingsAction = new St.Widget();
|
||||||
}
|
}
|
||||||
item.actor.add(this._settingsAction, { expand: true, x_fill: false });
|
item.add(this._settingsAction, { expand: true, x_fill: false });
|
||||||
|
|
||||||
this._orientationLockAction = this._createActionButton('', _("Orientation Lock"));
|
this._orientationLockAction = this._createActionButton('', _("Orientation Lock"));
|
||||||
this._orientationLockAction.connect('clicked', () => {
|
this._orientationLockAction.connect('clicked', () => {
|
||||||
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE),
|
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE),
|
||||||
this._systemActions.activateLockOrientation();
|
this._systemActions.activateLockOrientation();
|
||||||
});
|
});
|
||||||
item.actor.add(this._orientationLockAction, { expand: true, x_fill: false });
|
item.add(this._orientationLockAction, { expand: true, x_fill: false });
|
||||||
this._systemActions.bind_property('can-lock-orientation',
|
this._systemActions.bind_property('can-lock-orientation',
|
||||||
this._orientationLockAction,
|
this._orientationLockAction,
|
||||||
'visible',
|
'visible',
|
||||||
@@ -272,7 +273,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
|
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
|
||||||
this._systemActions.activateLockScreen();
|
this._systemActions.activateLockScreen();
|
||||||
});
|
});
|
||||||
item.actor.add(this._lockScreenAction, { expand: true, x_fill: false });
|
item.add(this._lockScreenAction, { expand: true, x_fill: false });
|
||||||
this._systemActions.bind_property('can-lock-screen',
|
this._systemActions.bind_property('can-lock-screen',
|
||||||
this._lockScreenAction,
|
this._lockScreenAction,
|
||||||
'visible',
|
'visible',
|
||||||
@@ -299,9 +300,8 @@ var Indicator = class extends PanelMenu.SystemIndicator {
|
|||||||
bindFlags);
|
bindFlags);
|
||||||
|
|
||||||
this._altSwitcher = new AltSwitcher(this._powerOffAction, this._suspendAction);
|
this._altSwitcher = new AltSwitcher(this._powerOffAction, this._suspendAction);
|
||||||
item.actor.add(this._altSwitcher.actor, { expand: true, x_fill: false });
|
item.add(this._altSwitcher.actor, { expand: true, x_fill: false });
|
||||||
|
|
||||||
this._actionsItem = item;
|
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
|
|
||||||
|
|
||||||
|
@@ -41,12 +41,12 @@ var StreamSlider = class {
|
|||||||
this._slider.connect('drag-end', this._notifyVolumeChange.bind(this));
|
this._slider.connect('drag-end', this._notifyVolumeChange.bind(this));
|
||||||
|
|
||||||
this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
||||||
this.item.actor.add(this._icon);
|
this.item.add(this._icon);
|
||||||
this.item.actor.add(this._slider.actor, { expand: true });
|
this.item.add(this._slider.actor, { expand: true });
|
||||||
this.item.actor.connect('button-press-event', (actor, event) => {
|
this.item.connect('button-press-event', (actor, event) => {
|
||||||
return this._slider.startDragging(event);
|
return this._slider.startDragging(event);
|
||||||
});
|
});
|
||||||
this.item.actor.connect('key-press-event', (actor, event) => {
|
this.item.connect('key-press-event', (actor, event) => {
|
||||||
return this._slider.onKeyPressEvent(actor, event);
|
return this._slider.onKeyPressEvent(actor, event);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ var StreamSlider = class {
|
|||||||
|
|
||||||
_updateVisibility() {
|
_updateVisibility() {
|
||||||
let visible = this._shouldBeVisible();
|
let visible = this._shouldBeVisible();
|
||||||
this.item.actor.visible = visible;
|
this.item.visible = visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
scroll(event) {
|
scroll(event) {
|
||||||
|
@@ -30,12 +30,10 @@ function primaryModifier(mask) {
|
|||||||
return primary;
|
return primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
var SwitcherPopup = GObject.registerClass(
|
var SwitcherPopup = GObject.registerClass({
|
||||||
class SwitcherPopup extends St.Widget {
|
GTypeFlags: GObject.TypeFlags.ABSTRACT
|
||||||
|
}, class SwitcherPopup extends St.Widget {
|
||||||
_init(items) {
|
_init(items) {
|
||||||
if (new.target === SwitcherPopup)
|
|
||||||
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
|
|
||||||
|
|
||||||
super._init({ style_class: 'switcher-popup',
|
super._init({ style_class: 'switcher-popup',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
visible: false });
|
visible: false });
|
||||||
@@ -164,7 +162,7 @@ class SwitcherPopup extends St.Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_keyPressHandler(keysym, action) {
|
_keyPressHandler(keysym, action) {
|
||||||
throw new Error('Not implemented');
|
throw new GObject.NotImplementedError(`_keyPressHandler in ${this.constructor.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
_keyPressEvent(actor, event) {
|
_keyPressEvent(actor, event) {
|
||||||
|
@@ -152,7 +152,7 @@ function registerSpecialPropertySplitter(name, splitFunction, parameters) {
|
|||||||
// Tweener to a Clutter.TimeLine. Now, Clutter.Timeline itself isn't a
|
// Tweener to a Clutter.TimeLine. Now, Clutter.Timeline itself isn't a
|
||||||
// whole lot more sophisticated than a simple timeout at a fixed frame
|
// whole lot more sophisticated than a simple timeout at a fixed frame
|
||||||
// rate, but at least it knows how to drop frames. (See
|
// rate, but at least it knows how to drop frames. (See
|
||||||
// HippoAnimationManager for a more sophisticated view of continous
|
// HippoAnimationManager for a more sophisticated view of continuous
|
||||||
// time updates; even better is to pay attention to the vertical
|
// time updates; even better is to pay attention to the vertical
|
||||||
// vblank and sync to that when possible.)
|
// vblank and sync to that when possible.)
|
||||||
//
|
//
|
||||||
|
@@ -40,9 +40,10 @@ const GSD_WACOM_OBJECT_PATH = '/org/gnome/SettingsDaemon/Wacom';
|
|||||||
const GsdWacomIface = loadInterfaceXML('org.gnome.SettingsDaemon.Wacom');
|
const GsdWacomIface = loadInterfaceXML('org.gnome.SettingsDaemon.Wacom');
|
||||||
const GsdWacomProxy = Gio.DBusProxy.makeProxyWrapper(GsdWacomIface);
|
const GsdWacomProxy = Gio.DBusProxy.makeProxyWrapper(GsdWacomIface);
|
||||||
|
|
||||||
var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
|
var DisplayChangeDialog = GObject.registerClass(
|
||||||
constructor(wm) {
|
class DisplayChangeDialog extends ModalDialog.ModalDialog {
|
||||||
super({ styleClass: 'prompt-dialog' });
|
_init(wm) {
|
||||||
|
super._init({ styleClass: 'prompt-dialog' });
|
||||||
|
|
||||||
this._wm = wm;
|
this._wm = wm;
|
||||||
|
|
||||||
@@ -59,7 +60,7 @@ var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
|
|||||||
{ x_fill: true,
|
{ x_fill: true,
|
||||||
y_fill: true });
|
y_fill: true });
|
||||||
|
|
||||||
/* Translators: this and the following message should be limited in lenght,
|
/* Translators: this and the following message should be limited in length,
|
||||||
to avoid ellipsizing the labels.
|
to avoid ellipsizing the labels.
|
||||||
*/
|
*/
|
||||||
this._cancelButton = this.addButton({ label: _("Revert Settings"),
|
this._cancelButton = this.addButton({ label: _("Revert Settings"),
|
||||||
@@ -111,7 +112,7 @@ var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
|
|||||||
this._wm.complete_display_change(true);
|
this._wm.complete_display_change(true);
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
var WindowDimmer = class {
|
var WindowDimmer = class {
|
||||||
constructor(actor) {
|
constructor(actor) {
|
||||||
@@ -456,13 +457,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 +498,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 +540,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 +552,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 +1059,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 +1219,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 +1489,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 +1556,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 +1871,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 +1947,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 +2033,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;
|
||||||
@@ -813,7 +813,7 @@ var LayoutStrategy = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Computes and returns an individual scaling factor for @window,
|
// Computes and returns an individual scaling factor for @window,
|
||||||
// to be applied in addition to the overal layout scale.
|
// to be applied in addition to the overall layout scale.
|
||||||
_computeWindowScale(window) {
|
_computeWindowScale(window) {
|
||||||
// Since we align windows next to each other, the height of the
|
// Since we align windows next to each other, the height of the
|
||||||
// thumbnails is much more important to preserve than the width of
|
// thumbnails is much more important to preserve than the width of
|
||||||
@@ -835,7 +835,7 @@ var LayoutStrategy = class {
|
|||||||
// (optionally) for each row in @layout.rows. This method is
|
// (optionally) for each row in @layout.rows. This method is
|
||||||
// intended to be called by subclasses.
|
// intended to be called by subclasses.
|
||||||
_computeRowSizes(layout) {
|
_computeRowSizes(layout) {
|
||||||
throw new Error('_computeRowSizes not implemented');
|
throw new GObject.NotImplementedError(`_computeRowSizes in ${this.constructor.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compute strategy-specific window slots for each window in
|
// Compute strategy-specific window slots for each window in
|
||||||
@@ -848,7 +848,7 @@ var LayoutStrategy = class {
|
|||||||
// * gridHeight - The totial height used by the grid, unscaled, unspaced.
|
// * gridHeight - The totial height used by the grid, unscaled, unspaced.
|
||||||
// * rows - A list of rows, which should be instantiated by _newRow.
|
// * rows - A list of rows, which should be instantiated by _newRow.
|
||||||
computeLayout(windows, layout) {
|
computeLayout(windows, layout) {
|
||||||
throw new Error('computeLayout not implemented');
|
throw new GObject.NotImplementedError(`computeLayout in ${this.constructor.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Given @layout, compute the overall scale and space of the layout.
|
// Given @layout, compute the overall scale and space of the layout.
|
||||||
@@ -1266,7 +1266,7 @@ var Workspace = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We will reposition windows anyway when enter again overview or when ending the windows
|
// We will reposition windows anyway when enter again overview or when ending the windows
|
||||||
// animations whith fade animation.
|
// animations with fade animation.
|
||||||
// In this way we avoid unwanted animations of windows repositioning while
|
// In this way we avoid unwanted animations of windows repositioning while
|
||||||
// animating overview.
|
// animating overview.
|
||||||
if (this.leavingOverview || this._animatingWindowsFade)
|
if (this.leavingOverview || this._animatingWindowsFade)
|
||||||
@@ -1886,10 +1886,10 @@ var Workspace = class {
|
|||||||
// Win win -- better scale and better space
|
// Win win -- better scale and better space
|
||||||
return true;
|
return true;
|
||||||
} else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) {
|
} else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) {
|
||||||
// Keep new layout only if scale gain outweights aspect space loss
|
// Keep new layout only if scale gain outweighs aspect space loss
|
||||||
return scalePower > spacePower;
|
return scalePower > spacePower;
|
||||||
} else if (newLayout.scale <= oldLayout.scale && newLayout.space > oldLayout.space) {
|
} else if (newLayout.scale <= oldLayout.scale && newLayout.space > oldLayout.space) {
|
||||||
// Keep new layout only if aspect space gain outweights scale loss
|
// Keep new layout only if aspect space gain outweighs scale loss
|
||||||
return spacePower > scalePower;
|
return spacePower > scalePower;
|
||||||
} else {
|
} else {
|
||||||
// Lose -- worse scale and space
|
// Lose -- worse scale and space
|
||||||
|
@@ -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,7 +83,8 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
|||||||
|
|
||||||
this._animating = false; // tweening
|
this._animating = false; // tweening
|
||||||
this._scrolling = false; // swipe-scrolling
|
this._scrolling = false; // swipe-scrolling
|
||||||
this._animatingScroll = false; // programatically updating the adjustment
|
this._gestureActive = false; // touch(pad) gestures
|
||||||
|
this._animatingScroll = false; // programmatically updating the adjustment
|
||||||
|
|
||||||
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
||||||
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
|
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
|
||||||
@@ -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,35 +450,46 @@ 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;
|
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',
|
||||||
this._workspacesOnlyOnPrimaryChanged.bind(this));
|
this._workspacesOnlyOnPrimaryChanged.bind(this));
|
||||||
this._workspacesOnlyOnPrimaryChanged();
|
this._workspacesOnlyOnPrimaryChanged();
|
||||||
|
|
||||||
this._switchWorkspaceNotifyId = 0;
|
|
||||||
|
|
||||||
this._notifyOpacityId = 0;
|
this._notifyOpacityId = 0;
|
||||||
this._restackedNotifyId = 0;
|
this._restackedNotifyId = 0;
|
||||||
this._scrollEventId = 0;
|
this._scrollEventId = 0;
|
||||||
@@ -474,6 +505,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);
|
||||||
}
|
}
|
||||||
|
48
meson.build
48
meson.build
@@ -1,5 +1,5 @@
|
|||||||
project('gnome-shell', 'c',
|
project('gnome-shell', 'c',
|
||||||
version: '3.32.0',
|
version: '3.33.2',
|
||||||
meson_version: '>= 0.47.0',
|
meson_version: '>= 0.47.0',
|
||||||
license: 'GPLv2+'
|
license: 'GPLv2+'
|
||||||
)
|
)
|
||||||
@@ -20,10 +20,10 @@ gcr_req = '>= 3.7.5'
|
|||||||
gdesktop_req = '>= 3.7.90'
|
gdesktop_req = '>= 3.7.90'
|
||||||
gio_req = '>= 2.56.0'
|
gio_req = '>= 2.56.0'
|
||||||
gi_req = '>= 1.49.1'
|
gi_req = '>= 1.49.1'
|
||||||
gjs_req = '>= 1.54.0'
|
gjs_req = '>= 1.57.2'
|
||||||
gtk_req = '>= 3.15.0'
|
gtk_req = '>= 3.15.0'
|
||||||
json_glib_req = '>= 0.13.2'
|
json_glib_req = '>= 0.13.2'
|
||||||
mutter_req = '>= 3.32.0'
|
mutter_req = '>= 3.33.2'
|
||||||
polkit_req = '>= 0.100'
|
polkit_req = '>= 0.100'
|
||||||
schemas_req = '>= 3.27.90'
|
schemas_req = '>= 3.27.90'
|
||||||
startup_req = '>= 0.11'
|
startup_req = '>= 0.11'
|
||||||
@@ -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',
|
||||||
|
128
po/de.po
128
po/de.po
@@ -16,14 +16,14 @@
|
|||||||
# Benjamin Steinwender <b@stbe.at>, 2013-2014.
|
# Benjamin Steinwender <b@stbe.at>, 2013-2014.
|
||||||
# Bernd Homuth <dev@hmt.im>, 2014-2015, 2016, 2019.
|
# Bernd Homuth <dev@hmt.im>, 2014-2015, 2016, 2019.
|
||||||
# Franco Della-Monica <franco.della.monica@gmail.com>, 2016.
|
# Franco Della-Monica <franco.della.monica@gmail.com>, 2016.
|
||||||
# Tim Sabsch <tim@sabsch.com>, 2018.
|
# Tim Sabsch <tim@sabsch.com>, 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-03-02 19:56+0000\n"
|
"POT-Creation-Date: 2019-05-08 10:16+0000\n"
|
||||||
"PO-Revision-Date: 2019-03-02 21:13+0100\n"
|
"PO-Revision-Date: 2019-05-12 12:36+0200\n"
|
||||||
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
|
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
|
||||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@@ -390,11 +390,6 @@ msgstr ""
|
|||||||
msgid "Network Login"
|
msgid "Network Login"
|
||||||
msgstr "Netzwerkanmeldung"
|
msgstr "Netzwerkanmeldung"
|
||||||
|
|
||||||
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
|
||||||
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
|
|
||||||
msgid "network-workgroup"
|
|
||||||
msgstr "network-workgroup"
|
|
||||||
|
|
||||||
#: js/extensionPrefs/main.js:116
|
#: js/extensionPrefs/main.js:116
|
||||||
msgid "Something’s gone wrong"
|
msgid "Something’s gone wrong"
|
||||||
msgstr "Etwas ist schiefgelaufen"
|
msgstr "Etwas ist schiefgelaufen"
|
||||||
@@ -542,7 +537,7 @@ msgstr "abmelden;verlassen"
|
|||||||
#: js/misc/systemActions.js:109
|
#: js/misc/systemActions.js:109
|
||||||
msgctxt "search-result"
|
msgctxt "search-result"
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "In Bereitschaft versetzen"
|
msgstr "Bereitschaft"
|
||||||
|
|
||||||
#. 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
|
||||||
@@ -762,12 +757,12 @@ msgstr "Zu Favoriten hinzufügen"
|
|||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Details anzeigen"
|
msgstr "Details anzeigen"
|
||||||
|
|
||||||
#: 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 wurde zu Ihren Favoriten hinzugefügt"
|
msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
|
||||||
|
|
||||||
#: 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 wurde aus Ihren Favoriten entfernt"
|
msgstr "%s wurde aus Ihren Favoriten entfernt"
|
||||||
@@ -1053,7 +1048,7 @@ msgstr "Passwort der mobilen Breitbandverbindung"
|
|||||||
msgid "A password is required to connect to “%s”."
|
msgid "A password is required to connect to “%s”."
|
||||||
msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden."
|
msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden."
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665
|
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Netzwerk-Verwaltung"
|
msgstr "Netzwerk-Verwaltung"
|
||||||
|
|
||||||
@@ -1125,23 +1120,23 @@ msgstr "Weltuhren hinzufügen …"
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Weltuhren"
|
msgstr "Weltuhren"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:222
|
#: js/ui/dateMenu.js:228
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Wetter"
|
msgstr "Wetter"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:305
|
#: js/ui/dateMenu.js:311
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Ort auswählen …"
|
msgstr "Ort auswählen …"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:313
|
#: js/ui/dateMenu.js:319
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Wird geladen …"
|
msgstr "Wird geladen …"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:323
|
#: js/ui/dateMenu.js:329
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Gehen Sie Online, um Wetterinformationen beziehen zu können"
|
msgstr "Gehen Sie Online, um Wetterinformationen beziehen zu können"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:325
|
#: js/ui/dateMenu.js:331
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Wetterinformationen sind momentan nicht verfügbar"
|
msgstr "Wetterinformationen sind momentan nicht verfügbar"
|
||||||
|
|
||||||
@@ -1304,26 +1299,26 @@ msgid "Download and install “%s” from extensions.gnome.org?"
|
|||||||
msgstr "»%s« von extensions.gnome.org herunterladen und installieren?"
|
msgstr "»%s« von extensions.gnome.org herunterladen und installieren?"
|
||||||
|
|
||||||
#. Translators: %s is an application name like "Settings"
|
#. Translators: %s is an application name like "Settings"
|
||||||
#: js/ui/inhibitShortcutsDialog.js:50
|
#: js/ui/inhibitShortcutsDialog.js:78
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s wants to inhibit shortcuts"
|
msgid "%s wants to inhibit shortcuts"
|
||||||
msgstr "%s möchte Tastenkombinationen sperren"
|
msgstr "%s möchte Tastenkombinationen sperren"
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:51
|
#: js/ui/inhibitShortcutsDialog.js:79
|
||||||
msgid "Application wants to inhibit shortcuts"
|
msgid "Application wants to inhibit shortcuts"
|
||||||
msgstr "Die Anwendung möchte Tastenkombinationen sperren"
|
msgstr "Die Anwendung möchte Tastenkombinationen sperren"
|
||||||
|
|
||||||
#. Translators: %s is a keyboard shortcut like "Super+x"
|
#. Translators: %s is a keyboard shortcut like "Super+x"
|
||||||
#: js/ui/inhibitShortcutsDialog.js: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 "Sie können Tastenkombinationen durch Drücken von %s wiederherstellen."
|
msgstr "Sie können Tastenkombinationen durch Drücken von %s wiederherstellen."
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:65
|
#: js/ui/inhibitShortcutsDialog.js:93
|
||||||
msgid "Deny"
|
msgid "Deny"
|
||||||
msgstr "Ablehnen"
|
msgstr "Ablehnen"
|
||||||
|
|
||||||
#: js/ui/inhibitShortcutsDialog.js:71
|
#: js/ui/inhibitShortcutsDialog.js:100
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Zulassen"
|
msgstr "Zulassen"
|
||||||
|
|
||||||
@@ -1376,13 +1371,13 @@ msgid "Leave On"
|
|||||||
msgstr "Eingeschaltet lassen"
|
msgstr "Eingeschaltet lassen"
|
||||||
|
|
||||||
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
|
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
|
||||||
#: js/ui/status/network.js:1264
|
#: js/ui/status/network.js:1263
|
||||||
msgid "Turn On"
|
msgid "Turn On"
|
||||||
msgstr "Einschalten"
|
msgstr "Einschalten"
|
||||||
|
|
||||||
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
|
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
|
||||||
#: js/ui/status/network.js:128 js/ui/status/network.js:310
|
#: js/ui/status/network.js:128 js/ui/status/network.js:310
|
||||||
#: js/ui/status/network.js: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"
|
||||||
@@ -1392,7 +1387,7 @@ msgstr "Ausschalten"
|
|||||||
msgid "Leave Off"
|
msgid "Leave Off"
|
||||||
msgstr "Ausgeschaltet lassen"
|
msgstr "Ausgeschaltet lassen"
|
||||||
|
|
||||||
#: js/ui/keyboard.js:203
|
#: js/ui/keyboard.js:200
|
||||||
msgid "Region & Language Settings"
|
msgid "Region & Language Settings"
|
||||||
msgstr "Regions- und Spracheinstellungen"
|
msgstr "Regions- und Spracheinstellungen"
|
||||||
|
|
||||||
@@ -1444,7 +1439,7 @@ msgstr "Quelle zeigen"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Webseite"
|
msgstr "Webseite"
|
||||||
|
|
||||||
#: js/ui/messageTray.js:1474
|
#: js/ui/messageTray.js:1480
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Systeminformationen"
|
msgstr "Systeminformationen"
|
||||||
|
|
||||||
@@ -1528,11 +1523,11 @@ msgstr "Beenden"
|
|||||||
|
|
||||||
#. Translators: If there is no suitable word for "Activities"
|
#. Translators: If there is no suitable word for "Activities"
|
||||||
#. in your language, you can use the word for "Overview".
|
#. in your language, you can use the word for "Overview".
|
||||||
#: js/ui/panel.js:471
|
#: js/ui/panel.js:470
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktivitäten"
|
msgstr "Aktivitäten"
|
||||||
|
|
||||||
#: js/ui/panel.js:746
|
#: js/ui/panel.js:745
|
||||||
msgctxt "System menu in the top bar"
|
msgctxt "System menu in the top bar"
|
||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr "System"
|
msgstr "System"
|
||||||
@@ -1541,15 +1536,6 @@ msgstr "System"
|
|||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Oberes Panel"
|
msgstr "Oberes Panel"
|
||||||
|
|
||||||
#. Translators: this MUST be either "toggle-switch-us"
|
|
||||||
#. (for toggle switches containing the English words
|
|
||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
|
||||||
#. switches containing "◯" and "|"). Other values will
|
|
||||||
#. simply result in invisible toggle switches.
|
|
||||||
#: js/ui/popupMenu.js:285
|
|
||||||
msgid "toggle-switch-us"
|
|
||||||
msgstr "toggle-switch-intl"
|
|
||||||
|
|
||||||
#: js/ui/runDialog.js:64
|
#: js/ui/runDialog.js:64
|
||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Bitte geben Sie einen Befehl ein"
|
msgstr "Bitte geben Sie einen Befehl ein"
|
||||||
@@ -1589,7 +1575,7 @@ msgid_plural "%d new notifications"
|
|||||||
msgstr[0] "%d neue Benachrichtigung"
|
msgstr[0] "%d neue Benachrichtigung"
|
||||||
msgstr[1] "%d neue Benachrichtigungen"
|
msgstr[1] "%d neue Benachrichtigungen"
|
||||||
|
|
||||||
#: js/ui/screenShield.js:449 js/ui/status/system.js:270
|
#: js/ui/screenShield.js:449 js/ui/status/system.js:271
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Sperren"
|
msgstr "Sperren"
|
||||||
|
|
||||||
@@ -1604,11 +1590,11 @@ msgstr "GNOME muss den Bildschirm sperren"
|
|||||||
#.
|
#.
|
||||||
#. XXX: another option is to kick the user into the gdm login
|
#. XXX: another option is to kick the user into the gdm login
|
||||||
#. screen, where we're not affected by grabs
|
#. screen, where we're not affected by grabs
|
||||||
#: js/ui/screenShield.js: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 "Sperrung fehlgeschlagen"
|
msgstr "Sperrung fehlgeschlagen"
|
||||||
|
|
||||||
#: js/ui/screenShield.js:835 js/ui/screenShield.js:1308
|
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Sperrung wurde von einer Anwendung blockiert"
|
msgstr "Sperrung wurde von einer Anwendung blockiert"
|
||||||
|
|
||||||
@@ -1772,7 +1758,7 @@ msgid "<unknown>"
|
|||||||
msgstr "<Unbekannt>"
|
msgstr "<Unbekannt>"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:416 js/ui/status/network.js: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 ausgeschaltet"
|
msgstr "%s ausgeschaltet"
|
||||||
@@ -1798,7 +1784,7 @@ msgid "%s Disconnecting"
|
|||||||
msgstr "%s wird getrennt"
|
msgstr "%s wird getrennt"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:434 js/ui/status/network.js: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 wird verbunden"
|
msgstr "%s wird verbunden"
|
||||||
@@ -1838,7 +1824,7 @@ msgid "Mobile Broadband Settings"
|
|||||||
msgstr "Einstellungen der mobilen Breitbandverbindung"
|
msgstr "Einstellungen der mobilen Breitbandverbindung"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:553 js/ui/status/network.js: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-Hardware ausgeschaltet"
|
msgstr "%s-Hardware ausgeschaltet"
|
||||||
@@ -1910,72 +1896,72 @@ msgid "Wi-Fi Settings"
|
|||||||
msgstr "Drahtlosnetzwerk-Einstellungen"
|
msgstr "Drahtlosnetzwerk-Einstellungen"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:1281
|
#: js/ui/status/network.js:1280
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Hotspot Active"
|
msgid "%s Hotspot Active"
|
||||||
msgstr "Hotspot %s eingeschaltet"
|
msgstr "Hotspot %s eingeschaltet"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:1296
|
#: js/ui/status/network.js:1295
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Not Connected"
|
msgid "%s Not Connected"
|
||||||
msgstr "%s nicht verbunden"
|
msgstr "%s nicht verbunden"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1393
|
#: js/ui/status/network.js:1392
|
||||||
msgid "connecting…"
|
msgid "connecting…"
|
||||||
msgstr "Verbindungsaufbau …"
|
msgstr "Verbindungsaufbau …"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password
|
#. Translators: this is for network connections that require some kind of key or password
|
||||||
#: js/ui/status/network.js:1396
|
#: js/ui/status/network.js:1395
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "Anmeldung erforderlich"
|
msgstr "Anmeldung erforderlich"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1398
|
#: js/ui/status/network.js:1397
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "Verbindung gescheitert"
|
msgstr "Verbindung gescheitert"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1448
|
#: js/ui/status/network.js:1447
|
||||||
msgid "VPN Settings"
|
msgid "VPN Settings"
|
||||||
msgstr "VPN-Einstellungen"
|
msgstr "VPN-Einstellungen"
|
||||||
|
|
||||||
#: 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 ausgeschaltet"
|
msgstr "VPN ausgeschaltet"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82
|
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Netzwerkeinstellungen"
|
msgstr "Netzwerkeinstellungen"
|
||||||
|
|
||||||
#: 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 Kabelverbindung"
|
msgstr[0] "%s Kabelverbindung"
|
||||||
msgstr[1] "%s Kabelverbindungen"
|
msgstr[1] "%s Kabelverbindungen"
|
||||||
|
|
||||||
#: 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 Funknetzwerkverbindung"
|
msgstr[0] "%s Funknetzwerkverbindung"
|
||||||
msgstr[1] "%s Funknetzwerkverbindungen"
|
msgstr[1] "%s Funknetzwerkverbindungen"
|
||||||
|
|
||||||
#: 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 Modem-Verbindung"
|
msgstr[0] "%s Modem-Verbindung"
|
||||||
msgstr[1] "%s Modem-Verbindungen"
|
msgstr[1] "%s Modem-Verbindungen"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1702
|
#: js/ui/status/network.js:1705
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Verbindung gescheitert"
|
msgstr "Verbindung gescheitert"
|
||||||
|
|
||||||
#: 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 "Aktivierung der Netzwerkverbindung ist gescheitert"
|
msgstr "Aktivierung der Netzwerkverbindung ist gescheitert"
|
||||||
|
|
||||||
@@ -2057,15 +2043,15 @@ msgstr "Abmelden"
|
|||||||
msgid "Account Settings"
|
msgid "Account Settings"
|
||||||
msgstr "Kontoeinstellungen"
|
msgstr "Kontoeinstellungen"
|
||||||
|
|
||||||
#: js/ui/status/system.js:255
|
#: js/ui/status/system.js:256
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Hoch-/Querformats-Fixierung"
|
msgstr "Hoch-/Querformats-Fixierung"
|
||||||
|
|
||||||
#: js/ui/status/system.js:281
|
#: js/ui/status/system.js:282
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "In Bereitschaft versetzen"
|
msgstr "Bereitschaft"
|
||||||
|
|
||||||
#: js/ui/status/system.js:291
|
#: js/ui/status/system.js:292
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Ausschalten"
|
msgstr "Ausschalten"
|
||||||
|
|
||||||
@@ -2183,7 +2169,7 @@ msgstr[1] ""
|
|||||||
|
|
||||||
#. Translators: This represents the size of a window. The first number is
|
#. Translators: This represents the size of a window. The first number is
|
||||||
#. * the width of the window and the second is the height.
|
#. * the width of the window and the second is the height.
|
||||||
#: js/ui/windowManager.js:662
|
#: js/ui/windowManager.js:677
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d × %d"
|
msgid "%d × %d"
|
||||||
msgstr "%d × %d"
|
msgstr "%d × %d"
|
||||||
@@ -2256,11 +2242,6 @@ msgstr "Auf den Bildschirm nach rechts verschieben"
|
|||||||
msgid "Evolution Calendar"
|
msgid "Evolution Calendar"
|
||||||
msgstr "Evolution-Kalender"
|
msgstr "Evolution-Kalender"
|
||||||
|
|
||||||
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
|
||||||
#: src/calendar-server/evolution-calendar.desktop.in:6
|
|
||||||
msgid "evolution"
|
|
||||||
msgstr "evolution"
|
|
||||||
|
|
||||||
#: src/main.c:408
|
#: src/main.c:408
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Version ausgeben"
|
msgstr "Version ausgeben"
|
||||||
@@ -2279,12 +2260,12 @@ msgstr ""
|
|||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Die möglichen Modi auflisten"
|
msgstr "Die möglichen Modi auflisten"
|
||||||
|
|
||||||
#: src/shell-app.c:260
|
#: src/shell-app.c:264
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Unbekannt"
|
msgstr "Unbekannt"
|
||||||
|
|
||||||
#: 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 "»%s« konnte nicht gestartet werden"
|
msgstr "»%s« konnte nicht gestartet werden"
|
||||||
@@ -2323,6 +2304,15 @@ msgstr[1] "%u Eingänge"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Systemklänge"
|
msgstr "Systemklänge"
|
||||||
|
|
||||||
|
#~ msgid "network-workgroup"
|
||||||
|
#~ msgstr "network-workgroup"
|
||||||
|
|
||||||
|
#~ msgid "toggle-switch-us"
|
||||||
|
#~ msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
|
#~ msgid "evolution"
|
||||||
|
#~ msgstr "evolution"
|
||||||
|
|
||||||
#~ msgid "There was an error loading the preferences dialog for %s:"
|
#~ msgid "There was an error loading the preferences dialog for %s:"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Beim Laden des Einstellungsdialogs für %s ist ein Fehler aufgetreten:"
|
#~ "Beim Laden des Einstellungsdialogs für %s ist ein Fehler aufgetreten:"
|
||||||
|
1043
po/en_GB.po
1043
po/en_GB.po
File diff suppressed because it is too large
Load Diff
222
po/eo.po
222
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-05-08 17:45+0000\n"
|
||||||
"PO-Revision-Date: 2019-02-22 13:19+0100\n"
|
"PO-Revision-Date: 2019-05-09 20:12+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"
|
||||||
@@ -388,7 +383,7 @@ msgstr "Foliumi en Programaro"
|
|||||||
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
|
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
|
||||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
|
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
|
||||||
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
|
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
|
||||||
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
|
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:889
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Nuligi"
|
msgstr "Nuligi"
|
||||||
|
|
||||||
@@ -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,37 @@ 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 "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."
|
||||||
@@ -919,7 +919,7 @@ msgstr ""
|
|||||||
"Alternative vi povas konekti per premi la “WPS”-butonon de via enkursigilo."
|
"Alternative vi povas konekti per premi la “WPS”-butonon de via enkursigilo."
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
|
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
|
||||||
#: js/ui/status/network.js:309 js/ui/status/network.js:891
|
#: js/ui/status/network.js:310 js/ui/status/network.js:892
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Konekti"
|
msgstr "Konekti"
|
||||||
|
|
||||||
@@ -949,7 +949,7 @@ msgstr "Servo: "
|
|||||||
|
|
||||||
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
|
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
|
||||||
msgid "Authentication required by wireless network"
|
msgid "Authentication required by wireless network"
|
||||||
msgstr "Aŭtentigo estas bezonata de sendrata reto"
|
msgstr "Sendrata reto bezonas aŭtentigon"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
|
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
@@ -977,7 +977,7 @@ msgstr "PIN-kodo bezonata"
|
|||||||
|
|
||||||
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
|
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
|
||||||
msgid "PIN code is needed for the mobile broadband device"
|
msgid "PIN code is needed for the mobile broadband device"
|
||||||
msgstr "PIN-kodo estas bezonata por la portebla larĝkapacita aparato"
|
msgstr "PIN-kodo necesas por la portebla larĝkapacita aparato"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:333
|
#: js/ui/components/networkAgent.js:333
|
||||||
msgid "PIN: "
|
msgid "PIN: "
|
||||||
@@ -991,7 +991,7 @@ msgstr "Portebla larĝkapacita retopasvorto"
|
|||||||
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
|
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "A password is required to connect to “%s”."
|
msgid "A password is required to connect to “%s”."
|
||||||
msgstr "Pasvorto estas bezonata por konekti al “%s”."
|
msgstr "Pasvorto necesas 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:1665
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
@@ -1065,23 +1065,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 +1240,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"
|
||||||
|
|
||||||
@@ -1315,7 +1315,7 @@ 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:311
|
||||||
#: js/ui/status/network.js:1264 js/ui/status/network.js:1376
|
#: js/ui/status/network.js:1264 js/ui/status/network.js:1376
|
||||||
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
|
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
|
||||||
#: js/ui/status/rfkill.js:106
|
#: js/ui/status/rfkill.js:106
|
||||||
@@ -1326,59 +1326,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:1479
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Sisteminformoj"
|
msgstr "Sisteminformoj"
|
||||||
|
|
||||||
@@ -1404,13 +1404,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,17 +1457,17 @@ 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"
|
||||||
@@ -1475,15 +1476,6 @@ msgstr "Sistemo"
|
|||||||
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 +1512,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 +1527,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"
|
||||||
|
|
||||||
@@ -1618,11 +1610,11 @@ msgstr "Saltaj klavoj"
|
|||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Musklavoj"
|
msgstr "Musklavoj"
|
||||||
|
|
||||||
#: js/ui/status/accessibility.js:151
|
#: js/ui/status/accessibility.js:135
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "Alta kontrasto"
|
msgstr "Alta kontrasto"
|
||||||
|
|
||||||
#: js/ui/status/accessibility.js:182
|
#: js/ui/status/accessibility.js:177
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Granda teksto"
|
msgstr "Granda teksto"
|
||||||
|
|
||||||
@@ -1630,7 +1622,7 @@ msgstr "Granda teksto"
|
|||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bludento"
|
msgstr "Bludento"
|
||||||
|
|
||||||
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
|
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
|
||||||
msgid "Bluetooth Settings"
|
msgid "Bluetooth Settings"
|
||||||
msgstr "Bludento-agordoj"
|
msgstr "Bludento-agordoj"
|
||||||
|
|
||||||
@@ -1701,13 +1693,13 @@ 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:417 js/ui/status/network.js:1293
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Off"
|
msgid "%s Off"
|
||||||
msgstr "%s malŝaltita"
|
msgstr "%s malŝaltita"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:419
|
#: js/ui/status/network.js:420
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Connected"
|
msgid "%s Connected"
|
||||||
msgstr "%s konektita"
|
msgstr "%s konektita"
|
||||||
@@ -1715,119 +1707,119 @@ msgstr "%s konektita"
|
|||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu);
|
#. under NetworkManager's control (and thus cannot be used in the menu);
|
||||||
#. %s is a network identifier
|
#. %s is a network identifier
|
||||||
#: js/ui/status/network.js:424
|
#: js/ui/status/network.js:425
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Unmanaged"
|
msgid "%s Unmanaged"
|
||||||
msgstr "%s nemastrumita"
|
msgstr "%s nemastrumita"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:427
|
#: js/ui/status/network.js:428
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Disconnecting"
|
msgid "%s Disconnecting"
|
||||||
msgstr "%s malkonektante"
|
msgstr "%s malkonektante"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:434 js/ui/status/network.js:1285
|
#: js/ui/status/network.js:435 js/ui/status/network.js:1285
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Connecting"
|
msgid "%s Connecting"
|
||||||
msgstr "%s konektante"
|
msgstr "%s konektante"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
||||||
#: js/ui/status/network.js:437
|
#: js/ui/status/network.js:438
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Requires Authentication"
|
msgid "%s Requires Authentication"
|
||||||
msgstr "%s postulas aŭtentigon"
|
msgstr "%s postulas aŭtentigon"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing; %s is a network identifier
|
#. module, which is missing; %s is a network identifier
|
||||||
#: js/ui/status/network.js:445
|
#: js/ui/status/network.js:446
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Firmware Missing For %s"
|
msgid "Firmware Missing For %s"
|
||||||
msgstr "Mikroprogramo mankas por %s"
|
msgstr "Mikroprogramo mankas por %s"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
|
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
|
||||||
#: js/ui/status/network.js:449
|
#: js/ui/status/network.js:450
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Unavailable"
|
msgid "%s Unavailable"
|
||||||
msgstr "%s nedisponebla"
|
msgstr "%s nedisponebla"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:452
|
#: js/ui/status/network.js:453
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Connection Failed"
|
msgid "%s Connection Failed"
|
||||||
msgstr "%s konekto malsukcesis"
|
msgstr "%s konekto malsukcesis"
|
||||||
|
|
||||||
#: js/ui/status/network.js:464
|
#: js/ui/status/network.js:465
|
||||||
msgid "Wired Settings"
|
msgid "Wired Settings"
|
||||||
msgstr "Drataj agordoj"
|
msgstr "Drataj agordoj"
|
||||||
|
|
||||||
#: js/ui/status/network.js:506
|
#: js/ui/status/network.js:507
|
||||||
msgid "Mobile Broadband Settings"
|
msgid "Mobile Broadband Settings"
|
||||||
msgstr "Porteblaj larĝkapacitaj agordoj"
|
msgstr "Porteblaj larĝkapacitaj agordoj"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:553 js/ui/status/network.js:1290
|
#: js/ui/status/network.js:554 js/ui/status/network.js:1290
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Hardware Disabled"
|
msgid "%s Hardware Disabled"
|
||||||
msgstr "%s aparataro malŝaltita"
|
msgstr "%s aparataro malŝaltita"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated
|
#. Translators: this is for a network device that cannot be activated
|
||||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
|
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
|
||||||
#: js/ui/status/network.js:557
|
#: js/ui/status/network.js:558
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Disabled"
|
msgid "%s Disabled"
|
||||||
msgstr "%s malŝaltita"
|
msgstr "%s malŝaltita"
|
||||||
|
|
||||||
#: js/ui/status/network.js:597
|
#: js/ui/status/network.js:598
|
||||||
msgid "Connect to Internet"
|
msgid "Connect to Internet"
|
||||||
msgstr "Konekti al interreto"
|
msgstr "Konekti al interreto"
|
||||||
|
|
||||||
#: js/ui/status/network.js:786
|
#: js/ui/status/network.js:787
|
||||||
msgid "Airplane Mode is On"
|
msgid "Airplane Mode is On"
|
||||||
msgstr "Aviadila reĝimo ŝaltita"
|
msgstr "Aviadila reĝimo ŝaltita"
|
||||||
|
|
||||||
#: js/ui/status/network.js:787
|
#: js/ui/status/network.js:788
|
||||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||||
msgstr "Vifio malebliĝas se aviadila reĝimo estas ŝaltita."
|
msgstr "Vifio malebliĝas se aviadila reĝimo estas ŝaltita."
|
||||||
|
|
||||||
#: js/ui/status/network.js:788
|
#: js/ui/status/network.js:789
|
||||||
msgid "Turn Off Airplane Mode"
|
msgid "Turn Off Airplane Mode"
|
||||||
msgstr "Malŝalti aviadilan reĝimon"
|
msgstr "Malŝalti aviadilan reĝimon"
|
||||||
|
|
||||||
#: js/ui/status/network.js:797
|
#: js/ui/status/network.js:798
|
||||||
msgid "Wi-Fi is Off"
|
msgid "Wi-Fi is Off"
|
||||||
msgstr "Vifio malŝaltita"
|
msgstr "Vifio malŝaltita"
|
||||||
|
|
||||||
#: js/ui/status/network.js:798
|
#: js/ui/status/network.js:799
|
||||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||||
msgstr "Necesas ŝalti vifion por konekti al reto."
|
msgstr "Necesas ŝalti vifion por konekti al reto."
|
||||||
|
|
||||||
#: js/ui/status/network.js:799
|
#: js/ui/status/network.js:800
|
||||||
msgid "Turn On Wi-Fi"
|
msgid "Turn On Wi-Fi"
|
||||||
msgstr "Ŝalti vifion"
|
msgstr "Ŝalti vifion"
|
||||||
|
|
||||||
#: js/ui/status/network.js:824
|
#: js/ui/status/network.js:825
|
||||||
msgid "Wi-Fi Networks"
|
msgid "Wi-Fi Networks"
|
||||||
msgstr "Vifiaj retoj"
|
msgstr "Vifiaj retoj"
|
||||||
|
|
||||||
#: js/ui/status/network.js:826
|
#: js/ui/status/network.js:827
|
||||||
msgid "Select a network"
|
msgid "Select a network"
|
||||||
msgstr "Elekti reton"
|
msgstr "Elekti reton"
|
||||||
|
|
||||||
#: js/ui/status/network.js:855
|
#: js/ui/status/network.js:856
|
||||||
msgid "No Networks"
|
msgid "No Networks"
|
||||||
msgstr "Neniu reto"
|
msgstr "Neniu reto"
|
||||||
|
|
||||||
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
|
#: js/ui/status/network.js:877 js/ui/status/rfkill.js:104
|
||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "Uzi aparataran ŝaltilon por malŝalti"
|
msgstr "Uzi aparataran ŝaltilon por malŝalti"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1152
|
#: js/ui/status/network.js:1153
|
||||||
msgid "Select Network"
|
msgid "Select Network"
|
||||||
msgstr "Elekti reton"
|
msgstr "Elekti reton"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1158
|
#: js/ui/status/network.js:1159
|
||||||
msgid "Wi-Fi Settings"
|
msgid "Wi-Fi Settings"
|
||||||
msgstr "Vifio-agordoj"
|
msgstr "Vifio-agordoj"
|
||||||
|
|
||||||
@@ -1893,11 +1885,11 @@ 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:1706
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Konekto malsukcesis"
|
msgstr "Konekto malsukcesis"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1703
|
#: js/ui/status/network.js:1707
|
||||||
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 +1971,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 +2094,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 +2167,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 +2183,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 +2207,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 +2216,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:"
|
||||||
|
|
||||||
|
2
po/tg.po
2
po/tg.po
@@ -308,7 +308,7 @@ 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"
|
||||||
|
1083
po/zh_CN.po
1083
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
1007
po/zh_TW.po
1007
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user