Compare commits
274 Commits
Author | SHA1 | Date | |
---|---|---|---|
b66dff8aed | |||
ff814df03a | |||
c9a528025c | |||
5f3ec8a6f1 | |||
becd29c50a | |||
a029a35050 | |||
d6a78d61d1 | |||
9be46bd212 | |||
4df3afced0 | |||
90f8e1df80 | |||
ea2ac89e61 | |||
695bfb9616 | |||
5dbdde8c15 | |||
854bfc17ed | |||
c8b192bcae | |||
f07306897f | |||
44d731fff5 | |||
52f939f64c | |||
f1d12c18d8 | |||
373ebb50eb | |||
b0b5be63b9 | |||
68f439425b | |||
cae4d92191 | |||
f336295475 | |||
06d0e7d74a | |||
5e0e3edc7b | |||
02a51bfa65 | |||
dbd04df311 | |||
e6adcd99c7 | |||
3171819c36 | |||
e4976b535d | |||
06d1602f17 | |||
603d0dfbc3 | |||
0b6c5b4620 | |||
d7894dbc44 | |||
d25d8126ea | |||
2402d3e115 | |||
ac4284d348 | |||
f9ef80749a | |||
22f0d3076e | |||
127b6dca1c | |||
8cfff33291 | |||
21f534c7f0 | |||
9faa1db942 | |||
2fc9bffb23 | |||
f16eae45a2 | |||
622e73c34c | |||
eb1c3d7045 | |||
fc26895f70 | |||
ca224b379f | |||
42b609b852 | |||
a24169e2aa | |||
144d1dca88 | |||
38ab6ba3ec | |||
bc6a0626c1 | |||
497f4f4a3c | |||
8c8c89a5f1 | |||
d658a5148a | |||
2c3e0dab0f | |||
e2400e35bd | |||
fc4562491b | |||
6e3bedb888 | |||
2b8332df5e | |||
795e7d4b59 | |||
522d46a525 | |||
dcecf5e350 | |||
a61c929450 | |||
5992e9f524 | |||
ee4cd05ebd | |||
af5e65fd79 | |||
284cbf3ea7 | |||
c3e68955e3 | |||
ffa28e7ee7 | |||
78d81f909c | |||
34551bf48b | |||
e02cd53ac5 | |||
b7f5154bd3 | |||
d80247918c | |||
bb8c2d3e13 | |||
6e0e37519d | |||
5c19ae5878 | |||
8713473c64 | |||
a4b4f2f6fd | |||
03f22135b5 | |||
5b79f657eb | |||
4fc0c513af | |||
f5c058a036 | |||
0dac0ad516 | |||
5d4d1e26fd | |||
2f0039e7dd | |||
9202309bed | |||
7e0e224e0e | |||
35825cf0c7 | |||
b2d79b6362 | |||
f5e1dc86cd | |||
8c51f0076f | |||
8347152730 | |||
3d77dd8f51 | |||
82e6935281 | |||
61070e6ec0 | |||
128697d6a7 | |||
424fa01eca | |||
775187b2e4 | |||
99b5e10acf | |||
208ed6e90d | |||
de8d4c4cd8 | |||
3ae591434d | |||
61fb62f969 | |||
c4584c20dc | |||
c6eb95ff3a | |||
ab68360d53 | |||
58a733dc93 | |||
db8f6b4848 | |||
e72d388a67 | |||
b5dd4d1456 | |||
a7562b4148 | |||
358f64d66b | |||
2a7f9f70b8 | |||
c91085caf7 | |||
21ddbf0b8f | |||
2ad2853278 | |||
e16f63a8e4 | |||
c39ffa111f | |||
5182129196 | |||
02bad8e92b | |||
500ea13155 | |||
ce8e7481e7 | |||
528f2e3cdc | |||
408211ba73 | |||
e02467eada | |||
3e93a1bdd6 | |||
a69a9ba51a | |||
1c0e0191e0 | |||
f233122d4d | |||
72bfa91259 | |||
ef195f0185 | |||
47da6b139e | |||
2705434955 | |||
a7e030d0f9 | |||
8a44170f83 | |||
2ea6ae05e5 | |||
5c0eba7d3b | |||
f81887772a | |||
9aa3d864dc | |||
2425b11df6 | |||
1cb644529f | |||
6cff0fd994 | |||
437256e0f1 | |||
841e0132e9 | |||
1545596c7e | |||
38406e070c | |||
9b07ce1d0d | |||
bf8d30603e | |||
bd6e7f14d1 | |||
5226d8b086 | |||
bd92331780 | |||
387f5143f0 | |||
b7867fe44c | |||
ddea54a539 | |||
84da49c715 | |||
513dff45c1 | |||
3d697baa26 | |||
9eda10d091 | |||
0f82da8735 | |||
296b61b61c | |||
974a896dbc | |||
093fd54e2b | |||
5ae3e5aeb7 | |||
af28a219be | |||
1883df2927 | |||
3274f270e3 | |||
c97626e516 | |||
9c483dd9a6 | |||
8fd6e93fbe | |||
8416ba25de | |||
63f6ff9151 | |||
59c2ace98c | |||
cf4465027a | |||
a23b293fe2 | |||
c039a3ddda | |||
ebe071bd50 | |||
2edfd458b7 | |||
3b750aa815 | |||
d96f97e55a | |||
55ac2f46ba | |||
262c04ab91 | |||
c80e7784fb | |||
763567377f | |||
ea9dcbf8b7 | |||
2b383bf73e | |||
b8dcbfebb2 | |||
a257aa35d5 | |||
941513b280 | |||
a9bb0558bc | |||
58834b80d7 | |||
b125a0e371 | |||
980ac0da8a | |||
f15fb0bd73 | |||
7d25592165 | |||
9ee36f2b71 | |||
f3e226103f | |||
a03e5662e2 | |||
16bb3efeb9 | |||
e01d867e69 | |||
1d4dfd7d5f | |||
da05d1d864 | |||
6499424eba | |||
824a602963 | |||
0092d8fff3 | |||
5fbe454836 | |||
23a59d387b | |||
6b2a68e553 | |||
82950ecea0 | |||
2da4df219c | |||
8b5597fd8d | |||
82ae06ad55 | |||
c594b66a2a | |||
13e3318e4d | |||
4aa4bb4a6a | |||
4a74df86e2 | |||
30ebc9c241 | |||
e0f6cf538d | |||
ba71382c72 | |||
87eb0d7e2f | |||
da199242b2 | |||
5e3d378667 | |||
a6d2735373 | |||
2ea435a928 | |||
75ba75900c | |||
7bacf4e344 | |||
258993d8ad | |||
ff19e411a2 | |||
e86c2826ef | |||
64741e41df | |||
fceac27412 | |||
0a394799da | |||
b83f2c0e33 | |||
225f825faf | |||
ed054f4f40 | |||
a1244a9b26 | |||
3a3714f4ff | |||
be483c4137 | |||
3492121c3f | |||
364f1453c1 | |||
9392e50cf1 | |||
f60a6ab465 | |||
f3a92d558d | |||
d387d4a60d | |||
4503ca4ca0 | |||
eeb10c0ce3 | |||
c69fcc2ef8 | |||
7d67d88ae8 | |||
310622b14e | |||
00065b84e1 | |||
4f7a8902f8 | |||
d20a6e0988 | |||
96fa7b7e77 | |||
61e4d40852 | |||
cc826f77fb | |||
1de288c5bb | |||
fe986faa2d | |||
f11b404622 | |||
508668107b | |||
674454621f | |||
2c907bd422 | |||
4eb6c0c4ee | |||
dd2eff2b6f | |||
d8960b396b | |||
4c29604e1e | |||
ede0bf2d88 | |||
893bfdf85f | |||
ac7a4c27fd | |||
4fe0233139 | |||
f9f9c7fe5b |
4
.gitignore
vendored
4
.gitignore
vendored
@ -16,7 +16,6 @@ config.log
|
||||
config.status
|
||||
config
|
||||
configure
|
||||
data/50-gnome-shell-*.xml
|
||||
data/org.gnome.Shell.desktop
|
||||
data/org.gnome.Shell.desktop.in
|
||||
data/gnome-shell-extension-prefs.desktop
|
||||
@ -26,8 +25,6 @@ data/gschemas.compiled
|
||||
data/perf-background.xml
|
||||
data/org.gnome.shell.gschema.xml
|
||||
data/org.gnome.shell.gschema.valid
|
||||
data/org.gnome.shell.evolution.calendar.gschema.xml
|
||||
data/org.gnome.shell.evolution.calendar.gschema.valid
|
||||
data/org.gnome.Shell.PortalHelper.desktop
|
||||
data/org.gnome.Shell.PortalHelper.service
|
||||
data/theme/.sass-cache
|
||||
@ -74,7 +71,6 @@ src/*-marshal.[ch]
|
||||
src/Makefile
|
||||
src/Makefile.in
|
||||
src/calendar-server/evolution-calendar.desktop
|
||||
src/calendar-server/evolution-calendar.desktop.in
|
||||
src/calendar-server/org.gnome.Shell.CalendarServer.service
|
||||
src/gnome-shell
|
||||
src/gnome-shell-calendar-server
|
||||
|
184
NEWS
184
NEWS
@ -1,3 +1,187 @@
|
||||
3.22.0
|
||||
======
|
||||
* Misc. bug fixes [Florian, Rui; #771391, #771536] #771656]
|
||||
|
||||
Contributors:
|
||||
Rui Matos, Florian Müllner
|
||||
|
||||
Translations:
|
||||
Ask Hjorth Larsen [da], GNOME Translation Robot [gd], Alexandre Franke [fr],
|
||||
Daniel Korostil [uk], Jordi Mas [ca], Khaled Hosny [ar], David King [en_GB]
|
||||
|
||||
3.21.92
|
||||
=======
|
||||
* Adjust screen capture to work with multiple stage views [Jonas; #770128]
|
||||
* Improve handling of cycle shortcuts [Florian; #771063]
|
||||
* Fix windows not getting undimmed in some cases [Rui; #770163, #752524]
|
||||
* Disable extension version check by default [Florian; #770887]
|
||||
* Misc. bug fixes [Rui, Florian, Michael; #770382, #770888, #770328]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Michael Catanzaro, Fran Dieguez, Olivier Fourdan, Rui Matos,
|
||||
Florian Müllner
|
||||
|
||||
Translations:
|
||||
Changwoo Ryu [ko], Baurzhan Muftakhidinov [kk], Aurimas Černius [lt],
|
||||
Muhammet Kara [tr], Trần Ngọc Quân [vi], A S Alam [pa], Yosef Or Boczko [he],
|
||||
Anders Jonsson [sv], Tiago Santos [pt], Hannie Dumoleyn [nl],
|
||||
Rūdolfs Mazurs [lv], Claude Paroz [fr], Arash Mousavi [fa],
|
||||
Fran Dieguez [gl], Stas Solovey [ru], Tom Tryfonidis [el]
|
||||
|
||||
3.21.91
|
||||
=======
|
||||
Translations:
|
||||
Mario Blättermann [de], Jiri Grönroos [fi], Dušan Kazik [sk],
|
||||
Andika Triwidada [id], Daniel Mustieles [es], Fabio Tomat [fur],
|
||||
Enrico Nicoletto [pt_BR], Matej Urbančič [sl], Мирослав Николић [sr, sr@latin]
|
||||
|
||||
3.21.90.1
|
||||
=========
|
||||
Contributors:
|
||||
Piotr Drąg
|
||||
|
||||
Translations:
|
||||
Marek Černocký [cs], Balázs Úr [hu]
|
||||
|
||||
3.21.90
|
||||
=======
|
||||
* Improve on-screen keyboard on wayland [Carlos; #765009]
|
||||
* Misc. bug fixes [Florian; #769156, #769216, #769074]
|
||||
|
||||
Contributors:
|
||||
Carlos Garnacho, Florian Müllner
|
||||
|
||||
Translations:
|
||||
Fabio Tomat [fur], Tiago Santos [pt], Daniel Mustieles [es],
|
||||
Bernd Homuth [de], Aurimas Černius [lt], Balázs Úr [hu],
|
||||
Yosef Or Boczko [he], Jiri Grönroos [fi], Marek Cernocky [cs],
|
||||
Muhammet Kara [tr], Enrico Nicoletto [pt_BR], Andika Triwidada [id]
|
||||
|
||||
3.21.4
|
||||
======
|
||||
* overview: Fix switching workspaces when scrolling on non-primary monitors
|
||||
[Florian; #766883, #768316]
|
||||
* Fix crash when using screen recorder under wayland [Rui; #767001]
|
||||
* Update theme on video memory purge errors [Rui; #739178]
|
||||
* Free old backgrounds immediately [Hyungwon; #766353]
|
||||
* Add support for system upgrades to end session dialog [Kalev; #763611]
|
||||
* Fix maximized windows flickering to the wrong size on restart [Owen; #761566]
|
||||
* Hide ignored events in calendar as well [Florian; #768538]
|
||||
* calendar: Only hide dismissed occurrence of recurring event [Florian; #748226]
|
||||
* Provide org.freedesktop.impl.portal.access implementation [Florian; #768669]
|
||||
* Misc. bug fixes and cleanups [Rui, Florian, Marinus, Jonas; #767954, #768317,
|
||||
#746867, #762206, #768956, #768979]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Piotr Drąg, Hyungwon Hwang, Kalev Lember, Rui Matos,
|
||||
Florian Müllner, Marinus Schraal, Owen W. Taylor
|
||||
|
||||
Translations:
|
||||
Andika Triwidada [id], Daniel Mustieles [es], Bruce Cowan [en_GB],
|
||||
Dušan Kazik [sk], Piotr Drąg [pl], Chao-Hsiung Liao [zh_HK]
|
||||
|
||||
3.21.3
|
||||
======
|
||||
* Do not disable suspend action when locked [Florian; #725960]
|
||||
* Remember input sources MRU list [Cosimo; #766826]
|
||||
* networkAgent: Handle VPN service aliases [David; #658484]
|
||||
* Plug a memory leak [Hans; #710230]
|
||||
|
||||
Contributors:
|
||||
Cosimo Cecchi, Florian Müllner, Hans Petter Jansson, David Woodhouse
|
||||
|
||||
Translations:
|
||||
Tiago Santos [pt], Cédric Valmary [oc], Muhammet Kara [tr],
|
||||
Daniel Mustieles [es], Rafael Fontenelle [pt_BR]
|
||||
|
||||
3.21.2
|
||||
======
|
||||
* Fix sorting of hidden apps in app switcher [Florian; #766238]
|
||||
* Set logind's LockedHint property when locked [Victor; #764773]
|
||||
* Allocate framebuffers early to fix a crash on NVIDIA [Martin; #764898]
|
||||
* Fix cycle-windows/cycle-group keybindings [Florian; #730739]
|
||||
* Switch to shared desktop schema for calendar settings [Iain; #766318]
|
||||
* Misc. bug fixes [Florian, Cosimo, Michele; #766325, #758471, #757556,
|
||||
#757019, #766598]
|
||||
|
||||
Contributors:
|
||||
Cosimo Cecchi, Michele Gaio, Iain Lane, Florian Müllner, Martin Szulecki,
|
||||
Victor Toso
|
||||
|
||||
Translations:
|
||||
Tiago Santos [pt], Kjartan Maraas [nb], Jiro Matsuzawa [ja],
|
||||
Cédric Valmary [oc], Sveinn í Felli [is]
|
||||
|
||||
3.21.1
|
||||
======
|
||||
* Save screencasts in HOME if XDG_VIDEO_DIR doesn't exist [Florian; #765015]
|
||||
* Don't show orientation lock when g-s-d won't rotate [Florian; #765267]
|
||||
* Misc. bug fixes [Heiher, Florian, Marek, Rui; #722752, #765061, #763068,
|
||||
#765607, #757676, #760439]
|
||||
|
||||
Contributors:
|
||||
Heiher, Marek Chalupa, Rui Matos, Florian Müllner
|
||||
|
||||
Translations:
|
||||
Arash Mousavi [fa], Kristjan SCHMIDT [eo], GNOME Translation Robot [gd]
|
||||
|
||||
3.20.1
|
||||
======
|
||||
* Plug a memory leak [Aaron; #735705]
|
||||
|
||||
Contributors:
|
||||
Aaron Plattner
|
||||
|
||||
Translations:
|
||||
Daniel Korostil [uk], Matej Urbančič [sl], Inaki Larranaga Murgoitio [eu],
|
||||
Cheng-Chia Tseng [zh_TW], Fabio Tomat [fur], Trần Ngọc Quân [vi],
|
||||
YunQiang Su [zh_CN], Marek Černocký [cs], Arash Mousavi [fa],
|
||||
Alexander Shopov [bg], Khaled Hosny [ar]
|
||||
|
||||
3.20.0
|
||||
======
|
||||
|
||||
Translations:
|
||||
Changwoo Ryu [ko], Baurzhan Muftakhidinov [kk], Milo Casagrande [it],
|
||||
Anders Jonsson [sv], Muhammet Kara [tr], Alexandre Franke [fr],
|
||||
Rūdolfs Mazurs [lv], Ask Hjorth Larsen [da], Jiro Matsuzawa [ja]
|
||||
|
||||
3.19.92
|
||||
=======
|
||||
* Update location dialog according to latest mockups [Zeeshan; #762480]
|
||||
* Fix deleting chat notifications in calendar [Florian; #747991]
|
||||
|
||||
Contributors:
|
||||
Zeeshan Ali (Khattak), Florian Müllner
|
||||
|
||||
Translations:
|
||||
Rūdolfs Mazurs [lv], Changwoo Ryu [ko], Matej Urbančič [sl],
|
||||
Justin van Steijn [nl], Fabio Tomat [fur], Kris Thomsen [da],
|
||||
Marek Černocký [cs], Piotr Drąg [pl], Dušan Kazik [sk],
|
||||
Мирослав Николић [sr, sr@latin], Balázs Úr [hu], Yosef Or Boczko [he],
|
||||
Daniel Mustieles [es], Fran Dieguez [gl], Bernd Homuth [de],
|
||||
Tom Tryfonidis [el], Jiri Grönroos [fi], Gil Forcada [ca],
|
||||
Artur Morais [pt_BR], Aurimas Černius [lt], Stas Solovey [ru]
|
||||
|
||||
3.19.91
|
||||
=======
|
||||
* location: Ask user only once [Zeeshan; #762559]
|
||||
* Fix jiggling when auto-hiding legacy tray [Florian; #747957]
|
||||
* Misc. bug fixes [Florian, Michael, Ting-Wei; #762475, #762507, #755659]
|
||||
|
||||
Contributors:
|
||||
Zeeshan Ali (Khattak), Michael Catanzaro, Ting-Wei Lan, Florian Müllner
|
||||
|
||||
Translations:
|
||||
Мирослав Николић [sr, sr@latin], Piotr Drąg [pl], A S Alam [pa],
|
||||
Artur de Aquino Morais [pt_BR], Daniel Mustieles [es],
|
||||
Chao-Hsiung Liao [zh_TW], Daniel Korostil [uk], Fran Dieguez [gl],
|
||||
Tom Tryfonidis [el], Bernd Homuth [de], Sebastian Rasmussen [sv],
|
||||
Jordi Mas [ca], Piotr Drąg [ga], Cédric Valmary [oc], Gábor Kelemen [hu],
|
||||
Baurzhan Muftakhidinov [kk], Friedel Wolff [af], Marek Černocký [cs],
|
||||
Mingye Wang (Arthur2e5) [zh_CN], Aron Xu [zh_CN], Khaled Hosny [ar],
|
||||
Aurimas Černius [lt], Stas Solovey [ru], Yosef Or Boczko [he]
|
||||
|
||||
3.19.90
|
||||
=======
|
||||
* Correctly identify VPN secret requests [Lubomir; #760999]
|
||||
|
24
configure.ac
24
configure.ac
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.19.90],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.22.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AX_IS_RELEASE([git-directory])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
@ -24,13 +24,14 @@ LT_PREREQ([2.2.6])
|
||||
LT_INIT([disable-static])
|
||||
|
||||
# i18n
|
||||
IT_PROG_INTLTOOL([0.40])
|
||||
|
||||
GETTEXT_PACKAGE=gnome-shell
|
||||
AC_SUBST(GETTEXT_PACKAGE)
|
||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
|
||||
[The prefix for our gettext translation domains.])
|
||||
|
||||
AM_GNU_GETTEXT_VERSION([0.19.6])
|
||||
AM_GNU_GETTEXT([external])
|
||||
|
||||
PKG_PROG_PKG_CONFIG([0.22])
|
||||
|
||||
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
||||
@ -52,7 +53,7 @@ if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
build_recorder=true
|
||||
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11 gtk+-3.0"
|
||||
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0)
|
||||
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules mutter-clutter-1.0)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
@ -75,9 +76,9 @@ AS_IF([test x$enable_systemd != xno], [
|
||||
AC_MSG_RESULT($enable_systemd)
|
||||
|
||||
CLUTTER_MIN_VERSION=1.21.5
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=1.49.1
|
||||
GJS_MIN_VERSION=1.39.0
|
||||
MUTTER_MIN_VERSION=3.19.90
|
||||
MUTTER_MIN_VERSION=3.22.0
|
||||
GTK_MIN_VERSION=3.15.0
|
||||
GIO_MIN_VERSION=2.45.3
|
||||
LIBECAL_MIN_VERSION=3.5.3
|
||||
@ -98,8 +99,8 @@ SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
|
||||
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||
$recorder_modules
|
||||
gdk-x11-3.0 libsoup-2.4
|
||||
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
|
||||
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
|
||||
mutter-clutter-1.0 >= $CLUTTER_MIN_VERSION
|
||||
mutter-cogl-pango-1.0
|
||||
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
|
||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||
libcanberra libcanberra-gtk3
|
||||
@ -114,12 +115,12 @@ PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS)
|
||||
PKG_CHECK_MODULES(MUTTER, libmutter >= $MUTTER_MIN_VERSION)
|
||||
|
||||
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
|
||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
||||
PKG_CHECK_MODULES(ST, mutter-clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
|
||||
PKG_CHECK_MODULES(TRAY, clutter-1.0 gtk+-3.0)
|
||||
PKG_CHECK_MODULES(TRAY, mutter-clutter-1.0 gtk+-3.0)
|
||||
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
|
||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.19.2)
|
||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.21.3)
|
||||
|
||||
AC_ARG_ENABLE(browser-plugin,
|
||||
[AS_HELP_STRING([--enable-browser-plugin],
|
||||
@ -254,7 +255,6 @@ AC_CONFIG_FILES([
|
||||
docs/reference/st/Makefile
|
||||
docs/reference/st/st-docs.sgml
|
||||
js/Makefile
|
||||
src/calendar-server/evolution-calendar.desktop.in
|
||||
src/Makefile
|
||||
src/gvc/Makefile
|
||||
browser-plugin/Makefile
|
||||
|
@ -1,24 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<KeyListEntries schema="org.gnome.shell.keybindings"
|
||||
group="system"
|
||||
_name="System"
|
||||
name="System"
|
||||
wm_name="GNOME Shell"
|
||||
package="gnome-shell">
|
||||
|
||||
<KeyListEntry name="toggle-message-tray"
|
||||
_description="Show the notification list"/>
|
||||
description="Show the notification list"/>
|
||||
|
||||
<KeyListEntry name="focus-active-notification"
|
||||
_description="Focus the active notification"/>
|
||||
description="Focus the active notification"/>
|
||||
|
||||
<KeyListEntry name="toggle-overview"
|
||||
_description="Show the overview"/>
|
||||
description="Show the overview"/>
|
||||
|
||||
<KeyListEntry name="toggle-application-view"
|
||||
_description="Show all applications"/>
|
||||
description="Show all applications"/>
|
||||
|
||||
<KeyListEntry name="open-application-menu"
|
||||
_description="Open the application menu"/>
|
||||
description="Open the application menu"/>
|
||||
|
||||
</KeyListEntries>
|
||||
|
@ -7,12 +7,16 @@ desktop_DATA = org.gnome.Shell.desktop gnome-shell-extension-prefs.desktop
|
||||
if HAVE_NETWORKMANAGER
|
||||
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
|
||||
|
||||
portaldir = $(datadir)/xdg-desktop-portal/portals
|
||||
portal_DATA = gnome-shell.portal
|
||||
|
||||
servicedir = $(datadir)/dbus-1/services
|
||||
service_DATA = org.gnome.Shell.PortalHelper.service
|
||||
|
||||
CLEANFILES += \
|
||||
org.gnome.Shell.PortalHelper.service \
|
||||
org.gnome.Shell.PortalHelper.desktop \
|
||||
org.gnome.Shell.PortalHelper.service \
|
||||
org.gnome.Shell.PortalHelper.desktop \
|
||||
org.gnome.Shell.PortalHelper.desktop.in \
|
||||
$(NULL)
|
||||
|
||||
endif
|
||||
@ -28,7 +32,9 @@ endif
|
||||
-e "s|@VERSION[@]|$(VERSION)|" \
|
||||
$< > $@ || rm $@
|
||||
|
||||
@INTLTOOL_DESKTOP_RULE@
|
||||
%.desktop:%.desktop.in
|
||||
$(AM_V_GEN) $(MSGFMT) --desktop --template $(builddir)/$< \
|
||||
-d $(top_srcdir)/po -o $@
|
||||
|
||||
introspectiondir = $(datadir)/dbus-1/interfaces
|
||||
introspection_DATA = \
|
||||
@ -80,14 +86,11 @@ perf-background.xml: perf-background.xml.in
|
||||
$< > $@ || rm $@
|
||||
|
||||
keysdir = @GNOME_KEYBINDINGS_KEYSDIR@
|
||||
keys_in_files = 50-gnome-shell-system.xml.in
|
||||
keys_DATA = $(keys_in_files:.xml.in=.xml)
|
||||
keys_DATA = 50-gnome-shell-system.xml
|
||||
|
||||
gsettings_SCHEMAS = org.gnome.shell.gschema.xml
|
||||
|
||||
@INTLTOOL_XML_NOMERGE_RULE@
|
||||
|
||||
%.gschema.xml.in: %.gschema.xml.in.in Makefile
|
||||
%.gschema.xml: %.gschema.xml.in Makefile
|
||||
$(AM_V_GEN) sed -e 's|@GETTEXT_PACKAGE[@]|$(GETTEXT_PACKAGE)|g' \
|
||||
$< > $@ || rm $@
|
||||
|
||||
@ -106,15 +109,16 @@ convert_DATA = gnome-shell-overrides.convert
|
||||
EXTRA_DIST = \
|
||||
org.gnome.Shell.desktop.in.in \
|
||||
gnome-shell-extension-prefs.desktop.in.in \
|
||||
$(portal_DATA) \
|
||||
$(introspection_DATA) \
|
||||
$(menu_DATA) \
|
||||
$(convert_DATA) \
|
||||
$(keys_in_files) \
|
||||
$(keys_DATA) \
|
||||
$(dist_theme_files) \
|
||||
perf-background.xml.in \
|
||||
org.gnome.Shell.PortalHelper.desktop.in \
|
||||
org.gnome.Shell.PortalHelper.desktop.in.in \
|
||||
org.gnome.Shell.PortalHelper.service.in \
|
||||
org.gnome.shell.gschema.xml.in.in \
|
||||
org.gnome.shell.gschema.xml.in \
|
||||
gnome-shell-theme.gresource.xml \
|
||||
$(resource_files) \
|
||||
$(NULL)
|
||||
@ -123,11 +127,9 @@ CLEANFILES += \
|
||||
org.gnome.Shell.desktop.in \
|
||||
gnome-shell-extension-prefs.in \
|
||||
$(desktop_DATA) \
|
||||
$(keys_DATA) \
|
||||
$(gsettings_SCHEMAS) \
|
||||
perf-background.xml \
|
||||
gschemas.compiled \
|
||||
org.gnome.shell.gschema.valid \
|
||||
org.gnome.shell.gschema.xml.in \
|
||||
gnome-shell-theme.gresource \
|
||||
$(NULL)
|
||||
|
@ -1,7 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
_Name=GNOME Shell Extension Preferences
|
||||
_Comment=Configure GNOME Shell Extensions
|
||||
Name=GNOME Shell Extension Preferences
|
||||
Comment=Configure GNOME Shell Extensions
|
||||
Exec=@bindir@/gnome-shell-extension-prefs %u
|
||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||
X-GNOME-Bugzilla-Product=gnome-shell
|
||||
|
4
data/gnome-shell.portal
Normal file
4
data/gnome-shell.portal
Normal file
@ -0,0 +1,4 @@
|
||||
[portal]
|
||||
DBusName=org.freedesktop.impl.portal.desktop.gnome
|
||||
Interfaces=org.freedesktop.impl.portal.Access
|
||||
UseIn=gnome
|
@ -1,9 +1,10 @@
|
||||
[Desktop Entry]
|
||||
_Name=Network Login
|
||||
Name=Network Login
|
||||
Type=Application
|
||||
Exec=gapplication launch org.gnome.Shell.PortalHelper
|
||||
DBusActivatable=true
|
||||
NoDisplay=true
|
||||
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
||||
Icon=network-workgroup
|
||||
StartupNotify=true
|
||||
OnlyShowIn=GNOME;
|
@ -1,7 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
_Name=GNOME Shell
|
||||
_Comment=Window management and application launching
|
||||
Name=GNOME Shell
|
||||
Comment=Window management and application launching
|
||||
Exec=@bindir@/gnome-shell
|
||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||
X-GNOME-Bugzilla-Product=gnome-shell
|
||||
|
@ -3,143 +3,131 @@
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="development-tools" type="b">
|
||||
<default>true</default>
|
||||
<_summary>
|
||||
<summary>
|
||||
Enable internal tools useful for developers and testers from Alt-F2
|
||||
</_summary>
|
||||
<_description>
|
||||
</summary>
|
||||
<description>
|
||||
Allows access to internal debugging and monitoring tools
|
||||
using the Alt-F2 dialog.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="enabled-extensions" type="as">
|
||||
<default>[]</default>
|
||||
<_summary>UUIDs of extensions to enable</_summary>
|
||||
<_description>
|
||||
<summary>UUIDs of extensions to enable</summary>
|
||||
<description>
|
||||
GNOME Shell extensions have a UUID property; this key lists extensions
|
||||
which should be loaded. Any extension that wants to be loaded needs
|
||||
to be in this list. You can also manipulate this list with the
|
||||
EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="disable-extension-version-validation" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Disables the validation of extension version compatibility</_summary>
|
||||
<_description>
|
||||
<default>true</default>
|
||||
<summary>Disables the validation of extension version compatibility</summary>
|
||||
<description>
|
||||
GNOME Shell will only load extensions that claim to support the current
|
||||
running version. Enabling this option will disable this check and try to
|
||||
load all extensions regardless of the versions they claim to support.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="favorite-apps" type="as">
|
||||
<default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
|
||||
<_summary>List of desktop file IDs for favorite applications</_summary>
|
||||
<_description>
|
||||
<summary>List of desktop file IDs for favorite applications</summary>
|
||||
<description>
|
||||
The applications corresponding to these identifiers
|
||||
will be displayed in the favorites area.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="app-picker-view" type="u">
|
||||
<default>0</default>
|
||||
<_summary>App Picker View</_summary>
|
||||
<_description>
|
||||
<summary>App Picker View</summary>
|
||||
<description>
|
||||
Index of the currently selected view in the application picker.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="command-history" type="as">
|
||||
<default>[]</default>
|
||||
<_summary>History for command (Alt-F2) dialog</_summary>
|
||||
<summary>History for command (Alt-F2) dialog</summary>
|
||||
</key>
|
||||
<key name="looking-glass-history" type="as">
|
||||
<default>[]</default>
|
||||
<!-- Translators: looking glass is a debugger and inspector tool, see https://live.gnome.org/GnomeShell/LookingGlass -->
|
||||
<_summary>History for the looking glass dialog</_summary>
|
||||
<!-- Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass -->
|
||||
<summary>History for the looking glass dialog</summary>
|
||||
</key>
|
||||
<key name="always-show-log-out" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Always show the 'Log out' menu item in the user menu.</_summary>
|
||||
<_description>
|
||||
<summary>Always show the 'Log out' menu item in the user menu.</summary>
|
||||
<description>
|
||||
This key overrides the automatic hiding of the 'Log out'
|
||||
menu item in single-user, single-session situations.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="remember-mount-password" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Whether to remember password for mounting encrypted or remote filesystems</_summary>
|
||||
<_description>
|
||||
<summary>Whether to remember password for mounting encrypted or remote filesystems</summary>
|
||||
<description>
|
||||
The shell will request a password when an encrypted device or a
|
||||
remote filesystem is mounted. If the password can be saved for
|
||||
future use a 'Remember Password' checkbox will be present.
|
||||
This key sets the default state of the checkbox.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="had-bluetooth-devices-setup" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Whether the default Bluetooth adapter had set up devices associated to it</_summary>
|
||||
<_description>
|
||||
<summary>Whether the default Bluetooth adapter had set up devices associated to it</summary>
|
||||
<description>
|
||||
The shell will only show a Bluetooth menu item if a Bluetooth
|
||||
adapter is powered, or if there were devices set up associated
|
||||
with the default adapter. This will be reset if the default
|
||||
adapter is ever seen not to have devices associated to it.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
||||
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
|
||||
<child name="keyboard" schema="org.gnome.shell.keyboard"/>
|
||||
</schema>
|
||||
|
||||
<schema id="org.gnome.shell.calendar" path="/org/gnome/shell/calendar/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="show-weekdate" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Show the week date in the calendar</_summary>
|
||||
<_description>
|
||||
If true, display the ISO week date in the calendar.
|
||||
</_description>
|
||||
</key>
|
||||
</schema>
|
||||
|
||||
<schema id="org.gnome.shell.keybindings" path="/org/gnome/shell/keybindings/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="open-application-menu" type="as">
|
||||
<default>["<Super>F10"]</default>
|
||||
<_summary>Keybinding to open the application menu</_summary>
|
||||
<_description>
|
||||
<summary>Keybinding to open the application menu</summary>
|
||||
<description>
|
||||
Keybinding to open the application menu.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="toggle-application-view" type="as">
|
||||
<default>["<Super>a"]</default>
|
||||
<_summary>Keybinding to open the "Show Applications" view</_summary>
|
||||
<_description>
|
||||
<summary>Keybinding to open the "Show Applications" view</summary>
|
||||
<description>
|
||||
Keybinding to open the "Show Applications" view of the Activities
|
||||
Overview.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="toggle-overview" type="as">
|
||||
<default>["<Super>s"]</default>
|
||||
<_summary>Keybinding to open the overview</_summary>
|
||||
<_description>
|
||||
<summary>Keybinding to open the overview</summary>
|
||||
<description>
|
||||
Keybinding to open the Activities Overview.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="toggle-message-tray" type="as">
|
||||
<default>["<Super>v","<Super>m"]</default>
|
||||
<_summary>Keybinding to toggle the visibility of the notification list</_summary>
|
||||
<_description>
|
||||
<summary>Keybinding to toggle the visibility of the notification list</summary>
|
||||
<description>
|
||||
Keybinding to toggle the visibility of the notification list.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="focus-active-notification" type="as">
|
||||
<default>["<Super>n"]</default>
|
||||
<_summary>Keybinding to focus the active notification</_summary>
|
||||
<_description>
|
||||
<summary>Keybinding to focus the active notification</summary>
|
||||
<description>
|
||||
Keybinding to focus the active notification.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key name="pause-resume-tweens" type="as">
|
||||
<default>[]</default>
|
||||
<_summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</_summary>
|
||||
<_description></_description>
|
||||
<summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</summary>
|
||||
<description></description>
|
||||
</key>
|
||||
</schema>
|
||||
|
||||
@ -147,10 +135,10 @@
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="keyboard-type" type="s">
|
||||
<default>'touch'</default>
|
||||
<_summary>Which keyboard to use</_summary>
|
||||
<_description>
|
||||
<summary>Which keyboard to use</summary>
|
||||
<description>
|
||||
The type of keyboard to use.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
</schema>
|
||||
|
||||
@ -159,11 +147,11 @@
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key type="b" name="current-workspace-only">
|
||||
<default>false</default>
|
||||
<_summary>Limit switcher to current workspace.</_summary>
|
||||
<_description>
|
||||
<summary>Limit switcher to current workspace.</summary>
|
||||
<description>
|
||||
If true, only applications that have windows on the current workspace are shown in the switcher.
|
||||
Otherwise, all applications are included.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
</schema>
|
||||
|
||||
@ -177,20 +165,20 @@
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="app-icon-mode" enum="org.gnome.shell.window-switcher.AppIconMode">
|
||||
<default>'both'</default>
|
||||
<_summary>The application icon mode.</_summary>
|
||||
<_description>
|
||||
<summary>The application icon mode.</summary>
|
||||
<description>
|
||||
Configures how the windows are shown in the switcher. Valid possibilities
|
||||
are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only'
|
||||
(shows only the application icon) or 'both'.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
<key type="b" name="current-workspace-only">
|
||||
<default>true</default>
|
||||
<_summary>Limit switcher to current workspace.</_summary>
|
||||
<_description>
|
||||
<summary>Limit switcher to current workspace.</summary>
|
||||
<description>
|
||||
If true, only windows from the current workspace are shown in the switcher.
|
||||
Otherwise, all windows are included.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
</schema>
|
||||
|
||||
@ -198,43 +186,43 @@
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="attach-modal-dialogs" type="b">
|
||||
<default>true</default>
|
||||
<_summary>Attach modal dialog to the parent window</_summary>
|
||||
<_description>
|
||||
<summary>Attach modal dialog to the parent window</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running
|
||||
GNOME Shell.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="edge-tiling" type="b">
|
||||
<default>true</default>
|
||||
<_summary>Enable edge tiling when dropping windows on screen edges</_summary>
|
||||
<_description>
|
||||
<summary>Enable edge tiling when dropping windows on screen edges</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="dynamic-workspaces" type="b">
|
||||
<default>true</default>
|
||||
<_summary>Workspaces are managed dynamically</_summary>
|
||||
<_description>
|
||||
<summary>Workspaces are managed dynamically</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="workspaces-only-on-primary" type="b">
|
||||
<default>true</default>
|
||||
<_summary>Workspaces only on primary monitor</_summary>
|
||||
<_description>
|
||||
<summary>Workspaces only on primary monitor</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="focus-change-on-pointer-rest" type="b">
|
||||
<default>true</default>
|
||||
<_summary>Delay focus changes in mouse mode until the pointer stops moving</_summary>
|
||||
<_description>
|
||||
<summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</_description>
|
||||
</description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
@ -427,6 +427,29 @@ StScrollBar {
|
||||
.audio-selection-device-icon {
|
||||
icon-size: 64px; }
|
||||
|
||||
/* Access Dialog */
|
||||
.access-dialog {
|
||||
spacing: 30px; }
|
||||
|
||||
.access-dialog-main-layout {
|
||||
padding: 12px 20px 0;
|
||||
spacing: 12px; }
|
||||
|
||||
.access-dialog-content {
|
||||
max-width: 28em;
|
||||
spacing: 20px; }
|
||||
|
||||
.access-dialog-icon {
|
||||
min-width: 48px;
|
||||
icon-size: 48px; }
|
||||
|
||||
.access-dialog-title {
|
||||
font-weight: bold; }
|
||||
|
||||
.access-dialog-subtitle {
|
||||
color: #999999;
|
||||
font-weight: bold; }
|
||||
|
||||
/* Geolocation Dialog */
|
||||
.geolocation-dialog {
|
||||
spacing: 30px; }
|
||||
@ -443,6 +466,10 @@ StScrollBar {
|
||||
.geolocation-dialog-title {
|
||||
font-weight: bold; }
|
||||
|
||||
.geolocation-dialog-reason {
|
||||
color: #999999;
|
||||
font-weight: bold; }
|
||||
|
||||
/* Network Agent Dialog */
|
||||
.network-dialog-secret-table {
|
||||
spacing-rows: 15px;
|
||||
@ -531,6 +558,9 @@ StScrollBar {
|
||||
border-radius: 0.3em;
|
||||
background-color: rgba(11, 12, 13, 0.5);
|
||||
color: #eeeeec; }
|
||||
.osd-window .level-bar {
|
||||
background-color: #eeeeec;
|
||||
border-radius: 0.3em; }
|
||||
|
||||
/* App Switcher */
|
||||
.switcher-popup {
|
||||
@ -574,6 +604,10 @@ StScrollBar {
|
||||
width: 96px;
|
||||
height: 96px; }
|
||||
|
||||
/* Window Cycler */
|
||||
.cycler-highlight {
|
||||
border: 5px solid #215d9c; }
|
||||
|
||||
/* Workspace Switcher */
|
||||
.workspace-switcher-group {
|
||||
padding: 12px; }
|
||||
@ -762,7 +796,7 @@ StScrollBar {
|
||||
border-radius: 1.4em; }
|
||||
.calendar-day-base:hover, .calendar-day-base:focus {
|
||||
background-color: #0d0d0d; }
|
||||
.calendar-day-base:active {
|
||||
.calendar-day-base:active, .calendar-day-base:selected {
|
||||
color: white;
|
||||
background-color: #215d9c;
|
||||
border-color: transparent; }
|
||||
|
Submodule data/theme/gnome-shell-sass updated: bd995f377b...b2190083c2
@ -427,6 +427,29 @@ StScrollBar {
|
||||
.audio-selection-device-icon {
|
||||
icon-size: 64px; }
|
||||
|
||||
/* Access Dialog */
|
||||
.access-dialog {
|
||||
spacing: 30px; }
|
||||
|
||||
.access-dialog-main-layout {
|
||||
padding: 12px 20px 0;
|
||||
spacing: 12px; }
|
||||
|
||||
.access-dialog-content {
|
||||
max-width: 28em;
|
||||
spacing: 20px; }
|
||||
|
||||
.access-dialog-icon {
|
||||
min-width: 48px;
|
||||
icon-size: 48px; }
|
||||
|
||||
.access-dialog-title {
|
||||
font-weight: bold; }
|
||||
|
||||
.access-dialog-subtitle {
|
||||
color: #8e8e80;
|
||||
font-weight: bold; }
|
||||
|
||||
/* Geolocation Dialog */
|
||||
.geolocation-dialog {
|
||||
spacing: 30px; }
|
||||
@ -443,6 +466,10 @@ StScrollBar {
|
||||
.geolocation-dialog-title {
|
||||
font-weight: bold; }
|
||||
|
||||
.geolocation-dialog-reason {
|
||||
color: #8e8e80;
|
||||
font-weight: bold; }
|
||||
|
||||
/* Network Agent Dialog */
|
||||
.network-dialog-secret-table {
|
||||
spacing-rows: 15px;
|
||||
@ -531,6 +558,9 @@ StScrollBar {
|
||||
border-radius: 0.3em;
|
||||
background-color: rgba(11, 12, 13, 0.5);
|
||||
color: #eeeeec; }
|
||||
.osd-window .level-bar {
|
||||
background-color: #eeeeec;
|
||||
border-radius: 0.3em; }
|
||||
|
||||
/* App Switcher */
|
||||
.switcher-popup {
|
||||
@ -574,6 +604,10 @@ StScrollBar {
|
||||
width: 96px;
|
||||
height: 96px; }
|
||||
|
||||
/* Window Cycler */
|
||||
.cycler-highlight {
|
||||
border: 5px solid #215d9c; }
|
||||
|
||||
/* Workspace Switcher */
|
||||
.workspace-switcher-group {
|
||||
padding: 12px; }
|
||||
@ -762,7 +796,7 @@ StScrollBar {
|
||||
border-radius: 1.4em; }
|
||||
.calendar-day-base:hover, .calendar-day-base:focus {
|
||||
background-color: #454c4c; }
|
||||
.calendar-day-base:active {
|
||||
.calendar-day-base:active, .calendar-day-base:selected {
|
||||
color: white;
|
||||
background-color: #215d9c;
|
||||
border-color: transparent; }
|
||||
|
@ -113,7 +113,7 @@ expand_content_files=
|
||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||
GTKDOC_CFLAGS=$(GNOME_SHELL_CFLAGS)
|
||||
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(top_builddir)/src/libgnome-shell-menu.la $(top_builddir)/src/libgnome-shell-base.la $(top_builddir)/src/libgnome-shell.la
|
||||
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(top_builddir)/src/libgnome-shell-menu.la $(top_builddir)/src/libgnome-shell-base.la $(top_builddir)/src/libgnome-shell.la -rpath $(MUTTER_TYPELIB_DIR)
|
||||
|
||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||
include $(top_srcdir)/gtk-doc.make
|
||||
|
@ -78,7 +78,7 @@ expand_content_files=
|
||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||
GTKDOC_CFLAGS=
|
||||
GTKDOC_LIBS=$(top_builddir)/src/libst-1.0.la
|
||||
GTKDOC_LIBS=$(top_builddir)/src/libst-1.0.la -rpath $(MUTTER_TYPELIB_DIR)
|
||||
|
||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||
include $(top_srcdir)/gtk-doc.make
|
||||
|
@ -23,10 +23,6 @@ const GnomeShellIface = '<node> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
const customCss = '.prefs-button { \
|
||||
border-radius: 20px; \
|
||||
}';
|
||||
|
||||
const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
|
||||
|
||||
function stripPrefix(string, prefix) {
|
||||
@ -156,6 +152,7 @@ const Application = new Lang.Class({
|
||||
let scroll = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||
shadow_type: Gtk.ShadowType.IN,
|
||||
halign: Gtk.Align.CENTER,
|
||||
propagate_natural_width: true,
|
||||
margin: 18 });
|
||||
this._window.add(scroll);
|
||||
|
||||
@ -175,21 +172,6 @@ const Application = new Lang.Class({
|
||||
this._window.show_all();
|
||||
},
|
||||
|
||||
_addCustomStyle: function() {
|
||||
let provider = new Gtk.CssProvider();
|
||||
|
||||
try {
|
||||
provider.load_from_data(customCss, -1);
|
||||
} catch(e) {
|
||||
log('Failed to add application style');
|
||||
return;
|
||||
}
|
||||
|
||||
let screen = this._window.window.get_screen();
|
||||
let priority = Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION;
|
||||
Gtk.StyleContext.add_provider_for_screen(screen, provider, priority);
|
||||
},
|
||||
|
||||
_sortList: function(row1, row2) {
|
||||
let name1 = ExtensionUtils.extensions[row1.uuid].metadata.name;
|
||||
let name2 = ExtensionUtils.extensions[row2.uuid].metadata.name;
|
||||
@ -238,7 +220,6 @@ const Application = new Lang.Class({
|
||||
|
||||
_onStartup: function(app) {
|
||||
this._buildUI(app);
|
||||
this._addCustomStyle();
|
||||
this._scanExtensions();
|
||||
},
|
||||
|
||||
@ -315,7 +296,7 @@ const ExtensionRow = new Lang.Class({
|
||||
button.add(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
|
||||
icon_size: Gtk.IconSize.BUTTON,
|
||||
visible: true }));
|
||||
button.get_style_context().add_class('prefs-button');
|
||||
button.get_style_context().add_class('circular');
|
||||
hbox.add(button);
|
||||
|
||||
this.prefsButton = button;
|
||||
|
@ -804,6 +804,11 @@ const LoginDialog = new Lang.Class({
|
||||
|
||||
this._user = null;
|
||||
|
||||
if (this._nextSignalId) {
|
||||
this._authPrompt.disconnect(this._nextSignalId);
|
||||
this._nextSignalId = 0;
|
||||
}
|
||||
|
||||
if (beginRequest == AuthPrompt.BeginRequestType.PROVIDE_USERNAME) {
|
||||
if (!this._disableUserList)
|
||||
this._showUserList();
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
<file>portalHelper/main.js</file>
|
||||
|
||||
<file>ui/accessDialog.js</file>
|
||||
<file>ui/altTab.js</file>
|
||||
<file>ui/animation.js</file>
|
||||
<file>ui/appDisplay.js</file>
|
||||
|
@ -40,6 +40,9 @@ const SystemdLoginSessionIface = '<node> \
|
||||
<signal name="Lock" /> \
|
||||
<signal name="Unlock" /> \
|
||||
<property name="Active" type="b" access="read" /> \
|
||||
<method name="SetLockedHint"> \
|
||||
<arg type="b" direction="in"/> \
|
||||
</method> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
@ -131,10 +134,13 @@ const LoginManagerSystemd = new Lang.Class({
|
||||
|
||||
canSuspend: function(asyncCallback) {
|
||||
this._proxy.CanSuspendRemote(function(result, error) {
|
||||
if (error)
|
||||
asyncCallback(false);
|
||||
else
|
||||
asyncCallback(result[0] != 'no' && result[0] != 'na');
|
||||
if (error) {
|
||||
asyncCallback(false, false);
|
||||
} else {
|
||||
let needsAuth = result[0] == 'challenge';
|
||||
let canSuspend = needsAuth || result[0] == 'yes';
|
||||
asyncCallback(canSuspend, needsAuth);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@ -187,7 +193,7 @@ const LoginManagerDummy = new Lang.Class({
|
||||
},
|
||||
|
||||
canSuspend: function(asyncCallback) {
|
||||
asyncCallback(false);
|
||||
asyncCallback(false, false);
|
||||
},
|
||||
|
||||
listSessions: function(asyncCallback) {
|
||||
|
202
js/ui/accessDialog.js
Normal file
202
js/ui/accessDialog.js
Normal file
@ -0,0 +1,202 @@
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
const Pango = imports.gi.Pango;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const CheckBox = imports.ui.checkBox;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
|
||||
const RequestIface = '<node> \
|
||||
<interface name="org.freedesktop.impl.portal.Request"> \
|
||||
<method name="Close"/> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
const AccessIface = '<node> \
|
||||
<interface name="org.freedesktop.impl.portal.Access"> \
|
||||
<method name="AccessDialog"> \
|
||||
<arg type="o" name="handle" direction="in"/> \
|
||||
<arg type="s" name="app_id" direction="in"/> \
|
||||
<arg type="s" name="parent_window" direction="in"/> \
|
||||
<arg type="s" name="title" direction="in"/> \
|
||||
<arg type="s" name="subtitle" direction="in"/> \
|
||||
<arg type="s" name="body" direction="in"/> \
|
||||
<arg type="a{sv}" name="options" direction="in"/> \
|
||||
<arg type="u" name="response" direction="out"/> \
|
||||
<arg type="a{sv}" name="results" direction="out"/> \
|
||||
</method> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
const DialogResponse = {
|
||||
OK: 0,
|
||||
CANCEL: 1,
|
||||
CLOSED: 2
|
||||
};
|
||||
|
||||
const AccessDialog = new Lang.Class({
|
||||
Name: 'AccessDialog',
|
||||
Extends: ModalDialog.ModalDialog,
|
||||
|
||||
_init: function(invocation, handle, title, subtitle, body, options) {
|
||||
this.parent({ styleClass: 'access-dialog' });
|
||||
|
||||
this._invocation = invocation;
|
||||
this._handle = handle;
|
||||
|
||||
this._requestExported = false;
|
||||
this._request = Gio.DBusExportedObject.wrapJSObject(RequestIface, this);
|
||||
|
||||
for (let option in options)
|
||||
options[option] = options[option].deep_unpack();
|
||||
|
||||
this._buildLayout(title, subtitle, body, options);
|
||||
},
|
||||
|
||||
_buildLayout: function(title, subtitle, body, options) {
|
||||
// No support for non-modal system dialogs, so ignore the option
|
||||
//let modal = options['modal'] || true;
|
||||
let denyLabel = options['deny_label'] || _("Deny Access");
|
||||
let grantLabel = options['grant_label'] || _("Grant Access");
|
||||
let iconName = options['icon'] || null;
|
||||
let choices = options['choices'] || [];
|
||||
|
||||
let mainContentBox = new St.BoxLayout();
|
||||
mainContentBox.style_class = 'access-dialog-main-layout';
|
||||
this.contentLayout.add_actor(mainContentBox);
|
||||
|
||||
let icon = new St.Icon({ style_class: 'access-dialog-icon',
|
||||
icon_name: iconName,
|
||||
y_align: Clutter.ActorAlign.START });
|
||||
mainContentBox.add_actor(icon);
|
||||
|
||||
let messageBox = new St.BoxLayout({ vertical: true });
|
||||
messageBox.style_class = 'access-dialog-content',
|
||||
mainContentBox.add_actor(messageBox);
|
||||
|
||||
let label;
|
||||
label = new St.Label({ style_class: 'access-dialog-title headline',
|
||||
text: title });
|
||||
messageBox.add_actor(label);
|
||||
|
||||
label = new St.Label({ style_class: 'access-dialog-subtitle',
|
||||
text: subtitle });
|
||||
label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
label.clutter_text.line_wrap = true;
|
||||
messageBox.add_actor(label);
|
||||
|
||||
this._choices = new Map();
|
||||
|
||||
for (let i = 0; i < choices.length; i++) {
|
||||
let [id, name, opts, selected] = choices[i];
|
||||
if (opts.length > 0)
|
||||
continue; // radio buttons, not implemented
|
||||
|
||||
let check = new CheckBox.CheckBox();
|
||||
check.getLabelActor().text = name;
|
||||
check.actor.checked = selected == "true";
|
||||
messageBox.add_actor(check.actor);
|
||||
|
||||
this._choices.set(id, check);
|
||||
}
|
||||
|
||||
label = new St.Label({ text: body });
|
||||
label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
label.clutter_text.line_wrap = true;
|
||||
messageBox.add_actor(label);
|
||||
|
||||
this.addButton({ label: denyLabel,
|
||||
action: () => {
|
||||
this._sendResponse(DialogResponse.CANCEL);
|
||||
},
|
||||
key: Clutter.KEY_Escape });
|
||||
this.addButton({ label: grantLabel,
|
||||
action: () => {
|
||||
this._sendResponse(DialogResponse.OK);
|
||||
}});
|
||||
},
|
||||
|
||||
open: function() {
|
||||
this.parent();
|
||||
|
||||
let connection = this._invocation.get_connection();
|
||||
this._requestExported = this._request.export(connection, this._handle);
|
||||
},
|
||||
|
||||
CloseAsync: function(invocation, params) {
|
||||
if (this._invocation.get_sender() != invocation.get_sender()) {
|
||||
invocation.return_error_literal(Gio.DBusError,
|
||||
Gio.DBusError.ACCESS_DENIED,
|
||||
'');
|
||||
return;
|
||||
}
|
||||
|
||||
this._sendResponse(DialogResponse.CLOSED);
|
||||
},
|
||||
|
||||
_sendResponse: function(response) {
|
||||
if (this._requestExported)
|
||||
this._request.unexport();
|
||||
this._requestExported = false;
|
||||
|
||||
let results = {};
|
||||
if (response == DialogResponse.OK) {
|
||||
for (let [id, check] of this._choices) {
|
||||
let checked = check.actor.checked ? 'true' : 'false';
|
||||
results[id] = new GLib.Variant('s', checked);
|
||||
}
|
||||
}
|
||||
|
||||
// Delay actual response until the end of the close animation (if any)
|
||||
this.connect('closed', () => {
|
||||
this._invocation.return_value(new GLib.Variant('(ua{sv})',
|
||||
[response, results]));
|
||||
});
|
||||
this.close();
|
||||
}
|
||||
});
|
||||
|
||||
const AccessDialogDBus = new Lang.Class({
|
||||
Name: 'AccessDialogDBus',
|
||||
|
||||
_init: function() {
|
||||
this._accessDialog = null;
|
||||
|
||||
this._windowTracker = Shell.WindowTracker.get_default();
|
||||
|
||||
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(AccessIface, this);
|
||||
this._dbusImpl.export(Gio.DBus.session, '/org/freedesktop/portal/desktop');
|
||||
|
||||
Gio.DBus.session.own_name('org.freedesktop.impl.portal.desktop.gnome', Gio.BusNameOwnerFlags.REPLACE, null, null);
|
||||
},
|
||||
|
||||
AccessDialogAsync: function(params, invocation) {
|
||||
if (this._accessDialog) {
|
||||
invocation.return_error_literal(Gio.DBusError,
|
||||
Gio.DBusError.LIMITS_EXCEEDED,
|
||||
'Already showing a system access dialog');
|
||||
return;
|
||||
}
|
||||
|
||||
let [handle, appId, parentWindow, title, subtitle, body, options] = params;
|
||||
// We probably want to use parentWindow and global.display.focus_window
|
||||
// for this check in the future
|
||||
if (appId && appId + '.desktop' != this._windowTracker.focus_app.id) {
|
||||
invocation.return_error_literal(Gio.DBusError,
|
||||
Gio.DBusError.ACCESS_DENIED,
|
||||
'Only the focused app is allowed to show a system access dialog');
|
||||
return;
|
||||
}
|
||||
|
||||
let dialog = new AccessDialog(invocation, handle, title,
|
||||
subtitle, body, options);
|
||||
dialog.open();
|
||||
|
||||
dialog.connect('closed', () => { this._accessDialog = null; });
|
||||
|
||||
this._accessDialog = dialog;
|
||||
}
|
||||
});
|
169
js/ui/altTab.js
169
js/ui/altTab.js
@ -354,6 +354,149 @@ const AppSwitcherPopup = new Lang.Class({
|
||||
}
|
||||
});
|
||||
|
||||
const CyclerHighlight = new Lang.Class({
|
||||
Name: 'CyclerHighlight',
|
||||
|
||||
_init: function() {
|
||||
this._window = null;
|
||||
|
||||
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
||||
|
||||
this._clone = new Clutter.Clone();
|
||||
this.actor.add_actor(this._clone);
|
||||
|
||||
this._highlight = new St.Widget({ style_class: 'cycler-highlight' });
|
||||
this.actor.add_actor(this._highlight);
|
||||
|
||||
let coordinate = Clutter.BindCoordinate.ALL;
|
||||
let constraint = new Clutter.BindConstraint({ coordinate: coordinate });
|
||||
this._clone.bind_property('source', constraint, 'source', 0);
|
||||
|
||||
this.actor.add_constraint(constraint);
|
||||
|
||||
this.actor.connect('notify::allocation',
|
||||
Lang.bind(this, this._onAllocationChanged));
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
},
|
||||
|
||||
set window(w) {
|
||||
if (this._window == w)
|
||||
return;
|
||||
|
||||
this._window = w;
|
||||
|
||||
if (this._clone.source)
|
||||
this._clone.source.sync_visibility();
|
||||
|
||||
let windowActor = this._window ? this._window.get_compositor_private()
|
||||
: null;
|
||||
|
||||
if (windowActor)
|
||||
windowActor.hide();
|
||||
|
||||
this._clone.source = windowActor;
|
||||
},
|
||||
|
||||
_onAllocationChanged: function() {
|
||||
if (!this._window) {
|
||||
this._highlight.set_size(0, 0);
|
||||
this._highlight.hide();
|
||||
} else {
|
||||
let [x, y] = this.actor.allocation.get_origin();
|
||||
let rect = this._window.get_frame_rect();
|
||||
this._highlight.set_size(rect.width, rect.height);
|
||||
this._highlight.set_position(rect.x - x, rect.y - y);
|
||||
this._highlight.show();
|
||||
}
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
this.window = null;
|
||||
}
|
||||
});
|
||||
|
||||
const CyclerPopup = new Lang.Class({
|
||||
Name: 'CyclerPopup',
|
||||
Extends: SwitcherPopup.SwitcherPopup,
|
||||
Abstract: true,
|
||||
|
||||
_init : function() {
|
||||
this.parent();
|
||||
|
||||
this._items = this._getWindows();
|
||||
|
||||
if (this._items.length == 0)
|
||||
return;
|
||||
|
||||
this._highlight = new CyclerHighlight();
|
||||
global.window_group.add_actor(this._highlight.actor);
|
||||
|
||||
// We don't show an actual popup, so just provide what SwitcherPopup
|
||||
// expects instead of inheriting from SwitcherList
|
||||
this._switcherList = { actor: new St.Widget(),
|
||||
highlight: Lang.bind(this, this._highlightItem),
|
||||
connect: function() {} };
|
||||
},
|
||||
|
||||
_highlightItem: function(index, justOutline) {
|
||||
this._highlight.window = this._items[index];
|
||||
global.window_group.set_child_above_sibling(this._highlight.actor, null);
|
||||
},
|
||||
|
||||
_finish: function() {
|
||||
let window = this._items[this._selectedIndex];
|
||||
let ws = window.get_workspace();
|
||||
let activeWs = global.screen.get_active_workspace();
|
||||
|
||||
if (window.minimized) {
|
||||
Main.wm.skipNextEffect(window.get_compositor_private());
|
||||
window.unminimize();
|
||||
}
|
||||
|
||||
if (activeWs == ws) {
|
||||
Main.activateWindow(window);
|
||||
} else {
|
||||
// If the selected window is on a different workspace, we don't
|
||||
// want it to disappear, then slide in with the workspace; instead,
|
||||
// always activate it on the active workspace ...
|
||||
activeWs.activate_with_focus(window, global.get_current_time());
|
||||
|
||||
// ... then slide it over to the original workspace if necessary
|
||||
Main.wm.actionMoveWindow(window, ws);
|
||||
}
|
||||
|
||||
this.parent();
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
this._highlight.actor.destroy();
|
||||
|
||||
this.parent();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
const GroupCyclerPopup = new Lang.Class({
|
||||
Name: 'GroupCyclerPopup',
|
||||
Extends: CyclerPopup,
|
||||
|
||||
_getWindows: function() {
|
||||
let app = Shell.WindowTracker.get_default().focus_app;
|
||||
return app ? app.get_windows() : [];
|
||||
},
|
||||
|
||||
_keyPressHandler: function(keysym, action) {
|
||||
if (action == Meta.KeyBindingAction.CYCLE_GROUP)
|
||||
this._select(this._next());
|
||||
else if (action == Meta.KeyBindingAction.CYCLE_GROUP_BACKWARD)
|
||||
this._select(this._previous());
|
||||
else
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
});
|
||||
|
||||
const WindowSwitcherPopup = new Lang.Class({
|
||||
Name: 'WindowSwitcherPopup',
|
||||
Extends: SwitcherPopup.SwitcherPopup,
|
||||
@ -401,6 +544,32 @@ const WindowSwitcherPopup = new Lang.Class({
|
||||
}
|
||||
});
|
||||
|
||||
const WindowCyclerPopup = new Lang.Class({
|
||||
Name: 'WindowCyclerPopup',
|
||||
Extends: CyclerPopup,
|
||||
|
||||
_init: function() {
|
||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
|
||||
this.parent();
|
||||
},
|
||||
|
||||
_getWindows: function() {
|
||||
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
||||
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
|
||||
},
|
||||
|
||||
_keyPressHandler: function(keysym, action) {
|
||||
if (action == Meta.KeyBindingAction.CYCLE_WINDOWS)
|
||||
this._select(this._next());
|
||||
else if (action == Meta.KeyBindingAction.CYCLE_WINDOWS_BACKWARD)
|
||||
this._select(this._previous());
|
||||
else
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
});
|
||||
|
||||
const AppIcon = new Lang.Class({
|
||||
Name: 'AppIcon',
|
||||
|
||||
|
@ -1814,7 +1814,7 @@ const AppIconMenu = new Lang.Class({
|
||||
if (!source.actor.mapped)
|
||||
this.close();
|
||||
}));
|
||||
source.actor.connect('destroy', Lang.bind(this, function () { this.actor.destroy(); }));
|
||||
source.actor.connect('destroy', Lang.bind(this, this.destroy));
|
||||
|
||||
Main.uiGroup.add_actor(this.actor);
|
||||
},
|
||||
|
@ -696,6 +696,7 @@ const BackgroundManager = new Lang.Class({
|
||||
time: FADE_ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: function() {
|
||||
oldBackgroundActor.background.run_dispose();
|
||||
oldBackgroundActor.destroy();
|
||||
}
|
||||
});
|
||||
|
@ -120,6 +120,9 @@ const EmptyEventSource = new Lang.Class({
|
||||
destroy: function() {
|
||||
},
|
||||
|
||||
ignoreEvent: function(event) {
|
||||
},
|
||||
|
||||
requestRange: function(begin, end) {
|
||||
},
|
||||
|
||||
@ -184,6 +187,15 @@ const DBusEventSource = new Lang.Class({
|
||||
this.isLoading = false;
|
||||
this.isDummy = false;
|
||||
|
||||
this._ignoredEvents = new Map();
|
||||
|
||||
let savedState = global.get_persistent_state('as', 'ignored_events');
|
||||
if (savedState)
|
||||
savedState.deep_unpack().forEach(Lang.bind(this,
|
||||
function(eventId) {
|
||||
this._ignoredEvents.set(eventId, true);
|
||||
}));
|
||||
|
||||
this._initialized = false;
|
||||
this._dbusProxy = new CalendarServer();
|
||||
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
|
||||
@ -298,6 +310,16 @@ const DBusEventSource = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
ignoreEvent: function(event) {
|
||||
if (this._ignoredEvents.get(event.id))
|
||||
return;
|
||||
|
||||
this._ignoredEvents.set(event.id, true);
|
||||
let savedState = new GLib.Variant('as', [...this._ignoredEvents.keys()]);
|
||||
global.set_persistent_state('ignored_events', savedState);
|
||||
this.emit('changed');
|
||||
},
|
||||
|
||||
requestRange: function(begin, end) {
|
||||
if (!(_datesEqual(begin, this._lastRequestBegin) && _datesEqual(end, this._lastRequestEnd))) {
|
||||
this.isLoading = true;
|
||||
@ -313,6 +335,10 @@ const DBusEventSource = new Lang.Class({
|
||||
let result = [];
|
||||
for(let n = 0; n < this._events.length; n++) {
|
||||
let event = this._events[n];
|
||||
|
||||
if (this._ignoredEvents.has(event.id))
|
||||
continue;
|
||||
|
||||
if (_dateIntervalsOverlap (event.date, event.end, begin, end)) {
|
||||
result.push(event);
|
||||
}
|
||||
@ -345,7 +371,7 @@ const Calendar = new Lang.Class({
|
||||
|
||||
_init: function() {
|
||||
this._weekStart = Shell.util_get_week_start();
|
||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.calendar' });
|
||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.calendar' });
|
||||
|
||||
this._settings.connect('changed::' + SHOW_WEEKDATE_KEY, Lang.bind(this, this._onSettingsChange));
|
||||
this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY);
|
||||
@ -660,12 +686,12 @@ const Calendar = new Lang.Class({
|
||||
|
||||
this._buttons.forEach(Lang.bind(this, function(button) {
|
||||
if (sameDay(button._date, this._selectedDate)) {
|
||||
button.add_style_pseudo_class('active');
|
||||
button.add_style_pseudo_class('selected');
|
||||
if (this._shouldDateGrabFocus)
|
||||
button.grab_key_focus();
|
||||
}
|
||||
else
|
||||
button.remove_style_pseudo_class('active');
|
||||
button.remove_style_pseudo_class('selected');
|
||||
}));
|
||||
}
|
||||
});
|
||||
@ -785,15 +811,6 @@ const EventsSection = new Lang.Class({
|
||||
this._desktopSettings.connect('changed', Lang.bind(this, this._reloadEvents));
|
||||
this._eventSource = new EmptyEventSource();
|
||||
|
||||
this._ignoredEvents = new Map();
|
||||
|
||||
let savedState = global.get_persistent_state('as', 'ignored_events');
|
||||
if (savedState)
|
||||
savedState.deep_unpack().forEach(Lang.bind(this,
|
||||
function(eventId) {
|
||||
this._ignoredEvents.set(eventId, true);
|
||||
}));
|
||||
|
||||
this.parent('');
|
||||
|
||||
Shell.AppSystem.get_default().connect('installed-changed',
|
||||
@ -802,9 +819,7 @@ const EventsSection = new Lang.Class({
|
||||
},
|
||||
|
||||
_ignoreEvent: function(event) {
|
||||
this._ignoredEvents.set(event.id, true);
|
||||
let savedState = new GLib.Variant('as', [...this._ignoredEvents.keys()]);
|
||||
global.set_persistent_state('ignored_events', savedState);
|
||||
this._eventSource.ignoreEvent(event);
|
||||
},
|
||||
|
||||
setEventSource: function(eventSource) {
|
||||
@ -850,9 +865,6 @@ const EventsSection = new Lang.Class({
|
||||
for (let i = 0; i < events.length; i++) {
|
||||
let event = events[i];
|
||||
|
||||
if (this._ignoredEvents.has(event.id))
|
||||
continue;
|
||||
|
||||
let message = new EventMessage(event, this._date);
|
||||
message.connect('close', Lang.bind(this, function() {
|
||||
this._ignoreEvent(event);
|
||||
|
@ -796,10 +796,18 @@ const NetworkAgent = new Lang.Class({
|
||||
path = GLib.build_filenamev([Config.LIBEXECDIR, path]);
|
||||
}
|
||||
|
||||
if (GLib.file_test(path, GLib.FileTest.IS_EXECUTABLE))
|
||||
if (GLib.file_test(path, GLib.FileTest.IS_EXECUTABLE)) {
|
||||
this._vpnBinaries[service] = { fileName: path, externalUIMode: externalUIMode, supportsHints: hints };
|
||||
else
|
||||
try {
|
||||
let aliases = keyfile.get_string_list('VPN Connection', 'aliases');
|
||||
|
||||
for (let alias of aliases) {
|
||||
this._vpnBinaries[alias] = { fileName: path, externalUIMode: externalUIMode, supportsHints: hints };
|
||||
}
|
||||
} catch(e) { } // ignore errors if key does not exist
|
||||
} else {
|
||||
throw new Error('VPN plugin at %s is not executable'.format(path));
|
||||
}
|
||||
} catch(e) {
|
||||
log('Error \'%s\' while processing VPN keyfile \'%s\''.
|
||||
format(e.message, dir.get_child(name).get_path()));
|
||||
|
@ -469,11 +469,17 @@ const ChatSource = new Lang.Class({
|
||||
|
||||
destroy: function(reason) {
|
||||
if (this._client.is_handling_channel(this._channel)) {
|
||||
this._ackMessages();
|
||||
// The chat box has been destroyed so it can't
|
||||
// handle the channel any more.
|
||||
this._channel.close_async(function(channel, result) {
|
||||
channel.close_finish(result);
|
||||
});
|
||||
} else {
|
||||
// Don't indicate any unread messages when the notification
|
||||
// that represents them has been destroyed.
|
||||
this._pendingMessages = [];
|
||||
this.countUpdated();
|
||||
}
|
||||
|
||||
// Keep source alive while the channel is open
|
||||
|
70
js/ui/dnd.js
70
js/ui/dnd.js
@ -571,20 +571,13 @@ const _Draggable = new Lang.Class({
|
||||
return;
|
||||
}
|
||||
|
||||
this._animationInProgress = true;
|
||||
// No target, so snap back
|
||||
Tweener.addTween(this._dragActor,
|
||||
{ x: snapBackX,
|
||||
y: snapBackY,
|
||||
scale_x: snapBackScale,
|
||||
scale_y: snapBackScale,
|
||||
opacity: this._dragOrigOpacity,
|
||||
time: SNAP_BACK_ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: this._onAnimationComplete,
|
||||
onCompleteScope: this,
|
||||
onCompleteParams: [this._dragActor, eventTime]
|
||||
});
|
||||
this._animateDragEnd(eventTime,
|
||||
{ x: snapBackX,
|
||||
y: snapBackY,
|
||||
scale_x: snapBackScale,
|
||||
scale_y: snapBackScale,
|
||||
time: SNAP_BACK_ANIMATION_TIME,
|
||||
});
|
||||
},
|
||||
|
||||
_restoreDragActor: function(eventTime) {
|
||||
@ -596,18 +589,44 @@ const _Draggable = new Lang.Class({
|
||||
this._dragActor.set_scale(restoreScale, restoreScale);
|
||||
this._dragActor.opacity = 0;
|
||||
|
||||
this._animateDragEnd(eventTime,
|
||||
{ time: REVERT_ANIMATION_TIME });
|
||||
},
|
||||
|
||||
_animateDragEnd: function (eventTime, params) {
|
||||
this._animationInProgress = true;
|
||||
Tweener.addTween(this._dragActor,
|
||||
{ opacity: this._dragOrigOpacity,
|
||||
time: REVERT_ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: this._onAnimationComplete,
|
||||
onCompleteScope: this,
|
||||
onCompleteParams: [this._dragActor, eventTime]
|
||||
});
|
||||
|
||||
// finish animation if the actor gets destroyed
|
||||
// during it
|
||||
this._dragActorDestroyId =
|
||||
this._dragActor.connect('destroy',
|
||||
Lang.bind(this, this._finishAnimation));
|
||||
|
||||
params['opacity'] = this._dragOrigOpacity;
|
||||
params['transition'] = 'easeOutQuad';
|
||||
params['onComplete'] = this._onAnimationComplete;
|
||||
params['onCompleteScope'] = this;
|
||||
params['onCompleteParams'] = [this._dragActor, eventTime];
|
||||
|
||||
// start the animation
|
||||
Tweener.addTween(this._dragActor, params)
|
||||
},
|
||||
|
||||
_finishAnimation : function () {
|
||||
if (!this._animationInProgress)
|
||||
return
|
||||
|
||||
this._animationInProgress = false;
|
||||
if (!this._buttonDown)
|
||||
this._dragComplete();
|
||||
|
||||
global.screen.set_cursor(Meta.Cursor.DEFAULT);
|
||||
},
|
||||
|
||||
_onAnimationComplete : function (dragActor, eventTime) {
|
||||
dragActor.disconnect(this._dragActorDestroyId);
|
||||
this._dragActorDestroyId = 0;
|
||||
|
||||
if (this._dragOrigParent) {
|
||||
Main.uiGroup.remove_child(this._dragActor);
|
||||
this._dragOrigParent.add_actor(this._dragActor);
|
||||
@ -616,12 +635,9 @@ const _Draggable = new Lang.Class({
|
||||
} else {
|
||||
dragActor.destroy();
|
||||
}
|
||||
global.screen.set_cursor(Meta.Cursor.DEFAULT);
|
||||
this.emit('drag-end', eventTime, false);
|
||||
|
||||
this._animationInProgress = false;
|
||||
if (!this._buttonDown)
|
||||
this._dragComplete();
|
||||
this.emit('drag-end', eventTime, false);
|
||||
this._finishAnimation();
|
||||
},
|
||||
|
||||
_dragComplete: function() {
|
||||
|
@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/*
|
||||
* Copyright 2010 Red Hat, Inc
|
||||
* Copyright 2010-2016 Red Hat, Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -114,7 +114,7 @@ const restartDialogContent = {
|
||||
showOtherSessions: true,
|
||||
};
|
||||
|
||||
const restartInstallDialogContent = {
|
||||
const restartUpdateDialogContent = {
|
||||
|
||||
subject: C_("title", "Restart & Install Updates"),
|
||||
description: function(seconds) {
|
||||
@ -132,18 +132,38 @@ const restartInstallDialogContent = {
|
||||
showOtherSessions: true,
|
||||
};
|
||||
|
||||
const restartUpgradeDialogContent = {
|
||||
|
||||
subject: C_("title", "Restart & Install Upgrade"),
|
||||
upgradeDescription: function(distroName, distroVersion) {
|
||||
/* Translators: This is the text displayed for system upgrades in the
|
||||
shut down dialog. First %s gets replaced with the distro name and
|
||||
second %s with the distro version to upgrade to */
|
||||
return _("%s %s will be installed after restart. Upgrade installation can take a long time: ensure that you have backed up and that the computer is plugged in.").format(distroName, distroVersion);
|
||||
},
|
||||
disableTimer: true,
|
||||
showBatteryWarning: false,
|
||||
confirmButtons: [{ signal: 'ConfirmedReboot',
|
||||
label: C_("button", "Restart & Install") }],
|
||||
iconName: 'view-refresh-symbolic',
|
||||
iconStyleClass: 'end-session-dialog-shutdown-icon',
|
||||
showOtherSessions: true,
|
||||
};
|
||||
|
||||
const DialogType = {
|
||||
LOGOUT: 0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */,
|
||||
SHUTDOWN: 1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */,
|
||||
RESTART: 2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */,
|
||||
UPDATE_RESTART: 3
|
||||
UPDATE_RESTART: 3,
|
||||
UPGRADE_RESTART: 4
|
||||
};
|
||||
|
||||
const DialogContent = {
|
||||
0 /* DialogType.LOGOUT */: logoutDialogContent,
|
||||
1 /* DialogType.SHUTDOWN */: shutdownDialogContent,
|
||||
2 /* DialogType.RESTART */: restartDialogContent,
|
||||
3 /* DialogType.UPDATE_RESTART */: restartInstallDialogContent
|
||||
3 /* DialogType.UPDATE_RESTART */: restartUpdateDialogContent,
|
||||
4 /* DialogType.UPGRADE_RESTART */: restartUpgradeDialogContent
|
||||
};
|
||||
|
||||
const MAX_USERS_IN_SESSION_DIALOG = 5;
|
||||
@ -163,7 +183,10 @@ const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface);
|
||||
const PkOfflineIface = '<node> \
|
||||
<interface name="org.freedesktop.PackageKit.Offline"> \
|
||||
<property name="UpdatePrepared" type="b" access="read"/> \
|
||||
<property name="TriggerAction" type="s" access="read"/> \
|
||||
<property name="UpdateTriggered" type="b" access="read"/> \
|
||||
<property name="UpgradePrepared" type="b" access="read"/> \
|
||||
<property name="UpgradeTriggered" type="b" access="read"/> \
|
||||
<property name="PreparedUpgrade" type="a{sv}" access="read"/> \
|
||||
<method name="Trigger"> \
|
||||
<arg type="s" name="action" direction="in"/> \
|
||||
</method> \
|
||||
@ -415,11 +438,19 @@ const EndSessionDialog = new Lang.Class({
|
||||
|
||||
if (dialogContent.descriptionWithUser)
|
||||
description = dialogContent.descriptionWithUser(realName, displayTime);
|
||||
else
|
||||
description = dialogContent.description(displayTime);
|
||||
}
|
||||
}
|
||||
|
||||
// Use a different description when we are installing a system upgrade
|
||||
if (dialogContent.upgradeDescription) {
|
||||
let name = this._pkOfflineProxy.PreparedUpgrade['name'].deep_unpack();
|
||||
let version = this._pkOfflineProxy.PreparedUpgrade['version'].deep_unpack();
|
||||
|
||||
if (name != null && version != null)
|
||||
description = dialogContent.upgradeDescription(name, version);
|
||||
}
|
||||
|
||||
// Fall back to regular description
|
||||
if (!description)
|
||||
description = dialogContent.description(displayTime);
|
||||
|
||||
@ -698,9 +729,12 @@ const EndSessionDialog = new Lang.Class({
|
||||
this._totalSecondsToStayOpen = totalSecondsToStayOpen;
|
||||
this._type = type;
|
||||
|
||||
if (this._type == DialogType.RESTART &&
|
||||
this._pkOfflineProxy.TriggerAction == 'reboot')
|
||||
this._type = DialogType.UPDATE_RESTART;
|
||||
if (this._type == DialogType.RESTART) {
|
||||
if (this._pkOfflineProxy.UpdateTriggered)
|
||||
this._type = DialogType.UPDATE_RESTART;
|
||||
else if (this._pkOfflineProxy.UpgradeTriggered)
|
||||
this._type = DialogType.UPGRADE_RESTART;
|
||||
}
|
||||
|
||||
this._applications = [];
|
||||
this._applicationList.destroy_all_children();
|
||||
@ -727,19 +761,19 @@ const EndSessionDialog = new Lang.Class({
|
||||
if (dialogContent.showOtherSessions)
|
||||
this._loadSessions();
|
||||
|
||||
let updateAlreadyTriggered = this._pkOfflineProxy.TriggerAction == 'power-off' || this._pkOfflineProxy.TriggerAction == 'reboot';
|
||||
let updateTriggered = this._pkOfflineProxy.UpdateTriggered;
|
||||
let updatePrepared = this._pkOfflineProxy.UpdatePrepared;
|
||||
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
|
||||
|
||||
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText);
|
||||
this._checkBox.actor.visible = (dialogContent.checkBoxText && updatePrepared && updatesAllowed);
|
||||
this._checkBox.actor.checked = (updatePrepared && updateAlreadyTriggered);
|
||||
this._checkBox.actor.checked = (updatePrepared && updateTriggered);
|
||||
|
||||
// We show the warning either together with the checkbox, or when
|
||||
// updates have already been triggered, but the user doesn't have
|
||||
// enough permissions to cancel them.
|
||||
this._batteryWarning.visible = (dialogContent.showBatteryWarning &&
|
||||
(this._checkBox.actor.visible || updatePrepared && updateAlreadyTriggered && !updatesAllowed));
|
||||
(this._checkBox.actor.visible || updatePrepared && updateTriggered && !updatesAllowed));
|
||||
|
||||
this._updateButtons();
|
||||
|
||||
@ -749,7 +783,9 @@ const EndSessionDialog = new Lang.Class({
|
||||
return;
|
||||
}
|
||||
|
||||
this._startTimer();
|
||||
if (!dialogContent.disableTimer)
|
||||
this._startTimer();
|
||||
|
||||
this._sync();
|
||||
|
||||
let signalId = this.connect('opened',
|
||||
|
@ -10,6 +10,7 @@ const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const InputSourceManager = imports.ui.status.keyboard;
|
||||
|
||||
const BoxPointer = imports.ui.boxpointer;
|
||||
const Layout = imports.ui.layout;
|
||||
@ -757,19 +758,48 @@ const ShellWaylandAdapter = new Lang.Class({
|
||||
Name: 'ShellWaylandAdapter',
|
||||
Extends: Caribou.XAdapter,
|
||||
|
||||
_init: function () {
|
||||
this.parent();
|
||||
let deviceManager = Clutter.DeviceManager.get_default();
|
||||
this._virtualDevice = deviceManager.create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE);
|
||||
|
||||
this._inputSourceManager = InputSourceManager.getInputSourceManager();
|
||||
this._sourceChangedId = this._inputSourceManager.connect('current-source-changed',
|
||||
Lang.bind(this, this._onSourceChanged));
|
||||
this._sourcesModifiedId = this._inputSourceManager.connect ('sources-changed',
|
||||
Lang.bind(this, this._onSourcesModified));
|
||||
},
|
||||
|
||||
_onSourcesModified: function () {
|
||||
this.emit('config-changed');
|
||||
},
|
||||
|
||||
_onSourceChanged: function (inputSourceManager, oldSource) {
|
||||
let source = inputSourceManager.currentSource;
|
||||
this.emit('group-changed', source.index, source.id, '');
|
||||
},
|
||||
|
||||
vfunc_get_groups: function () {
|
||||
let inputSources = this._inputSourceManager.inputSources;
|
||||
let groups = []
|
||||
let variants = [];
|
||||
|
||||
for (let i in inputSources) {
|
||||
let is = inputSources[i];
|
||||
groups[is.index] = is.id;
|
||||
variants[is.index] = '';
|
||||
}
|
||||
|
||||
return [groups, groups.length, variants, variants.length];
|
||||
},
|
||||
|
||||
vfunc_keyval_press: function(keyval) {
|
||||
let focus = global.stage.get_key_focus();
|
||||
if (focus instanceof Clutter.Text)
|
||||
Shell.util_text_insert_keyval(focus, keyval);
|
||||
else
|
||||
this.parent(keyval);
|
||||
this._virtualDevice.notify_keyval(Clutter.get_current_event_time(),
|
||||
keyval, Clutter.KeyState.PRESSED);
|
||||
},
|
||||
|
||||
vfunc_keyval_release: function(keyval) {
|
||||
let focus = global.stage.get_key_focus();
|
||||
if (focus instanceof Clutter.Text)
|
||||
return; // do nothing
|
||||
else
|
||||
this.parent(keyval);
|
||||
this._virtualDevice.notify_keyval(Clutter.get_current_event_time(),
|
||||
keyval, Clutter.KeyState.RELEASED);
|
||||
},
|
||||
});
|
||||
|
@ -220,7 +220,8 @@ const LayoutManager = new Lang.Class({
|
||||
global.stage.add_child(this.uiGroup);
|
||||
|
||||
this.overviewGroup = new St.Widget({ name: 'overviewGroup',
|
||||
visible: false });
|
||||
visible: false,
|
||||
reactive: true });
|
||||
this.addChrome(this.overviewGroup);
|
||||
|
||||
this.screenShieldGroup = new St.Widget({ name: 'screenShieldGroup',
|
||||
@ -591,7 +592,10 @@ const LayoutManager = new Lang.Class({
|
||||
this.addChrome(this._coverPane);
|
||||
|
||||
if (Meta.is_restart()) {
|
||||
// On restart, we don't do an animation
|
||||
// On restart, we don't do an animation. Force an update of the
|
||||
// regions immediately so that maximized windows restore to the
|
||||
// right size taking struts into account.
|
||||
this._updateRegions();
|
||||
} else if (Main.sessionMode.isGreeter) {
|
||||
this.panelBox.translation_y = -this.panelBox.height;
|
||||
} else {
|
||||
@ -938,6 +942,11 @@ const LayoutManager = new Lang.Class({
|
||||
if (Main.modalCount > 0)
|
||||
return GLib.SOURCE_REMOVE;
|
||||
|
||||
// Bug workaround - get_transformed_position()/get_transformed_size() don't work after
|
||||
// a change in stage size until the first pick or paint.
|
||||
// https://bugzilla.gnome.org/show_bug.cgi?id=761565
|
||||
global.stage.get_actor_at_pos(Clutter.PickMode.ALL, 0, 0);
|
||||
|
||||
let rects = [], struts = [], i;
|
||||
let isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow);
|
||||
let wantsInputRegion = !isPopupMenuVisible;
|
||||
|
@ -50,15 +50,14 @@ const LegacyTray = new Lang.Class({
|
||||
this._slideLayout.translationX = 0;
|
||||
this._slideLayout.slideDirection = OverviewControls.SlideDirection.LEFT;
|
||||
|
||||
this._slider = new St.Widget({ style_class: 'legacy-tray',
|
||||
x_expand: true, y_expand: true,
|
||||
this._slider = new St.Widget({ x_expand: true, y_expand: true,
|
||||
x_align: Clutter.ActorAlign.START,
|
||||
y_align: Clutter.ActorAlign.END,
|
||||
layout_manager: this._slideLayout });
|
||||
this.actor.add_actor(this._slider);
|
||||
this._slider.connect('notify::allocation', Lang.bind(this, this._syncBarrier));
|
||||
|
||||
this._box = new St.BoxLayout();
|
||||
this._box = new St.BoxLayout({ style_class: 'legacy-tray' });
|
||||
this._slider.add_actor(this._box);
|
||||
|
||||
this._concealHandle = new St.Button({ style_class: 'legacy-tray-handle',
|
||||
|
@ -11,6 +11,7 @@ const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const AccessDialog = imports.ui.accessDialog;
|
||||
const AudioDeviceSelection = imports.ui.audioDeviceSelection;
|
||||
const Components = imports.ui.components;
|
||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||
@ -63,6 +64,7 @@ let ctrlAltTabManager = null;
|
||||
let osdWindowManager = null;
|
||||
let osdMonitorLabeler = null;
|
||||
let sessionMode = null;
|
||||
let shellAccessDialogDBusService = null;
|
||||
let shellAudioSelectionDBusService = null;
|
||||
let shellDBusService = null;
|
||||
let shellMountOpDBusService = null;
|
||||
@ -122,6 +124,7 @@ function start() {
|
||||
_loadDefaultStylesheet);
|
||||
_initializeUI();
|
||||
|
||||
shellAccessDialogDBusService = new AccessDialog.AccessDialogDBus();
|
||||
shellAudioSelectionDBusService = new AudioDeviceSelection.AudioDeviceSelectionDBus();
|
||||
shellDBusService = new ShellDBus.GnomeShell();
|
||||
shellMountOpDBusService = new ShellMountOperation.GnomeShellMountOpHandler();
|
||||
@ -191,6 +194,8 @@ function _initializeUI() {
|
||||
return true;
|
||||
});
|
||||
|
||||
global.display.connect('gl-video-memory-purged', loadTheme);
|
||||
|
||||
// Provide the bus object for gnome-session to
|
||||
// initiate logouts.
|
||||
EndSessionDialog.init();
|
||||
|
@ -1,5 +1,6 @@
|
||||
const Atk = imports.gi.Atk;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const GObject = imports.gi.GObject;
|
||||
const Lang = imports.lang;
|
||||
|
@ -259,7 +259,7 @@ const ModalDialog = new Lang.Class({
|
||||
if (this.state == State.OPENED || this.state == State.OPENING)
|
||||
return true;
|
||||
|
||||
if (!this.pushModal({ timestamp: timestamp }))
|
||||
if (!this.pushModal(timestamp))
|
||||
return false;
|
||||
|
||||
this._fadeOpen(onPrimary);
|
||||
@ -318,8 +318,11 @@ const ModalDialog = new Lang.Class({
|
||||
pushModal: function (timestamp) {
|
||||
if (this._hasModal)
|
||||
return true;
|
||||
if (!Main.pushModal(this._group, { timestamp: timestamp,
|
||||
actionMode: this._actionMode }))
|
||||
|
||||
let params = { actionMode: this._actionMode };
|
||||
if (timestamp)
|
||||
params['timestamp'] = timestamp;
|
||||
if (!Main.pushModal(this._group, params))
|
||||
return false;
|
||||
|
||||
this._hasModal = true;
|
||||
|
@ -22,11 +22,13 @@ const LevelBar = new Lang.Class({
|
||||
this._level = 0;
|
||||
|
||||
this.actor = new St.Bin({ style_class: 'level',
|
||||
x_fill: true, y_fill: true });
|
||||
this._bar = new St.DrawingArea();
|
||||
this._bar.connect('repaint', Lang.bind(this, this._repaint));
|
||||
x_align: St.Align.START,
|
||||
y_fill: true });
|
||||
this._bar = new St.Widget({ style_class: 'level-bar' });
|
||||
|
||||
this.actor.set_child(this._bar);
|
||||
|
||||
this.actor.connect('notify::width', () => { this.level = this.level; });
|
||||
},
|
||||
|
||||
get level() {
|
||||
@ -34,39 +36,44 @@ const LevelBar = new Lang.Class({
|
||||
},
|
||||
|
||||
set level(value) {
|
||||
let newValue = Math.max(0, Math.min(value, 100));
|
||||
if (newValue == this._level)
|
||||
return;
|
||||
this._level = newValue;
|
||||
this._bar.queue_repaint();
|
||||
this._level = Math.max(0, Math.min(value, 100));
|
||||
|
||||
let alloc = this.actor.get_allocation_box();
|
||||
let newWidth = Math.round((alloc.x2 - alloc.x1) * this._level / 100);
|
||||
if (newWidth != this._bar.width)
|
||||
this._bar.width = newWidth;
|
||||
}
|
||||
});
|
||||
|
||||
const OsdWindowConstraint = new Lang.Class({
|
||||
Name: 'OsdWindowConstraint',
|
||||
Extends: Clutter.Constraint,
|
||||
|
||||
_init: function(props) {
|
||||
this._minSize = 0;
|
||||
this.parent(props);
|
||||
},
|
||||
|
||||
_repaint: function() {
|
||||
let cr = this._bar.get_context();
|
||||
set minSize(v) {
|
||||
this._minSize = v;
|
||||
if (this.actor)
|
||||
this.actor.queue_relayout();
|
||||
},
|
||||
|
||||
let node = this.actor.get_theme_node();
|
||||
let radius = node.get_border_radius(0); // assume same radius for all corners
|
||||
Clutter.cairo_set_source_color(cr, node.get_foreground_color());
|
||||
vfunc_update_allocation: function(actor, actorBox) {
|
||||
// Clutter will adjust the allocation for margins,
|
||||
// so add it to our minimum size
|
||||
let minSize = this._minSize + actor.margin_top + actor.margin_bottom;
|
||||
let [width, height] = actorBox.get_size();
|
||||
|
||||
let [w, h] = this._bar.get_surface_size();
|
||||
w *= (this._level / 100.);
|
||||
// Enforce a ratio of 1
|
||||
let size = Math.ceil(Math.max(minSize, height));
|
||||
actorBox.set_size(size, size);
|
||||
|
||||
if (w == 0)
|
||||
return;
|
||||
|
||||
cr.moveTo(radius, 0);
|
||||
if (w >= radius)
|
||||
cr.arc(w - radius, radius, radius, 1.5 * Math.PI, 2. * Math.PI);
|
||||
else
|
||||
cr.lineTo(w, 0);
|
||||
if (w >= radius)
|
||||
cr.arc(w - radius, h - radius, radius, 0, 0.5 * Math.PI);
|
||||
else
|
||||
cr.lineTo(w, h);
|
||||
cr.arc(radius, h - radius, radius, 0.5 * Math.PI, Math.PI);
|
||||
cr.arc(radius, radius, radius, Math.PI, 1.5 * Math.PI);
|
||||
cr.fill();
|
||||
cr.$dispose();
|
||||
// Recenter
|
||||
let [x, y] = actorBox.get_origin();
|
||||
actorBox.set_origin(Math.floor(x + width / 2 - size / 2),
|
||||
Math.floor(y + height / 2 - size / 2));
|
||||
}
|
||||
});
|
||||
|
||||
@ -74,7 +81,6 @@ const OsdWindow = new Lang.Class({
|
||||
Name: 'OsdWindow',
|
||||
|
||||
_init: function(monitorIndex) {
|
||||
this._popupSize = 0;
|
||||
this.actor = new St.Widget({ x_expand: true,
|
||||
y_expand: true,
|
||||
x_align: Clutter.ActorAlign.CENTER,
|
||||
@ -84,19 +90,12 @@ const OsdWindow = new Lang.Class({
|
||||
let constraint = new Layout.MonitorConstraint({ index: monitorIndex });
|
||||
this.actor.add_constraint(constraint);
|
||||
|
||||
this._boxConstraint = new OsdWindowConstraint();
|
||||
this._box = new St.BoxLayout({ style_class: 'osd-window',
|
||||
vertical: true });
|
||||
this._box.add_constraint(this._boxConstraint);
|
||||
this.actor.add_actor(this._box);
|
||||
|
||||
this._box.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
||||
this._box.connect('notify::height', Lang.bind(this,
|
||||
function() {
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
||||
function() {
|
||||
this._box.width = this._box.height;
|
||||
}));
|
||||
}));
|
||||
|
||||
this._icon = new St.Icon();
|
||||
this._box.add(this._icon, { expand: true });
|
||||
|
||||
@ -198,30 +197,12 @@ const OsdWindow = new Lang.Class({
|
||||
let scalew = monitor.width / 640.0;
|
||||
let scaleh = monitor.height / 480.0;
|
||||
let scale = Math.min(scalew, scaleh);
|
||||
this._popupSize = 110 * Math.max(1, scale);
|
||||
let popupSize = 110 * Math.max(1, scale);
|
||||
|
||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||
this._icon.icon_size = this._popupSize / (2 * scaleFactor);
|
||||
this._icon.icon_size = popupSize / (2 * scaleFactor);
|
||||
this._box.translation_y = monitor.height / 4;
|
||||
this._box.style_changed();
|
||||
},
|
||||
|
||||
_onStyleChanged: function() {
|
||||
let themeNode = this._box.get_theme_node();
|
||||
let horizontalPadding = themeNode.get_horizontal_padding();
|
||||
let verticalPadding = themeNode.get_vertical_padding();
|
||||
let topBorder = themeNode.get_border_width(St.Side.TOP);
|
||||
let bottomBorder = themeNode.get_border_width(St.Side.BOTTOM);
|
||||
let leftBorder = themeNode.get_border_width(St.Side.LEFT);
|
||||
let rightBorder = themeNode.get_border_width(St.Side.RIGHT);
|
||||
|
||||
let minWidth = this._popupSize - verticalPadding - leftBorder - rightBorder;
|
||||
let minHeight = this._popupSize - horizontalPadding - topBorder - bottomBorder;
|
||||
|
||||
// minWidth/minHeight here are in real pixels,
|
||||
// but the theme takes measures in unscaled dimensions
|
||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||
this._box.style = 'min-height: %dpx;'.format(Math.max(minWidth, minHeight) / scaleFactor);
|
||||
this._boxConstraint.minSize = popupSize;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -107,18 +107,12 @@ const Overview = new Lang.Class({
|
||||
|
||||
this._overviewCreated = true;
|
||||
|
||||
let layout = new Clutter.BinLayout();
|
||||
this._stack = new Clutter.Actor({ layout_manager: layout });
|
||||
this._stack.add_constraint(new LayoutManager.MonitorConstraint({ primary: true }));
|
||||
|
||||
/* Translators: This is the main view to select
|
||||
activities. See also note for "Activities" string. */
|
||||
this._overview = new St.BoxLayout({ name: 'overview',
|
||||
accessible_name: _("Overview"),
|
||||
reactive: true,
|
||||
vertical: true,
|
||||
x_expand: true,
|
||||
y_expand: true });
|
||||
vertical: true });
|
||||
this._overview.add_constraint(new LayoutManager.MonitorConstraint({ primary: true }));
|
||||
this._overview._delegate = this;
|
||||
|
||||
// The main Background actors are inside global.window_group which are
|
||||
@ -126,7 +120,7 @@ const Overview = new Lang.Class({
|
||||
// one. Instances of this class share a single CoglTexture behind the
|
||||
// scenes which allows us to show the background with different
|
||||
// rendering options without duplicating the texture data.
|
||||
this._backgroundGroup = new Meta.BackgroundGroup();
|
||||
this._backgroundGroup = new Meta.BackgroundGroup({ reactive: true });
|
||||
Main.layoutManager.overviewGroup.add_child(this._backgroundGroup);
|
||||
this._bgManagers = [];
|
||||
|
||||
@ -149,8 +143,7 @@ const Overview = new Lang.Class({
|
||||
Main.layoutManager.overviewGroup.add_child(this._coverPane);
|
||||
this._coverPane.connect('event', Lang.bind(this, function (actor, event) { return Clutter.EVENT_STOP; }));
|
||||
|
||||
this._stack.add_actor(this._overview);
|
||||
Main.layoutManager.overviewGroup.add_child(this._stack);
|
||||
Main.layoutManager.overviewGroup.add_child(this._overview);
|
||||
|
||||
this._coverPane.hide();
|
||||
|
||||
@ -159,6 +152,9 @@ const Overview = new Lang.Class({
|
||||
dragMotion: Lang.bind(this, this._onDragMotion)
|
||||
};
|
||||
|
||||
|
||||
Main.layoutManager.overviewGroup.connect('scroll-event',
|
||||
Lang.bind(this, this._onScrollEvent));
|
||||
Main.xdndHandler.connect('drag-begin', Lang.bind(this, this._onDragBegin));
|
||||
Main.xdndHandler.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
||||
|
||||
@ -255,7 +251,6 @@ const Overview = new Lang.Class({
|
||||
|
||||
// Add our same-line elements after the search entry
|
||||
this._overview.add(this._controls.actor, { y_fill: true, expand: true });
|
||||
this._controls.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||
|
||||
// TODO - recalculate everything when desktop size changes
|
||||
this.dashIconSize = this._dash.iconSize;
|
||||
@ -372,7 +367,7 @@ const Overview = new Lang.Class({
|
||||
if (this.isDummy)
|
||||
return;
|
||||
|
||||
this._overview.add_action(action);
|
||||
this._backgroundGroup.add_action(action);
|
||||
},
|
||||
|
||||
_getDesktopClone: function() {
|
||||
@ -552,8 +547,8 @@ const Overview = new Lang.Class({
|
||||
Meta.disable_unredirect_for_screen(global.screen);
|
||||
this.viewSelector.show();
|
||||
|
||||
this._stack.opacity = 0;
|
||||
Tweener.addTween(this._stack,
|
||||
this._overview.opacity = 0;
|
||||
Tweener.addTween(this._overview,
|
||||
{ opacity: 255,
|
||||
transition: 'easeOutQuad',
|
||||
time: ANIMATION_TIME,
|
||||
@ -618,7 +613,7 @@ const Overview = new Lang.Class({
|
||||
this.viewSelector.animateFromOverview();
|
||||
|
||||
// Make other elements fade out.
|
||||
Tweener.addTween(this._stack,
|
||||
Tweener.addTween(this._overview,
|
||||
{ opacity: 0,
|
||||
transition: 'easeOutQuad',
|
||||
time: ANIMATION_TIME,
|
||||
|
@ -421,7 +421,6 @@ const ControlsManager = new Lang.Class({
|
||||
|
||||
let layout = new ControlsLayout();
|
||||
this.actor = new St.Widget({ layout_manager: layout,
|
||||
reactive: true,
|
||||
x_expand: true, y_expand: true,
|
||||
clip_to_allocation: true });
|
||||
this._group = new St.BoxLayout({ name: 'overview-group',
|
||||
|
@ -349,7 +349,6 @@ const Arrow = new Lang.Class({
|
||||
_init: function(params) {
|
||||
this.parent(params);
|
||||
this.x_fill = this.y_fill = true;
|
||||
this.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
|
||||
|
||||
this._drawingArea = new St.DrawingArea();
|
||||
this._drawingArea.connect('repaint', Lang.bind(this, this._drawArrow));
|
||||
@ -377,6 +376,22 @@ const Arrow = new Lang.Class({
|
||||
cr.$dispose();
|
||||
},
|
||||
|
||||
vfunc_get_paint_volume: function(volume) {
|
||||
if (!this.parent(volume))
|
||||
return false;
|
||||
|
||||
if (!this._shadow)
|
||||
return true;
|
||||
|
||||
let shadow_box = new Clutter.ActorBox();
|
||||
this._shadow.get_box(this._drawingArea.get_allocation_box(), shadow_box);
|
||||
|
||||
volume.set_width(Math.max(shadow_box.x2 - shadow_box.x1, volume.get_width()));
|
||||
volume.set_height(Math.max(shadow_box.y2 - shadow_box.y1, volume.get_height()));
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
vfunc_style_changed: function() {
|
||||
let node = this.get_theme_node();
|
||||
this._shadow = node.get_shadow('-arrow-shadow');
|
||||
@ -384,6 +399,8 @@ const Arrow = new Lang.Class({
|
||||
this._shadowHelper = St.ShadowHelper.new(this._shadow);
|
||||
else
|
||||
this._shadowHelper = null;
|
||||
|
||||
this.parent();
|
||||
},
|
||||
|
||||
vfunc_paint: function() {
|
||||
@ -559,6 +576,9 @@ const ScreenShield = new Lang.Class({
|
||||
if (prevIsActive != this._isActive)
|
||||
this.emit('active-changed');
|
||||
|
||||
if (this._loginSession)
|
||||
this._loginSession.SetLockedHintRemote(active);
|
||||
|
||||
this._syncInhibitor();
|
||||
},
|
||||
|
||||
@ -708,7 +728,7 @@ const ScreenShield = new Lang.Class({
|
||||
let unitaryDelay = ARROW_ANIMATION_TIME / (arrows.length + 1);
|
||||
let maxOpacity = 255 * ARROW_ANIMATION_PEAK_OPACITY;
|
||||
for (let i = 0; i < arrows.length; i++) {
|
||||
arrows.opacity = 0;
|
||||
arrows[i].opacity = 0;
|
||||
Tweener.addTween(arrows[i],
|
||||
{ opacity: 0,
|
||||
delay: unitaryDelay * (N_ARROWS - (i + 1)),
|
||||
|
@ -61,8 +61,8 @@ const InputSource = new Lang.Class({
|
||||
this.emit('changed');
|
||||
},
|
||||
|
||||
activate: function() {
|
||||
this.emit('activate');
|
||||
activate: function(interactive) {
|
||||
this.emit('activate', !!interactive);
|
||||
},
|
||||
|
||||
_getXkbId: function() {
|
||||
@ -109,7 +109,7 @@ const InputSourcePopup = new Lang.Class({
|
||||
_finish : function() {
|
||||
this.parent();
|
||||
|
||||
this._items[this._selectedIndex].activate();
|
||||
this._items[this._selectedIndex].activate(true);
|
||||
},
|
||||
});
|
||||
|
||||
@ -159,6 +159,14 @@ const InputSourceSettings = new Lang.Class({
|
||||
return [];
|
||||
},
|
||||
|
||||
get mruSources() {
|
||||
return [];
|
||||
},
|
||||
|
||||
set mruSources(sourcesList) {
|
||||
// do nothing
|
||||
},
|
||||
|
||||
get keyboardOptions() {
|
||||
return [];
|
||||
},
|
||||
@ -251,6 +259,7 @@ const InputSourceSessionSettings = new Lang.Class({
|
||||
|
||||
_DESKTOP_INPUT_SOURCES_SCHEMA: 'org.gnome.desktop.input-sources',
|
||||
_KEY_INPUT_SOURCES: 'sources',
|
||||
_KEY_MRU_SOURCES: 'mru-sources',
|
||||
_KEY_KEYBOARD_OPTIONS: 'xkb-options',
|
||||
_KEY_PER_WINDOW: 'per-window',
|
||||
|
||||
@ -261,9 +270,9 @@ const InputSourceSessionSettings = new Lang.Class({
|
||||
this._settings.connect('changed::' + this._KEY_PER_WINDOW, Lang.bind(this, this._emitPerWindowChanged));
|
||||
},
|
||||
|
||||
get inputSources() {
|
||||
_getSourcesList: function(key) {
|
||||
let sourcesList = [];
|
||||
let sources = this._settings.get_value(this._KEY_INPUT_SOURCES);
|
||||
let sources = this._settings.get_value(key);
|
||||
let nSources = sources.n_children();
|
||||
|
||||
for (let i = 0; i < nSources; i++) {
|
||||
@ -273,6 +282,19 @@ const InputSourceSessionSettings = new Lang.Class({
|
||||
return sourcesList;
|
||||
},
|
||||
|
||||
get inputSources() {
|
||||
return this._getSourcesList(this._KEY_INPUT_SOURCES);
|
||||
},
|
||||
|
||||
get mruSources() {
|
||||
return this._getSourcesList(this._KEY_MRU_SOURCES);
|
||||
},
|
||||
|
||||
set mruSources(sourcesList) {
|
||||
let sources = GLib.Variant.new('a(ss)', sourcesList);
|
||||
this._settings.set_value(this._KEY_MRU_SOURCES, sources);
|
||||
},
|
||||
|
||||
get keyboardOptions() {
|
||||
return this._settings.get_strv(this._KEY_KEYBOARD_OPTIONS);
|
||||
},
|
||||
@ -372,7 +394,7 @@ const InputSourceManager = new Lang.Class({
|
||||
while (!(is = this._inputSources[nextIndex]))
|
||||
nextIndex += 1;
|
||||
|
||||
is.activate();
|
||||
is.activate(true);
|
||||
return true;
|
||||
},
|
||||
|
||||
@ -400,6 +422,25 @@ const InputSourceManager = new Lang.Class({
|
||||
this._keyboardManager.reapply();
|
||||
},
|
||||
|
||||
_updateMruSettings: function() {
|
||||
// If IBus is not ready we don't have a full picture of all
|
||||
// the available sources, so don't update the setting
|
||||
if (!this._ibusReady)
|
||||
return;
|
||||
|
||||
// If IBus is temporarily disabled, don't update the setting
|
||||
if (this._disableIBus)
|
||||
return;
|
||||
|
||||
let sourcesList = [];
|
||||
for (let i = 0; i < this._mruSources.length; ++i) {
|
||||
let source = this._mruSources[i];
|
||||
sourcesList.push([source.type, source.id]);
|
||||
}
|
||||
|
||||
this._settings.mruSources = sourcesList;
|
||||
},
|
||||
|
||||
_currentInputSourceChanged: function(newSource) {
|
||||
let oldSource;
|
||||
[oldSource, this._currentSource] = [this._currentSource, newSource];
|
||||
@ -416,7 +457,7 @@ const InputSourceManager = new Lang.Class({
|
||||
this._changePerWindowSource();
|
||||
},
|
||||
|
||||
_activateInputSource: function(is) {
|
||||
_activateInputSource: function(is, interactive) {
|
||||
KeyboardManager.holdKeyboard();
|
||||
this._keyboardManager.apply(is.xkbId);
|
||||
|
||||
@ -434,6 +475,54 @@ const InputSourceManager = new Lang.Class({
|
||||
|
||||
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
||||
this._currentInputSourceChanged(is);
|
||||
|
||||
if (interactive)
|
||||
this._updateMruSettings();
|
||||
},
|
||||
|
||||
_updateMruSources: function() {
|
||||
let sourcesList = [];
|
||||
for (let i in this._inputSources)
|
||||
sourcesList.push(this._inputSources[i]);
|
||||
|
||||
this._keyboardManager.setUserLayouts(sourcesList.map(function(x) { return x.xkbId; }));
|
||||
|
||||
if (!this._disableIBus && this._mruSourcesBackup) {
|
||||
this._mruSources = this._mruSourcesBackup;
|
||||
this._mruSourcesBackup = null;
|
||||
}
|
||||
|
||||
// Initialize from settings when we have no MRU sources list
|
||||
if (this._mruSources.length == 0) {
|
||||
let mruSettings = this._settings.mruSources;
|
||||
for (let i = 0; i < mruSettings.length; i++) {
|
||||
let mruSettingSource = mruSettings[i];
|
||||
let mruSource = null;
|
||||
|
||||
for (let j = 0; j < sourcesList.length; j++) {
|
||||
let source = sourcesList[j];
|
||||
if (source.type == mruSettingSource.type &&
|
||||
source.id == mruSettingSource.id) {
|
||||
mruSource = source;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (mruSource)
|
||||
this._mruSources.push(mruSource);
|
||||
}
|
||||
}
|
||||
|
||||
let mruSources = [];
|
||||
for (let i = 0; i < this._mruSources.length; i++) {
|
||||
for (let j = 0; j < sourcesList.length; j++)
|
||||
if (this._mruSources[i].type == sourcesList[j].type &&
|
||||
this._mruSources[i].id == sourcesList[j].id) {
|
||||
mruSources = mruSources.concat(sourcesList.splice(j, 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
this._mruSources = mruSources.concat(sourcesList);
|
||||
},
|
||||
|
||||
_inputSourcesChanged: function() {
|
||||
@ -510,30 +599,10 @@ const InputSourceManager = new Lang.Class({
|
||||
|
||||
this.emit('sources-changed');
|
||||
|
||||
let sourcesList = [];
|
||||
for (let i in this._inputSources)
|
||||
sourcesList.push(this._inputSources[i]);
|
||||
|
||||
this._keyboardManager.setUserLayouts(sourcesList.map(function(x) { return x.xkbId; }));
|
||||
|
||||
if (!this._disableIBus && this._mruSourcesBackup) {
|
||||
this._mruSources = this._mruSourcesBackup;
|
||||
this._mruSourcesBackup = null;
|
||||
}
|
||||
|
||||
let mruSources = [];
|
||||
for (let i = 0; i < this._mruSources.length; i++) {
|
||||
for (let j = 0; j < sourcesList.length; j++)
|
||||
if (this._mruSources[i].type == sourcesList[j].type &&
|
||||
this._mruSources[i].id == sourcesList[j].id) {
|
||||
mruSources = mruSources.concat(sourcesList.splice(j, 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
this._mruSources = mruSources.concat(sourcesList);
|
||||
this._updateMruSources();
|
||||
|
||||
if (this._mruSources.length > 0)
|
||||
this._mruSources[0].activate();
|
||||
this._mruSources[0].activate(false);
|
||||
|
||||
// All ibus engines are preloaded here to reduce the launching time
|
||||
// when users switch the input sources.
|
||||
@ -642,7 +711,7 @@ const InputSourceManager = new Lang.Class({
|
||||
}
|
||||
|
||||
if (window._currentSource)
|
||||
window._currentSource.activate();
|
||||
window._currentSource.activate(false);
|
||||
},
|
||||
|
||||
_sourcesPerWindowChanged: function() {
|
||||
@ -763,7 +832,10 @@ const InputSourceIndicator = new Lang.Class({
|
||||
let is = this._inputSourceManager.inputSources[i];
|
||||
|
||||
let menuItem = new LayoutMenuItem(is.displayName, is.shortName);
|
||||
menuItem.connect('activate', Lang.bind(is, is.activate));
|
||||
menuItem.connect('activate', function() {
|
||||
is.activate(true);
|
||||
});
|
||||
|
||||
let indicatorLabel = new St.Label({ text: is.shortName,
|
||||
visible: false });
|
||||
|
||||
|
@ -17,7 +17,7 @@ const LOCATION_SCHEMA = 'org.gnome.system.location';
|
||||
const MAX_ACCURACY_LEVEL = 'max-accuracy-level';
|
||||
const ENABLED = 'enabled';
|
||||
|
||||
const APP_PERMISSIONS_TABLE = 'desktop';
|
||||
const APP_PERMISSIONS_TABLE = 'gnome';
|
||||
const APP_PERMISSIONS_ID = 'geolocation';
|
||||
|
||||
const GeoclueAccuracyLevel = {
|
||||
@ -62,8 +62,8 @@ var AgentIface = '<node> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
var XdgAppIface = '<node> \
|
||||
<interface name="org.freedesktop.XdgApp.PermissionStore"> \
|
||||
var PermissionStoreIface = '<node> \
|
||||
<interface name="org.freedesktop.impl.portal.PermissionStore"> \
|
||||
<method name="Lookup"> \
|
||||
<arg name="table" type="s" direction="in"/> \
|
||||
<arg name="id" type="s" direction="in"/> \
|
||||
@ -80,7 +80,7 @@ var XdgAppIface = '<node> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
const PermissionStore = Gio.DBusProxy.makeProxyWrapper(XdgAppIface);
|
||||
const PermissionStore = Gio.DBusProxy.makeProxyWrapper(PermissionStoreIface);
|
||||
|
||||
const Indicator = new Lang.Class({
|
||||
Name: 'LocationIndicator',
|
||||
@ -254,8 +254,8 @@ const Indicator = new Lang.Class({
|
||||
_connectToPermissionStore: function() {
|
||||
this._permStoreProxy = null;
|
||||
new PermissionStore(Gio.DBus.session,
|
||||
'org.freedesktop.XdgApp',
|
||||
'/org/freedesktop/XdgApp/PermissionStore',
|
||||
'org.freedesktop.impl.portal.PermissionStore',
|
||||
'/org/freedesktop/impl/portal/PermissionStore',
|
||||
Lang.bind(this, this._onPermStoreProxyReady));
|
||||
},
|
||||
|
||||
@ -286,7 +286,6 @@ const AppAuthorizer = new Lang.Class({
|
||||
this._maxAccuracyLevel = maxAccuracyLevel;
|
||||
|
||||
this._accuracyLevel = GeoclueAccuracyLevel.NONE;
|
||||
this._timesAllowed = 0;
|
||||
},
|
||||
|
||||
authorize: function(onAuthDone) {
|
||||
@ -329,15 +328,14 @@ const AppAuthorizer = new Lang.Class({
|
||||
[this._permissions] = result;
|
||||
let permission = this._permissions[this.desktopId];
|
||||
|
||||
let [levelStr, timeStr] = permission || ['NONE', '0'];
|
||||
this._accuracyLevel = GeoclueAccuracyLevel[levelStr] ||
|
||||
GeoclueAccuracyLevel.NONE;
|
||||
this._timesAllowed = Number(timeStr) || 0;
|
||||
|
||||
if (this._timesAllowed < 3)
|
||||
if (permission == null) {
|
||||
this._userAuthorizeApp();
|
||||
else
|
||||
} else {
|
||||
let [levelStr] = permission || ['NONE'];
|
||||
this._accuracyLevel = GeoclueAccuracyLevel[levelStr] ||
|
||||
GeoclueAccuracyLevel.NONE;
|
||||
this._completeAuth();
|
||||
}
|
||||
},
|
||||
|
||||
_userAuthorizeApp: function() {
|
||||
@ -368,7 +366,6 @@ const AppAuthorizer = new Lang.Class({
|
||||
this._accuracyLevel = clamp(this._accuracyLevel,
|
||||
0,
|
||||
this._maxAccuracyLevel);
|
||||
this._timesAllowed++;
|
||||
}
|
||||
this._saveToPermissionStore();
|
||||
|
||||
@ -379,15 +376,10 @@ const AppAuthorizer = new Lang.Class({
|
||||
if (this._permStoreProxy == null)
|
||||
return;
|
||||
|
||||
if (this._accuracyLevel != GeoclueAccuracyLevel.NONE) {
|
||||
let levelStr = accuracyLevelToString(this._accuracyLevel);
|
||||
let dateStr = Math.round(Date.now() / 1000).toString();
|
||||
this._permissions[this.desktopId] = [levelStr,
|
||||
this._timesAllowed.toString(),
|
||||
dateStr];
|
||||
} else {
|
||||
delete this._permissions[this.desktopId];
|
||||
}
|
||||
let levelStr = accuracyLevelToString(this._accuracyLevel);
|
||||
let dateStr = Math.round(Date.now() / 1000).toString();
|
||||
this._permissions[this.desktopId] = [levelStr, dateStr];
|
||||
|
||||
let data = GLib.Variant.new('av', {});
|
||||
|
||||
this._permStoreProxy.SetRemote(APP_PERMISSIONS_TABLE,
|
||||
@ -425,12 +417,12 @@ const GeolocationDialog = new Lang.Class({
|
||||
this._title = new St.Label({ style_class: 'geolocation-dialog-title headline' });
|
||||
messageBox.add_actor(this._title);
|
||||
|
||||
this._desc = new St.Label();
|
||||
messageBox.add_actor(this._desc);
|
||||
|
||||
this._reason = new St.Label();
|
||||
this._reason = new St.Label({ style_class: 'geolocation-dialog-reason' });
|
||||
messageBox.add_actor(this._reason);
|
||||
|
||||
this._privacyNote = new St.Label();
|
||||
messageBox.add_actor(this._privacyNote);
|
||||
|
||||
let button = this.addButton({ label: _("Deny Access"),
|
||||
action: Lang.bind(this, this._onDenyClicked),
|
||||
key: Clutter.KEY_Escape });
|
||||
@ -442,8 +434,7 @@ const GeolocationDialog = new Lang.Class({
|
||||
/* Translators: %s is an application name */
|
||||
this._title.text = _("Give %s access to your location?").format(name);
|
||||
|
||||
/* Translators: %s is an application name */
|
||||
this._desc.text = _("%s is requesting access to your location.").format(name);
|
||||
this._privacyNote.text = _("Location access can be changed at any time from the privacy settings.");
|
||||
|
||||
if (reason)
|
||||
this._reason.text = reason;
|
||||
|
@ -621,7 +621,7 @@ const NMDeviceBluetooth = new Lang.Class({
|
||||
_init: function(client, device, settings) {
|
||||
this.parent(client, device, settings);
|
||||
|
||||
this.item.menu.addMenuItem(createSettingsAction(_("Mobile Broadband Settings"), device));
|
||||
this.item.menu.addMenuItem(createSettingsAction(_("Bluetooth Settings"), device));
|
||||
},
|
||||
|
||||
_getDescription: function() {
|
||||
@ -629,7 +629,7 @@ const NMDeviceBluetooth = new Lang.Class({
|
||||
},
|
||||
|
||||
getConnectLabel: function() {
|
||||
return _("Use as Internet connection");
|
||||
return _("Connect to Internet");
|
||||
},
|
||||
|
||||
getIndicatorIcon: function() {
|
||||
|
@ -6,6 +6,7 @@ const Gdm = imports.gi.Gdm;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
@ -110,6 +111,7 @@ const Indicator = new Lang.Class({
|
||||
|
||||
this._session = new GnomeSession.SessionManager();
|
||||
this._loginManager = LoginManager.getLoginManager();
|
||||
this._monitorManager = Meta.MonitorManager.get();
|
||||
this._haveShutdown = true;
|
||||
this._haveSuspend = true;
|
||||
|
||||
@ -155,6 +157,8 @@ const Indicator = new Lang.Class({
|
||||
|
||||
this._orientationSettings.connect('changed::orientation-lock',
|
||||
Lang.bind(this, this._updateOrientationLock));
|
||||
Main.layoutManager.connect('monitors-changed',
|
||||
Lang.bind(this, this._updateOrientationLock));
|
||||
Gio.DBus.system.watch_name(SENSOR_BUS_NAME,
|
||||
Gio.BusNameWatcherFlags.NONE,
|
||||
Lang.bind(this, this._sensorProxyAppeared),
|
||||
@ -264,7 +268,8 @@ const Indicator = new Lang.Class({
|
||||
|
||||
_updateOrientationLock: function() {
|
||||
if (this._sensorProxy)
|
||||
this._orientationLockAction.visible = this._sensorProxy.HasAccelerometer;
|
||||
this._orientationLockAction.visible = this._sensorProxy.HasAccelerometer &&
|
||||
this._monitorManager.get_is_builtin_display_on();
|
||||
else
|
||||
this._orientationLockAction.visible = false;
|
||||
|
||||
@ -301,14 +306,17 @@ const Indicator = new Lang.Class({
|
||||
},
|
||||
|
||||
_updateHaveSuspend: function() {
|
||||
this._loginManager.canSuspend(Lang.bind(this, function(result) {
|
||||
this._haveSuspend = result;
|
||||
this._updateSuspend();
|
||||
}));
|
||||
this._loginManager.canSuspend(Lang.bind(this,
|
||||
function(canSuspend, needsAuth) {
|
||||
this._haveSuspend = canSuspend;
|
||||
this._suspendNeedsAuth = needsAuth;
|
||||
this._updateSuspend();
|
||||
}));
|
||||
},
|
||||
|
||||
_updateSuspend: function() {
|
||||
let disabled = Main.sessionMode.isLocked ||
|
||||
let disabled = (Main.sessionMode.isLocked &&
|
||||
this._suspendNeedsAuth) ||
|
||||
(Main.sessionMode.isGreeter &&
|
||||
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
|
||||
this._suspendAction.visible = this._haveSuspend && !disabled;
|
||||
|
@ -683,6 +683,8 @@ const WindowManager = new Lang.Class({
|
||||
|
||||
this._dimmedWindows = [];
|
||||
|
||||
this._skippedActors = [];
|
||||
|
||||
this._allowedKeybindings = {};
|
||||
|
||||
this._isWorkspacePrepended = false;
|
||||
@ -850,22 +852,34 @@ const WindowManager = new Lang.Class({
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-applications',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-group',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-applications-backward',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-group-backward',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-windows',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startWindowSwitcher));
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-windows-backward',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startWindowSwitcher));
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('cycle-windows',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('cycle-windows-backward',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('cycle-group',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('cycle-group-backward',
|
||||
Shell.ActionMode.NORMAL,
|
||||
Lang.bind(this, this._startSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-panels',
|
||||
Shell.ActionMode.NORMAL |
|
||||
Shell.ActionMode.OVERVIEW |
|
||||
@ -1023,6 +1037,10 @@ const WindowManager = new Lang.Class({
|
||||
this._workspaceTracker.keepWorkspaceAlive(workspace, duration);
|
||||
},
|
||||
|
||||
skipNextEffect: function(actor) {
|
||||
this._skippedActors.push(actor);
|
||||
},
|
||||
|
||||
setCustomKeybindingHandler: function(name, modes, handler) {
|
||||
if (Meta.keybindings_set_custom_handler(name, handler))
|
||||
this.allowKeybinding(name, modes);
|
||||
@ -1049,6 +1067,9 @@ const WindowManager = new Lang.Class({
|
||||
},
|
||||
|
||||
_shouldAnimateActor: function(actor, types) {
|
||||
if (this._removeEffect(this._skippedActors, actor))
|
||||
return false;
|
||||
|
||||
if (!this._shouldAnimate())
|
||||
return false;
|
||||
|
||||
@ -1337,9 +1358,13 @@ const WindowManager = new Lang.Class({
|
||||
_hasAttachedDialogs: function(window, ignoreWindow) {
|
||||
var count = 0;
|
||||
window.foreach_transient(function(win) {
|
||||
if (win != ignoreWindow && win.is_attached_dialog())
|
||||
if (win != ignoreWindow &&
|
||||
win.is_attached_dialog() &&
|
||||
win.get_transient_for() == window) {
|
||||
count++;
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return count != 0;
|
||||
},
|
||||
@ -1367,11 +1392,14 @@ const WindowManager = new Lang.Class({
|
||||
let dimmer = getWindowDimmer(actor);
|
||||
if (!dimmer)
|
||||
return;
|
||||
Tweener.addTween(dimmer,
|
||||
{ dimFactor: 1.0,
|
||||
time: DIM_TIME,
|
||||
transition: 'linear'
|
||||
});
|
||||
if (this._shouldAnimate())
|
||||
Tweener.addTween(dimmer,
|
||||
{ dimFactor: 1.0,
|
||||
time: DIM_TIME,
|
||||
transition: 'linear'
|
||||
});
|
||||
else
|
||||
dimmer.dimFactor = 1.0;
|
||||
},
|
||||
|
||||
_undimWindow: function(window) {
|
||||
@ -1381,10 +1409,13 @@ const WindowManager = new Lang.Class({
|
||||
let dimmer = getWindowDimmer(actor);
|
||||
if (!dimmer)
|
||||
return;
|
||||
Tweener.addTween(dimmer,
|
||||
{ dimFactor: 0.0,
|
||||
time: UNDIM_TIME,
|
||||
transition: 'linear' });
|
||||
if (this._shouldAnimate())
|
||||
Tweener.addTween(dimmer,
|
||||
{ dimFactor: 0.0,
|
||||
time: UNDIM_TIME,
|
||||
transition: 'linear' });
|
||||
else
|
||||
dimmer.dimFactor = 0.0;
|
||||
},
|
||||
|
||||
_mapWindow : function(shellwm, actor) {
|
||||
@ -1402,6 +1433,14 @@ const WindowManager = new Lang.Class({
|
||||
|
||||
actor._windowType = type;
|
||||
}));
|
||||
actor.meta_window.connect('unmanaged', Lang.bind(this, function(window) {
|
||||
let parent = window.get_transient_for();
|
||||
if (parent)
|
||||
this._checkDimming(parent);
|
||||
}));
|
||||
|
||||
if (actor.meta_window.is_attached_dialog())
|
||||
this._checkDimming(actor.get_meta_window().get_transient_for());
|
||||
|
||||
let types = [Meta.WindowType.NORMAL,
|
||||
Meta.WindowType.DIALOG,
|
||||
@ -1411,9 +1450,6 @@ const WindowManager = new Lang.Class({
|
||||
return;
|
||||
}
|
||||
|
||||
if (actor.meta_window.is_attached_dialog())
|
||||
this._checkDimming(actor.get_meta_window().get_transient_for());
|
||||
|
||||
switch (actor._windowType) {
|
||||
case Meta.WindowType.NORMAL:
|
||||
actor.set_pivot_point(0.5, 1.0);
|
||||
@ -1496,6 +1532,9 @@ const WindowManager = new Lang.Class({
|
||||
});
|
||||
}
|
||||
|
||||
if (window.is_attached_dialog())
|
||||
this._checkDimming(window.get_transient_for(), window);
|
||||
|
||||
let types = [Meta.WindowType.NORMAL,
|
||||
Meta.WindowType.DIALOG,
|
||||
Meta.WindowType.MODAL_DIALOG];
|
||||
@ -1530,7 +1569,6 @@ const WindowManager = new Lang.Class({
|
||||
|
||||
if (window.is_attached_dialog()) {
|
||||
let parent = window.get_transient_for();
|
||||
this._checkDimming(parent, window);
|
||||
actor._parentDestroyId = parent.connect('unmanaged', Lang.bind(this, function () {
|
||||
Tweener.removeTweens(actor);
|
||||
this._destroyWindowDone(shellwm, actor);
|
||||
@ -1736,23 +1774,37 @@ const WindowManager = new Lang.Class({
|
||||
this._windowMenuManager.showWindowMenuForWindow(window, menu, rect);
|
||||
},
|
||||
|
||||
_startAppSwitcher : function(display, screen, window, binding) {
|
||||
_startSwitcher: function(display, screen, window, binding) {
|
||||
let constructor = null;
|
||||
switch (binding.get_name()) {
|
||||
case 'switch-applications':
|
||||
case 'switch-applications-backward':
|
||||
case 'switch-group':
|
||||
case 'switch-group-backward':
|
||||
constructor = AltTab.AppSwitcherPopup;
|
||||
break;
|
||||
case 'switch-windows':
|
||||
case 'switch-windows-backward':
|
||||
constructor = AltTab.WindowSwitcherPopup;
|
||||
break;
|
||||
case 'cycle-windows':
|
||||
case 'cycle-windows-backward':
|
||||
constructor = AltTab.WindowCyclerPopup;
|
||||
break;
|
||||
case 'cycle-group':
|
||||
case 'cycle-group-backward':
|
||||
constructor = AltTab.GroupCyclerPopup;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!constructor)
|
||||
return;
|
||||
|
||||
/* prevent a corner case where both popups show up at once */
|
||||
if (this._workspaceSwitcherPopup != null)
|
||||
this._workspaceSwitcherPopup.destroy();
|
||||
|
||||
let tabPopup = new AltTab.AppSwitcherPopup();
|
||||
|
||||
if (!tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
|
||||
tabPopup.destroy();
|
||||
},
|
||||
|
||||
_startWindowSwitcher : function(display, screen, window, binding) {
|
||||
/* prevent a corner case where both popups show up at once */
|
||||
if (this._workspaceSwitcherPopup != null)
|
||||
this._workspaceSwitcherPopup.destroy();
|
||||
|
||||
let tabPopup = new AltTab.WindowSwitcherPopup();
|
||||
let tabPopup = new constructor();
|
||||
|
||||
if (!tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
|
||||
tabPopup.destroy();
|
||||
|
@ -19,8 +19,7 @@ const WorkspaceSwitcherPopup = new Lang.Class({
|
||||
Name: 'WorkspaceSwitcherPopup',
|
||||
|
||||
_init : function() {
|
||||
this.actor = new St.Widget({ reactive: true,
|
||||
x: 0,
|
||||
this.actor = new St.Widget({ x: 0,
|
||||
y: 0,
|
||||
width: global.screen_width,
|
||||
height: global.screen_height,
|
||||
|
@ -45,11 +45,11 @@ const PrimaryActorLayout = new Lang.Class({
|
||||
this.primaryActor = primaryActor;
|
||||
},
|
||||
|
||||
vfunc_get_preferred_width: function(forHeight) {
|
||||
vfunc_get_preferred_width: function(container, forHeight) {
|
||||
return this.primaryActor.get_preferred_width(forHeight);
|
||||
},
|
||||
|
||||
vfunc_get_preferred_height: function(forWidth) {
|
||||
vfunc_get_preferred_height: function(container, forWidth) {
|
||||
return this.primaryActor.get_preferred_height(forWidth);
|
||||
},
|
||||
});
|
||||
|
@ -103,7 +103,7 @@ const WorkspacesView = new Lang.Class({
|
||||
page_increment: 1,
|
||||
page_size: 1,
|
||||
step_increment: 0,
|
||||
upper: 0 });
|
||||
upper: global.screen.n_workspaces });
|
||||
this.scrollAdjustment.connect('notify::value',
|
||||
Lang.bind(this, this._onScroll));
|
||||
|
||||
@ -374,6 +374,10 @@ const ExtraWorkspaceView = new Lang.Class({
|
||||
this._workspace.setActualGeometry(this._actualGeometry);
|
||||
},
|
||||
|
||||
getActiveWorkspace: function() {
|
||||
return this._workspace;
|
||||
},
|
||||
|
||||
animateToOverview: function(animationType) {
|
||||
if (animationType == AnimationType.ZOOM)
|
||||
this._workspace.zoomToOverview();
|
||||
@ -421,8 +425,10 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
// Only switch to the workspace when there's no application
|
||||
// windows open. The problem is that it's too easy to miss
|
||||
// an app window and get the wrong one focused.
|
||||
let event = Clutter.get_current_event();
|
||||
let index = this._getMonitorIndexForEvent(event);
|
||||
if ((action.get_button() == 1 || action.get_button() == 0) &&
|
||||
this._getPrimaryView().getActiveWorkspace().isEmpty())
|
||||
this._workspacesViews[index].getActiveWorkspace().isEmpty())
|
||||
Main.overview.hide();
|
||||
}));
|
||||
Main.overview.addAction(clickAction);
|
||||
@ -431,11 +437,18 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
let panAction = new Clutter.PanAction({ threshold_trigger_edge: Clutter.GestureTriggerEdge.AFTER });
|
||||
panAction.connect('pan', Lang.bind(this, this._onPan));
|
||||
panAction.connect('gesture-begin', Lang.bind(this, function() {
|
||||
if (this._workspacesOnlyOnPrimary) {
|
||||
let event = Clutter.get_current_event();
|
||||
if (this._getMonitorIndexForEvent(event) != this._primaryIndex)
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].startSwipeScroll();
|
||||
return true;
|
||||
}));
|
||||
panAction.connect('gesture-cancel', Lang.bind(this, function() {
|
||||
clickAction.release();
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].endSwipeScroll();
|
||||
}));
|
||||
@ -581,6 +594,12 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
_getMonitorIndexForEvent: function(event) {
|
||||
let [x, y] = event.get_coords();
|
||||
let rect = new Meta.Rectangle({ x: x, y: y, width: 1, height: 1 });
|
||||
return global.screen.get_monitor_index_for_rect(rect);
|
||||
},
|
||||
|
||||
_getPrimaryView: function() {
|
||||
if (!this._workspacesViews.length)
|
||||
return null;
|
||||
@ -661,6 +680,11 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
_onScrollEvent: function(actor, event) {
|
||||
if (!this.actor.mapped)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (this._workspacesOnlyOnPrimary &&
|
||||
this._getMonitorIndexForEvent(event) != this._primaryIndex)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
let activeWs = global.screen.get_active_workspace();
|
||||
let ws;
|
||||
switch (event.get_scroll_direction()) {
|
||||
|
68
po/Makevars
Normal file
68
po/Makevars
Normal file
@ -0,0 +1,68 @@
|
||||
# Makefile variables for PO directory in any package using GNU gettext.
|
||||
|
||||
# Usually the message domain is the same as the package name.
|
||||
DOMAIN = $(PACKAGE)
|
||||
|
||||
# These two variables depend on the location of this directory.
|
||||
subdir = po
|
||||
top_builddir = ..
|
||||
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \
|
||||
--keyword=C_:1c,2 --keyword=NC_:1c,2 \
|
||||
--keyword=g_dngettext:2,3 --add-comments \
|
||||
--flag=g_dngettext:2:pass-c-format \
|
||||
--flag=g_strdup_printf:1:c-format \
|
||||
--flag=g_string_printf:2:c-format \
|
||||
--flag=g_string_append_printf:2:c-format \
|
||||
--flag=g_error_new:3:c-format \
|
||||
--flag=g_set_error:4:c-format \
|
||||
--flag=g_markup_printf_escaped:1:c-format \
|
||||
--flag=g_log:3:c-format \
|
||||
--flag=g_print:1:c-format \
|
||||
--flag=g_printerr:1:c-format \
|
||||
--flag=g_printf:1:c-format \
|
||||
--flag=g_fprintf:2:c-format \
|
||||
--flag=g_sprintf:2:c-format \
|
||||
--flag=g_snprintf:3:c-format
|
||||
|
||||
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
# package. (Note that the msgstr strings, extracted from the package's
|
||||
# sources, belong to the copyright holder of the package.) Translators are
|
||||
# expected to transfer the copyright for their translations to this person
|
||||
# or entity, or to disclaim their copyright. The empty string stands for
|
||||
# the public domain; in this case the translators are expected to disclaim
|
||||
# their copyright.
|
||||
COPYRIGHT_HOLDER = Translation copyright holder
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings:
|
||||
# - Strings which are not entire sentences, see the maintainer guidelines
|
||||
# in the GNU gettext documentation, section 'Preparing Strings'.
|
||||
# - Strings which use unclear terms or require additional context to be
|
||||
# understood.
|
||||
# - Strings which make invalid assumptions about notation of date, time or
|
||||
# money.
|
||||
# - Pluralisation problems.
|
||||
# - Incorrect English spelling.
|
||||
# - Incorrect formatting.
|
||||
# It can be your email address, or a mailing list address where translators
|
||||
# can write to without being subscribed, or the URL of a web page through
|
||||
# which the translators can contact you.
|
||||
MSGID_BUGS_ADDRESS = http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general
|
||||
|
||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||
# message catalogs shall be used. It is usually empty.
|
||||
EXTRA_LOCALE_CATEGORIES =
|
||||
|
||||
# Ignore the timestamp of the .pot file, as git clones do not have
|
||||
# deterministic timestamps, and .po files are updated by translators
|
||||
# (only) in GNOME projects.
|
||||
PO_DEPENDS_ON_POT = no
|
||||
|
||||
# This tells whether or not to forcibly update $(DOMAIN).pot and
|
||||
# regenerate PO files on "make dist". Possible values are "yes" and
|
||||
# "no". Set this to no if the POT file and PO files are maintained
|
||||
# externally.
|
||||
DIST_DEPENDS_ON_UPDATE_PO = no
|
@ -1,17 +1,17 @@
|
||||
# List of source files containing translatable strings.
|
||||
# Please keep this file sorted alphabetically.
|
||||
[encoding: UTF-8]
|
||||
data/50-gnome-shell-system.xml.in
|
||||
data/50-gnome-shell-system.xml
|
||||
data/gnome-shell-extension-prefs.desktop.in.in
|
||||
data/org.gnome.Shell.desktop.in.in
|
||||
data/org.gnome.shell.gschema.xml.in.in
|
||||
data/org.gnome.Shell.PortalHelper.desktop.in
|
||||
data/org.gnome.shell.gschema.xml.in
|
||||
data/org.gnome.Shell.PortalHelper.desktop.in.in
|
||||
js/extensionPrefs/main.js
|
||||
js/gdm/authPrompt.js
|
||||
js/gdm/loginDialog.js
|
||||
js/gdm/util.js
|
||||
js/misc/util.js
|
||||
js/portalHelper/main.js
|
||||
js/ui/accessDialog.js
|
||||
js/ui/appDisplay.js
|
||||
js/ui/appFavorites.js
|
||||
js/ui/audioDeviceSelection.js
|
||||
@ -61,7 +61,7 @@ js/ui/viewSelector.js
|
||||
js/ui/windowAttentionHandler.js
|
||||
js/ui/windowManager.js
|
||||
js/ui/windowMenu.js
|
||||
src/calendar-server/evolution-calendar.desktop.in.in
|
||||
src/calendar-server/evolution-calendar.desktop.in
|
||||
# Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it.
|
||||
src/gvc/gvc-mixer-control.c
|
||||
src/main.c
|
||||
|
@ -1,4 +0,0 @@
|
||||
data/org.gnome.shell.evolution.calendar.gschema.xml.in
|
||||
src/calendar-server/evolution-calendar.desktop.in
|
||||
# Meh, autofools :-(
|
||||
sub/src/calendar-server/evolution-calendar.desktop.in
|
2
po/as.po
2
po/as.po
@ -13,7 +13,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2014-09-15 14:59+0530\n"
|
||||
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
|
||||
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
|
||||
"Language: as_IN\n"
|
||||
"Language: as\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
135
po/bg.po
135
po/bg.po
@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-01-22 07:45+0200\n"
|
||||
"PO-Revision-Date: 2016-01-22 07:45+0200\n"
|
||||
"POT-Creation-Date: 2016-04-09 08:29+0300\n"
|
||||
"PO-Revision-Date: 2016-04-09 07:09+0300\n"
|
||||
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
|
||||
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
|
||||
"Language: bg\n"
|
||||
@ -316,16 +316,17 @@ msgstr ""
|
||||
msgid "Network Login"
|
||||
msgstr "Мрежов вход"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:122
|
||||
#: ../js/extensionPrefs/main.js:117
|
||||
#, javascript-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
msgstr "Грешка при зареждане на прозореца с настройки за „%s“"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:154
|
||||
#: ../js/extensionPrefs/main.js:149
|
||||
msgid "GNOME Shell Extensions"
|
||||
msgstr "Разширения на обвивката на GNOME"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
|
||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/audioDeviceSelection.js:71
|
||||
#: ../js/ui/components/networkAgent.js:145
|
||||
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:452
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||
#: ../js/ui/status/network.js:916
|
||||
@ -509,16 +510,36 @@ msgstr "Добавяне в „Любими“"
|
||||
msgid "Show Details"
|
||||
msgstr "Показване на подробности"
|
||||
|
||||
#: ../js/ui/appFavorites.js:133
|
||||
#: ../js/ui/appFavorites.js:134
|
||||
#, javascript-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "Програмата „%s“ беше добавена в „Любими“"
|
||||
|
||||
#: ../js/ui/appFavorites.js:167
|
||||
#: ../js/ui/appFavorites.js:168
|
||||
#, javascript-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "Програмата „%s“ беше премахната от „Любими“"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:59
|
||||
msgid "Select Audio Device"
|
||||
msgstr "Избор на устройство за аудио"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:69
|
||||
msgid "Sound Settings"
|
||||
msgstr "Настройки на звука"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:78
|
||||
msgid "Headphones"
|
||||
msgstr "Слушалки"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:80
|
||||
msgid "Headset"
|
||||
msgstr "Малки слушалки"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:82 ../js/ui/status/volume.js:213
|
||||
msgid "Microphone"
|
||||
msgstr "Микрофон"
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19
|
||||
msgid "Change Background…"
|
||||
msgstr "Смяна на фона…"
|
||||
@ -532,7 +553,7 @@ msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
|
||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||
#: ../js/ui/calendar.js:55
|
||||
#: ../js/ui/calendar.js:47
|
||||
msgctxt "calendar-no-work"
|
||||
msgid "06"
|
||||
msgstr "06"
|
||||
@ -542,100 +563,96 @@ msgstr "06"
|
||||
#. * NOTE: These grid abbreviations are always shown together
|
||||
#. * and in order, e.g. "S M T W T F S".
|
||||
#.
|
||||
#: ../js/ui/calendar.js:84
|
||||
#: ../js/ui/calendar.js:76
|
||||
msgctxt "grid sunday"
|
||||
msgid "S"
|
||||
msgstr "Н"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Monday
|
||||
#: ../js/ui/calendar.js:86
|
||||
#: ../js/ui/calendar.js:78
|
||||
msgctxt "grid monday"
|
||||
msgid "M"
|
||||
msgstr "П"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Tuesday
|
||||
#: ../js/ui/calendar.js:88
|
||||
#: ../js/ui/calendar.js:80
|
||||
msgctxt "grid tuesday"
|
||||
msgid "T"
|
||||
msgstr "В"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Wednesday
|
||||
#: ../js/ui/calendar.js:90
|
||||
#: ../js/ui/calendar.js:82
|
||||
msgctxt "grid wednesday"
|
||||
msgid "W"
|
||||
msgstr "С"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Thursday
|
||||
#: ../js/ui/calendar.js:92
|
||||
#: ../js/ui/calendar.js:84
|
||||
msgctxt "grid thursday"
|
||||
msgid "T"
|
||||
msgstr "Ч"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Friday
|
||||
#: ../js/ui/calendar.js:94
|
||||
#: ../js/ui/calendar.js:86
|
||||
msgctxt "grid friday"
|
||||
msgid "F"
|
||||
msgstr "П"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Saturday
|
||||
#: ../js/ui/calendar.js:96
|
||||
#: ../js/ui/calendar.js:88
|
||||
msgctxt "grid saturday"
|
||||
msgid "S"
|
||||
msgstr "С"
|
||||
|
||||
#: ../js/ui/calendar.js:566
|
||||
#: ../js/ui/calendar.js:416
|
||||
msgid "Previous month"
|
||||
msgstr "Предния месец"
|
||||
|
||||
#: ../js/ui/calendar.js:576
|
||||
#: ../js/ui/calendar.js:426
|
||||
msgid "Next month"
|
||||
msgstr "Следващия месец"
|
||||
|
||||
#: ../js/ui/calendar.js:729
|
||||
#: ../js/ui/calendar.js:579
|
||||
#, no-javascript-format
|
||||
msgctxt "date day number format"
|
||||
msgid "%d"
|
||||
msgstr "%d"
|
||||
|
||||
#: ../js/ui/calendar.js:784
|
||||
#: ../js/ui/calendar.js:634
|
||||
msgid "Week %V"
|
||||
msgstr "%V-а седмица"
|
||||
|
||||
#. Translators: Shown in calendar event list for all day events
|
||||
#. * Keep it short, best if you can use less then 10 characters
|
||||
#.
|
||||
#: ../js/ui/calendar.js:1189
|
||||
#: ../js/ui/calendar.js:695
|
||||
msgctxt "event list time"
|
||||
msgid "All Day"
|
||||
msgstr "Цял ден"
|
||||
|
||||
#: ../js/ui/calendar.js:1296
|
||||
msgid "Clear section"
|
||||
msgstr "Изчистване"
|
||||
|
||||
#: ../js/ui/calendar.js:1523
|
||||
#: ../js/ui/calendar.js:821
|
||||
msgid "Events"
|
||||
msgstr "Събития"
|
||||
|
||||
#: ../js/ui/calendar.js:1532
|
||||
#: ../js/ui/calendar.js:830
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %e %B"
|
||||
|
||||
#: ../js/ui/calendar.js:1536
|
||||
#: ../js/ui/calendar.js:834
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %e %B %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:1621
|
||||
#: ../js/ui/calendar.js:919
|
||||
msgid "Notifications"
|
||||
msgstr "Известия"
|
||||
|
||||
#: ../js/ui/calendar.js:1772
|
||||
#: ../js/ui/calendar.js:1070
|
||||
msgid "No Notifications"
|
||||
msgstr "Няма известия"
|
||||
|
||||
#: ../js/ui/calendar.js:1775
|
||||
#: ../js/ui/calendar.js:1073
|
||||
msgid "No Events"
|
||||
msgstr "Няма събития"
|
||||
|
||||
@ -773,7 +790,7 @@ msgstr "Неуспешно действие. Опитайте отново."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:759
|
||||
#: ../js/ui/components/telepathyClient.js:760
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "„%s“ в момента е познат като „%s“"
|
||||
@ -963,11 +980,11 @@ msgid "Keyboard"
|
||||
msgstr "Клавиатура"
|
||||
|
||||
#. translators: 'Hide' is a verb
|
||||
#: ../js/ui/legacyTray.js:66
|
||||
#: ../js/ui/legacyTray.js:65
|
||||
msgid "Hide tray"
|
||||
msgstr "Скриване на областта"
|
||||
|
||||
#: ../js/ui/legacyTray.js:107
|
||||
#: ../js/ui/legacyTray.js:106
|
||||
msgid "Status Icons"
|
||||
msgstr "Икони за състоянието"
|
||||
|
||||
@ -1019,10 +1036,26 @@ msgstr "Преглед на изходния код"
|
||||
msgid "Web Page"
|
||||
msgstr "Домашна страница"
|
||||
|
||||
#: ../js/ui/messageList.js:543
|
||||
msgid "Clear section"
|
||||
msgstr "Изчистване"
|
||||
|
||||
#: ../js/ui/messageTray.js:1486
|
||||
msgid "System Information"
|
||||
msgstr "Информация за системата"
|
||||
|
||||
#: ../js/ui/mpris.js:194
|
||||
msgid "Unknown artist"
|
||||
msgstr "Неизвестен изпълнител"
|
||||
|
||||
#: ../js/ui/mpris.js:195
|
||||
msgid "Unknown title"
|
||||
msgstr "Неизвестно заглавие"
|
||||
|
||||
#: ../js/ui/mpris.js:217
|
||||
msgid "Media"
|
||||
msgstr "Медиа"
|
||||
|
||||
#: ../js/ui/overview.js:84
|
||||
msgid "Undo"
|
||||
msgstr "Отмяна"
|
||||
@ -1241,30 +1274,50 @@ msgstr "Яркост"
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Показване на клавиатурната подредба"
|
||||
|
||||
#: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
|
||||
#: ../js/ui/status/location.js:107 ../js/ui/status/location.js:215
|
||||
msgid "Location Enabled"
|
||||
msgstr "Местоположението е включено"
|
||||
|
||||
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
|
||||
#: ../js/ui/status/location.js:108 ../js/ui/status/location.js:216
|
||||
msgid "Disable"
|
||||
msgstr "Изключване"
|
||||
|
||||
#: ../js/ui/status/location.js:73
|
||||
#: ../js/ui/status/location.js:109
|
||||
msgid "Privacy Settings"
|
||||
msgstr "Настройки за поверителност"
|
||||
|
||||
#: ../js/ui/status/location.js:176
|
||||
#: ../js/ui/status/location.js:214
|
||||
msgid "Location In Use"
|
||||
msgstr "Текущо местоположение"
|
||||
|
||||
#: ../js/ui/status/location.js:180
|
||||
#: ../js/ui/status/location.js:218
|
||||
msgid "Location Disabled"
|
||||
msgstr "Местоположението е изключено"
|
||||
|
||||
#: ../js/ui/status/location.js:181
|
||||
#: ../js/ui/status/location.js:219
|
||||
msgid "Enable"
|
||||
msgstr "Включване"
|
||||
|
||||
#: ../js/ui/status/location.js:426
|
||||
msgid "Deny Access"
|
||||
msgstr "Отказване на достъп"
|
||||
|
||||
#: ../js/ui/status/location.js:429
|
||||
msgid "Grant Access"
|
||||
msgstr "Позволяване на достъп"
|
||||
|
||||
#. Translators: %s is an application name
|
||||
#: ../js/ui/status/location.js:435
|
||||
#, javascript-format
|
||||
msgid "Give %s access to your location?"
|
||||
msgstr "Да се сподели ли местоположението с „%s“?"
|
||||
|
||||
#: ../js/ui/status/location.js:437
|
||||
msgid "Location access can be changed at any time from the privacy settings."
|
||||
msgstr ""
|
||||
"Може да промените правата за достъп до местоположението през настройките за "
|
||||
"лични данни."
|
||||
|
||||
#: ../js/ui/status/network.js:101
|
||||
msgid "<unknown>"
|
||||
msgstr "<неизвестно>"
|
||||
@ -1519,10 +1572,6 @@ msgstr "Променена сила на звука"
|
||||
msgid "Volume"
|
||||
msgstr "Сила на звука"
|
||||
|
||||
#: ../js/ui/status/volume.js:213
|
||||
msgid "Microphone"
|
||||
msgstr "Микрофон"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:67
|
||||
msgid "Log in as another user"
|
||||
msgstr "Вход като друг потребител"
|
||||
|
1
po/bn.po
1
po/bn.po
@ -7,6 +7,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2011-04-04 11:04+0600\n"
|
||||
"Last-Translator: Israt Jahan <israt@ankur.org.bd>\n"
|
||||
"Language-Team: Bengali <ankur-bd-l10n@googlegroups.com>\n"
|
||||
"Language: bn\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -11,7 +11,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2014-12-30 16:45+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
|
||||
"Language: en_US\n"
|
||||
"Language: bn_IN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -14,7 +14,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2014-09-14 23:32+0200\n"
|
||||
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
|
||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||
"Language: ca-XV\n"
|
||||
"Language: ca@valencia\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bits\n"
|
||||
|
2062
po/en_GB.po
2062
po/en_GB.po
File diff suppressed because it is too large
Load Diff
360
po/eu.po
360
po/eu.po
@ -3,23 +3,23 @@
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
#
|
||||
# Julen Ruiz Aizpuru <julenx@gmail.com>, 2011.
|
||||
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2011, 2012, 2013, 2014, 2015.
|
||||
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2011, 2012, 2013, 2014, 2015, 2016.
|
||||
# Asier Sarasua Garmendia <asiersar@yahoo.com>, 2013.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2015-10-14 08:51+0000\n"
|
||||
"PO-Revision-Date: 2015-10-11 19:58+0200\n"
|
||||
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n"
|
||||
"Language-Team: Basque <Basque <librezale@librezale.org>>\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-sh"
|
||||
"ell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-03-23 10:35+0000\n"
|
||||
"PO-Revision-Date: 2016-03-23 20:55+0100\n"
|
||||
"Last-Translator: dooteo <dooteo@zundan.com>\n"
|
||||
"Language-Team: Basque <librezale@librezale.org>\n"
|
||||
"Language: eu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 1.5\n"
|
||||
"X-Generator: Lokalize 2.0\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||
@ -46,15 +46,6 @@ msgstr "Erakutsi aplikazio guztiak"
|
||||
msgid "Open the application menu"
|
||||
msgstr "Ireki aplikazioen menua"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:2
|
||||
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Leiho-kudeaketa eta aplikazioak abiaraztea"
|
||||
|
||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
||||
msgid "GNOME Shell Extension Preferences"
|
||||
msgstr "GNOME Shell-eko gehigarrien hobespenak"
|
||||
@ -63,9 +54,13 @@ msgstr "GNOME Shell-eko gehigarrien hobespenak"
|
||||
msgid "Configure GNOME Shell Extensions"
|
||||
msgstr "Konfiguratu GNOME Shell-eko gehigarriak"
|
||||
|
||||
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
|
||||
msgid "GNOME Shell (wayland compositor)"
|
||||
msgstr "GNOME Shell (wayland konposatzailea)"
|
||||
#: ../data/org.gnome.Shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
|
||||
#: ../data/org.gnome.Shell.desktop.in.in.h:2
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Leiho-kudeaketa eta aplikazioak abiaraztea"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
@ -171,76 +166,97 @@ msgstr ""
|
||||
"laukiaren egoera lehenetsia ezartzen du."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
msgid ""
|
||||
"Whether the default Bluetooth adapter had set up devices associated to it"
|
||||
msgstr ""
|
||||
"Bluetooth lehenetsiaren moldatzaileak berarekin esleitutako gailurik duen ala "
|
||||
"ez"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
msgid ""
|
||||
"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
|
||||
"powered, or if there were devices set up associated with the default "
|
||||
"adapter. This will be reset if the default adapter is ever seen not to have "
|
||||
"devices associated to it."
|
||||
msgstr ""
|
||||
"Shell-ak Bluetooth moldagailu bat entxufatuta dagoenean soilik Bluetooth-aren "
|
||||
"menua "
|
||||
"erakutsiko duen, edo moldagailu lehenetsiarekin esleitutako gailuak "
|
||||
"konfiguratuta daudenean. "
|
||||
"Hau leheneratu egingo da moldagailu lehenetsiak berarekin esleitutako "
|
||||
"gailurik ez daukanean."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Erakutsi aste-data egutegian"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Ezarrita badago, ISO aste-data bistaratzen du egutegian."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Aplikazioen menua irekitzeko laster-tekla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Aplikazioen menua irekitzeko laster-tekla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid "Keybinding to open the \"Show Applications\" view"
|
||||
msgstr "'Erakutsi aplikazioak' bista irekitzeko laster-tekla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid ""
|
||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||
msgstr ""
|
||||
"Jarduerak ikuspegi orokorraren 'Erakutsi aplikazioak' ikuspegia irekitzeko "
|
||||
"laster-tekla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
msgid "Keybinding to open the overview"
|
||||
msgstr "Ikuspegi orokorra bista irekitzeko laster-tekla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
msgid "Keybinding to open the Activities Overview."
|
||||
msgstr "Jardueren ikuspegi orokorra irekitzeko laster-tekla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid "Keybinding to toggle the visibility of the notification list"
|
||||
msgstr "Jakinarazpenen zerrendaren ikusgaitasuna txandakatzeko laster-tekla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
msgid "Keybinding to toggle the visibility of the notification list."
|
||||
msgstr "Jakinarazpenen zerrendaren ikusgaitasuna txandakatzeko laster-tekla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
msgid "Keybinding to focus the active notification"
|
||||
msgstr "Jakinarazpen aktiboa enfokatzeko laster-tekla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
msgid "Keybinding to focus the active notification."
|
||||
msgstr "Jakinarazpen aktiboa enfokatzeko laster-tekla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||
msgid ""
|
||||
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
|
||||
msgstr ""
|
||||
"Laster-teklak exekutatzen ari diren 'tween' guztiak pausarazi eta jarraitzen "
|
||||
"ditu arazketa lantzeko"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Erabili beharreko teklatua"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Erabili beharreko teklatu mota."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||
msgid "Limit switcher to current workspace."
|
||||
msgstr "Mugatu aldatzailea uneko laneko areara."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||
msgid ""
|
||||
"If true, only applications that have windows on the current workspace are "
|
||||
"shown in the switcher. Otherwise, all applications are included."
|
||||
@ -248,11 +264,11 @@ msgstr ""
|
||||
"TRUE (egia) bada, uneko laneko arean leihoak dituzten aplikazioak soilik "
|
||||
"erakutsiko dira aldatzailean. Bestela, aplikazio guztiak egongo dira."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||
msgid "The application icon mode."
|
||||
msgstr "Aplikazio-ikonoaren modua."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||
msgid ""
|
||||
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||
@ -262,7 +278,7 @@ msgstr ""
|
||||
"'thumbnail-only' (leihoaren miniatura erakustea), 'app-icon-only' (aplikazio-"
|
||||
"ikonoa erakustea soilik) edo 'both' (biak)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||
msgid ""
|
||||
"If true, only windows from the current workspace are shown in the switcher. "
|
||||
"Otherwise, all windows are included."
|
||||
@ -270,29 +286,29 @@ msgstr ""
|
||||
"TRUE (egia) bada, uneko laneko arean leihoak soilik erakutsiko dira "
|
||||
"aldatzailean. Bestela, leiho guztiak egongo dira."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||
msgid "Attach modal dialog to the parent window"
|
||||
msgstr "Erantsi elkarrizketa-leiho modala leiho gurasoari"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
||||
msgid ""
|
||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||
msgstr ""
|
||||
"Gako honek org.gnome.mutter gakoa gainidazten du GNOME Shell exekutatzean."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr "Gaitu lauzatzea leihoak pantailaren ertzetan jaregitean"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Laneko areak dinamikoki kudeatzen dira"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
||||
msgid "Workspaces only on primary monitor"
|
||||
msgstr "Laneko areak monitore nagusian soilik"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
||||
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
||||
msgstr ""
|
||||
"Fokuaren aldaketaren atzerapena saguaren moduan erakusleak mugitzeari utzi "
|
||||
@ -302,52 +318,53 @@ msgstr ""
|
||||
msgid "Network Login"
|
||||
msgstr "Sareko saio-hasiera"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:122
|
||||
#: ../js/extensionPrefs/main.js:117
|
||||
#, javascript-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
msgstr ""
|
||||
"Errorea gertatu da '%s'(r)en hobespenen elkarrizketa-koadroa kargatzean:"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:154
|
||||
#: ../js/extensionPrefs/main.js:149
|
||||
msgid "GNOME Shell Extensions"
|
||||
msgstr "GNOME Shell-eko gehigarriak"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
|
||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/audioDeviceSelection.js:71
|
||||
#: ../js/ui/components/networkAgent.js:145
|
||||
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:452
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||
#: ../js/ui/status/network.js:916
|
||||
msgid "Cancel"
|
||||
msgstr "Utzi"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
|
||||
#: ../js/gdm/authPrompt.js:447
|
||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:216
|
||||
#: ../js/gdm/authPrompt.js:448
|
||||
msgid "Next"
|
||||
msgstr "Hurrengoa"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
|
||||
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
|
||||
#: ../js/ui/unlockDialog.js:59
|
||||
msgid "Unlock"
|
||||
msgstr "Desblokeatu"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:213
|
||||
#: ../js/gdm/authPrompt.js:214
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Hasi saioa"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:281
|
||||
#: ../js/gdm/loginDialog.js:285
|
||||
msgid "Choose Session"
|
||||
msgstr "Aukeratu saioa"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:431
|
||||
#: ../js/gdm/loginDialog.js:435
|
||||
msgid "Not listed?"
|
||||
msgstr "Ez zaude zerrendan?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:850
|
||||
#: ../js/gdm/loginDialog.js:854
|
||||
#, javascript-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(adib., erabiltzailea edo %s)"
|
||||
@ -355,12 +372,12 @@ msgstr "(adib., erabiltzailea edo %s)"
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
|
||||
#: ../js/gdm/loginDialog.js:859 ../js/ui/components/networkAgent.js:271
|
||||
#: ../js/ui/components/networkAgent.js:289
|
||||
msgid "Username: "
|
||||
msgstr "Erabiltzaile-izena: "
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1184
|
||||
#: ../js/gdm/loginDialog.js:1196
|
||||
msgid "Login Window"
|
||||
msgstr "Saio-hasierako leihoa"
|
||||
|
||||
@ -496,16 +513,38 @@ msgstr "Gehitu gogokoei"
|
||||
msgid "Show Details"
|
||||
msgstr "Erakutsi xehetasunak"
|
||||
|
||||
#: ../js/ui/appFavorites.js:132
|
||||
#: ../js/ui/appFavorites.js:134
|
||||
#, javascript-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s gogokoei gehitu zaie."
|
||||
|
||||
#: ../js/ui/appFavorites.js:166
|
||||
#: ../js/ui/appFavorites.js:168
|
||||
#, javascript-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s gogokoetatik kendu da."
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:59
|
||||
#| msgid "Send Files to Device…"
|
||||
msgid "Select Audio Device"
|
||||
msgstr "Hautatu audioaren gailua"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:69
|
||||
#| msgid "Account Settings"
|
||||
msgid "Sound Settings"
|
||||
msgstr "Soinuaren ezarpenak"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:78
|
||||
msgid "Headphones"
|
||||
msgstr "Aurikularrak"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:80
|
||||
msgid "Headset"
|
||||
msgstr "Aurikular+mikrofonoa"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:82 ../js/ui/status/volume.js:213
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofonoa"
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19
|
||||
msgid "Change Background…"
|
||||
msgstr "Aldatu atzeko planoa…"
|
||||
@ -519,7 +558,7 @@ msgid "Settings"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||
#: ../js/ui/calendar.js:55
|
||||
#: ../js/ui/calendar.js:47
|
||||
msgctxt "calendar-no-work"
|
||||
msgid "06"
|
||||
msgstr "06"
|
||||
@ -529,94 +568,98 @@ msgstr "06"
|
||||
#. * NOTE: These grid abbreviations are always shown together
|
||||
#. * and in order, e.g. "S M T W T F S".
|
||||
#.
|
||||
#: ../js/ui/calendar.js:84
|
||||
#: ../js/ui/calendar.js:76
|
||||
msgctxt "grid sunday"
|
||||
msgid "S"
|
||||
msgstr "I"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Monday
|
||||
#: ../js/ui/calendar.js:86
|
||||
#: ../js/ui/calendar.js:78
|
||||
msgctxt "grid monday"
|
||||
msgid "M"
|
||||
msgstr "A"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Tuesday
|
||||
#: ../js/ui/calendar.js:88
|
||||
#: ../js/ui/calendar.js:80
|
||||
msgctxt "grid tuesday"
|
||||
msgid "T"
|
||||
msgstr "A"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Wednesday
|
||||
#: ../js/ui/calendar.js:90
|
||||
#: ../js/ui/calendar.js:82
|
||||
msgctxt "grid wednesday"
|
||||
msgid "W"
|
||||
msgstr "A"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Thursday
|
||||
#: ../js/ui/calendar.js:92
|
||||
#: ../js/ui/calendar.js:84
|
||||
msgctxt "grid thursday"
|
||||
msgid "T"
|
||||
msgstr "O"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Friday
|
||||
#: ../js/ui/calendar.js:94
|
||||
#: ../js/ui/calendar.js:86
|
||||
msgctxt "grid friday"
|
||||
msgid "F"
|
||||
msgstr "O"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Saturday
|
||||
#: ../js/ui/calendar.js:96
|
||||
#: ../js/ui/calendar.js:88
|
||||
msgctxt "grid saturday"
|
||||
msgid "S"
|
||||
msgstr "L"
|
||||
|
||||
#: ../js/ui/calendar.js:566
|
||||
#: ../js/ui/calendar.js:416
|
||||
msgid "Previous month"
|
||||
msgstr "Aurreko hila"
|
||||
|
||||
#: ../js/ui/calendar.js:576
|
||||
#: ../js/ui/calendar.js:426
|
||||
msgid "Next month"
|
||||
msgstr "Hurrengo hila"
|
||||
|
||||
#: ../js/ui/calendar.js:783
|
||||
#: ../js/ui/calendar.js:579
|
||||
#, no-javascript-format
|
||||
#| msgctxt "percent of battery remaining"
|
||||
#| msgid "%d%%"
|
||||
msgctxt "date day number format"
|
||||
msgid "%d"
|
||||
msgstr "%d"
|
||||
|
||||
#: ../js/ui/calendar.js:634
|
||||
msgid "Week %V"
|
||||
msgstr "%V. astea"
|
||||
|
||||
#. Translators: Shown in calendar event list for all day events
|
||||
#. * Keep it short, best if you can use less then 10 characters
|
||||
#.
|
||||
#: ../js/ui/calendar.js:1188
|
||||
#: ../js/ui/calendar.js:695
|
||||
msgctxt "event list time"
|
||||
msgid "All Day"
|
||||
msgstr "Egun osoa"
|
||||
|
||||
#: ../js/ui/calendar.js:1295
|
||||
msgid "Clear section"
|
||||
msgstr "Garbitu atala"
|
||||
|
||||
#: ../js/ui/calendar.js:1522
|
||||
#: ../js/ui/calendar.js:821
|
||||
msgid "Events"
|
||||
msgstr "Gertaerak"
|
||||
|
||||
#: ../js/ui/calendar.js:1531
|
||||
#: ../js/ui/calendar.js:830
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %B %d"
|
||||
|
||||
#: ../js/ui/calendar.js:1535
|
||||
#: ../js/ui/calendar.js:834
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %Y(e)ko %Bren %da"
|
||||
|
||||
#: ../js/ui/calendar.js:1620
|
||||
#: ../js/ui/calendar.js:919
|
||||
msgid "Notifications"
|
||||
msgstr "Jakinarazpenak"
|
||||
|
||||
#: ../js/ui/calendar.js:1771
|
||||
#: ../js/ui/calendar.js:1070
|
||||
msgid "No Notifications"
|
||||
msgstr "Jakinarazpenik ez"
|
||||
|
||||
#: ../js/ui/calendar.js:1774
|
||||
#: ../js/ui/calendar.js:1073
|
||||
msgid "No Events"
|
||||
msgstr "Gertaerarik ez"
|
||||
|
||||
@ -628,7 +671,7 @@ msgstr "Kanpoko unitatea konektatuta"
|
||||
msgid "External drive disconnected"
|
||||
msgstr "Kanpoko unitatea deskonektatuta"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:351
|
||||
#: ../js/ui/components/autorunManager.js:355
|
||||
#, javascript-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Ireki honekin: %s"
|
||||
@ -754,7 +797,7 @@ msgstr "Huts egin du. Saiatu berriro."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:759
|
||||
#: ../js/ui/components/telepathyClient.js:760
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s orain %s izenarekin ezagutzen da"
|
||||
@ -941,11 +984,11 @@ msgid "Keyboard"
|
||||
msgstr "Teklatua"
|
||||
|
||||
#. translators: 'Hide' is a verb
|
||||
#: ../js/ui/legacyTray.js:66
|
||||
#: ../js/ui/legacyTray.js:65
|
||||
msgid "Hide tray"
|
||||
msgstr "Ezkutatu erretilua"
|
||||
|
||||
#: ../js/ui/legacyTray.js:107
|
||||
#: ../js/ui/legacyTray.js:106
|
||||
msgid "Status Icons"
|
||||
msgstr "Egoeren ikonoak"
|
||||
|
||||
@ -997,10 +1040,29 @@ msgstr "Ikusi iturburua"
|
||||
msgid "Web Page"
|
||||
msgstr "Web orria"
|
||||
|
||||
#: ../js/ui/messageList.js:543
|
||||
msgid "Clear section"
|
||||
msgstr "Garbitu atala"
|
||||
|
||||
#: ../js/ui/messageTray.js:1486
|
||||
msgid "System Information"
|
||||
msgstr "Sistemaren informazioa"
|
||||
|
||||
#: ../js/ui/mpris.js:194
|
||||
#| msgid "Unknown reason"
|
||||
msgid "Unknown artist"
|
||||
msgstr "Artista ezezaguna"
|
||||
|
||||
#: ../js/ui/mpris.js:195
|
||||
#| msgctxt "program"
|
||||
#| msgid "Unknown"
|
||||
msgid "Unknown title"
|
||||
msgstr "Titulu ezezaguna"
|
||||
|
||||
#: ../js/ui/mpris.js:217
|
||||
msgid "Media"
|
||||
msgstr "Euskarria"
|
||||
|
||||
#: ../js/ui/overview.js:84
|
||||
msgid "Undo"
|
||||
msgstr "Desegin"
|
||||
@ -1027,12 +1089,12 @@ msgstr "Irten"
|
||||
msgid "Activities"
|
||||
msgstr "Jarduerak"
|
||||
|
||||
#: ../js/ui/panel.js:660
|
||||
#: ../js/ui/panel.js:695
|
||||
msgctxt "System menu in the top bar"
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: ../js/ui/panel.js:764
|
||||
#: ../js/ui/panel.js:807
|
||||
msgid "Top Bar"
|
||||
msgstr "Goiko barra"
|
||||
|
||||
@ -1045,15 +1107,15 @@ msgstr "Goiko barra"
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-us"
|
||||
|
||||
#: ../js/ui/runDialog.js:70
|
||||
#: ../js/ui/runDialog.js:71
|
||||
msgid "Enter a Command"
|
||||
msgstr "Idatzi komandoa"
|
||||
|
||||
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:162
|
||||
#: ../js/ui/runDialog.js:111 ../js/ui/windowMenu.js:162
|
||||
msgid "Close"
|
||||
msgstr "Itxi"
|
||||
|
||||
#: ../js/ui/runDialog.js:281
|
||||
#: ../js/ui/runDialog.js:282
|
||||
msgid "Restarting…"
|
||||
msgstr "Berrabiarazten…"
|
||||
|
||||
@ -1176,29 +1238,41 @@ msgstr "Kontraste handia"
|
||||
msgid "Large Text"
|
||||
msgstr "Testu handia"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
|
||||
#: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
|
||||
#: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
|
||||
#: ../js/ui/status/rfkill.js:117
|
||||
msgid "Turn Off"
|
||||
msgstr "Itzali"
|
||||
#: ../js/ui/status/bluetooth.js:47
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:54
|
||||
#: ../js/ui/status/bluetooth.js:56
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Bluetooth ezarpenak"
|
||||
|
||||
#. Translators: this is the number of connected bluetooth devices
|
||||
#: ../js/ui/status/bluetooth.js:105
|
||||
#: ../js/ui/status/bluetooth.js:136
|
||||
#, javascript-format
|
||||
msgid "%d Connected"
|
||||
msgid_plural "%d Connected"
|
||||
msgstr[0] "%d konektatuta"
|
||||
msgstr[1] "%d konektatuta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:107
|
||||
#: ../js/ui/status/bluetooth.js:138
|
||||
msgid "Off"
|
||||
msgstr "Desaktibatuta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:140
|
||||
msgid "Not In Use"
|
||||
msgstr "Erabili gabe"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:142 ../js/ui/status/network.js:1279
|
||||
msgid "Turn On"
|
||||
msgstr "Piztu"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:142 ../js/ui/status/network.js:178
|
||||
#: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
|
||||
#: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
|
||||
#: ../js/ui/status/rfkill.js:117
|
||||
msgid "Turn Off"
|
||||
msgstr "Itzali"
|
||||
|
||||
#: ../js/ui/status/brightness.js:44
|
||||
msgid "Brightness"
|
||||
msgstr "Distira"
|
||||
@ -1207,30 +1281,51 @@ msgstr "Distira"
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Erakutsi teklatuaren diseinua"
|
||||
|
||||
#: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
|
||||
#: ../js/ui/status/location.js:107 ../js/ui/status/location.js:215
|
||||
msgid "Location Enabled"
|
||||
msgstr "Kokalekua gaituta"
|
||||
|
||||
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
|
||||
#: ../js/ui/status/location.js:108 ../js/ui/status/location.js:216
|
||||
msgid "Disable"
|
||||
msgstr "Desgaitu"
|
||||
|
||||
#: ../js/ui/status/location.js:73
|
||||
#: ../js/ui/status/location.js:109
|
||||
msgid "Privacy Settings"
|
||||
msgstr "Pribatutasunaren ezarpenak"
|
||||
|
||||
#: ../js/ui/status/location.js:176
|
||||
#: ../js/ui/status/location.js:214
|
||||
msgid "Location In Use"
|
||||
msgstr "Kokalekua erabilita"
|
||||
|
||||
#: ../js/ui/status/location.js:180
|
||||
#: ../js/ui/status/location.js:218
|
||||
msgid "Location Disabled"
|
||||
msgstr "Kokalekua desgaituta"
|
||||
|
||||
#: ../js/ui/status/location.js:181
|
||||
#: ../js/ui/status/location.js:219
|
||||
msgid "Enable"
|
||||
msgstr "Gaitu"
|
||||
|
||||
#: ../js/ui/status/location.js:426
|
||||
msgid "Deny Access"
|
||||
msgstr "Ukatu sarbidetza"
|
||||
|
||||
#: ../js/ui/status/location.js:429
|
||||
#| msgid "Always grant access"
|
||||
msgid "Grant Access"
|
||||
msgstr "Baimendu sarbidetza"
|
||||
|
||||
#. Translators: %s is an application name
|
||||
#: ../js/ui/status/location.js:435
|
||||
#, javascript-format
|
||||
msgid "Give %s access to your location?"
|
||||
msgstr "Eman '%s'(r)i zure kokalekurako sarbidetza?"
|
||||
|
||||
#: ../js/ui/status/location.js:437
|
||||
msgid "Location access can be changed at any time from the privacy settings."
|
||||
msgstr ""
|
||||
"Kokalekuaren sarbidetza edozer unetan alda daiteke pribatutasunen "
|
||||
"ezarpenetatik."
|
||||
|
||||
#: ../js/ui/status/network.js:101
|
||||
msgid "<unknown>"
|
||||
msgstr "<ezezaguna>"
|
||||
@ -1366,10 +1461,6 @@ msgstr "Hautatu sarea"
|
||||
msgid "Wi-Fi Settings"
|
||||
msgstr "Haririk gabekoaren ezarpenak"
|
||||
|
||||
#: ../js/ui/status/network.js:1279
|
||||
msgid "Turn On"
|
||||
msgstr "Piztu"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: ../js/ui/status/network.js:1296
|
||||
#, javascript-format
|
||||
@ -1419,32 +1510,39 @@ msgstr "Konexioak huts egin du"
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Sareko konexioa aktibatzeak huts egin du"
|
||||
|
||||
#: ../js/ui/status/power.js:49
|
||||
#: ../js/ui/status/power.js:61
|
||||
msgid "Power Settings"
|
||||
msgstr "Energiaren ezarpenak"
|
||||
|
||||
#: ../js/ui/status/power.js:65
|
||||
#: ../js/ui/status/power.js:77
|
||||
msgid "Fully Charged"
|
||||
msgstr "Erabat kargatuta"
|
||||
|
||||
#. 0 is reported when UPower does not have enough data
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
|
||||
#: ../js/ui/status/power.js:84 ../js/ui/status/power.js:90
|
||||
msgid "Estimating…"
|
||||
msgstr "Kalkulatzen…"
|
||||
|
||||
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
|
||||
#: ../js/ui/status/power.js:86
|
||||
#: ../js/ui/status/power.js:98
|
||||
#, javascript-format
|
||||
msgid "%d∶%02d Remaining (%d%%)"
|
||||
#| msgid "%d∶%02d Remaining (%d%%)"
|
||||
msgid "%d∶%02d Remaining (%d %%)"
|
||||
msgstr "%d∶%02d falta da (%% %d)"
|
||||
|
||||
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
|
||||
#: ../js/ui/status/power.js:91
|
||||
#: ../js/ui/status/power.js:103
|
||||
#, javascript-format
|
||||
msgid "%d∶%02d Until Full (%d%%)"
|
||||
#| msgid "%d∶%02d Until Full (%d%%)"
|
||||
msgid "%d∶%02d Until Full (%d %%)"
|
||||
msgstr "%d∶%02d bete arte (%% %d)"
|
||||
|
||||
#: ../js/ui/status/power.js:131 ../js/ui/status/power.js:133
|
||||
#, javascript-format
|
||||
msgid "%d %%"
|
||||
msgstr " %% %d"
|
||||
|
||||
#. The menu only appears when airplane mode is on, so just
|
||||
#. statically build it as if it was on, rather than dynamically
|
||||
#. changing the menu contents.
|
||||
@ -1484,10 +1582,6 @@ msgstr "Bolumena aldatuta"
|
||||
msgid "Volume"
|
||||
msgstr "Bolumena"
|
||||
|
||||
#: ../js/ui/status/volume.js:213
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofonoa"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:67
|
||||
msgid "Log in as another user"
|
||||
msgstr "Hasi saioa beste erabiltzaile baten gisan"
|
||||
@ -1654,29 +1748,26 @@ msgstr "Ezezaguna"
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Huts egin du '%s' abiaraztean"
|
||||
|
||||
#: ../src/shell-keyring-prompt.c:742
|
||||
#: ../src/shell-keyring-prompt.c:730
|
||||
msgid "Passwords do not match."
|
||||
msgstr "Pasahitzak ez datoz bat"
|
||||
|
||||
#: ../src/shell-keyring-prompt.c:750
|
||||
#: ../src/shell-keyring-prompt.c:738
|
||||
msgid "Password cannot be blank"
|
||||
msgstr "Pasahitza ezin da hutsa izan"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:346
|
||||
#: ../src/shell-polkit-authentication-agent.c:353
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Erabiltzaileak autentifikatzeko elkarrizketa-koadroa itxi du"
|
||||
|
||||
#~ msgid "Bluetooth"
|
||||
#~ msgstr "Bluetooth"
|
||||
#~ msgid "GNOME Shell (wayland compositor)"
|
||||
#~ msgstr "GNOME Shell (wayland konposatzailea)"
|
||||
|
||||
#~ msgid "%d Connected Device"
|
||||
#~ msgid_plural "%d Connected Devices"
|
||||
#~ msgstr[0] "Gailu %d konektatuta"
|
||||
#~ msgstr[1] "%d gailu konektatuta"
|
||||
|
||||
#~ msgid "Off"
|
||||
#~ msgstr "Desaktibatuta"
|
||||
|
||||
#~ msgid "Authentication required"
|
||||
#~ msgstr "Autentifikazioa behar da"
|
||||
|
||||
@ -1885,9 +1976,6 @@ msgstr "Erabiltzaileak autentifikatzeko elkarrizketa-koadroa itxi du"
|
||||
#~ msgid "View account"
|
||||
#~ msgstr "Ikusi kontua"
|
||||
|
||||
#~ msgid "Unknown reason"
|
||||
#~ msgstr "Arrazoi ezezaguna"
|
||||
|
||||
#~ msgid "Open Calendar"
|
||||
#~ msgstr "Ireki egutegia"
|
||||
|
||||
@ -1996,9 +2084,6 @@ msgstr "Erabiltzaileak autentifikatzeko elkarrizketa-koadroa itxi du"
|
||||
#~ msgid "Device %s wants access to the service '%s'"
|
||||
#~ msgstr "%s gailuak '%s' zerbitzurako sarbidea nahi du"
|
||||
|
||||
#~ msgid "Always grant access"
|
||||
#~ msgstr "Baimendu beti sarbidetza"
|
||||
|
||||
#~ msgid "Grant this time only"
|
||||
#~ msgstr "Baimendu une honetan bakarrik"
|
||||
|
||||
@ -2186,9 +2271,6 @@ msgstr "Erabiltzaileak autentifikatzeko elkarrizketa-koadroa itxi du"
|
||||
#~ msgid "Visibility"
|
||||
#~ msgstr "Ikusgaitasuna"
|
||||
|
||||
#~ msgid "Send Files to Device…"
|
||||
#~ msgstr "Bidali fitxategiak gailura…"
|
||||
|
||||
#~ msgid "Set Up a New Device…"
|
||||
#~ msgstr "Konfiguratu gailu berria…"
|
||||
|
||||
@ -2266,10 +2348,6 @@ msgstr "Erabiltzaileak autentifikatzeko elkarrizketa-koadroa itxi du"
|
||||
#~ msgstr[0] "minutu %d geratzen da"
|
||||
#~ msgstr[1] "%d minutu geratzen dira"
|
||||
|
||||
#~ msgctxt "percent of battery remaining"
|
||||
#~ msgid "%d%%"
|
||||
#~ msgstr "%%%d"
|
||||
|
||||
#~ msgid "AC Adapter"
|
||||
#~ msgstr "AC moldagailua"
|
||||
|
||||
|
2
po/ga.po
2
po/ga.po
@ -715,7 +715,7 @@ msgstr "Tá brón orm, theip sé sin. Bain triail eile as, le do thoil."
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:759
|
||||
#, javascript-format
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "Tugtar %2$s ar %1$s anois"
|
||||
|
||||
|
2
po/gu.po
2
po/gu.po
@ -13,7 +13,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2014-10-01 15:51+0530\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
|
||||
"Language: \n"
|
||||
"Language: gu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
48
po/it.po
48
po/it.po
@ -11,8 +11,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-02-18 10:19+0000\n"
|
||||
"PO-Revision-Date: 2016-02-18 14:04+0100\n"
|
||||
"POT-Creation-Date: 2016-03-17 10:22+0000\n"
|
||||
"PO-Revision-Date: 2016-03-17 21:19+0100\n"
|
||||
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
|
||||
"Language-Team: Italiano <tp@lists.linux.it>\n"
|
||||
"Language: it\n"
|
||||
@ -327,14 +327,14 @@ msgstr ""
|
||||
msgid "Network Login"
|
||||
msgstr "Accesso di rete"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:121
|
||||
#: ../js/extensionPrefs/main.js:117
|
||||
#, javascript-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
msgstr ""
|
||||
"Si è verificato un errore durante il caricamento della finestra delle "
|
||||
"preferenze per %s:"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:153
|
||||
#: ../js/extensionPrefs/main.js:149
|
||||
msgid "GNOME Shell Extensions"
|
||||
msgstr "Estensioni di GNOME Shell"
|
||||
|
||||
@ -805,7 +805,7 @@ msgstr "Errore nell'autenticazione. Provare di nuovo."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:759
|
||||
#: ../js/ui/components/telepathyClient.js:760
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s ha cambiato nome in %s"
|
||||
@ -994,11 +994,11 @@ msgid "Keyboard"
|
||||
msgstr "Tastiera"
|
||||
|
||||
#. translators: 'Hide' is a verb
|
||||
#: ../js/ui/legacyTray.js:66
|
||||
#: ../js/ui/legacyTray.js:65
|
||||
msgid "Hide tray"
|
||||
msgstr "Nascondi cassetto"
|
||||
|
||||
#: ../js/ui/legacyTray.js:107
|
||||
#: ../js/ui/legacyTray.js:106
|
||||
msgid "Status Icons"
|
||||
msgstr "Icone di stato"
|
||||
|
||||
@ -1052,7 +1052,7 @@ msgstr "Visualizza sorgente"
|
||||
msgid "Web Page"
|
||||
msgstr "Pagina web"
|
||||
|
||||
#: ../js/ui/messageList.js:542
|
||||
#: ../js/ui/messageList.js:543
|
||||
msgid "Clear section"
|
||||
msgstr "Annulla selezione"
|
||||
|
||||
@ -1291,31 +1291,51 @@ msgstr "Luminosità"
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Mostra disposizione tastiera"
|
||||
|
||||
#: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
|
||||
#: ../js/ui/status/location.js:107 ../js/ui/status/location.js:215
|
||||
msgid "Location Enabled"
|
||||
msgstr "Posizione abilitata"
|
||||
|
||||
# (ndt) o disabilitata?
|
||||
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
|
||||
#: ../js/ui/status/location.js:108 ../js/ui/status/location.js:216
|
||||
msgid "Disable"
|
||||
msgstr "Disabilitato"
|
||||
|
||||
#: ../js/ui/status/location.js:73
|
||||
#: ../js/ui/status/location.js:109
|
||||
msgid "Privacy Settings"
|
||||
msgstr "Impostazioni privacy"
|
||||
|
||||
#: ../js/ui/status/location.js:176
|
||||
#: ../js/ui/status/location.js:214
|
||||
msgid "Location In Use"
|
||||
msgstr "Posizione in uso"
|
||||
|
||||
#: ../js/ui/status/location.js:180
|
||||
#: ../js/ui/status/location.js:218
|
||||
msgid "Location Disabled"
|
||||
msgstr "Posizione disabilitata"
|
||||
|
||||
#: ../js/ui/status/location.js:181
|
||||
#: ../js/ui/status/location.js:219
|
||||
msgid "Enable"
|
||||
msgstr "Abilita"
|
||||
|
||||
#: ../js/ui/status/location.js:426
|
||||
msgid "Deny Access"
|
||||
msgstr "Nega accesso"
|
||||
|
||||
#: ../js/ui/status/location.js:429
|
||||
msgid "Grant Access"
|
||||
msgstr "Consenti accesso"
|
||||
|
||||
#. Translators: %s is an application name
|
||||
#: ../js/ui/status/location.js:435
|
||||
#, javascript-format
|
||||
msgid "Give %s access to your location?"
|
||||
msgstr "Consentire a %s di accedere alla propria posizione?"
|
||||
|
||||
#: ../js/ui/status/location.js:437
|
||||
msgid "Location access can be changed at any time from the privacy settings."
|
||||
msgstr ""
|
||||
"L'accesso alla posizione può essere modificato in qualsiasi momento "
|
||||
"attraverso le impostazioni della privacy."
|
||||
|
||||
#: ../js/ui/status/network.js:101
|
||||
msgid "<unknown>"
|
||||
msgstr "<sconosciuto>"
|
||||
|
2
po/ky.po
2
po/ky.po
@ -14,7 +14,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2012-09-24 14:29+0600\n"
|
||||
"Last-Translator: Timur Zhamakeev <ztimur@gmail.com>\n"
|
||||
"Language-Team: Kirghiz <gnome-i18n@gnome.org>\n"
|
||||
"Language: ky_KG\n"
|
||||
"Language: ky\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
1
po/mk.po
1
po/mk.po
@ -11,6 +11,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2011-12-08 22:37+0100\n"
|
||||
"Last-Translator: Jovan N\n"
|
||||
"Language-Team: mk_MK <jovan@lugola.net>\n"
|
||||
"Language: mk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
2
po/ms.po
2
po/ms.po
@ -11,7 +11,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2014-09-15 19:21+0730\n"
|
||||
"Last-Translator: Umarzuki Mochlis Moktar <umar@umarzuki.org>\n"
|
||||
"Language-Team: GNOME Malay Team <gnome-ms@googlegroups.com>\n"
|
||||
"Language: \n"
|
||||
"Language: ms\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
159
po/nb.po
159
po/nb.po
@ -9,11 +9,11 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 3.19.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-01-07 22:59+0100\n"
|
||||
"PO-Revision-Date: 2016-01-07 22:59+0100\n"
|
||||
"POT-Creation-Date: 2016-05-01 14:12+0200\n"
|
||||
"PO-Revision-Date: 2016-05-01 14:21+0200\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: Norwegian bokmål\n"
|
||||
"Language: nb\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -305,33 +305,34 @@ msgstr "Utsett fokusendringer i musmodus til peker slutter å bevege seg"
|
||||
msgid "Network Login"
|
||||
msgstr "Nettverkspålogging"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:122
|
||||
#: ../js/extensionPrefs/main.js:117
|
||||
#, javascript-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
msgstr "Det oppsto en feil ved lasting av brukervalgdialog for %s:"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:154
|
||||
#: ../js/extensionPrefs/main.js:149
|
||||
msgid "GNOME Shell Extensions"
|
||||
msgstr "Utvidelser for GNOME Shell"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
|
||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/audioDeviceSelection.js:71
|
||||
#: ../js/ui/components/networkAgent.js:145
|
||||
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:452
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||
#: ../js/ui/status/network.js:916
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
|
||||
#: ../js/gdm/authPrompt.js:447
|
||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:216
|
||||
#: ../js/gdm/authPrompt.js:448
|
||||
msgid "Next"
|
||||
msgstr "Neste"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
|
||||
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
|
||||
#: ../js/ui/unlockDialog.js:59
|
||||
msgid "Unlock"
|
||||
msgstr "Lås opp"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:213
|
||||
#: ../js/gdm/authPrompt.js:214
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Logg inn"
|
||||
@ -498,16 +499,36 @@ msgstr "Legg til i favoritter"
|
||||
msgid "Show Details"
|
||||
msgstr "Vis detaljer"
|
||||
|
||||
#: ../js/ui/appFavorites.js:133
|
||||
#: ../js/ui/appFavorites.js:134
|
||||
#, javascript-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s ble lagt til i favoritter."
|
||||
|
||||
#: ../js/ui/appFavorites.js:167
|
||||
#: ../js/ui/appFavorites.js:168
|
||||
#, javascript-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s ble fjernet fra favoritter."
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:59
|
||||
msgid "Select Audio Device"
|
||||
msgstr "Velg lydenhet"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:69
|
||||
msgid "Sound Settings"
|
||||
msgstr "Innstillinger for lyd"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:78
|
||||
msgid "Headphones"
|
||||
msgstr "Hodetelefoner"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:80
|
||||
msgid "Headset"
|
||||
msgstr "Headset"
|
||||
|
||||
#: ../js/ui/audioDeviceSelection.js:82 ../js/ui/status/volume.js:213
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19
|
||||
msgid "Change Background…"
|
||||
msgstr "Bytt bakgrunn …"
|
||||
@ -516,12 +537,12 @@ msgstr "Bytt bakgrunn …"
|
||||
msgid "Display Settings"
|
||||
msgstr "Innstillinger for skjerm"
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
|
||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:371
|
||||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
|
||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||
#: ../js/ui/calendar.js:55
|
||||
#: ../js/ui/calendar.js:47
|
||||
msgctxt "calendar-no-work"
|
||||
msgid "06"
|
||||
msgstr "06"
|
||||
@ -531,100 +552,96 @@ msgstr "06"
|
||||
#. * NOTE: These grid abbreviations are always shown together
|
||||
#. * and in order, e.g. "S M T W T F S".
|
||||
#.
|
||||
#: ../js/ui/calendar.js:84
|
||||
#: ../js/ui/calendar.js:76
|
||||
msgctxt "grid sunday"
|
||||
msgid "S"
|
||||
msgstr "S"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Monday
|
||||
#: ../js/ui/calendar.js:86
|
||||
#: ../js/ui/calendar.js:78
|
||||
msgctxt "grid monday"
|
||||
msgid "M"
|
||||
msgstr "M"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Tuesday
|
||||
#: ../js/ui/calendar.js:88
|
||||
#: ../js/ui/calendar.js:80
|
||||
msgctxt "grid tuesday"
|
||||
msgid "T"
|
||||
msgstr "T"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Wednesday
|
||||
#: ../js/ui/calendar.js:90
|
||||
#: ../js/ui/calendar.js:82
|
||||
msgctxt "grid wednesday"
|
||||
msgid "W"
|
||||
msgstr "O"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Thursday
|
||||
#: ../js/ui/calendar.js:92
|
||||
#: ../js/ui/calendar.js:84
|
||||
msgctxt "grid thursday"
|
||||
msgid "T"
|
||||
msgstr "T"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Friday
|
||||
#: ../js/ui/calendar.js:94
|
||||
#: ../js/ui/calendar.js:86
|
||||
msgctxt "grid friday"
|
||||
msgid "F"
|
||||
msgstr "F"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Saturday
|
||||
#: ../js/ui/calendar.js:96
|
||||
#: ../js/ui/calendar.js:88
|
||||
msgctxt "grid saturday"
|
||||
msgid "S"
|
||||
msgstr "L"
|
||||
|
||||
#: ../js/ui/calendar.js:566
|
||||
#: ../js/ui/calendar.js:416
|
||||
msgid "Previous month"
|
||||
msgstr "Forrige måned"
|
||||
|
||||
#: ../js/ui/calendar.js:576
|
||||
#: ../js/ui/calendar.js:426
|
||||
msgid "Next month"
|
||||
msgstr "Neste måned"
|
||||
|
||||
#: ../js/ui/calendar.js:729
|
||||
#: ../js/ui/calendar.js:579
|
||||
#, no-javascript-format
|
||||
msgctxt "date day number format"
|
||||
msgid "%d"
|
||||
msgstr "%d"
|
||||
|
||||
#: ../js/ui/calendar.js:784
|
||||
#: ../js/ui/calendar.js:634
|
||||
msgid "Week %V"
|
||||
msgstr "Uke %V"
|
||||
|
||||
#. Translators: Shown in calendar event list for all day events
|
||||
#. * Keep it short, best if you can use less then 10 characters
|
||||
#.
|
||||
#: ../js/ui/calendar.js:1189
|
||||
#: ../js/ui/calendar.js:695
|
||||
msgctxt "event list time"
|
||||
msgid "All Day"
|
||||
msgstr "Hele dagen"
|
||||
|
||||
#: ../js/ui/calendar.js:1296
|
||||
msgid "Clear section"
|
||||
msgstr "Tøm seksjon"
|
||||
|
||||
#: ../js/ui/calendar.js:1523
|
||||
#: ../js/ui/calendar.js:821
|
||||
msgid "Events"
|
||||
msgstr "Hendelser"
|
||||
|
||||
#: ../js/ui/calendar.js:1532
|
||||
#: ../js/ui/calendar.js:830
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A %B %d"
|
||||
|
||||
#: ../js/ui/calendar.js:1536
|
||||
#: ../js/ui/calendar.js:834
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A %B %d, %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:1621
|
||||
#: ../js/ui/calendar.js:919
|
||||
msgid "Notifications"
|
||||
msgstr "Varslinger"
|
||||
|
||||
#: ../js/ui/calendar.js:1772
|
||||
#: ../js/ui/calendar.js:1070
|
||||
msgid "No Notifications"
|
||||
msgstr "Ingen varslinger"
|
||||
|
||||
#: ../js/ui/calendar.js:1775
|
||||
#: ../js/ui/calendar.js:1073
|
||||
msgid "No Events"
|
||||
msgstr "Ingen hendelser"
|
||||
|
||||
@ -762,7 +779,7 @@ msgstr "Beklager, det virket ikke. Prøv igjen."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:759
|
||||
#: ../js/ui/components/telepathyClient.js:760
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s er nå kjent som %s"
|
||||
@ -949,11 +966,11 @@ msgid "Keyboard"
|
||||
msgstr "Tastatur"
|
||||
|
||||
#. translators: 'Hide' is a verb
|
||||
#: ../js/ui/legacyTray.js:66
|
||||
#: ../js/ui/legacyTray.js:65
|
||||
msgid "Hide tray"
|
||||
msgstr "Skjul statusområde"
|
||||
|
||||
#: ../js/ui/legacyTray.js:107
|
||||
#: ../js/ui/legacyTray.js:106
|
||||
msgid "Status Icons"
|
||||
msgstr "Statusikoner"
|
||||
|
||||
@ -1005,10 +1022,26 @@ msgstr "Vis kildekode"
|
||||
msgid "Web Page"
|
||||
msgstr "Nettside"
|
||||
|
||||
#: ../js/ui/messageList.js:543
|
||||
msgid "Clear section"
|
||||
msgstr "Tøm seksjon"
|
||||
|
||||
#: ../js/ui/messageTray.js:1486
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformasjon"
|
||||
|
||||
#: ../js/ui/mpris.js:194
|
||||
msgid "Unknown artist"
|
||||
msgstr "Ukjent artist"
|
||||
|
||||
#: ../js/ui/mpris.js:195
|
||||
msgid "Unknown title"
|
||||
msgstr "Ukjent tittel"
|
||||
|
||||
#: ../js/ui/mpris.js:217
|
||||
msgid "Media"
|
||||
msgstr "Media"
|
||||
|
||||
#: ../js/ui/overview.js:84
|
||||
msgid "Undo"
|
||||
msgstr "Angre"
|
||||
@ -1085,7 +1118,7 @@ msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d ny varsling"
|
||||
msgstr[1] "%d nye varslinger"
|
||||
|
||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:374
|
||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:379
|
||||
msgid "Lock"
|
||||
msgstr "Lås"
|
||||
|
||||
@ -1227,30 +1260,48 @@ msgstr "Lysstyrke"
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Vis tastaturutforming"
|
||||
|
||||
#: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
|
||||
#: ../js/ui/status/location.js:107 ../js/ui/status/location.js:215
|
||||
msgid "Location Enabled"
|
||||
msgstr "Plassering slått på"
|
||||
|
||||
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
|
||||
#: ../js/ui/status/location.js:108 ../js/ui/status/location.js:216
|
||||
msgid "Disable"
|
||||
msgstr "Slå av"
|
||||
|
||||
#: ../js/ui/status/location.js:73
|
||||
#: ../js/ui/status/location.js:109
|
||||
msgid "Privacy Settings"
|
||||
msgstr "Innstillinger for personvern"
|
||||
|
||||
#: ../js/ui/status/location.js:176
|
||||
#: ../js/ui/status/location.js:214
|
||||
msgid "Location In Use"
|
||||
msgstr "Plassering i bruk"
|
||||
|
||||
#: ../js/ui/status/location.js:180
|
||||
#: ../js/ui/status/location.js:218
|
||||
msgid "Location Disabled"
|
||||
msgstr "Plassering slått av"
|
||||
|
||||
#: ../js/ui/status/location.js:181
|
||||
#: ../js/ui/status/location.js:219
|
||||
msgid "Enable"
|
||||
msgstr "Slå på"
|
||||
|
||||
#: ../js/ui/status/location.js:426
|
||||
msgid "Deny Access"
|
||||
msgstr "Nekt tilgang"
|
||||
|
||||
#: ../js/ui/status/location.js:429
|
||||
msgid "Grant Access"
|
||||
msgstr "Gi tilgang"
|
||||
|
||||
#. Translators: %s is an application name
|
||||
#: ../js/ui/status/location.js:435
|
||||
#, javascript-format
|
||||
msgid "Give %s access to your location?"
|
||||
msgstr "Gi %s tilgang til din plassering?"
|
||||
|
||||
#: ../js/ui/status/location.js:437
|
||||
msgid "Location access can be changed at any time from the privacy settings."
|
||||
msgstr "Tilgang til plassering kan endres når som helst fra innstillinger for personvern."
|
||||
|
||||
#: ../js/ui/status/network.js:101
|
||||
msgid "<unknown>"
|
||||
msgstr "<ukjent>"
|
||||
@ -1473,27 +1524,27 @@ msgstr "%d %%"
|
||||
msgid "Airplane Mode On"
|
||||
msgstr "Flymodus er slått på"
|
||||
|
||||
#: ../js/ui/status/system.js:343
|
||||
#: ../js/ui/status/system.js:348
|
||||
msgid "Switch User"
|
||||
msgstr "Bytt bruker"
|
||||
|
||||
#: ../js/ui/status/system.js:348
|
||||
#: ../js/ui/status/system.js:353
|
||||
msgid "Log Out"
|
||||
msgstr "Logg ut"
|
||||
|
||||
#: ../js/ui/status/system.js:353
|
||||
#: ../js/ui/status/system.js:358
|
||||
msgid "Account Settings"
|
||||
msgstr "Innstillinger for konto"
|
||||
|
||||
#: ../js/ui/status/system.js:370
|
||||
#: ../js/ui/status/system.js:375
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Lås for orientering"
|
||||
|
||||
#: ../js/ui/status/system.js:378
|
||||
#: ../js/ui/status/system.js:383
|
||||
msgid "Suspend"
|
||||
msgstr "Hvilemodus"
|
||||
|
||||
#: ../js/ui/status/system.js:381
|
||||
#: ../js/ui/status/system.js:386
|
||||
msgid "Power Off"
|
||||
msgstr "Slå av"
|
||||
|
||||
@ -1505,10 +1556,6 @@ msgstr "Volum endret"
|
||||
msgid "Volume"
|
||||
msgstr "Volum"
|
||||
|
||||
#: ../js/ui/status/volume.js:213
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:67
|
||||
msgid "Log in as another user"
|
||||
msgstr "Logg inn som en annen bruker"
|
||||
|
840
po/pt_BR.po
840
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
944
po/sr@latin.po
944
po/sr@latin.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