Compare commits
251 Commits
Author | SHA1 | Date | |
---|---|---|---|
3581c1d5b4 | |||
64e7459d1c | |||
f71afa9248 | |||
1ebca2e6d5 | |||
6222796b6a | |||
dcecf41d18 | |||
9d1fbffe75 | |||
6a6ba94bb9 | |||
ef5de3a5c0 | |||
f042e43990 | |||
620330db8f | |||
3765acc0a5 | |||
2e8654b96c | |||
cc5c5e7e8a | |||
9c849b0290 | |||
ad314b362e | |||
737a4f2816 | |||
96e4128e3e | |||
6f515f2327 | |||
cbb9a7ab96 | |||
e2e3b29ed1 | |||
82a8ac1976 | |||
bfec396ec2 | |||
d0e7f880d7 | |||
ff81659b9e | |||
6b2b3475c8 | |||
ed8acefc00 | |||
737f395d6c | |||
ab0a5d4a53 | |||
9412ac2027 | |||
c8670819dc | |||
4132ccae33 | |||
c450120409 | |||
6ce07abf50 | |||
e39e539ee9 | |||
9563a8f8a0 | |||
d5f37fa280 | |||
5c6e5ef6d0 | |||
42adc38609 | |||
e5fadb3b42 | |||
4c5f3aa971 | |||
6fc49b79a4 | |||
9e804b082f | |||
1fb220beb7 | |||
1fc1282fad | |||
8834a7df10 | |||
a34071e1c3 | |||
52a342300a | |||
b9456caeb0 | |||
26aa4333a5 | |||
04d2b0d282 | |||
7def1a4aa5 | |||
001b9868fb | |||
59a3e393f9 | |||
b846354787 | |||
2674d96e54 | |||
0c98fe8546 | |||
f18ed3c6ae | |||
644acf7018 | |||
96dca48b3b | |||
1309b64c33 | |||
1301dee744 | |||
efc194e36c | |||
60f41a109f | |||
890efa787a | |||
60c88612f7 | |||
82648bc86c | |||
ea1e5a5210 | |||
aa03734d39 | |||
bb0f76f562 | |||
8c2a290d09 | |||
8e661c3780 | |||
a03b6c419a | |||
fb55dd677f | |||
408790a630 | |||
08371f073d | |||
e7289378b7 | |||
31bde574de | |||
5aacfe4e6e | |||
5cf7bdabfd | |||
2021edd1fb | |||
45c1a9eafb | |||
0ae1556b94 | |||
c0739bd1e3 | |||
af51e8df7b | |||
22ef63cc44 | |||
03a5133e8c | |||
7f2456c00d | |||
aa4dbee362 | |||
7b65735cc9 | |||
7ef35fbec7 | |||
8b10d85fee | |||
d99b1e6c09 | |||
57ab7aec5b | |||
29a221bf62 | |||
671c569a9e | |||
492c033760 | |||
33a3b8046d | |||
88df183450 | |||
6a9080c3d6 | |||
019670b5ab | |||
4cab0c95d3 | |||
d51e79d483 | |||
69a27911a7 | |||
dd48514b24 | |||
eb54662098 | |||
545f0432c8 | |||
fdefb317cb | |||
4e0c8bfe67 | |||
dbd629d5d2 | |||
619a44a499 | |||
c5ca4e3ff0 | |||
55771b437b | |||
8727680983 | |||
ab9f21351f | |||
0055cabc62 | |||
fc70c2246b | |||
f7b6acaff8 | |||
91caa8e59f | |||
4c44bb7f52 | |||
df8a735aa9 | |||
82aea3e8d6 | |||
a8baf4a2a2 | |||
bfd344cdec | |||
a0fd4e195d | |||
4b3fbc4c9b | |||
63b1699a35 | |||
48acc41698 | |||
17672accfe | |||
986d72d9de | |||
ffd461cdb4 | |||
71dfab9711 | |||
c4f5274d74 | |||
4bfc3bafcb | |||
898b2b903d | |||
7921954a31 | |||
0e42de9149 | |||
8e4a5f1ac5 | |||
61577e176e | |||
4b008b1ada | |||
bee37b5bc4 | |||
b5ab8b6ed5 | |||
4d6bd91d16 | |||
5428db5385 | |||
6e6b1e6052 | |||
bc2b47974d | |||
2244b6ff1b | |||
fb384fc291 | |||
73cae8ce9a | |||
dcd07eb23f | |||
fa24448489 | |||
c975740f92 | |||
1e0187fa57 | |||
cbdf060bca | |||
19a8dff975 | |||
72f9f482d6 | |||
88de26138a | |||
57bd964cb3 | |||
74a39ae57c | |||
5090a4ccce | |||
ae0652d13f | |||
101a07a3d7 | |||
b012e93121 | |||
c31109800b | |||
c0dc363a3d | |||
739bb28220 | |||
aab2794e05 | |||
75c8c1bfb6 | |||
6f8bd96195 | |||
25f0d098bd | |||
56d584b7c6 | |||
20bf53add1 | |||
0d440bb0a2 | |||
8ec62ce46b | |||
79927faaec | |||
e4c7f1f3c4 | |||
68710c4647 | |||
7d7cbde1f3 | |||
bafd9c777a | |||
42a5531f15 | |||
227da25776 | |||
2028f33e38 | |||
145bf19636 | |||
d1675c44e2 | |||
6934e4db26 | |||
cae3414854 | |||
90d061edaf | |||
2e02918323 | |||
e77a1fd33b | |||
dd01c24c34 | |||
f88fbee80d | |||
fe08edbe2b | |||
d2a16bca10 | |||
a87f51487e | |||
76fce94b66 | |||
d104f9210a | |||
d0780d1622 | |||
9d5906dae3 | |||
07a0960265 | |||
72bee6d7ca | |||
249f26d23c | |||
7813c5b93f | |||
e38d83fd44 | |||
d97657b151 | |||
7e857dede3 | |||
c3218f6b03 | |||
1060d0db60 | |||
b8925a091c | |||
79cca07a41 | |||
c1d189c9ad | |||
b1a973ee5a | |||
93ef560779 | |||
c28d35ad86 | |||
9c654a6ab5 | |||
64a54e379c | |||
8f4ec8583b | |||
f4852d7264 | |||
092e1a691d | |||
16ac42421d | |||
1d2eadb9c0 | |||
35c85d9fac | |||
f0622c1896 | |||
6d11247417 | |||
59c3e3a179 | |||
42e26a8682 | |||
db6caac9cc | |||
ba4a57ba0b | |||
018e3bc35f | |||
a56bc9d933 | |||
5b93525ce8 | |||
6abb86dff6 | |||
6a27d5ed80 | |||
8232684672 | |||
2d855ce5cf | |||
b2b685e46d | |||
ef552846d1 | |||
c7dfd0894e | |||
5b1a76aeff | |||
529b6ca935 | |||
625a4c0766 | |||
3c3ea2f575 | |||
57a332bb08 | |||
73ac98b193 | |||
59e3cbb36b | |||
fb019a7cbf | |||
09607f6aa7 | |||
1c4a33eb78 | |||
b7513097ea | |||
a35677a9bf | |||
89de3a81c6 | |||
b9828bf5de |
6
.gitignore
vendored
@ -3,6 +3,7 @@
|
||||
*.o
|
||||
.deps
|
||||
.libs
|
||||
ABOUT-NLS
|
||||
ChangeLog
|
||||
INSTALL
|
||||
Makefile
|
||||
@ -29,8 +30,13 @@ m4/
|
||||
omf.make
|
||||
po/*.gmo
|
||||
po/gnome-shell.pot
|
||||
po/*.header
|
||||
po/*.sed
|
||||
po/*.sin
|
||||
po/Makefile.in.in
|
||||
po/Makevars.template
|
||||
po/POTFILES
|
||||
po/Rules-quot
|
||||
po/stamp-it
|
||||
scripts/launcher.pyc
|
||||
src/*.gir
|
||||
|
@ -3,5 +3,5 @@ E-mail: otaylor@redhat.com
|
||||
Userid: otaylor
|
||||
|
||||
Colin Walters
|
||||
E-mail: walters@redhat.com
|
||||
E-mail: walters@verbum.org
|
||||
Userid: walters
|
||||
|
200
NEWS
@ -1,3 +1,203 @@
|
||||
3.1.2
|
||||
=====
|
||||
* Fix problem with "user theme extension" breaking the CSS for other
|
||||
extensions [Giovanni; #650971]
|
||||
* Telepathy IM framework integration
|
||||
- Switch to using telepathy-glib rather than talking to
|
||||
Telepathy via D-Bus [Guillaume, Jasper; #645585, #649633, #651138, #651227]
|
||||
- Acknowledge messages when the user clicks on them [Guillaume, #647893]
|
||||
- Fix problem with telepathy icon blinking for incoming messages
|
||||
even though the user has been notified of them [Guillaume; #643594]
|
||||
* Networking
|
||||
- keep wirelesss networks in predictable order [Giovanni; #646580, #652313]
|
||||
- Show unmanaged devices in the menu [Giovanni; #646946]
|
||||
- Fix overflow when too many VPN connections [Giovanni; #651602]
|
||||
* Bluetooth
|
||||
- Show "hardware disabled" when disabled by rfkill [Giovanni; #648048]
|
||||
- Fix bug updating status of devices [Giovanni; #647565]
|
||||
* LookingGlass console:
|
||||
- Add a "Memory" tab [Colin; #650692]
|
||||
- Make escape work from any page [Dan Winship; #647303]
|
||||
- Provide a way to refer to panel items as, e.g.,
|
||||
Main.panel._activities [Dan Winship; #646915]
|
||||
* User menu
|
||||
- Fix problem with suspend menu option locking the screen even when the user
|
||||
disabled that. [Florian; #652327]
|
||||
- Hide "power off..." option if shutdown is disabled via PolicyKit
|
||||
[Florian; #652038]
|
||||
* Track changes to WM_CLASS (fixes problems with LibreOffice tracking)
|
||||
[Colin; #649315]
|
||||
* Remove app tracking workarounds for Firefox and LibreOffice [Colin; #651015]
|
||||
* Use upstream gettext autoconfigury rather than glib version [Javier; #631576]
|
||||
* Show messages in the message tray when an application is fullscreen
|
||||
[Dan Winship; #608667]
|
||||
* Don't autohide the workspace pager if there is more than one workspace
|
||||
[Florian; #652714, #653078, #653142]
|
||||
* Don't always slide out the workspace pager at drag begin [Florian; #652730]
|
||||
* Only offer to remove a favorite app when dragging it's icon [Owen; #642895]
|
||||
* Allow dropping an icon anywhere on a workspace [Adel; #652079]
|
||||
* st-scroll-view: Make the fade effect and offset themable [Jasper; #651813]
|
||||
* Obey the user's preference when running an application in a terminal
|
||||
from the run dialog [Florian; #648422]
|
||||
* Consistently exit overview when launching external applications
|
||||
[Colin; #653095]
|
||||
* Adapt to changes in GJS for how GObject APIs are bound
|
||||
[Alex, Colin, Florian, Jasper, Marc-Antoine; #649981, #652597]
|
||||
* Fix problems with scrolling in overflow for alt-Tab switcher
|
||||
[Dan Winship, Adel; #647807]
|
||||
* Mark relationships between labels and actors for accessibility [Alejandro]
|
||||
* Add org.gnome.shell.enabled-extensions complementing disabled-extensions
|
||||
GSetting [Tassilo; #651088]
|
||||
* Visual tweaks [Jakub, Jasper; #646261, #652715]
|
||||
* Switch to building against clutter-1.7 with independent Cogl [Adel; #653397]
|
||||
* Code cleanups [Colin, Dan Winship, Florian; #633620, #645031, #648755, #648758,
|
||||
#648760, #649203, #649517, #650317, #652730]
|
||||
* Memory leak fixes [Colin, Maxim; #649508, #650934]
|
||||
* Build Fixes [Colin, Dan Winship, Florian, Ionut, Morten, Owen, Sean; #647395,
|
||||
#648006, #650869, #653199, #653275
|
||||
* Miscellaneous bug fixes [Adam, Adel, Dan Williams, Dan Winship, Florian,
|
||||
Ionut, Jasper, Maxim, Ray; #620105, #639459, #641570, #642793, #643513,
|
||||
#645848, #646919, #647186, #648305, #648410, #648562, #648894, #649001,
|
||||
#645990, #647893, #647907, #651012, #651086, #651606, #651569, #651866,
|
||||
#652388, #653511]
|
||||
|
||||
Contributors:
|
||||
Ionut Biru, Giovanni Campagna, Guillaume Desmottes, Adam Dingle,
|
||||
Maxim Ermilov, Adel Gadllah, Tassilo Horn, Javier Jardón, Jonny Lamb,
|
||||
Alexander Larsson, Rui Matos, Morten Mjelva, Florian Müllner,
|
||||
Marc-Antoine Perennou, Alejandro Piñeiro, Jasper St. Pierre, Jakub Steiner,
|
||||
Ray Strode, Owen Taylor, Colin Walters, Dan Williams, Sean Wilson, Dan Winship
|
||||
|
||||
Translations:
|
||||
Daniel Martinez Cucalon [ar], Ihar Hrachyshka [be], Carles Ferrando,
|
||||
Gil Forcada, Sílvia Miranda [ca], Kristjan Schmidt [eo], Jorge González,
|
||||
Daniel Mustieles [es], Seán de Búrca [ga], Fran Diéguez [gl],
|
||||
Yaron Shahrabani [he], Kjartan Maraas [nb], Misha Shnurapet,
|
||||
Yuri Myasoedov [ru], Daniel Nylander [se], Peter Mráz [sk],
|
||||
Matej Urbančič [sl], Krishnababu Krothapalli [te], Daniel Korostil [uk],
|
||||
Aron Xu [zh_CN]
|
||||
|
||||
|
||||
3.0.2
|
||||
=====
|
||||
* Network Menu [Dan Williams]
|
||||
- Fix connecting to WPA2 Enterprise access points
|
||||
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648171
|
||||
- Show the mobile broadband wizard when selecting 3G network
|
||||
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=649318
|
||||
- Miscellaneous bug fixes
|
||||
648648, 650124
|
||||
* Fix duplicate icons in the application browser [Owen]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=648739
|
||||
* Make clicking anywhere on the volume icon slider work [Giovanni]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646660
|
||||
* Fix a case where activating and clicking the hot corner
|
||||
at the same time could result in immediately leaving the
|
||||
overview [Rui]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=649427
|
||||
* Fix a case where applications became misordered in Alt-Tab [Jasper]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=643302
|
||||
* Fix a bug where messages you send could show up in
|
||||
notifications as if someone else sent them [Jonny]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=650219
|
||||
* Memory leak fixes [Colin, Maxim]
|
||||
642652, 649508, 649497
|
||||
* Miscellaneous minor bug fixes [Adel, Christopher, Jasper]
|
||||
649596, 648765, 648983, 649632
|
||||
|
||||
Contributors:
|
||||
Christopher Aillon, Giovanni Campagna, Maxim Ermilov,
|
||||
Adel Gadllah, Jonny Lamb, Rui Matos, Jasper St. Pierre,
|
||||
Owen Taylor, Colin Walters, Dan Williams
|
||||
|
||||
Translations:
|
||||
Arash Mousavi [fa], Seán de Búrca [ga], Timo Jyrinki [fi],
|
||||
Sigurd Gartmann [nb], Daniel Nylander [se], Peter Mráz [sl],
|
||||
Abduxukur Abdurixit [ug], Nguyễn Thái Ngọc Duy [vi]
|
||||
|
||||
3.0.1
|
||||
=====
|
||||
|
||||
* Network menu
|
||||
- Fix problems updating the menu for mobile broadband devices [Giovanni]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646395
|
||||
- Fix missing device descriptions with multiple devices of the
|
||||
same type [Giovanni]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646074
|
||||
- Label ad-hoc neworks with an appropriate icon [Dan]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646141
|
||||
- Fix displaying some devices states as "invalid" [Dan]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646946
|
||||
- Fix problems with access points that don't report a SSID [Giovanni]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=647040
|
||||
- Miscellaneous minor bug fixes [Dan, Giovanni, Owen]
|
||||
645981, 646558, 646443, 646708, 646968
|
||||
* Application menu and icon
|
||||
- Fix bug where application menu icon was missing at GNOME Shell
|
||||
startup. [Florian]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=644122
|
||||
- Fix missing application menu for dialog windows [Colin]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=647082
|
||||
- When launching an application through an alternate launcher
|
||||
(like for a System Settings pane), association the windows with
|
||||
the application, not the launcher. [Colin]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646689
|
||||
* Activities overview
|
||||
- Load the applications view incrementally to avoid potentially freezing
|
||||
for multiple seconds [Colin]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=647778
|
||||
- Fix bug where package installation while the overview
|
||||
was up could result in a corrupted application display. [Giovanni]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=645801
|
||||
- Fix dragging from the search results to launch apps and docs [Florian]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=645990
|
||||
- Fix flickering of selection when searching in the overview [Florian]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646019
|
||||
- Fix bug when typing into the search box when text was already
|
||||
selected [Nohemi]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=636341
|
||||
* Fix layout of notifications for right-to-left languages [Florian]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646921
|
||||
* Remove a confusing special case where Alt-Tab sometimes switched
|
||||
to a different window of the same application rather than to
|
||||
a different application. [Rui]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=648132
|
||||
* Fix a crash that could happen when a window was opened on a
|
||||
workspace that was immediately removed [Dan]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=648132
|
||||
* Fix keyboard navigation in logout/reboot dialogs [Dan]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646740
|
||||
* Fix missing inspector icon in Looking Glass console [Dan]
|
||||
* Miscellaneous minor bug fixes [Adel, Colin, Dan, Florian, Nohemi]
|
||||
645648, 646205, 646257, 646855, 647098, 646730
|
||||
|
||||
Contributors:
|
||||
Giovanni Campagna, Nohemi Fernandez, Adel Gadllah, Rui Matos, Florian Müllner,
|
||||
Owen Taylor, Colin Walters, Dan Winship
|
||||
|
||||
Translations:
|
||||
Hendrik Richter [de], Jorge González [es], Arash Mousavi [fa],
|
||||
Fran Diéguez [gl], Jiro Matsuzawa [ja], Piotr Drąg [pl], Daniel Nylander [sv],
|
||||
Sira Nokyoongtong [th], Muhammet Kara [tr], Nguyễn Thái Ngọc Duy [vi],
|
||||
Aron Xu [zh_CN], Chao-Hsiung Liao [zh_HK, zh_TW]
|
||||
|
||||
3.0.0.2
|
||||
=======
|
||||
|
||||
* Fix missing import that was preventing extensions from loading.
|
||||
[Maxim Ermilov]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646333
|
||||
|
||||
Translations:
|
||||
Timo Jyrinki [fi]
|
||||
|
||||
3.0.0.1
|
||||
=======
|
||||
|
||||
* Fix problem with stuck event handling if network menu pops down while
|
||||
user is using the scrollbar. [Owen Taylor]
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=646825
|
||||
|
||||
Contributors to GNOME Shell 3.0
|
||||
===============================
|
||||
|
||||
|
40
configure.ac
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.0.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.1.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -23,12 +23,16 @@ AM_PROG_CC_C_O
|
||||
LT_PREREQ([2.2.6])
|
||||
LT_INIT([disable-static])
|
||||
|
||||
# i18n
|
||||
IT_PROG_INTLTOOL([0.40])
|
||||
|
||||
AM_GNU_GETTEXT([external])
|
||||
AM_GNU_GETTEXT_VERSION([0.17])
|
||||
|
||||
GETTEXT_PACKAGE=gnome-shell
|
||||
AC_SUBST(GETTEXT_PACKAGE)
|
||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
|
||||
[The prefix for our gettext translation domains.])
|
||||
IT_PROG_INTLTOOL(0.26)
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
|
||||
PKG_PROG_PKG_CONFIG([0.22])
|
||||
|
||||
@ -68,11 +72,11 @@ GTK_MIN_VERSION=3.0.0
|
||||
GIO_MIN_VERSION=2.25.9
|
||||
LIBECAL_MIN_VERSION=2.32.0
|
||||
LIBEDATASERVER_MIN_VERSION=1.2.0
|
||||
LIBEDATASERVERUI2_MIN_VERSION=1.2.0
|
||||
LIBEDATASERVERUI3_MIN_VERSION=2.91.6
|
||||
TELEPATHY_GLIB_MIN_VERSION=0.13.12
|
||||
LIBEDATASERVERUI_MIN_VERSION=2.91.6
|
||||
TELEPATHY_GLIB_MIN_VERSION=0.15.0
|
||||
TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
||||
POLKIT_MIN_VERSION=0.100
|
||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||
|
||||
# Collect more than 20 libraries for a prize!
|
||||
PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
|
||||
@ -84,7 +88,7 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
|
||||
gdk-x11-3.0
|
||||
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
|
||||
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
|
||||
libstartup-notification-1.0
|
||||
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
|
||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||
libcanberra
|
||||
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
|
||||
@ -100,7 +104,7 @@ AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
|
||||
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
||||
JHBUILD_TYPELIBDIR="$INTROSPECTION_TYPELIBDIR"
|
||||
# NM is the only typelib we use that we don't jhbuild
|
||||
PKG_CHECK_EXISTS([libnm-glib >= 0.8.995],
|
||||
PKG_CHECK_EXISTS([libnm-glib >= 0.8.999],
|
||||
[NM_TYPELIBDIR=`$PKG_CONFIG --variable=libdir libnm-glib`/girepository-1.0
|
||||
if test "$INTROSPECTION_TYPELIBDIR" != "$NM_TYPELIBDIR"; then
|
||||
JHBUILD_TYPELIBDIR="$JHBUILD_TYPELIBDIR:$NM_TYPELIBDIR"
|
||||
@ -111,22 +115,20 @@ saved_CFLAGS=$CFLAGS
|
||||
saved_LIBS=$LIBS
|
||||
CFLAGS=$GNOME_SHELL_CFLAGS
|
||||
LIBS=$GNOME_SHELL_LIBS
|
||||
# sn_startup_sequence_get_application_id, we can replace with a version check later
|
||||
AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id XFixesCreatePointerBarrier)
|
||||
AC_CHECK_FUNCS(JS_NewGlobalObject XFixesCreatePointerBarrier)
|
||||
CFLAGS=$saved_CFLAGS
|
||||
LIBS=$saved_LIBS
|
||||
|
||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0 x11)
|
||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 gnome-desktop-3.0 >= 2.90.0 x11)
|
||||
PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0)
|
||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
||||
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
||||
PKG_CHECK_MODULES(JS_TEST, clutter-x11-1.0 gjs-1.0 gobject-introspection-1.0 gtk+-3.0)
|
||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 0.1.7)
|
||||
|
||||
AC_MSG_CHECKING([for bluetooth support])
|
||||
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 2.90.0],
|
||||
[BLUETOOTH_DIR=`$PKG_CONFIG --variable=libdir gnome-bluetooth-1.0`/gnome-bluetooth
|
||||
BLUETOOTH_LIBS="-L'$BLUETOOTH_DIR' -lgnome-bluetooth-applet"
|
||||
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
|
||||
[BLUETOOTH_DIR=`$PKG_CONFIG --variable=applet_libdir gnome-bluetooth-1.0`
|
||||
BLUETOOTH_LIBS=`$PKG_CONFIG --variable=applet_libs gnome-bluetooth-1.0`
|
||||
AC_SUBST([BLUETOOTH_LIBS],["$BLUETOOTH_LIBS"])
|
||||
AC_DEFINE_UNQUOTED([BLUETOOTH_DIR],["$BLUETOOTH_DIR"],[Path to installed GnomeBluetooth typelib and library])
|
||||
AC_DEFINE([HAVE_BLUETOOTH],[1],[Define if you have libgnome-bluetooth-applet])
|
||||
@ -136,13 +138,7 @@ PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 2.90.0],
|
||||
AC_SUBST([HAVE_BLUETOOTH],[0])
|
||||
AC_MSG_RESULT([no])])
|
||||
|
||||
# Default to libedataserverui-3.0, but allow falling back to 1.2
|
||||
PKG_CHECK_EXISTS(libedataserverui-3.0,
|
||||
[EDS_API=3.0
|
||||
LIBEDATASERVERUI_MIN_VERSION=$LIBEDATASERVERUI3_MIN_VERSION],
|
||||
[EDS_API=1.2
|
||||
LIBEDATASERVERUI_MIN_VERSION=$LIBEDATASERVERUI2_MIN_VERSION])
|
||||
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION libedataserverui-$EDS_API >= $LIBEDATASERVERUI_MIN_VERSION gio-2.0)
|
||||
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION libedataserverui-3.0 >= $LIBEDATASERVERUI_MIN_VERSION gio-2.0)
|
||||
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
||||
AC_SUBST(CALENDAR_SERVER_LIBS)
|
||||
|
||||
|
@ -30,26 +30,14 @@ dist_theme_DATA = \
|
||||
theme/filter-selected-ltr.svg \
|
||||
theme/filter-selected-rtl.svg \
|
||||
theme/gnome-shell.css \
|
||||
theme/mosaic-view-active.svg \
|
||||
theme/mosaic-view.svg \
|
||||
theme/move-window-on-new.svg \
|
||||
theme/panel-border.svg \
|
||||
theme/panel-button-border.svg \
|
||||
theme/panel-button-highlight-narrow.svg \
|
||||
theme/panel-button-highlight-wide.svg \
|
||||
theme/process-working.svg \
|
||||
theme/running-indicator.svg \
|
||||
theme/scroll-button-down-hover.png \
|
||||
theme/scroll-button-down.png \
|
||||
theme/scroll-button-up-hover.png \
|
||||
theme/scroll-button-up.png \
|
||||
theme/scroll-hhandle.svg \
|
||||
theme/scroll-vhandle.svg \
|
||||
theme/section-more.svg \
|
||||
theme/section-more-open.svg \
|
||||
theme/separator-white.png \
|
||||
theme/single-view-active.svg \
|
||||
theme/single-view.svg \
|
||||
theme/source-button-border.svg \
|
||||
theme/toggle-off-us.svg \
|
||||
theme/toggle-off-intl.svg \
|
||||
|
@ -15,8 +15,18 @@
|
||||
<default>[]</default>
|
||||
<_summary>Uuids of extensions to disable</_summary>
|
||||
<_description>
|
||||
GNOME Shell extensions have a uuid property;
|
||||
this key lists extensions which should not be loaded.
|
||||
GNOME Shell extensions have a uuid property; this key lists extensions
|
||||
which should not be loaded. This setting overrides enabled-extensions
|
||||
for extensions that appear in both lists.
|
||||
</_description>
|
||||
</key>
|
||||
<key name="enabled-extensions" type="as">
|
||||
<default>[]</default>
|
||||
<_summary>Uuids of extensions to enable</_summary>
|
||||
<_description>
|
||||
GNOME Shell extensions have a uuid property; this key lists extensions
|
||||
which should be loaded. disabled-extensions overrides this setting for
|
||||
extensions that appear in both lists.
|
||||
</_description>
|
||||
</key>
|
||||
<key name="enable-app-monitoring" type="b">
|
||||
|
@ -39,6 +39,11 @@ StScrollBar
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
StScrollView.vfade
|
||||
{
|
||||
-st-vfade-offset: 68px;
|
||||
}
|
||||
|
||||
StScrollView StScrollBar
|
||||
{
|
||||
min-width: 16px;
|
||||
@ -182,6 +187,7 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.popup-inactive-menu-item {
|
||||
font-weight: normal;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
|
@ -1,113 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6503"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="mosaic-view-active.svg">
|
||||
<defs
|
||||
id="defs6505">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6511" />
|
||||
<inkscape:perspective
|
||||
id="perspective6494"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="-15.97056"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6508">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-16)">
|
||||
<g
|
||||
style="display:inline;fill:#cbcbcb;fill-opacity:1"
|
||||
transform="translate(-449.85476,-685.85869)"
|
||||
id="g5306">
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none"
|
||||
id="rect5308"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
|
||||
id="rect5310"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999976000000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
|
||||
id="rect5312"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
|
||||
id="rect5314"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.7 KiB |
@ -1,113 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6503"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="New document 19">
|
||||
<defs
|
||||
id="defs6505">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6511" />
|
||||
<inkscape:perspective
|
||||
id="perspective6494"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="16"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6508">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-16)">
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(-449.85476,-685.85869)"
|
||||
id="g5306">
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none"
|
||||
id="rect5308"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
|
||||
id="rect5310"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.99999976;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
|
||||
id="rect5312"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
|
||||
id="rect5314"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.6 KiB |
@ -1,89 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="98"
|
||||
height="98"
|
||||
id="svg6375"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="add-workspace.svg">
|
||||
<defs
|
||||
id="defs6377">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6383" />
|
||||
<inkscape:perspective
|
||||
id="perspective6366"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.9590209"
|
||||
inkscape:cx="56.650687"
|
||||
inkscape:cy="20.635343"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6380">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,66)">
|
||||
<g
|
||||
id="g2824"
|
||||
transform="matrix(11.568551,0,0,11.698271,-78.828159,-304.81518)">
|
||||
<path
|
||||
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 11.07363,21.36834 0,6.43903"
|
||||
id="path5322" />
|
||||
<path
|
||||
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m 14.29314,24.58786 -6.43902,0"
|
||||
id="path5324" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:0.98823529"
|
||||
d="m 48.239516,97.908047 c -0.41677,-0.05102 -1.269253,-0.222408 -1.894408,-0.380859 -4.088493,-1.036262 -7.520781,-4.753234 -8.330163,-9.021094 -0.154947,-0.817026 -0.257819,-6.68112 -0.257819,-14.696556 l 0,-13.337088 -13.829177,-0.08909 C 10.802042,60.298796 10.026884,60.268266 8.6851548,59.783022 3.6288503,57.954375 0.62673331,53.828648 0.62673331,48.708554 c 0,-5.625522 4.25936019,-10.425065 9.97721469,-11.242548 0.987903,-0.141242 7.368912,-0.254994 14.460646,-0.257791 l 12.692532,-0.005 0,-13.586668 c 0,-14.6441583 0.03287,-15.0698926 1.364686,-17.6753047 2.185477,-4.2754229 6.938193,-6.75739913 11.687647,-6.10355607 3.382776,0.46569661 6.737962,2.72496967 8.414081,5.66577137 1.480816,2.5981315 1.519067,3.0522448 1.519067,18.0333334 l 0,13.666424 12.692533,0.005 c 7.091733,0.0028 13.472742,0.116549 14.460646,0.257791 6.395303,0.914337 10.804785,6.623716 9.941157,12.871766 -0.698243,5.051565 -4.792685,9.104635 -9.941157,9.840713 -0.987904,0.141242 -7.368913,0.254995 -14.460646,0.257791 l -12.692533,0.005 0,13.801945 c 0,13.031417 -0.02798,13.895893 -0.501177,15.484801 -1.526902,5.127058 -6.919246,8.802262 -12.001914,8.18002 z"
|
||||
id="path2828"
|
||||
transform="translate(0,-66)" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.0 KiB |
@ -2,24 +2,62 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="119.97824"
|
||||
height="119.97824"
|
||||
id="svg7355"
|
||||
version="1.1">
|
||||
version="1.1"
|
||||
inkscape:version="0.48.1 r9760"
|
||||
sodipodi:docname="running-indicator.svg">
|
||||
<metadata
|
||||
id="metadata4175">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#2c1cff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1141"
|
||||
id="namedview4173"
|
||||
showgrid="false"
|
||||
inkscape:zoom="8.1348081"
|
||||
inkscape:cx="81.120662"
|
||||
inkscape:cy="58.117986"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g30864" />
|
||||
<defs
|
||||
id="defs7357">
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient36429"
|
||||
id="radialGradient7461"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0525552,0,0,1.0525552,-2.5162753,-9.0000838)"
|
||||
cx="47.878681"
|
||||
cy="171.25"
|
||||
fx="47.878681"
|
||||
fy="171.25"
|
||||
gradientTransform="matrix(1.011539,0,0,0.57582113,-0.39262194,71.83807)"
|
||||
cx="47.428951"
|
||||
cy="167.16817"
|
||||
fx="47.428951"
|
||||
fy="167.16817"
|
||||
r="37" />
|
||||
<linearGradient
|
||||
id="linearGradient36429">
|
||||
@ -59,7 +97,7 @@
|
||||
fx="49.067139"
|
||||
cy="242.50381"
|
||||
cx="49.067139"
|
||||
gradientTransform="matrix(1.1891549,0,0,0.55513246,-9.281289,36.12653)"
|
||||
gradientTransform="matrix(1.1891549,0,0,0.15252127,-9.281289,132.52772)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient7488"
|
||||
xlink:href="#linearGradient36471" />
|
||||
@ -72,19 +110,21 @@
|
||||
id="g30864"
|
||||
transform="translate(255.223,70.118091)">
|
||||
<rect
|
||||
ry="3.5996203"
|
||||
rx="3.5996203"
|
||||
y="98"
|
||||
x="11"
|
||||
height="74"
|
||||
width="74"
|
||||
ry="3.4593496"
|
||||
rx="3.4593496"
|
||||
y="99.596962"
|
||||
x="12.596948"
|
||||
height="71.116341"
|
||||
width="71.116341"
|
||||
id="rect14000"
|
||||
style="opacity:0.371875;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
|
||||
style="opacity:0.37187500000000001;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
|
||||
<path
|
||||
id="rect34520"
|
||||
d="m 84.506708,167.95508 c 6e-6,1.96759 -1.584022,3.55162 -3.551629,3.55163 l -65.910146,0 c -1.967608,-1e-5 -3.551648,-1.58402 -3.551643,-3.55164"
|
||||
style="opacity:0.2;fill:none;stroke:url(#radialGradient7488);stroke-width:1;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
d="m 83.273151,166.72152 c 0,1.96759 -1.584022,3.55163 -3.551629,3.55163 l -63.443032,0 c -1.967608,0 -3.551648,-1.58402 -3.551643,-3.55164 0,-5.85318 0,-5.85318 0,0"
|
||||
style="opacity:0.35;fill:none;stroke:url(#radialGradient7488);stroke-width:1;stroke-opacity:1"
|
||||
connector-curvature="0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccscc" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 225 B |
Before Width: | Height: | Size: 225 B |
Before Width: | Height: | Size: 211 B |
Before Width: | Height: | Size: 211 B |
@ -1,87 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="5.8600588"
|
||||
height="9"
|
||||
id="svg3647"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="section-more.svg">
|
||||
<defs
|
||||
id="defs3649">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective3655" />
|
||||
<inkscape:perspective
|
||||
id="perspective3603"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="82.777778"
|
||||
inkscape:cx="2.9300294"
|
||||
inkscape:cy="5.466443"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata3652">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-262.78425,-490.71933)">
|
||||
<path
|
||||
transform="matrix(0,-0.98149546,0.71467449,0,25.404986,578.15569)"
|
||||
d="M 88.830127,340 80.169873,340 84.5,332.5 88.830127,340 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="1.5707963"
|
||||
sodipodi:arg1="0.52359878"
|
||||
sodipodi:r2="2.5"
|
||||
sodipodi:r1="5"
|
||||
sodipodi:cy="337.5"
|
||||
sodipodi:cx="84.5"
|
||||
sodipodi:sides="3"
|
||||
id="path5497-5"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.59699643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
sodipodi:type="star" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.8 KiB |
@ -1,87 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="5.8600588"
|
||||
height="9"
|
||||
id="svg3647"
|
||||
version="1.1"
|
||||
inkscape:version="0.46+devel"
|
||||
sodipodi:docname="New document 6">
|
||||
<defs
|
||||
id="defs3649">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective3655" />
|
||||
<inkscape:perspective
|
||||
id="perspective3603"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="112.21575"
|
||||
inkscape:cy="-32.642856"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="609"
|
||||
inkscape:window-height="501"
|
||||
inkscape:window-x="164"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata3652">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-262.78425,-490.71933)">
|
||||
<path
|
||||
transform="matrix(0,0.98149546,-0.71467449,0,506.02358,412.28296)"
|
||||
d="M 88.830127,340 80.169873,340 84.5,332.5 88.830127,340 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="1.5707963"
|
||||
sodipodi:arg1="0.52359878"
|
||||
sodipodi:r2="2.5"
|
||||
sodipodi:r1="5"
|
||||
sodipodi:cy="337.5"
|
||||
sodipodi:cx="84.5"
|
||||
sodipodi:sides="3"
|
||||
id="path5497-5"
|
||||
style="fill:#5f5f5f;fill-opacity:1;stroke:#5f5f5f;stroke-width:0.59699643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
sodipodi:type="star" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 531 B |
@ -1,81 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6446"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="single-view-active.svg">
|
||||
<defs
|
||||
id="defs6448">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6454" />
|
||||
<inkscape:perspective
|
||||
id="perspective6441"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="0.014720032"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6451">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-17)">
|
||||
<rect
|
||||
ry="0.5"
|
||||
rx="0.49999979"
|
||||
y="17.483809"
|
||||
x="0.53483802"
|
||||
height="15"
|
||||
width="23"
|
||||
id="rect5304"
|
||||
style="fill:#cccccc;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,81 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6446"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="single-view.svg">
|
||||
<defs
|
||||
id="defs6448">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6454" />
|
||||
<inkscape:perspective
|
||||
id="perspective6441"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="0.014720032"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6451">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-17)">
|
||||
<rect
|
||||
ry="0.5"
|
||||
rx="0.49999979"
|
||||
y="17.483809"
|
||||
x="0.53483802"
|
||||
height="15"
|
||||
width="23"
|
||||
id="rect5304"
|
||||
style="fill:#626262;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB |
@ -13,8 +13,8 @@
|
||||
height="22"
|
||||
id="svg3199"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="New document 11">
|
||||
inkscape:version="0.48.1 r9760"
|
||||
sodipodi:docname="toggle-on-intl.svg">
|
||||
<defs
|
||||
id="defs3201">
|
||||
<inkscape:perspective
|
||||
@ -39,14 +39,14 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="32.500004"
|
||||
inkscape:cy="10.999997"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="49.147112"
|
||||
inkscape:cy="17.532036"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="609"
|
||||
inkscape:window-height="501"
|
||||
inkscape:window-width="1412"
|
||||
inkscape:window-height="1067"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="0" />
|
||||
@ -58,7 +58,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@ -72,7 +72,7 @@
|
||||
transform="translate(-453.5,448.36218)"
|
||||
id="g16453">
|
||||
<rect
|
||||
style="color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
style="color:#000000;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect16256-9-4"
|
||||
width="63.000004"
|
||||
height="19"
|
||||
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
@ -13,8 +13,8 @@
|
||||
height="22"
|
||||
id="svg2857"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="New document 2">
|
||||
inkscape:version="0.48.1 r9760"
|
||||
sodipodi:docname="toggle-on-us.svg">
|
||||
<defs
|
||||
id="defs2859">
|
||||
<inkscape:perspective
|
||||
@ -40,16 +40,18 @@
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="-69.642856"
|
||||
inkscape:cy="42.428569"
|
||||
inkscape:cx="19.689855"
|
||||
inkscape:cy="2.0517979"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="609"
|
||||
inkscape:window-height="501"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="0" />
|
||||
inkscape:window-width="941"
|
||||
inkscape:window-height="751"
|
||||
inkscape:window-x="2577"
|
||||
inkscape:window-y="206"
|
||||
inkscape:window-maximized="0"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata2862">
|
||||
<rdf:RDF>
|
||||
@ -58,7 +60,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@ -72,7 +74,7 @@
|
||||
transform="translate(-351.35714,708.36218)"
|
||||
id="g16453">
|
||||
<rect
|
||||
style="color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
style="color:#000000;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect16256-9-4"
|
||||
width="63.000004"
|
||||
height="19"
|
||||
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.8 KiB |
@ -109,7 +109,8 @@ const SessionManagerIface = {
|
||||
name: 'org.gnome.SessionManager',
|
||||
methods: [
|
||||
{ name: 'Logout', inSignature: 'u', outSignature: '' },
|
||||
{ name: 'Shutdown', inSignature: '', outSignature: '' }
|
||||
{ name: 'Shutdown', inSignature: '', outSignature: '' },
|
||||
{ name: 'CanShutdown', inSignature: '', outSignature: 'b' }
|
||||
]
|
||||
};
|
||||
|
||||
|
@ -77,9 +77,9 @@ HistoryManager.prototype = {
|
||||
this._history[this._history.length - 1] != input) {
|
||||
|
||||
this._history.push(input);
|
||||
this._historyIndex = this._history.length;
|
||||
this._save();
|
||||
}
|
||||
}
|
||||
this._historyIndex = this._history.length;
|
||||
},
|
||||
|
||||
_onEntryKeyPress: function(entry, event) {
|
||||
|
@ -7,9 +7,6 @@ const Shell = imports.gi.Shell;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
|
||||
const _urlRegexp = new RegExp('\\b(([a-z][\\w-]+:(/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)([^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\\".,<>?«»“”‘’]))', 'gi');
|
||||
|
||||
@ -48,7 +45,7 @@ function spawn(argv) {
|
||||
// occur when trying to parse or start the program.
|
||||
function spawnCommandLine(command_line) {
|
||||
try {
|
||||
let [success, argc, argv] = GLib.shell_parse_argv(command_line);
|
||||
let [success, argv] = GLib.shell_parse_argv(command_line);
|
||||
trySpawn(argv);
|
||||
} catch (err) {
|
||||
_handleSpawnError(command_line, err);
|
||||
@ -88,10 +85,10 @@ function trySpawn(argv)
|
||||
// Runs @command_line in the background. If launching @command_line
|
||||
// fails, this will throw an error.
|
||||
function trySpawnCommandLine(command_line) {
|
||||
let success, argc, argv;
|
||||
let success, argv;
|
||||
|
||||
try {
|
||||
[success, argc, argv] = GLib.shell_parse_argv(command_line);
|
||||
[success, argv] = GLib.shell_parse_argv(command_line);
|
||||
} catch (err) {
|
||||
// Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
// something nicer
|
||||
@ -150,7 +147,7 @@ const _IGNORED_WORDS = [
|
||||
'Incorporated',
|
||||
'Ltd.',
|
||||
'Limited.',
|
||||
'Intel?',
|
||||
'Intel',
|
||||
'chipset',
|
||||
'adapter',
|
||||
'[hex]',
|
||||
@ -181,7 +178,7 @@ const _IGNORED_PHRASES = [
|
||||
];
|
||||
|
||||
function fixupPCIDescription(desc) {
|
||||
desc.replace(/[_,]/, ' ');
|
||||
desc = desc.replace(/[_,]/, ' ');
|
||||
|
||||
/* Attempt to shorten ID by ignoring certain phrases */
|
||||
for (let i = 0; i < _IGNORED_PHRASES.length; i++) {
|
||||
@ -197,7 +194,7 @@ function fixupPCIDescription(desc) {
|
||||
/* Attmept to shorten ID by ignoring certain individual words */
|
||||
let words = desc.split(' ');
|
||||
let out = [ ];
|
||||
for (let i = 0; i < words; i++) {
|
||||
for (let i = 0; i < words.length; i++) {
|
||||
let item = words[i];
|
||||
|
||||
// skip empty items (that come out from consecutive spaces)
|
||||
|
@ -87,7 +87,7 @@ AltTabPopup.prototype = {
|
||||
let [childMinHeight, childNaturalHeight] = this._appSwitcher.actor.get_preferred_height(primary.width - hPadding);
|
||||
let [childMinWidth, childNaturalWidth] = this._appSwitcher.actor.get_preferred_width(childNaturalHeight);
|
||||
childBox.x1 = Math.max(primary.x + leftPadding, primary.x + Math.floor((primary.width - childNaturalWidth) / 2));
|
||||
childBox.x2 = Math.min(primary.x + primary.width - hPadding, childBox.x1 + childNaturalWidth);
|
||||
childBox.x2 = Math.min(primary.x + primary.width - rightPadding, childBox.x1 + childNaturalWidth);
|
||||
childBox.y1 = primary.y + Math.floor((primary.height - childNaturalHeight) / 2);
|
||||
childBox.y2 = childBox.y1 + childNaturalHeight;
|
||||
this._appSwitcher.actor.allocate(childBox, flags);
|
||||
@ -97,8 +97,6 @@ AltTabPopup.prototype = {
|
||||
// those calculations
|
||||
if (this._thumbnails) {
|
||||
let icon = this._appIcons[this._currentApp].actor;
|
||||
// Force a stage relayout to make sure we get the correct position
|
||||
global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, 0, 0);
|
||||
let [posX, posY] = icon.get_transformed_position();
|
||||
let thumbnailCenter = posX + icon.width / 2;
|
||||
let [childMinWidth, childNaturalWidth] = this._thumbnails.actor.get_preferred_width(-1);
|
||||
@ -145,6 +143,12 @@ AltTabPopup.prototype = {
|
||||
|
||||
this._appIcons = this._appSwitcher.icons;
|
||||
|
||||
// Need to force an allocation so we can figure out whether we
|
||||
// need to scroll when selecting
|
||||
this.actor.opacity = 0;
|
||||
this.actor.show();
|
||||
this.actor.get_allocation_box();
|
||||
|
||||
// Make the initial selection
|
||||
if (switch_group) {
|
||||
if (backward) {
|
||||
@ -156,29 +160,11 @@ AltTabPopup.prototype = {
|
||||
this._select(0, 0);
|
||||
}
|
||||
} else if (this._appIcons.length == 1) {
|
||||
if (!backward && this._appIcons[0].cachedWindows.length > 1) {
|
||||
// For compatibility with the multi-app case below
|
||||
this._select(0, 1, true);
|
||||
} else
|
||||
this._select(0);
|
||||
this._select(0);
|
||||
} else if (backward) {
|
||||
this._select(this._appIcons.length - 1);
|
||||
} else {
|
||||
let firstWindows = this._appIcons[0].cachedWindows;
|
||||
if (firstWindows.length > 1) {
|
||||
let curAppNextWindow = firstWindows[1];
|
||||
let nextAppWindow = this._appIcons[1].cachedWindows[0];
|
||||
|
||||
// If the next window of the current app is more-recently-used
|
||||
// than the first window of the next app, then select it.
|
||||
if (curAppNextWindow.get_workspace() == global.screen.get_active_workspace() &&
|
||||
curAppNextWindow.get_user_time() > nextAppWindow.get_user_time())
|
||||
this._select(0, 1, true);
|
||||
else
|
||||
this._select(1);
|
||||
} else {
|
||||
this._select(1);
|
||||
}
|
||||
this._select(1);
|
||||
}
|
||||
|
||||
// There's a race condition; if the user released Alt before
|
||||
@ -192,8 +178,6 @@ AltTabPopup.prototype = {
|
||||
return false;
|
||||
}
|
||||
|
||||
this.actor.opacity = 0;
|
||||
this.actor.show();
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
time: POPUP_FADE_TIME,
|
||||
@ -233,33 +217,21 @@ AltTabPopup.prototype = {
|
||||
|
||||
this._disableHover();
|
||||
|
||||
if (action == Meta.KeyBindingAction.SWITCH_GROUP)
|
||||
this._select(this._currentApp, backwards ? this._previousWindow() : this._nextWindow());
|
||||
else if (keysym == Clutter.Escape)
|
||||
if (keysym == Clutter.Escape) {
|
||||
this.destroy();
|
||||
else if (this._thumbnailsFocused) {
|
||||
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
|
||||
if (backwards) {
|
||||
if (this._currentWindow == 0 || this._currentWindow == -1)
|
||||
this._select(this._previousApp());
|
||||
else
|
||||
this._select(this._currentApp, this._previousWindow());
|
||||
} else {
|
||||
if (this._currentWindow == this._appIcons[this._currentApp].cachedWindows.length - 1)
|
||||
this._select(this._nextApp());
|
||||
else
|
||||
this._select(this._currentApp, this._nextWindow());
|
||||
}
|
||||
else if (keysym == Clutter.Left)
|
||||
} else if (action == Meta.KeyBindingAction.SWITCH_GROUP) {
|
||||
this._select(this._currentApp, backwards ? this._previousWindow() : this._nextWindow());
|
||||
} else if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) {
|
||||
this._select(backwards ? this._previousApp() : this._nextApp());
|
||||
} else if (this._thumbnailsFocused) {
|
||||
if (keysym == Clutter.Left)
|
||||
this._select(this._currentApp, this._previousWindow());
|
||||
else if (keysym == Clutter.Right)
|
||||
this._select(this._currentApp, this._nextWindow());
|
||||
else if (keysym == Clutter.Up)
|
||||
this._select(this._currentApp, null, true);
|
||||
} else {
|
||||
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
|
||||
this._select(backwards ? this._previousApp() : this._nextApp());
|
||||
else if (keysym == Clutter.Left)
|
||||
if (keysym == Clutter.Left)
|
||||
this._select(this._previousApp());
|
||||
else if (keysym == Clutter.Right)
|
||||
this._select(this._nextApp());
|
||||
@ -601,7 +573,7 @@ SwitcherList.prototype = {
|
||||
this._rightArrow.opacity = this._rightGradient.opacity;
|
||||
},
|
||||
|
||||
addItem : function(item) {
|
||||
addItem : function(item, label) {
|
||||
let bbox = new St.Button({ style_class: 'item-box',
|
||||
reactive: true });
|
||||
|
||||
@ -612,6 +584,8 @@ SwitcherList.prototype = {
|
||||
bbox.connect('clicked', Lang.bind(this, function() { this._onItemClicked(n); }));
|
||||
bbox.connect('enter-event', Lang.bind(this, function() { this._onItemEnter(n); }));
|
||||
|
||||
bbox.label_actor = label;
|
||||
|
||||
this._items.push(bbox);
|
||||
},
|
||||
|
||||
@ -997,7 +971,7 @@ AppSwitcher.prototype = {
|
||||
|
||||
_addIcon : function(appIcon) {
|
||||
this.icons.push(appIcon);
|
||||
this.addItem(appIcon.actor);
|
||||
this.addItem(appIcon.actor, appIcon.label);
|
||||
|
||||
let n = this._arrows.length;
|
||||
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
|
||||
@ -1067,9 +1041,12 @@ ThumbnailList.prototype = {
|
||||
this._labels.push(bin);
|
||||
bin.add_actor(name);
|
||||
box.add_actor(bin);
|
||||
|
||||
this.addItem(box, name);
|
||||
} else {
|
||||
this.addItem(box, null);
|
||||
}
|
||||
|
||||
this.addItem(box);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -6,10 +6,9 @@ const Gtk = imports.gi.Gtk;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const AppFavorites = imports.ui.appFavorites;
|
||||
const DND = imports.ui.dnd;
|
||||
@ -22,6 +21,7 @@ const Tweener = imports.ui.tweener;
|
||||
const Workspace = imports.ui.workspace;
|
||||
const Params = imports.misc.params;
|
||||
|
||||
const MAX_APPLICATION_WORK_MILLIS = 75;
|
||||
const MENU_POPUP_TIMEOUT = 600;
|
||||
const SCROLL_TIME = 0.1;
|
||||
|
||||
@ -34,6 +34,8 @@ AlphabeticalView.prototype = {
|
||||
this._grid = new IconGrid.IconGrid({ xAlign: St.Align.START });
|
||||
this._appSystem = Shell.AppSystem.get_default();
|
||||
|
||||
this._pendingAppLaterId = 0;
|
||||
this._apps = [];
|
||||
this._filterApp = null;
|
||||
|
||||
let box = new St.BoxLayout({ vertical: true });
|
||||
@ -42,7 +44,7 @@ AlphabeticalView.prototype = {
|
||||
this.actor = new St.ScrollView({ x_fill: true,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START,
|
||||
vfade: true });
|
||||
style_class: 'vfade' });
|
||||
this.actor.add_actor(box);
|
||||
this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
this.actor.connect('notify::mapped', Lang.bind(this,
|
||||
@ -109,6 +111,30 @@ AlphabeticalView.prototype = {
|
||||
this._apps[i].actor.visible = filter(this._apps[i]._appInfo);
|
||||
},
|
||||
|
||||
// Create actors for the applications in an idle to avoid blocking
|
||||
// for too long; see bug 647778
|
||||
_addPendingApps: function() {
|
||||
let i;
|
||||
let startTimeMillis = new Date().getTime();
|
||||
for (i = 0; i < this._pendingAppIds.length; i++) {
|
||||
let id = this._pendingAppIds[i];
|
||||
this._addApp(this._pendingApps[id]);
|
||||
|
||||
let currentTimeMillis = new Date().getTime();
|
||||
if (currentTimeMillis - startTimeMillis > MAX_APPLICATION_WORK_MILLIS)
|
||||
break;
|
||||
}
|
||||
this._pendingAppIds.splice(0, i + 1);
|
||||
if (this._pendingAppIds.length > 0) {
|
||||
return true;
|
||||
} else {
|
||||
this._pendingAppLaterId = 0;
|
||||
this._pendingAppIds = null;
|
||||
this._pendingApps = null;
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
refresh: function(apps) {
|
||||
let ids = [];
|
||||
for (let i in apps)
|
||||
@ -119,9 +145,12 @@ AlphabeticalView.prototype = {
|
||||
|
||||
this._removeAll();
|
||||
|
||||
for (let i = 0; i < ids.length; i++) {
|
||||
this._addApp(apps[ids[i]]);
|
||||
}
|
||||
this._pendingAppIds = ids;
|
||||
this._pendingApps = apps;
|
||||
if (this._pendingAppLaterId)
|
||||
Meta.later_remove(this._pendingAppLaterId);
|
||||
this._pendingAppLaterId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
|
||||
Lang.bind(this, this._addPendingApps));
|
||||
}
|
||||
};
|
||||
|
||||
@ -224,7 +253,6 @@ ViewByCategories.prototype = {
|
||||
|
||||
let sections = this._appSystem.get_sections();
|
||||
this._apps = apps;
|
||||
this._view.refresh(apps);
|
||||
|
||||
/* Translators: Filter to display all applications */
|
||||
this._addFilter(_("All"), -1);
|
||||
@ -236,6 +264,7 @@ ViewByCategories.prototype = {
|
||||
this._addFilter(sections[i], i);
|
||||
|
||||
this._selectCategory(-1);
|
||||
this._view.refresh(apps);
|
||||
|
||||
if (this._focusDummy) {
|
||||
let focused = this._focusDummy.has_key_focus();
|
||||
@ -313,7 +342,7 @@ BaseAppSearchProvider.prototype = {
|
||||
timestamp: null });
|
||||
|
||||
let app = this._appSys.get_app(id);
|
||||
app.open_new_window(params.workspace ? params.workspace.get_index() : -1);
|
||||
app.open_new_window(params.workspace ? params.workspace.index() : -1);
|
||||
}
|
||||
};
|
||||
|
||||
@ -403,6 +432,8 @@ AppWellIcon.prototype = {
|
||||
this.icon = new AppIcon(app, iconParams);
|
||||
this.actor.set_child(this.icon.actor);
|
||||
|
||||
this.actor.label_actor = this.icon.label;
|
||||
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||
this.actor.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu));
|
||||
|
@ -3,8 +3,6 @@
|
||||
const Shell = imports.gi.Shell;
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
|
@ -8,9 +8,6 @@ const St = imports.gi.St;
|
||||
const Signals = imports.signals;
|
||||
const Pango = imports.gi.Pango;
|
||||
const Gettext_gtk30 = imports.gettext.domain('gtk30');
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const C_ = Gettext.pgettext;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
|
@ -14,7 +14,6 @@ const Params = imports.misc.params;
|
||||
// workspace content.
|
||||
|
||||
const defaultParams = {
|
||||
visibleInOverview: false,
|
||||
visibleInFullscreen: false,
|
||||
affectsStruts: true,
|
||||
affectsInputRegion: true
|
||||
@ -73,11 +72,8 @@ Chrome.prototype = {
|
||||
// in its visibility will affect the input region, but NOT the
|
||||
// struts.
|
||||
//
|
||||
// If %visibleInOverview is %true in @params, @actor will remain
|
||||
// visible when the overview is brought up. Otherwise it will
|
||||
// automatically be hidden. Likewise, if %visibleInFullscreen is
|
||||
// %true, the actor will be visible even when a fullscreen window
|
||||
// should be covering it.
|
||||
// If %visibleInFullscreen is %true, the actor will be visible
|
||||
// even when a fullscreen window should be covering it.
|
||||
//
|
||||
// If %affectsStruts or %affectsInputRegion is %false, the actor
|
||||
// will not have the indicated effect.
|
||||
@ -96,7 +92,7 @@ Chrome.prototype = {
|
||||
//
|
||||
// @params can have any of the same values as in addActor(), though
|
||||
// some possibilities don't make sense (eg, trying to have a
|
||||
// %visibleInOverview child of a non-%visibleInOverview parent).
|
||||
// %visibleInFullscreen child of a non-%visibleInFullscreen parent).
|
||||
// By default, @actor has the same params as its chrome ancestor.
|
||||
trackActor: function(actor, params) {
|
||||
let ancestor = actor.get_parent();
|
||||
@ -189,10 +185,8 @@ Chrome.prototype = {
|
||||
_updateVisibility: function() {
|
||||
for (let i = 0; i < this._trackedActors.length; i++) {
|
||||
let actorData = this._trackedActors[i];
|
||||
if (this._inOverview && !actorData.visibleInOverview)
|
||||
this.actor.set_skip_paint(actorData.actor, true);
|
||||
else if (!this._inOverview && !actorData.visibleInFullscreen &&
|
||||
this._findMonitorForActor(actorData.actor).inFullscreen)
|
||||
if (!this._inOverview && !actorData.visibleInFullscreen &&
|
||||
this._findMonitorForActor(actorData.actor).inFullscreen)
|
||||
this.actor.set_skip_paint(actorData.actor, true);
|
||||
else
|
||||
this.actor.set_skip_paint(actorData.actor, false);
|
||||
@ -335,11 +329,6 @@ Chrome.prototype = {
|
||||
this._updateVisibility();
|
||||
this._queueUpdateRegions();
|
||||
}
|
||||
|
||||
// Figure out where the pointer is in case we lost track of
|
||||
// it during a grab. (In particular, if a trayicon popup menu
|
||||
// is dismissed, see if we need to close the message tray.)
|
||||
global.sync_pointer();
|
||||
},
|
||||
|
||||
_updateRegions: function() {
|
||||
|
@ -323,6 +323,6 @@ CtrlAltTabSwitcher.prototype = {
|
||||
let text = new St.Label({ text: item.name });
|
||||
box.add(text, { x_fill: false });
|
||||
|
||||
this.addItem(box);
|
||||
this.addItem(box, text);
|
||||
}
|
||||
};
|
||||
|
@ -6,8 +6,6 @@ const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
const AppFavorites = imports.ui.appFavorites;
|
||||
@ -326,7 +324,7 @@ Dash.prototype = {
|
||||
this._favRemoveTarget = null;
|
||||
}));
|
||||
}
|
||||
DND.removeMonitor(this._dragMonitor);
|
||||
DND.removeDragMonitor(this._dragMonitor);
|
||||
},
|
||||
|
||||
_onDragMotion: function(dragEvent) {
|
||||
@ -344,7 +342,10 @@ Dash.prototype = {
|
||||
|
||||
let srcIsFavorite = (id in favorites);
|
||||
|
||||
if (srcIsFavorite && this._favRemoveTarget == null) {
|
||||
if (srcIsFavorite &&
|
||||
dragEvent.source.actor &&
|
||||
this.actor.contains (dragEvent.source.actor) &&
|
||||
this._favRemoveTarget == null) {
|
||||
this._favRemoveTarget = new RemoveFavoriteIcon();
|
||||
this._favRemoveTarget.icon.setIconSize(this.iconSize);
|
||||
this._box.add(this._favRemoveTarget.actor);
|
||||
|
@ -8,8 +8,6 @@ const Cairo = imports.cairo;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Util = imports.misc.util;
|
||||
const Main = imports.ui.main;
|
||||
@ -200,6 +198,7 @@ DateMenuButton.prototype = {
|
||||
|
||||
_onPreferencesActivate: function() {
|
||||
this.menu.close();
|
||||
Main.overview.hide();
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-datetime-panel.desktop');
|
||||
app.activate(-1);
|
||||
},
|
||||
|
@ -61,7 +61,7 @@ function addDragMonitor(monitor) {
|
||||
dragMonitors.push(monitor);
|
||||
}
|
||||
|
||||
function removeMonitor(monitor) {
|
||||
function removeDragMonitor(monitor) {
|
||||
for (let i = 0; i < dragMonitors.length; i++)
|
||||
if (dragMonitors[i] == monitor) {
|
||||
dragMonitors.splice(i, 1);
|
||||
@ -284,13 +284,13 @@ _Draggable.prototype = {
|
||||
this._dragOffsetY = actorStageY - this._dragStartY;
|
||||
|
||||
// Set the actor's scale such that it will keep the same
|
||||
// transformed size when it's reparented to the stage
|
||||
// transformed size when it's reparented to the uiGroup
|
||||
let [scaledWidth, scaledHeight] = this.actor.get_transformed_size();
|
||||
this.actor.set_scale(scaledWidth / this.actor.width,
|
||||
scaledHeight / this.actor.height);
|
||||
}
|
||||
|
||||
this._dragActor.reparent(this.actor.get_stage());
|
||||
this._dragActor.reparent(Main.uiGroup);
|
||||
this._dragActor.raise_top();
|
||||
Shell.util_set_hidden_from_pick(this._dragActor, true);
|
||||
|
||||
@ -442,7 +442,7 @@ _Draggable.prototype = {
|
||||
return true;
|
||||
// If it accepted the drop without taking the actor,
|
||||
// handle it ourselves.
|
||||
if (this._dragActor.get_parent() == this._dragActor.get_stage()) {
|
||||
if (this._dragActor.get_parent() == Main.uiGroup) {
|
||||
if (this._restoreOnSuccess) {
|
||||
this._restoreDragActor(event.get_time());
|
||||
return true;
|
||||
|
@ -1,8 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const DocInfo = imports.misc.docInfo;
|
||||
const Params = imports.misc.params;
|
||||
const Search = imports.ui.search;
|
||||
|
@ -22,9 +22,6 @@ const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdm = imports.gi.Gdm;
|
||||
const GLib = imports.gi.GLib;
|
||||
@ -408,10 +405,6 @@ EndSessionDialog.prototype = {
|
||||
},
|
||||
|
||||
_updateButtons: function() {
|
||||
if (this.state != ModalDialog.State.OPENING &&
|
||||
this.state != ModalDialog.State.OPENED)
|
||||
return;
|
||||
|
||||
let dialogContent = DialogContent[this._type];
|
||||
let buttons = [{ action: Lang.bind(this, this.cancel),
|
||||
label: _("Cancel"),
|
||||
@ -521,11 +514,12 @@ EndSessionDialog.prototype = {
|
||||
this._inhibitors.push(inhibitor);
|
||||
}
|
||||
|
||||
this._updateButtons();
|
||||
|
||||
if (!this.open(timestamp))
|
||||
throw new DBus.DBusError('org.gnome.Shell.ModalDialog.GrabError',
|
||||
"Cannot grab pointer and keyboard");
|
||||
|
||||
this._updateButtons();
|
||||
this._updateContent();
|
||||
|
||||
let signalId = this.connect('opened',
|
||||
|
@ -1,14 +1,22 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
imports.gi.versions.Clutter = '1.0';
|
||||
imports.gi.versions.Gio = '2.0';
|
||||
imports.gi.versions.Gdk = '3.0';
|
||||
imports.gi.versions.GdkPixbuf = '2.0';
|
||||
imports.gi.versions.Gtk = '3.0';
|
||||
|
||||
const Clutter = imports.gi.Clutter;;
|
||||
const Gettext = imports.gettext;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext_gtk30 = imports.gettext.domain('gtk30');
|
||||
|
||||
const Tweener = imports.ui.tweener;
|
||||
// We can't import shell JS modules yet, because they may have
|
||||
// variable initializations, etc, that depend on init() already having
|
||||
// been run.
|
||||
|
||||
const Format = imports.misc.format;
|
||||
|
||||
// "monkey patch" in some varargs ClutterContainer methods; we need
|
||||
// to do this per-container class since there is no representation
|
||||
@ -31,49 +39,42 @@ function _patchContainerClass(containerClass) {
|
||||
};
|
||||
}
|
||||
|
||||
// Replace @method with something that throws an error instead
|
||||
function _blockMethod(method, replacement, reason) {
|
||||
let match = method.match(/^(.+)\.([^.]+)$/);
|
||||
if (!match)
|
||||
throw new Error('Bad method name "' + method + '"');
|
||||
let proto = 'imports.gi.' + match[1] + '.prototype';
|
||||
let property = match[2];
|
||||
function init() {
|
||||
// Add some bindings to the global JS namespace; (gjs keeps the web
|
||||
// browser convention of having that namespace be called 'window'.)
|
||||
window.global = Shell.Global.get();
|
||||
|
||||
if (!global.set_property_mutable(proto, property, true))
|
||||
throw new Error('Bad method name "' + method + '"');
|
||||
window._ = Gettext.gettext;
|
||||
window.C_ = Gettext.pgettext;
|
||||
window.ngettext = Gettext.ngettext;
|
||||
|
||||
// eval() is evil in general, but we know it's safe here since
|
||||
// set_property_mutable() would have failed if proto was
|
||||
// malformed.
|
||||
let node = eval(proto);
|
||||
// Set the default direction for St widgets (this needs to be done before any use of St)
|
||||
if (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL) {
|
||||
St.Widget.set_default_direction(St.TextDirection.RTL);
|
||||
}
|
||||
|
||||
let msg = 'Do not use "' + method + '".';
|
||||
if (replacement)
|
||||
msg += ' Use "' + replacement + '" instead.';
|
||||
if (reason)
|
||||
msg += ' (' + reason + ')';
|
||||
// Miscellaneous monkeypatching
|
||||
_patchContainerClass(St.BoxLayout);
|
||||
_patchContainerClass(St.Table);
|
||||
|
||||
node[property] = function() {
|
||||
throw new Error(msg);
|
||||
Clutter.Actor.prototype.toString = function() {
|
||||
return St.describe_actor(this);
|
||||
};
|
||||
|
||||
global.set_property_mutable(proto, property, false);
|
||||
}
|
||||
|
||||
function init() {
|
||||
Tweener.init();
|
||||
String.prototype.format = Format.format;
|
||||
let origToString = Object.prototype.toString;
|
||||
Object.prototype.toString = function() {
|
||||
let base = origToString.call(this);
|
||||
if ('actor' in this && this.actor instanceof Clutter.Actor)
|
||||
return base.replace(/\]$/, ' delegate for ' + this.actor.toString().substring(1));
|
||||
else
|
||||
return base;
|
||||
};
|
||||
|
||||
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
|
||||
Date.prototype.toLocaleFormat = function(format) {
|
||||
return Shell.util_format_date(format, this.getTime());
|
||||
};
|
||||
|
||||
// Set the default direction for St widgets (this needs to be done before any use of St)
|
||||
if (Gettext_gtk30.gettext('default:LTR') == 'default:RTL') {
|
||||
St.Widget.set_default_direction(St.TextDirection.RTL);
|
||||
}
|
||||
|
||||
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
|
||||
if (slowdownEnv) {
|
||||
let factor = parseFloat(slowdownEnv);
|
||||
@ -81,24 +82,10 @@ function init() {
|
||||
St.set_slow_down_factor(factor);
|
||||
}
|
||||
|
||||
_patchContainerClass(St.BoxLayout);
|
||||
_patchContainerClass(St.Table);
|
||||
// OK, now things are initialized enough that we can import shell JS
|
||||
const Format = imports.misc.format;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
Clutter.Actor.prototype.toString = function() {
|
||||
return St.describe_actor(this);
|
||||
};
|
||||
|
||||
if (window.global === undefined) // test environment
|
||||
return;
|
||||
|
||||
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
|
||||
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
|
||||
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
|
||||
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
||||
|
||||
// Now close the back door to prevent extensions from trying to
|
||||
// abuse it. We can't actually delete it since
|
||||
// Shell.Global.prototype itself is read-only.
|
||||
global.set_property_mutable('imports.gi.Shell.Global.prototype', 'set_property_mutable', true);
|
||||
Shell.Global.prototype.set_property_mutable = undefined;
|
||||
Tweener.init();
|
||||
String.prototype.format = Format.format;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
|
||||
@ -22,8 +23,9 @@ const ExtensionType = {
|
||||
const extensionMeta = {};
|
||||
// Maps uuid -> importer object (extension directory tree)
|
||||
const extensions = {};
|
||||
// Array of uuids
|
||||
// Arrays of uuids
|
||||
var disabledExtensions;
|
||||
var enabledExtensions;
|
||||
// GFile for user extensions
|
||||
var userExtensionsDir = null;
|
||||
|
||||
@ -177,6 +179,7 @@ function init() {
|
||||
}
|
||||
|
||||
disabledExtensions = global.settings.get_strv('disabled-extensions', -1);
|
||||
enabledExtensions = global.settings.get_strv('enabled-extensions', -1);
|
||||
}
|
||||
|
||||
function _loadExtensionsIn(dir, type) {
|
||||
@ -194,7 +197,10 @@ function _loadExtensionsIn(dir, type) {
|
||||
if (fileType != Gio.FileType.DIRECTORY)
|
||||
continue;
|
||||
let name = info.get_name();
|
||||
let enabled = disabledExtensions.indexOf(name) < 0;
|
||||
// Enable all but disabled extensions if enabledExtensions is not set.
|
||||
// If it is set, enable one those, except they are disabled as well.
|
||||
let enabled = (enabledExtensions.length == 0 || enabledExtensions.indexOf(name) >= 0)
|
||||
&& disabledExtensions.indexOf(name) < 0;
|
||||
let child = dir.get_child(name);
|
||||
loadExtension(child, enabled, type);
|
||||
}
|
||||
|
@ -42,10 +42,10 @@ BaseIcon.prototype = {
|
||||
box.add_actor(this._iconBin);
|
||||
|
||||
if (params.showLabel) {
|
||||
this._name = new St.Label({ text: label });
|
||||
box.add_actor(this._name);
|
||||
this.label = new St.Label({ text: label });
|
||||
box.add_actor(this.label);
|
||||
} else {
|
||||
this._name = null;
|
||||
this.label = null;
|
||||
}
|
||||
|
||||
if (params.createIcon)
|
||||
@ -67,8 +67,8 @@ BaseIcon.prototype = {
|
||||
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
||||
if (this._name) {
|
||||
let [labelMinHeight, labelNatHeight] = this._name.get_preferred_height(-1);
|
||||
if (this.label) {
|
||||
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(-1);
|
||||
preferredHeight += this._spacing + labelNatHeight;
|
||||
|
||||
let labelHeight = availHeight >= preferredHeight ? labelNatHeight
|
||||
@ -79,7 +79,7 @@ BaseIcon.prototype = {
|
||||
childBox.x2 = availWidth;
|
||||
childBox.y1 = iconSize + this._spacing;
|
||||
childBox.y2 = childBox.y1 + labelHeight;
|
||||
this._name.allocate(childBox, flags);
|
||||
this.label.allocate(childBox, flags);
|
||||
}
|
||||
|
||||
childBox.x1 = Math.floor((availWidth - iconNatWidth) / 2);
|
||||
@ -98,8 +98,8 @@ BaseIcon.prototype = {
|
||||
alloc.min_size = iconMinHeight;
|
||||
alloc.natural_size = iconNatHeight;
|
||||
|
||||
if (this._name) {
|
||||
let [labelMinHeight, labelNatHeight] = this._name.get_preferred_height(forWidth);
|
||||
if (this.label) {
|
||||
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(forWidth);
|
||||
alloc.min_size += this._spacing + labelMinHeight;
|
||||
alloc.natural_size += this._spacing + labelNatHeight;
|
||||
}
|
||||
|
@ -5,14 +5,13 @@ const Cogl = imports.gi.Cogl;
|
||||
const GConf = imports.gi.GConf;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Pango = imports.gi.Pango;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const History = imports.misc.history;
|
||||
const ExtensionSystem = imports.ui.extensionSystem;
|
||||
@ -100,12 +99,19 @@ Notebook.prototype = {
|
||||
selectIndex: function(index) {
|
||||
if (index == this._selectedIndex)
|
||||
return;
|
||||
this._unselect();
|
||||
if (index < 0) {
|
||||
this._unselect();
|
||||
this.emit('selection', null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Focus the new tab before unmapping the old one
|
||||
let tabData = this._tabs[index];
|
||||
if (!tabData.scrollView.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false))
|
||||
this.actor.grab_key_focus();
|
||||
|
||||
this._unselect();
|
||||
|
||||
tabData.labelBox.add_style_pseudo_class('selected');
|
||||
tabData.scrollView.show();
|
||||
this._selectedIndex = index;
|
||||
@ -576,6 +582,53 @@ ErrorLog.prototype = {
|
||||
}
|
||||
};
|
||||
|
||||
function Memory() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
Memory.prototype = {
|
||||
_init: function() {
|
||||
this.actor = new St.BoxLayout({ vertical: true });
|
||||
this._glibc_uordblks = new St.Label();
|
||||
this.actor.add(this._glibc_uordblks);
|
||||
|
||||
this._js_bytes = new St.Label();
|
||||
this.actor.add(this._js_bytes);
|
||||
|
||||
this._gjs_boxed = new St.Label();
|
||||
this.actor.add(this._gjs_boxed);
|
||||
|
||||
this._gjs_gobject = new St.Label();
|
||||
this.actor.add(this._gjs_gobject);
|
||||
|
||||
this._gjs_function = new St.Label();
|
||||
this.actor.add(this._gjs_function);
|
||||
|
||||
this._gjs_closure = new St.Label();
|
||||
this.actor.add(this._gjs_closure);
|
||||
|
||||
this._gcbutton = new St.Button({ label: 'Full GC',
|
||||
style_class: 'lg-obj-inspector-button' });
|
||||
this._gcbutton.connect('clicked', Lang.bind(this, function () { global.gc(); this._renderText(); }));
|
||||
this.actor.add(this._gcbutton, { x_align: St.Align.START,
|
||||
x_fill: false });
|
||||
|
||||
this.actor.connect('notify::mapped', Lang.bind(this, this._renderText));
|
||||
},
|
||||
|
||||
_renderText: function() {
|
||||
if (!this.actor.mapped)
|
||||
return;
|
||||
let memInfo = global.get_memory_info();
|
||||
this._glibc_uordblks.text = 'glibc_uordblks: ' + memInfo.glibc_uordblks;
|
||||
this._js_bytes.text = 'js bytes: ' + memInfo.js_bytes;
|
||||
this._gjs_boxed.text = 'gjs_boxed: ' + memInfo.gjs_boxed;
|
||||
this._gjs_gobject.text = 'gjs_gobject: ' + memInfo.gjs_gobject;
|
||||
this._gjs_function.text = 'gjs_function: ' + memInfo.gjs_function;
|
||||
this._gjs_closure.text = 'gjs_closure: ' + memInfo.gjs_closure;
|
||||
}
|
||||
};
|
||||
|
||||
function Extensions() {
|
||||
this._init();
|
||||
}
|
||||
@ -707,6 +760,7 @@ LookingGlass.prototype = {
|
||||
let toolbar = new St.BoxLayout({ name: 'Toolbar' });
|
||||
this.actor.add_actor(toolbar);
|
||||
let inspectIcon = new St.Icon({ icon_name: 'gtk-color-picker',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: 24 });
|
||||
toolbar.add_actor(inspectIcon);
|
||||
inspectIcon.reactive = true;
|
||||
@ -744,12 +798,7 @@ LookingGlass.prototype = {
|
||||
let label = new St.Label({ text: 'js>>> ' });
|
||||
entryArea.add(label);
|
||||
|
||||
this._entry = new St.Entry();
|
||||
/* unmapping the edit box will un-focus it, undo that */
|
||||
notebook.connect('selection', Lang.bind(this, function (nb, child) {
|
||||
if (child == this._evalBox)
|
||||
global.stage.set_key_focus(this._entry);
|
||||
}));
|
||||
this._entry = new St.Entry({ can_focus: true });
|
||||
entryArea.add(this._entry, { expand: true });
|
||||
|
||||
this._windowList = new WindowList();
|
||||
@ -762,6 +811,9 @@ LookingGlass.prototype = {
|
||||
this._errorLog = new ErrorLog();
|
||||
notebook.appendPage('Errors', this._errorLog.actor);
|
||||
|
||||
this._memory = new Memory();
|
||||
notebook.appendPage('Memory', this._memory.actor);
|
||||
|
||||
this._extensions = new Extensions();
|
||||
notebook.appendPage('Extensions', this._extensions.actor);
|
||||
|
||||
@ -908,6 +960,7 @@ LookingGlass.prototype = {
|
||||
if (!Main.pushModal(this._entry))
|
||||
return;
|
||||
|
||||
this._notebook.selectIndex(0);
|
||||
this.actor.show();
|
||||
this.actor.lower(Main.chrome.actor);
|
||||
this._open = true;
|
||||
|
@ -1,11 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
imports.gi.versions.Clutter = '1.0';
|
||||
imports.gi.versions.Gio = '2.0';
|
||||
imports.gi.versions.Gdk = '3.0';
|
||||
imports.gi.versions.GdkPixbuf = '2.0';
|
||||
imports.gi.versions.Gtk = '3.0';
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const DBus = imports.dbus;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
@ -17,8 +11,6 @@ const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Chrome = imports.ui.chrome;
|
||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||
@ -75,12 +67,7 @@ let _cssStylesheet = null;
|
||||
let background = null;
|
||||
|
||||
function start() {
|
||||
// Add a binding for 'global' in the global JS namespace; (gjs
|
||||
// keeps the web browser convention of having that namespace be
|
||||
// called 'window'.)
|
||||
window.global = Shell.Global.get();
|
||||
|
||||
// Now monkey patch utility functions into the global proxy;
|
||||
// Monkey patch utility functions into the global proxy;
|
||||
// This is easier and faster than indirecting down into global
|
||||
// if we want to call back up into JS.
|
||||
global.logError = _logError;
|
||||
@ -102,8 +89,6 @@ function start() {
|
||||
// not loading any events until the user presses the clock
|
||||
global.launch_calendar_server();
|
||||
|
||||
Environment.init();
|
||||
|
||||
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
|
||||
// also initialize ShellAppSystem first. ShellAppSystem
|
||||
// needs to load all the .desktop files, and ShellWindowTracker
|
||||
@ -223,6 +208,7 @@ function start() {
|
||||
|
||||
global.screen.connect('window-entered-monitor', _windowEnteredMonitor);
|
||||
global.screen.connect('window-left-monitor', _windowLeftMonitor);
|
||||
global.screen.connect('restacked', _windowsRestacked);
|
||||
|
||||
_nWorkspacesChanged();
|
||||
}
|
||||
@ -325,6 +311,13 @@ function _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) {
|
||||
_queueCheckWorkspaces();
|
||||
}
|
||||
|
||||
function _windowsRestacked() {
|
||||
// Figure out where the pointer is in case we lost track of
|
||||
// it during a grab. (In particular, if a trayicon popup menu
|
||||
// is dismissed, see if we need to close the message tray.)
|
||||
global.sync_pointer();
|
||||
}
|
||||
|
||||
function _queueCheckWorkspaces() {
|
||||
if (_checkWorkspacesId == 0)
|
||||
_checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, _checkWorkspaces);
|
||||
@ -408,12 +401,21 @@ function setThemeStylesheet(cssStylesheet)
|
||||
*/
|
||||
function loadTheme() {
|
||||
let themeContext = St.ThemeContext.get_for_stage (global.stage);
|
||||
let previousTheme = themeContext.get_theme();
|
||||
|
||||
let cssStylesheet = _defaultCssStylesheet;
|
||||
if (_cssStylesheet != null)
|
||||
cssStylesheet = _cssStylesheet;
|
||||
|
||||
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
|
||||
|
||||
if (previousTheme) {
|
||||
let customStylesheets = previousTheme.get_custom_stylesheets();
|
||||
|
||||
for (let i = 0; i < customStylesheets.length; i++)
|
||||
theme.load_stylesheet(customStylesheets[i]);
|
||||
}
|
||||
|
||||
themeContext.set_theme (theme);
|
||||
}
|
||||
|
||||
|
@ -20,9 +20,6 @@ const Params = imports.misc.params;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ANIMATION_TIME = 0.2;
|
||||
const NOTIFICATION_TIMEOUT = 4;
|
||||
const SUMMARY_TIMEOUT = 1;
|
||||
@ -411,6 +408,7 @@ Notification.prototype = {
|
||||
this._bannerBodyText = null;
|
||||
this._bannerBodyMarkup = false;
|
||||
this._titleFitsInBannerMode = true;
|
||||
this._titleDirection = St.TextDirection.NONE;
|
||||
this._spacing = 0;
|
||||
this._scrollPolicy = Gtk.PolicyType.AUTOMATIC;
|
||||
|
||||
@ -510,6 +508,19 @@ Notification.prototype = {
|
||||
title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
|
||||
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
|
||||
|
||||
if (Pango.find_base_dir(title, -1) == Pango.Direction.RTL)
|
||||
this._titleDirection = St.TextDirection.RTL;
|
||||
else
|
||||
this._titleDirection = St.TextDirection.LTR;
|
||||
|
||||
// Let the title's text direction control the overall direction
|
||||
// of the notification - in case where different scripts are used
|
||||
// in the notification, this is the right thing for the icon, and
|
||||
// arguably for action buttons as well. Labels other than the title
|
||||
// will be allocated at the available width, so that their alignment
|
||||
// is done correctly automatically.
|
||||
this._table.set_direction(this._titleDirection);
|
||||
|
||||
// Unless the notification has custom content, we save this._bannerBodyText
|
||||
// to add it to the content of the notification if the notification is
|
||||
// expandable due to other elements in its content area or due to the banner
|
||||
@ -546,7 +557,7 @@ Notification.prototype = {
|
||||
this._scrollArea = new St.ScrollView({ name: 'notification-scrollview',
|
||||
vscrollbar_policy: this._scrollPolicy,
|
||||
hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||
vfade: true });
|
||||
style_class: 'vfade' });
|
||||
this._table.add(this._scrollArea, { row: 1, col: 1 });
|
||||
this._contentArea = new St.BoxLayout({ name: 'notification-body',
|
||||
vertical: true });
|
||||
@ -711,23 +722,39 @@ Notification.prototype = {
|
||||
let availWidth = box.x2 - box.x1;
|
||||
|
||||
let titleBox = new Clutter.ActorBox();
|
||||
titleBox.x1 = titleBox.y1 = 0;
|
||||
titleBox.x2 = Math.min(titleNatW, availWidth);
|
||||
let titleBoxW = Math.min(titleNatW, availWidth);
|
||||
if (this._titleDirection == St.TextDirection.RTL) {
|
||||
titleBox.x1 = availWidth - titleBoxW;
|
||||
titleBox.x2 = availWidth;
|
||||
} else {
|
||||
titleBox.x1 = 0;
|
||||
titleBox.x2 = titleBoxW;
|
||||
}
|
||||
titleBox.y1 = 0;
|
||||
titleBox.y2 = titleNatH;
|
||||
this._titleLabel.allocate(titleBox, flags);
|
||||
this._titleFitsInBannerMode = (titleNatW <= availWidth);
|
||||
|
||||
let bannerFits = true;
|
||||
if (titleBox.x2 + this._spacing > availWidth) {
|
||||
if (titleBoxW + this._spacing > availWidth) {
|
||||
this._bannerLabel.opacity = 0;
|
||||
bannerFits = false;
|
||||
} else {
|
||||
let bannerBox = new Clutter.ActorBox();
|
||||
bannerBox.x1 = titleBox.x2 + this._spacing;
|
||||
|
||||
if (this._titleDirection == St.TextDirection.RTL) {
|
||||
bannerBox.x1 = 0;
|
||||
bannerBox.x2 = titleBox.x1 - this._spacing;
|
||||
|
||||
bannerFits = (bannerBox.x2 - bannerNatW >= 0);
|
||||
} else {
|
||||
bannerBox.x1 = titleBox.x2 + this._spacing;
|
||||
bannerBox.x2 = availWidth;
|
||||
|
||||
bannerFits = (bannerBox.x1 + bannerNatW <= availWidth);
|
||||
}
|
||||
bannerBox.y1 = 0;
|
||||
bannerBox.x2 = Math.min(bannerBox.x1 + bannerNatW, availWidth);
|
||||
bannerBox.y2 = titleNatH;
|
||||
bannerFits = (bannerBox.x1 + bannerNatW <= availWidth);
|
||||
this._bannerLabel.allocate(bannerBox, flags);
|
||||
|
||||
// Make _bannerLabel visible if the entire notification
|
||||
@ -802,6 +829,7 @@ Notification.prototype = {
|
||||
// Restore banner opacity in case the notification is shown in the
|
||||
// banner mode again on update.
|
||||
this._bannerLabel.opacity = 255;
|
||||
this.emit('collapsed');
|
||||
},
|
||||
|
||||
_onActionInvoked: function(actor, mouseButtonClicked, id) {
|
||||
@ -866,6 +894,11 @@ Source.prototype = {
|
||||
this.isTransient = isTransient;
|
||||
},
|
||||
|
||||
setTitle: function(newTitle) {
|
||||
this.title = newTitle;
|
||||
this.emit('title-changed');
|
||||
},
|
||||
|
||||
// Called to create a new icon actor (of size this.ICON_SIZE).
|
||||
// Must be overridden by the subclass if you do not pass icons
|
||||
// explicitly to the Notification() constructor.
|
||||
@ -968,6 +1001,11 @@ SummaryItem.prototype = {
|
||||
this._sourceTitleBin.child = this._sourceTitle;
|
||||
this._sourceTitleBin.width = 0;
|
||||
|
||||
this.source.connect('title-changed',
|
||||
Lang.bind(this, function() {
|
||||
this._sourceTitle.text = source.title;
|
||||
}));
|
||||
|
||||
this._sourceBox.add(this._sourceIcon, { y_fill: false });
|
||||
this._sourceBox.add(this._sourceTitleBin, { expand: true, y_fill: false });
|
||||
this.actor.child = this._sourceBox;
|
||||
@ -975,7 +1013,7 @@ SummaryItem.prototype = {
|
||||
this.notificationStackView = new St.ScrollView({ name: source.isChat ? '' : 'summary-notification-stack-scrollview',
|
||||
vscrollbar_policy: source.isChat ? Gtk.PolicyType.NEVER : Gtk.PolicyType.AUTOMATIC,
|
||||
hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||
vfade: true });
|
||||
style_class: 'vfade' });
|
||||
this.notificationStack = new St.BoxLayout({ name: 'summary-notification-stack',
|
||||
vertical: true });
|
||||
this.notificationStackView.add_actor(this.notificationStack);
|
||||
@ -1215,7 +1253,7 @@ MessageTray.prototype = {
|
||||
this._reNotifyAfterHideNotification = null;
|
||||
|
||||
Main.chrome.addActor(this.actor, { affectsStruts: false,
|
||||
visibleInOverview: true });
|
||||
visibleInFullscreen: true });
|
||||
Main.chrome.trackActor(this._notificationBin);
|
||||
Main.chrome.trackActor(this._summaryBoxPointer.actor);
|
||||
|
||||
@ -1578,6 +1616,8 @@ MessageTray.prototype = {
|
||||
this._clickedSummaryItemMouseButton != button) {
|
||||
this._clickedSummaryItem = summaryItem;
|
||||
this._clickedSummaryItemMouseButton = button;
|
||||
|
||||
summaryItem.source.emit('summary-item-clicked', button);
|
||||
} else {
|
||||
this._unsetClickedSummaryItem();
|
||||
}
|
||||
@ -1984,9 +2024,15 @@ MessageTray.prototype = {
|
||||
this._notification.expand(!autoExpanding);
|
||||
},
|
||||
|
||||
_onNotificationExpanded: function() {
|
||||
_onNotificationExpanded: function() {
|
||||
let expandedY = this.actor.height - this._notificationBin.height;
|
||||
if (this._notificationBin.y != expandedY)
|
||||
|
||||
// Don't animate the notification to its new position if it has shrunk:
|
||||
// there will be a very visible "gap" that breaks the illusion.
|
||||
|
||||
if (this._notificationBin.y < expandedY)
|
||||
this._notificationBin.y = expandedY;
|
||||
else if (this._notification.y != expandedY)
|
||||
this._tween(this._notificationBin, '_notificationState', State.SHOWN,
|
||||
{ y: expandedY,
|
||||
time: ANIMATION_TIME,
|
||||
|
@ -10,8 +10,6 @@ const Pango = imports.gi.Pango;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Params = imports.misc.params;
|
||||
|
||||
@ -50,10 +48,6 @@ ModalDialog.prototype = {
|
||||
coordinate: Clutter.BindCoordinate.POSITION | Clutter.BindCoordinate.SIZE });
|
||||
this._group.add_constraint(constraint);
|
||||
|
||||
global.focus_manager.add_group(this._group);
|
||||
this._initialKeyFocus = this._group;
|
||||
this._savedKeyFocus = null;
|
||||
|
||||
this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
|
||||
|
||||
this._actionKeys = {};
|
||||
@ -94,6 +88,10 @@ ModalDialog.prototype = {
|
||||
{ expand: true,
|
||||
x_align: St.Align.MIDDLE,
|
||||
y_align: St.Align.END });
|
||||
|
||||
global.focus_manager.add_group(this._dialogLayout);
|
||||
this._initialKeyFocus = this._dialogLayout;
|
||||
this._savedKeyFocus = null;
|
||||
},
|
||||
|
||||
setButtons: function(buttons) {
|
||||
@ -195,6 +193,7 @@ ModalDialog.prototype = {
|
||||
|
||||
this.state = State.CLOSING;
|
||||
this.popModal(timestamp);
|
||||
this._savedKeyFocus = null;
|
||||
|
||||
Tweener.addTween(this._group,
|
||||
{ opacity: 0,
|
||||
|
@ -7,8 +7,6 @@ const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Mainloop = imports.mainloop;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const Main = imports.ui.main;
|
||||
@ -167,8 +165,11 @@ NotificationDaemon.prototype = {
|
||||
// with a transient one from the same sender, so we
|
||||
// always create a new source object for new transient notifications
|
||||
// and never add it to this._sources .
|
||||
if (!isForTransientNotification && this._sources[pid])
|
||||
return this._sources[pid];
|
||||
if (!isForTransientNotification && this._sources[pid]) {
|
||||
let source = this._sources[pid];
|
||||
source.setTitle(title);
|
||||
return source;
|
||||
}
|
||||
|
||||
let source = new Source(title, pid);
|
||||
source.setTransient(isForTransientNotification);
|
||||
|
@ -8,8 +8,6 @@ const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
@ -222,7 +220,7 @@ Overview.prototype = {
|
||||
}
|
||||
this._resetWindowSwitchTimeout();
|
||||
this._lastHoveredWindow = null;
|
||||
DND.removeMonitor(this._dragMonitor);
|
||||
DND.removeDragMonitor(this._dragMonitor);
|
||||
this.endItemDrag();
|
||||
},
|
||||
|
||||
@ -283,7 +281,8 @@ Overview.prototype = {
|
||||
},
|
||||
|
||||
_onButtonPress: function(actor, event) {
|
||||
if (this._scrollDirection == SwipeScrollDirection.NONE)
|
||||
if (this._scrollDirection == SwipeScrollDirection.NONE
|
||||
|| event.get_button() != 1)
|
||||
return;
|
||||
|
||||
let [stageX, stageY] = event.get_coords();
|
||||
|
@ -9,8 +9,6 @@ const Pango = imports.gi.Pango;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||
@ -260,10 +258,14 @@ AppMenuButton.prototype = {
|
||||
this._iconBox = new Shell.Slicer({ name: 'appMenuIcon' });
|
||||
this._iconBox.connect('style-changed',
|
||||
Lang.bind(this, this._onIconBoxStyleChanged));
|
||||
this._iconBox.connect('notify::allocation',
|
||||
Lang.bind(this, this._updateIconBoxClip));
|
||||
this._container.add_actor(this._iconBox);
|
||||
this._label = new TextShadower();
|
||||
this._container.add_actor(this._label.actor);
|
||||
|
||||
this._iconBottomClip = 0;
|
||||
|
||||
this._quitMenu = new PopupMenu.PopupMenuItem('');
|
||||
this.menu.addMenuItem(this._quitMenu);
|
||||
this._quitMenu.connect('activate', Lang.bind(this, this._onQuit));
|
||||
@ -300,6 +302,7 @@ AppMenuButton.prototype = {
|
||||
|
||||
this._visible = true;
|
||||
this.actor.show();
|
||||
this.actor.reactive = true;
|
||||
|
||||
if (!this._targetIsCurrent)
|
||||
return;
|
||||
@ -316,6 +319,7 @@ AppMenuButton.prototype = {
|
||||
return;
|
||||
|
||||
this._visible = false;
|
||||
this.actor.reactive = false;
|
||||
if (!this._targetIsCurrent) {
|
||||
this.actor.hide();
|
||||
return;
|
||||
@ -334,11 +338,16 @@ AppMenuButton.prototype = {
|
||||
|
||||
_onIconBoxStyleChanged: function() {
|
||||
let node = this._iconBox.get_theme_node();
|
||||
let bottomClip = node.get_length('app-icon-bottom-clip');
|
||||
if (bottomClip > 0)
|
||||
this._iconBottomClip = node.get_length('app-icon-bottom-clip');
|
||||
this._updateIconBoxClip();
|
||||
},
|
||||
|
||||
_updateIconBoxClip: function() {
|
||||
let allocation = this._iconBox.allocation;
|
||||
if (this._iconBottomClip > 0)
|
||||
this._iconBox.set_clip(0, 0,
|
||||
this._iconBox.width,
|
||||
this._iconBox.height - bottomClip);
|
||||
allocation.x2 - allocation.x1,
|
||||
allocation.y2 - allocation.y1 - this._iconBottomClip);
|
||||
else
|
||||
this._iconBox.remove_clip();
|
||||
},
|
||||
@ -699,7 +708,7 @@ HotCorner.prototype = {
|
||||
}
|
||||
});
|
||||
|
||||
Main.chrome.addActor(this.actor, { visibleInOverview: true, affectsStruts: false });
|
||||
Main.chrome.addActor(this.actor, { affectsStruts: false });
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
@ -767,7 +776,7 @@ HotCorner.prototype = {
|
||||
_onCornerClicked : function() {
|
||||
if (!Main.overview.animationInProgress)
|
||||
this.maybeToggleOverviewOnClick();
|
||||
return false;
|
||||
return true;
|
||||
},
|
||||
|
||||
_onCornerLeft : function(actor, event) {
|
||||
@ -808,6 +817,8 @@ Panel.prototype = {
|
||||
reactive: true });
|
||||
this.actor._delegate = this;
|
||||
|
||||
this._statusArea = {};
|
||||
|
||||
Main.overview.connect('shown', Lang.bind(this, function () {
|
||||
this.actor.add_style_class_name('in-overview');
|
||||
}));
|
||||
@ -904,6 +915,7 @@ Panel.prototype = {
|
||||
style_class: 'panel-button',
|
||||
reactive: true,
|
||||
can_focus: true });
|
||||
this._activities = this.button;
|
||||
this.button.set_child(label);
|
||||
this.button._delegate = this.button;
|
||||
this.button._xdndTimeOut = 0;
|
||||
@ -932,10 +944,10 @@ Panel.prototype = {
|
||||
|
||||
this._hotCorner = null;
|
||||
|
||||
let appMenuButton = new AppMenuButton();
|
||||
this._leftBox.add(appMenuButton.actor);
|
||||
this._appMenu = new AppMenuButton();
|
||||
this._leftBox.add(this._appMenu.actor);
|
||||
|
||||
this._menus.addMenu(appMenuButton.menu);
|
||||
this._menus.addMenu(this._appMenu.menu);
|
||||
|
||||
/* center */
|
||||
this._dateMenu = new DateMenu.DateMenuButton();
|
||||
@ -954,12 +966,12 @@ Panel.prototype = {
|
||||
this._rightBox.add(this._trayBox);
|
||||
this._rightBox.add(this._statusBox);
|
||||
|
||||
this._statusmenu = new StatusMenu.StatusMenuButton();
|
||||
this._statusmenu.actor.name = 'panelStatus';
|
||||
this._rightBox.add(this._statusmenu.actor);
|
||||
this._userMenu = new StatusMenu.StatusMenuButton();
|
||||
this._userMenu.actor.name = 'panelStatus';
|
||||
this._rightBox.add(this._userMenu.actor);
|
||||
|
||||
// Synchronize the buttons pseudo classes with its corner
|
||||
this._statusmenu.actor.connect('style-changed', Lang.bind(this,
|
||||
this._userMenu.actor.connect('style-changed', Lang.bind(this,
|
||||
function(actor) {
|
||||
let rtl = actor.get_direction() == St.TextDirection.RTL;
|
||||
let corner = rtl ? this._leftCorner : this._rightCorner;
|
||||
@ -992,13 +1004,11 @@ Panel.prototype = {
|
||||
this.button.checked = false;
|
||||
}));
|
||||
|
||||
Main.chrome.addActor(this.actor, { visibleInOverview: true });
|
||||
Main.chrome.addActor(this._leftCorner.actor, { visibleInOverview: true,
|
||||
affectsStruts: false,
|
||||
affectsInputRegion: false });
|
||||
Main.chrome.addActor(this._rightCorner.actor, { visibleInOverview: true,
|
||||
affectsStruts: false,
|
||||
affectsInputRegion: false });
|
||||
Main.chrome.addActor(this.actor);
|
||||
Main.chrome.addActor(this._leftCorner.actor, { affectsStruts: false,
|
||||
affectsInputRegion: false });
|
||||
Main.chrome.addActor(this._rightCorner.actor, { affectsStruts: false,
|
||||
affectsInputRegion: false });
|
||||
|
||||
Main.ctrlAltTabManager.addGroup(this.actor, _("Top Bar"), 'start-here',
|
||||
{ sortGroup: CtrlAltTab.SortGroup.TOP });
|
||||
@ -1042,11 +1052,13 @@ Panel.prototype = {
|
||||
let indicator = new constructor();
|
||||
this._statusBox.add(indicator.actor);
|
||||
this._menus.addMenu(indicator.menu);
|
||||
|
||||
this._statusArea[role] = indicator;
|
||||
}
|
||||
|
||||
// PopupMenuManager depends on menus being added in order for
|
||||
// keyboard navigation
|
||||
this._menus.addMenu(this._statusmenu.menu);
|
||||
this._menus.addMenu(this._userMenu.menu);
|
||||
},
|
||||
|
||||
startupAnimation: function() {
|
||||
|
@ -26,8 +26,7 @@ Button.prototype = {
|
||||
this.menu = new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0);
|
||||
this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
|
||||
this.menu.actor.connect('key-press-event', Lang.bind(this, this._onMenuKeyPress));
|
||||
Main.chrome.addActor(this.menu.actor, { visibleInOverview: true,
|
||||
affectsStruts: false });
|
||||
Main.chrome.addActor(this.menu.actor, { affectsStruts: false });
|
||||
this.menu.actor.hide();
|
||||
},
|
||||
|
||||
|
@ -7,8 +7,6 @@ const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const DND = imports.ui.dnd;
|
||||
const Main = imports.ui.main;
|
||||
@ -270,10 +268,7 @@ PlacesManager.prototype = {
|
||||
if (!GLib.file_test(this._bookmarksPath, GLib.FileTest.EXISTS))
|
||||
return;
|
||||
|
||||
let [success, bookmarksContent, len] = GLib.file_get_contents(this._bookmarksPath);
|
||||
|
||||
if (!success)
|
||||
return;
|
||||
let bookmarksContent = Shell.get_file_contents_utf8_sync(this._bookmarksPath);
|
||||
|
||||
let bookmarks = bookmarksContent.split('\n');
|
||||
|
||||
|
@ -22,8 +22,6 @@
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const St = imports.gi.St;
|
||||
|
@ -13,9 +13,6 @@ const Main = imports.ui.main;
|
||||
const Params = imports.misc.params;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
|
||||
|
||||
function PopupBaseMenuItem(params) {
|
||||
@ -498,7 +495,7 @@ PopupSliderMenuItem.prototype = {
|
||||
this._slider = new St.DrawingArea({ style_class: 'popup-slider-menu-item', reactive: true });
|
||||
this.addActor(this._slider, { span: -1, expand: true });
|
||||
this._slider.connect('repaint', Lang.bind(this, this._sliderRepaint));
|
||||
this._slider.connect('button-press-event', Lang.bind(this, this._startDragging));
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._startDragging));
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||
|
||||
this._releaseId = this._motionId = 0;
|
||||
@ -707,11 +704,36 @@ PopupSwitchMenuItem.prototype = {
|
||||
this._switch = new Switch(active);
|
||||
|
||||
this.addActor(this.label);
|
||||
this.addActor(this._switch.actor, { align: St.Align.END });
|
||||
|
||||
this.connect('activate', Lang.bind(this,function(from) {
|
||||
this._statusBin = new St.Bin({ x_align: St.Align.END });
|
||||
this.addActor(this._statusBin, { align: St.Align.END });
|
||||
|
||||
this._statusLabel = new St.Label({ text: '',
|
||||
style_class: 'popup-inactive-menu-item'
|
||||
});
|
||||
this._switch = new Switch(false);
|
||||
this._statusBin.child = this._switch.actor;
|
||||
},
|
||||
|
||||
setStatus: function(text) {
|
||||
if (text != null) {
|
||||
this._statusLabel.text = text;
|
||||
this._statusBin.child = this._statusLabel;
|
||||
this.actor.reactive = false;
|
||||
this.actor.can_focus = false;
|
||||
} else {
|
||||
this._statusBin.child = this._switch.actor;
|
||||
this.actor.reactive = true;
|
||||
this.actor.can_focus = true;
|
||||
}
|
||||
},
|
||||
|
||||
activate: function(event) {
|
||||
if (this._switch.actor.mapped) {
|
||||
this.toggle();
|
||||
}));
|
||||
}
|
||||
|
||||
PopupBaseMenuItem.prototype.activate.call(this, event);
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
@ -766,6 +788,7 @@ PopupMenuBase.prototype = {
|
||||
this.box = new St.BoxLayout({ vertical: true });
|
||||
}
|
||||
this.box.connect_after('queue-relayout', Lang.bind(this, this._menuQueueRelayout));
|
||||
this.length = 0;
|
||||
|
||||
this.isOpen = false;
|
||||
|
||||
@ -855,6 +878,8 @@ PopupMenuBase.prototype = {
|
||||
menuItem.connect('destroy', Lang.bind(this, function() {
|
||||
menuItem.disconnect(menuItem._subMenuActivateId);
|
||||
menuItem.disconnect(menuItem._subMenuActiveChangeId);
|
||||
|
||||
this.length--;
|
||||
}));
|
||||
} else if (menuItem instanceof PopupSubMenuMenuItem) {
|
||||
if (before_item == null)
|
||||
@ -871,6 +896,8 @@ PopupMenuBase.prototype = {
|
||||
this._connectItemSignals(menuItem);
|
||||
else
|
||||
throw TypeError("Invalid argument to PopupMenuBase.addMenuItem()");
|
||||
|
||||
this.length++;
|
||||
},
|
||||
|
||||
getColumnWidths: function() {
|
||||
|
@ -8,8 +8,6 @@ const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const Main = imports.ui.main;
|
||||
@ -25,6 +23,10 @@ const HISTORY_KEY = 'command-history';
|
||||
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
|
||||
const DISABLE_COMMAND_LINE_KEY = 'disable-command-line';
|
||||
|
||||
const TERMINAL_SCHEMA = 'org.gnome.desktop.default-applications.terminal';
|
||||
const EXEC_KEY = 'exec';
|
||||
const EXEC_ARG_KEY = 'exec-arg';
|
||||
|
||||
const DIALOG_GROW_TIME = 0.1;
|
||||
|
||||
function CommandCompleter() {
|
||||
@ -171,6 +173,7 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: 'run-dialog' });
|
||||
|
||||
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
|
||||
this._terminalSettings = new Gio.Settings({ schema: TERMINAL_SCHEMA });
|
||||
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
|
||||
this._enableInternalCommands = global.settings.get_boolean('development-tools');
|
||||
}));
|
||||
@ -191,7 +194,7 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
}),
|
||||
|
||||
'debugexit': Lang.bind(this, function() {
|
||||
Meta.exit(Meta.ExitCode.ERROR);
|
||||
Meta.quit(Meta.ExitCode.ERROR);
|
||||
}),
|
||||
|
||||
// rt is short for "reload theme"
|
||||
@ -311,8 +314,11 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
f();
|
||||
} else if (input) {
|
||||
try {
|
||||
if (inTerminal)
|
||||
command = 'gnome-terminal -x ' + input;
|
||||
if (inTerminal) {
|
||||
let exec = this._terminalSettings.get_string(EXEC_KEY);
|
||||
let exec_arg = this._terminalSettings.get_string(EXEC_ARG_KEY);
|
||||
command = exec + ' ' + exec_arg + ' ' + input;
|
||||
}
|
||||
Util.trySpawnCommandLine(command);
|
||||
} catch (e) {
|
||||
// Mmmh, that failed - see if @input matches an existing file
|
||||
|
@ -7,9 +7,6 @@ const Signals = imports.signals;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
@ -160,7 +157,7 @@ SearchProvider.prototype = {
|
||||
},
|
||||
|
||||
/**
|
||||
* getResultInfo:
|
||||
* getResultMeta:
|
||||
* @id: Result identifier string
|
||||
*
|
||||
* Return an object with 'id', 'name', (both strings) and 'createIcon'
|
||||
@ -276,7 +273,7 @@ OpenSearchSystem.prototype = {
|
||||
_addProvider: function(fileName) {
|
||||
let path = global.datadir + '/search_providers/' + fileName;
|
||||
let source = Shell.get_file_contents_utf8_sync(path);
|
||||
let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
|
||||
let [success, name, url, langs, icon_uri] = Shell.parse_search_provider(source);
|
||||
let provider ={ name: name,
|
||||
url: url,
|
||||
id: this._providers.length,
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
@ -30,6 +28,7 @@ SearchResult.prototype = {
|
||||
x_align: St.Align.START,
|
||||
y_fill: true });
|
||||
this.actor._delegate = this;
|
||||
this._dragActorSource = null;
|
||||
|
||||
let content = provider.createResultActor(metaInfo, terms);
|
||||
if (content == null) {
|
||||
@ -39,6 +38,11 @@ SearchResult.prototype = {
|
||||
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
|
||||
{ createIcon: this.metaInfo['createIcon'] });
|
||||
content.set_child(icon.actor);
|
||||
this._dragActorSource = icon.icon;
|
||||
this.actor.label_actor = icon.label;
|
||||
} else {
|
||||
if (content._delegate && content._delegate.getDragActorSource)
|
||||
this._dragActorSource = content._delegate.getDragActorSource();
|
||||
}
|
||||
this._content = content;
|
||||
this.actor.set_child(content);
|
||||
@ -77,6 +81,8 @@ SearchResult.prototype = {
|
||||
},
|
||||
|
||||
getDragActorSource: function() {
|
||||
if (this._dragActorSource)
|
||||
return this._dragActorSource;
|
||||
// not exactly right, but alignment problems are hard to notice
|
||||
return this._content;
|
||||
},
|
||||
@ -193,7 +199,7 @@ SearchResults.prototype = {
|
||||
|
||||
let scrollView = new St.ScrollView({ x_fill: true,
|
||||
y_fill: false,
|
||||
vfade: true });
|
||||
style_class: 'vfade' });
|
||||
scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
scrollView.add_actor(this._content);
|
||||
|
||||
@ -259,6 +265,7 @@ SearchResults.prototype = {
|
||||
let title = new St.Label({ text: provider.name,
|
||||
style_class: 'dash-search-button-label' });
|
||||
|
||||
button.label_actor = title;
|
||||
bin.set_child(title);
|
||||
button.set_child(bin);
|
||||
provider.actor = button;
|
||||
@ -333,6 +340,13 @@ SearchResults.prototype = {
|
||||
let terms = this._searchSystem.getTerms();
|
||||
this._openSearchSystem.setSearchTerms(terms);
|
||||
|
||||
// To avoid CSS transitions causing flickering
|
||||
// of the selection when the first search result
|
||||
// stays the same, we hide the content while
|
||||
// filling in the results and setting the initial
|
||||
// selection.
|
||||
this._content.hide();
|
||||
|
||||
for (let i = 0; i < results.length; i++) {
|
||||
let [provider, providerResults] = results[i];
|
||||
let meta = this._metaForProvider(provider);
|
||||
@ -343,6 +357,8 @@ SearchResults.prototype = {
|
||||
if (this._selectedOpenSearchButton == -1)
|
||||
this.selectDown(false);
|
||||
|
||||
this._content.show();
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
|
@ -10,13 +10,11 @@ const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
|
||||
const KEY_STICKY_KEYS_ENABLED = 'stickykeys-enable';
|
||||
const KEY_BOUNCE_KEYS_ENABLED = 'bouncekeys-enable';
|
||||
@ -91,6 +89,7 @@ ATIndicator.prototype = {
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Universal Access Settings"), function() {
|
||||
Main.overview.hide();
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-universal-access-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
|
@ -16,9 +16,6 @@ const MessageTray = imports.ui.messageTray;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ConnectionState = {
|
||||
DISCONNECTED: 0,
|
||||
CONNECTED: 1,
|
||||
@ -67,7 +64,7 @@ Indicator.prototype = {
|
||||
|
||||
this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
|
||||
new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
|
||||
new PopupMenu.PopupMenuItem(_("Setup a New Device...")),
|
||||
new PopupMenu.PopupMenuItem(_("Set up a New Device...")),
|
||||
new PopupMenu.PopupSeparatorMenuItem()];
|
||||
this._hasDevices = false;
|
||||
this._deviceSep = this._fullMenuItems[0]; // hidden if no device exists
|
||||
@ -93,6 +90,7 @@ Indicator.prototype = {
|
||||
this._updateFullMenu();
|
||||
|
||||
this.menu.addAction(_("Bluetooth Settings"), function() {
|
||||
Main.overview.hide()
|
||||
let app = Shell.AppSystem.get_default().get_app('bluetooth-properties.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
@ -111,7 +109,11 @@ Indicator.prototype = {
|
||||
current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED;
|
||||
|
||||
this._killswitch.setToggleState(on);
|
||||
this._killswitch.actor.reactive = can_toggle;
|
||||
if (can_toggle)
|
||||
this._killswitch.setStatus(null);
|
||||
else
|
||||
/* TRANSLATORS: this means that bluetooth was disabled by hardware rfkill */
|
||||
this._killswitch.setStatus(_("hardware disabled"));
|
||||
|
||||
if (has_adapter)
|
||||
this.actor.show();
|
||||
@ -127,13 +129,6 @@ Indicator.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_deviceCompare: function(d1, d2) {
|
||||
return d1.device_path == d2.device_path &&
|
||||
d1.bdaddr == d2.bdaddr &&
|
||||
d1.can_connect == d2.can_connect &&
|
||||
d1.capabilities == d2.capabilities;
|
||||
},
|
||||
|
||||
_updateDevices: function() {
|
||||
let devices = this._applet.get_devices();
|
||||
|
||||
@ -142,12 +137,8 @@ Indicator.prototype = {
|
||||
let item = this._deviceItems[i];
|
||||
let destroy = true;
|
||||
for (let j = 0; j < devices.length; j++) {
|
||||
// we need to deep compare because BluetoothSimpleDevice is a boxed type
|
||||
// (but we take advantage of that, because _skip will disappear the next
|
||||
// time get_devices() is called)
|
||||
if (this._deviceCompare(item._device, devices[j])) {
|
||||
item.label.text = devices[j].alias;
|
||||
devices[j]._skip = true;
|
||||
if (item._device.device_path == devices[j].device_path) {
|
||||
this._updateDeviceItem(item, devices[j]);
|
||||
destroy = false;
|
||||
break;
|
||||
}
|
||||
@ -162,7 +153,7 @@ Indicator.prototype = {
|
||||
this._hasDevices = newlist.length > 0;
|
||||
for (let i = 0; i < devices.length; i++) {
|
||||
let d = devices[i];
|
||||
if (d._skip)
|
||||
if (d._item)
|
||||
continue;
|
||||
let item = this._createDeviceItem(d);
|
||||
if (item) {
|
||||
@ -177,23 +168,62 @@ Indicator.prototype = {
|
||||
this._deviceSep.actor.hide();
|
||||
},
|
||||
|
||||
_updateDeviceItem: function(item, device) {
|
||||
if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE) {
|
||||
item.destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
let prevDevice = item._device;
|
||||
let prevCapabilities = prevDevice.capabilities;
|
||||
let prevCanConnect = prevDevice.can_connect;
|
||||
|
||||
// adopt the new device object
|
||||
item._device = device;
|
||||
device._item = item;
|
||||
|
||||
// update properties
|
||||
item.label.text = device.alias;
|
||||
|
||||
if (prevCapabilities != device.capabilities ||
|
||||
prevCanConnect != device.can_connect) {
|
||||
// need to rebuild the submenu
|
||||
item.menu.removeAll();
|
||||
this._buildDeviceSubMenu(item, device);
|
||||
}
|
||||
|
||||
// update connected property
|
||||
if (device.can_connect)
|
||||
item._connectedMenuitem.setToggleState(device.connected);
|
||||
},
|
||||
|
||||
_createDeviceItem: function(device) {
|
||||
if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE)
|
||||
return null;
|
||||
let item = new PopupMenu.PopupSubMenuMenuItem(device.alias);
|
||||
item._device = device;
|
||||
|
||||
// adopt the device object, and add a back link
|
||||
item._device = device;
|
||||
device._item = item;
|
||||
|
||||
this._buildDeviceSubMenu(item, device);
|
||||
|
||||
return item;
|
||||
},
|
||||
|
||||
_buildDeviceSubMenu: function(item, device) {
|
||||
if (device.can_connect) {
|
||||
item._connected = device.connected;
|
||||
let menuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
|
||||
|
||||
menuitem.connect('toggled', Lang.bind(this, function() {
|
||||
item._connectedMenuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
|
||||
item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {
|
||||
if (item._connected > ConnectionState.CONNECTED) {
|
||||
// operation already in progress, revert
|
||||
// (should not happen anyway)
|
||||
menuitem.setToggleState(menuitem.state);
|
||||
}
|
||||
if (item._connected) {
|
||||
item._connected = ConnectionState.DISCONNECTING;
|
||||
menuitem.setStatus(_("disconnecting..."));
|
||||
this._applet.disconnect_device(item._device.device_path, function(applet, success) {
|
||||
if (success) { // apply
|
||||
item._connected = ConnectionState.DISCONNECTED;
|
||||
@ -202,9 +232,11 @@ Indicator.prototype = {
|
||||
item._connected = ConnectionState.CONNECTED;
|
||||
menuitem.setToggleState(true);
|
||||
}
|
||||
menuitem.setStatus(null);
|
||||
});
|
||||
} else {
|
||||
item._connected = ConnectionState.CONNECTING;
|
||||
menuitem.setStatus(_("connecting..."));
|
||||
this._applet.connect_device(item._device.device_path, function(applet, success) {
|
||||
if (success) { // apply
|
||||
item._connected = ConnectionState.CONNECTED;
|
||||
@ -213,11 +245,12 @@ Indicator.prototype = {
|
||||
item._connected = ConnectionState.DISCONNECTED;
|
||||
menuitem.setToggleState(false);
|
||||
}
|
||||
menuitem.setStatus(null);
|
||||
});
|
||||
}
|
||||
}));
|
||||
|
||||
item.menu.addMenuItem(menuitem);
|
||||
item.menu.addMenuItem(item._connectedMenuitem);
|
||||
}
|
||||
|
||||
if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_PUSH) {
|
||||
@ -263,8 +296,6 @@ Indicator.prototype = {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return item;
|
||||
},
|
||||
|
||||
_updateFullMenu: function() {
|
||||
|
@ -9,13 +9,11 @@ const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
function LayoutMenuItem() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
@ -71,9 +69,11 @@ XKBIndicator.prototype = {
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Show Keyboard Layout..."), Lang.bind(this, function() {
|
||||
Main.overview.hide();
|
||||
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
|
||||
}));
|
||||
this.menu.addAction(_("Localization Settings"), function() {
|
||||
Main.overview.hide();
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-region-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
|
@ -7,13 +7,11 @@ const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const BUS_NAME = 'org.gnome.PowerManager';
|
||||
const OBJECT_PATH = '/org/gnome/PowerManager';
|
||||
|
||||
@ -83,6 +81,7 @@ Indicator.prototype = {
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
||||
this.menu.addAction(_("Power Settings"),function() {
|
||||
Main.overview.hide();
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-power-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
@ -115,15 +114,15 @@ Indicator.prototype = {
|
||||
let timestring;
|
||||
if (time > 60) {
|
||||
if (minutes == 0) {
|
||||
timestring = Gettext.ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
|
||||
timestring = ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
|
||||
} else {
|
||||
/* TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining" */
|
||||
let template = _("%d %s %d %s remaining");
|
||||
|
||||
timestring = template.format (hours, Gettext.ngettext("hour", "hours", hours), minutes, Gettext.ngettext("minute", "minutes", minutes));
|
||||
timestring = template.format (hours, ngettext("hour", "hours", hours), minutes, ngettext("minute", "minutes", minutes));
|
||||
}
|
||||
} else
|
||||
timestring = Gettext.ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
|
||||
timestring = ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
|
||||
this._batteryItem.label.text = timestring;
|
||||
}
|
||||
this._primaryPercentage.text = Math.round(percentage) + '%';
|
||||
|
@ -9,13 +9,11 @@ const Gvc = imports.gi.Gvc;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */
|
||||
|
||||
const VOLUME_NOTIFY_ID = 1;
|
||||
@ -64,6 +62,7 @@ Indicator.prototype = {
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Sound Settings"), function() {
|
||||
Main.overview.hide();
|
||||
let app = Shell.AppSystem.get_default().get_app('gnome-sound-panel.desktop');
|
||||
app.activate(-1);
|
||||
});
|
||||
|
@ -9,8 +9,6 @@ const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Tp = imports.gi.TelepathyGLib;
|
||||
const UPowerGlib = imports.gi.UPowerGlib;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const GnomeSession = imports.misc.gnomeSession;
|
||||
const Main = imports.ui.main;
|
||||
@ -28,7 +26,8 @@ const DISABLE_LOG_OUT_KEY = 'disable-log-out';
|
||||
|
||||
const ScreenSaverInterface = {
|
||||
name: BUS_NAME,
|
||||
methods: [ { name: 'Lock', inSignature: '' } ]
|
||||
methods: [ { name: 'Lock', inSignature: '' },
|
||||
{ name: 'SetActive', inSignature: 'b' }]
|
||||
};
|
||||
|
||||
let ScreenSaverProxy = DBus.makeProxyClass(ScreenSaverInterface);
|
||||
@ -59,6 +58,7 @@ StatusMenuButton.prototype = {
|
||||
this._presence = new GnomeSession.Presence();
|
||||
this._presenceItems = {};
|
||||
this._session = new GnomeSession.SessionManager();
|
||||
this._haveShutdown = true;
|
||||
|
||||
this._account_mgr = Tp.AccountManager.dup()
|
||||
|
||||
@ -91,12 +91,25 @@ StatusMenuButton.prototype = {
|
||||
Lang.bind(this, this._updateSwitchUser));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
||||
Lang.bind(this, this._updateLogout));
|
||||
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_LOCK_SCREEN_KEY,
|
||||
Lang.bind(this, this._updateLockScreen));
|
||||
this._updateSwitchUser();
|
||||
this._updateLogout();
|
||||
this._updateLockScreen();
|
||||
|
||||
// Whether shutdown is available or not depends on both lockdown
|
||||
// settings (disable-log-out) and Polkit policy - the latter doesn't
|
||||
// notify, so we update the menu item each time the menu opens or
|
||||
// the lockdown setting changes, which should be close enough.
|
||||
this.menu.connect('open-state-changed', Lang.bind(this,
|
||||
function(menu, open) {
|
||||
if (open)
|
||||
this._updateHaveShutdown();
|
||||
}));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
||||
Lang.bind(this, this._updateHaveShutdown));
|
||||
|
||||
this._upClient.connect('notify::can-suspend', Lang.bind(this, this._updateSuspendOrPowerOff));
|
||||
},
|
||||
|
||||
@ -113,13 +126,25 @@ StatusMenuButton.prototype = {
|
||||
},
|
||||
|
||||
_updateSessionSeparator: function() {
|
||||
let showSeparator = this._loginScreenItem.actor.visible ||
|
||||
this._logoutItem.actor.visible ||
|
||||
this._lockScreenItem.actor.visible;
|
||||
if (showSeparator)
|
||||
let sessionItemsVisible = this._loginScreenItem.actor.visible ||
|
||||
this._logoutItem.actor.visible ||
|
||||
this._lockScreenItem.actor.visible;
|
||||
|
||||
let showSessionSeparator = sessionItemsVisible &&
|
||||
this._suspendOrPowerOffItem.actor.visible;
|
||||
|
||||
let showSettingsSeparator = sessionItemsVisible ||
|
||||
this._suspendOrPowerOffItem.actor.visible;
|
||||
|
||||
if (showSessionSeparator)
|
||||
this._sessionSeparator.actor.show();
|
||||
else
|
||||
this._sessionSeparator.actor.hide();
|
||||
|
||||
if (showSettingsSeparator)
|
||||
this._settingsSeparator.actor.show();
|
||||
else
|
||||
this._settingsSeparator.actor.hide();
|
||||
},
|
||||
|
||||
_updateSwitchUser: function() {
|
||||
@ -149,16 +174,34 @@ StatusMenuButton.prototype = {
|
||||
this._updateSessionSeparator();
|
||||
},
|
||||
|
||||
_updateHaveShutdown: function() {
|
||||
this._session.CanShutdownRemote(Lang.bind(this,
|
||||
function(result, error) {
|
||||
if (!error) {
|
||||
this._haveShutdown = result;
|
||||
this._updateSuspendOrPowerOff();
|
||||
}
|
||||
}));
|
||||
},
|
||||
|
||||
_updateSuspendOrPowerOff: function() {
|
||||
this._haveSuspend = this._upClient.get_can_suspend();
|
||||
|
||||
if (!this._suspendOrPowerOffItem)
|
||||
return;
|
||||
|
||||
if (!this._haveShutdown && !this._haveSuspend)
|
||||
this._suspendOrPowerOffItem.actor.hide();
|
||||
else
|
||||
this._suspendOrPowerOffItem.actor.show();
|
||||
this._updateSessionSeparator();
|
||||
|
||||
// If we can't suspend show Power Off... instead
|
||||
// and disable the alt key
|
||||
if (!this._haveSuspend) {
|
||||
this._suspendOrPowerOffItem.updateText(_("Power Off..."), null);
|
||||
} else if (!this._haveShutdown) {
|
||||
this._suspendOrPowerOffItem.updateText(_("Suspend"), null);
|
||||
} else {
|
||||
this._suspendOrPowerOffItem.updateText(_("Suspend"), _("Power Off..."));
|
||||
}
|
||||
@ -204,6 +247,7 @@ StatusMenuButton.prototype = {
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
this._settingsSeparator = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
|
||||
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
|
||||
@ -271,7 +315,7 @@ StatusMenuButton.prototype = {
|
||||
|
||||
if (this._haveSuspend &&
|
||||
this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
|
||||
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
|
||||
this._screenSaverProxy.SetActiveRemote(true, Lang.bind(this, function() {
|
||||
this._upClient.suspend_sync(null);
|
||||
}));
|
||||
} else {
|
||||
|
@ -9,9 +9,6 @@ const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const Tpl = imports.gi.TelepathyLogger;
|
||||
const Tp = imports.gi.TelepathyGLib;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const C_ = Gettext.pgettext;
|
||||
|
||||
const History = imports.misc.history;
|
||||
const Main = imports.ui.main;
|
||||
@ -80,19 +77,20 @@ Client.prototype = {
|
||||
// The second argument, recover, means _observeChannels will be run
|
||||
// for any existing channel as well.
|
||||
let dbus = Tp.DBusDaemon.dup();
|
||||
this._observer = Tp.SimpleObserver.new(dbus, true, 'GnomeShell', true,
|
||||
Lang.bind(this, this._observeChannels));
|
||||
|
||||
// We only care about single-user text-based chats
|
||||
let props = {};
|
||||
props[Tp.PROP_CHANNEL_CHANNEL_TYPE] = Tp.IFACE_CHANNEL_TYPE_TEXT;
|
||||
props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE] = Tp.HandleType.CONTACT;
|
||||
this._observer.add_observer_filter(props);
|
||||
this._tpClient = new Shell.TpClient({ 'dbus_daemon': dbus,
|
||||
'name': 'GnomeShell',
|
||||
'uniquify-name': true })
|
||||
this._tpClient.set_observe_channels_func(
|
||||
Lang.bind(this, this._observeChannels));
|
||||
this._tpClient.set_approve_channels_func(
|
||||
Lang.bind(this, this._approveChannels));
|
||||
this._tpClient.set_handle_channels_func(
|
||||
Lang.bind(this, this._handleChannels));
|
||||
|
||||
try {
|
||||
this._observer.register();
|
||||
this._tpClient.register();
|
||||
} catch (e) {
|
||||
throw new Error('Couldn\'t register SimpleObserver. Error: \n' + e);
|
||||
throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
|
||||
}
|
||||
},
|
||||
|
||||
@ -105,7 +103,7 @@ Client.prototype = {
|
||||
this._finishObserveChannels(account, conn, channels, context);
|
||||
} else {
|
||||
Shell.get_self_contact_features(conn,
|
||||
contactFeatures.length, contactFeatures,
|
||||
contactFeatures,
|
||||
Lang.bind(this, function() {
|
||||
this._finishObserveChannels(account, conn, channels, context);
|
||||
}));
|
||||
@ -125,8 +123,8 @@ Client.prototype = {
|
||||
continue;
|
||||
|
||||
/* Request a TpContact */
|
||||
Shell.get_tp_contacts(conn, 1, [targetHandle],
|
||||
contactFeatures.length, contactFeatures,
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, function (connection, contacts, failed) {
|
||||
if (contacts.length < 1)
|
||||
return;
|
||||
@ -143,30 +141,82 @@ Client.prototype = {
|
||||
if (this._sources[channel.get_object_path()])
|
||||
return;
|
||||
|
||||
let source = new Source(account, conn, channel, contact);
|
||||
let source = new Source(account, conn, channel, contact, this._tpClient);
|
||||
|
||||
this._sources[channel.get_object_path()] = source;
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
if (this._tpClient.is_handling_channel(channel)) {
|
||||
// The chat box has been destroyed so it can't
|
||||
// handle the channel any more.
|
||||
channel.close_async(function(src, result) {
|
||||
channel.close_finish(result);
|
||||
});
|
||||
}
|
||||
|
||||
delete this._sources[channel.get_object_path()];
|
||||
}));
|
||||
},
|
||||
|
||||
_handlingChannels: function(account, conn, channels) {
|
||||
let len = channels.length;
|
||||
for (let i = 0; i < len; i++) {
|
||||
let channel = channels[i];
|
||||
|
||||
// We can only handle text channel, so close any other channel
|
||||
if (!(channel instanceof Tp.TextChannel)) {
|
||||
channel.close_async(null);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (this._tpClient.is_handling_channel(channel)) {
|
||||
// We are already handling the channel, display the source
|
||||
let source = this._sources[channel.get_object_path()];
|
||||
if (source)
|
||||
source.notify();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_approveChannels: function(approver, account, conn, channels,
|
||||
dispatchOp, context) {
|
||||
// Approve the channels right away as we are going to handle it
|
||||
dispatchOp.claim_with_async(this._tpClient,
|
||||
Lang.bind (this, function(dispatchOp, result) {
|
||||
try {
|
||||
dispatchOp.claim_with_finish(result);
|
||||
this._handlingChannels(account, conn, channels);
|
||||
} catch (err) {
|
||||
global.logError('Failed to Claim channel: ' + err);
|
||||
}}));
|
||||
|
||||
context.accept();
|
||||
},
|
||||
|
||||
_handleChannels: function(handler, account, conn, channels,
|
||||
requests, user_action_time, context) {
|
||||
this._handlingChannels(account, conn, channels);
|
||||
context.accept();
|
||||
}
|
||||
};
|
||||
|
||||
function Source(account, conn, channel, contact) {
|
||||
this._init(account, conn, channel, contact);
|
||||
function Source(account, conn, channel, contact, client) {
|
||||
this._init(account, conn, channel, contact, client);
|
||||
}
|
||||
|
||||
Source.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init: function(account, conn, channel, contact) {
|
||||
_init: function(account, conn, channel, contact, client) {
|
||||
MessageTray.Source.prototype._init.call(this, contact.get_alias());
|
||||
|
||||
this.isChat = true;
|
||||
|
||||
this._account = account;
|
||||
this._contact = contact;
|
||||
this._client = client;
|
||||
|
||||
this._pendingMessages = [];
|
||||
|
||||
this._conn = conn;
|
||||
this._channel = channel;
|
||||
@ -175,10 +225,21 @@ Source.prototype = {
|
||||
this._notification = new Notification(this);
|
||||
this._notification.setUrgency(MessageTray.Urgency.HIGH);
|
||||
|
||||
// We ack messages when the message box is collapsed if user has
|
||||
// interacted with it before and so read the messages:
|
||||
// - user clicked on it the tray
|
||||
// - user expanded the notification by hovering over the toaster notification
|
||||
this._shouldAck = false;
|
||||
|
||||
this.connect('summary-item-clicked', Lang.bind(this, this._summaryItemClicked));
|
||||
this._notification.connect('expanded', Lang.bind(this, this._notificationExpanded));
|
||||
this._notification.connect('collapsed', Lang.bind(this, this._notificationCollapsed));
|
||||
|
||||
this._presence = contact.get_presence_type();
|
||||
|
||||
this._sentId = this._channel.connect('message-sent', Lang.bind(this, this._messageSent));
|
||||
this._receivedId = this._channel.connect('message-received', Lang.bind(this, this._messageReceived));
|
||||
this._pendingId = this._channel.connect('pending-message-removed', Lang.bind(this, this._pendingRemoved));
|
||||
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
|
||||
@ -195,7 +256,7 @@ Source.prototype = {
|
||||
|
||||
_updateAlias: function() {
|
||||
let oldAlias = this.title;
|
||||
this.title = this._contact.get_alias();
|
||||
this.setTitle(this._contact.get_alias());
|
||||
this._notification.appendAliasChange(oldAlias, this.title);
|
||||
this.pushNotification(this._notification);
|
||||
},
|
||||
@ -224,13 +285,17 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
open: function(notification) {
|
||||
let props = {};
|
||||
props[Tp.PROP_CHANNEL_CHANNEL_TYPE] = Tp.IFACE_CHANNEL_TYPE_TEXT;
|
||||
[props[Tp.PROP_CHANNEL_TARGET_HANDLE], props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE]] = this._channel.get_handle();
|
||||
if (this._client.is_handling_channel(this._channel)) {
|
||||
// We are handling the channel, try to pass it to Empathy
|
||||
this._client.delegate_channels_async([this._channel], global.get_current_time(), "", null);
|
||||
}
|
||||
else {
|
||||
// We are not the handler, just ask to present the channel
|
||||
let dbus = Tp.DBusDaemon.dup();
|
||||
let cd = Tp.ChannelDispatcher.new(dbus);
|
||||
|
||||
let req = Tp.AccountChannelRequest.new(this._account, props, global.get_current_time());
|
||||
|
||||
req.ensure_channel_async('', null, null);
|
||||
cd.present_channel_async(this._channel, global.get_current_time(), null);
|
||||
}
|
||||
},
|
||||
|
||||
_getLogMessages: function() {
|
||||
@ -248,7 +313,18 @@ Source.prototype = {
|
||||
let logMessages = events.map(makeMessageFromTplEvent);
|
||||
|
||||
let pendingTpMessages = this._channel.get_pending_messages();
|
||||
let pendingMessages = pendingTpMessages.map(function (tpMessage) { return makeMessageFromTpMessage(tpMessage, NotificationDirection.RECEIVED); });
|
||||
let pendingMessages = [];
|
||||
|
||||
for (let i = 0; i < pendingTpMessages.length; i++) {
|
||||
let message = pendingTpMessages[i];
|
||||
|
||||
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT)
|
||||
continue;
|
||||
|
||||
pendingMessages.push(makeMessageFromTpMessage(message, NotificationDirection.RECEIVED));
|
||||
|
||||
this._pendingMessages.push(message);
|
||||
}
|
||||
|
||||
let showTimestamp = false;
|
||||
|
||||
@ -284,6 +360,7 @@ Source.prototype = {
|
||||
_channelClosed: function() {
|
||||
this._channel.disconnect(this._closedId);
|
||||
this._channel.disconnect(this._receivedId);
|
||||
this._channel.disconnect(this._pendingId);
|
||||
this._channel.disconnect(this._sentId);
|
||||
|
||||
this._contact.disconnect(this._notifyAliasId);
|
||||
@ -294,6 +371,11 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
_messageReceived: function(channel, message) {
|
||||
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT)
|
||||
return;
|
||||
|
||||
this._pendingMessages.push(message);
|
||||
|
||||
message = makeMessageFromTpMessage(message, NotificationDirection.RECEIVED);
|
||||
this._notification.appendMessage(message);
|
||||
this.notify();
|
||||
@ -320,10 +402,12 @@ Source.prototype = {
|
||||
}
|
||||
|
||||
let msg = Tp.ClientMessage.new_text(type, text);
|
||||
this._channel.send_message_async(msg, 0, null);
|
||||
this._channel.send_message_async(msg, 0, Lang.bind(this, function (src, result) {
|
||||
this._channel.send_message_finish(result);
|
||||
}));
|
||||
},
|
||||
|
||||
_presenceChanged: function (contact, presence, type, status, message) {
|
||||
_presenceChanged: function (contact, presence, status, message) {
|
||||
let msg, shouldNotify, title;
|
||||
|
||||
if (this._presence == presence)
|
||||
@ -356,6 +440,43 @@ Source.prototype = {
|
||||
this._notification.appendPresence(msg, shouldNotify);
|
||||
if (shouldNotify)
|
||||
this.notify();
|
||||
},
|
||||
|
||||
_pendingRemoved: function(channel, message) {
|
||||
let idx = this._pendingMessages.indexOf(message);
|
||||
|
||||
if (idx >= 0)
|
||||
this._pendingMessages.splice(idx, 1);
|
||||
else
|
||||
throw new Error('Message not in our pending list: ' + message);
|
||||
},
|
||||
|
||||
_ackMessages: function() {
|
||||
if (this._pendingMessages.length == 0)
|
||||
return;
|
||||
|
||||
// Don't clear our messages here, tp-glib will send a
|
||||
// 'pending-message-removed' for each one.
|
||||
this._channel.ack_messages_async(this._pendingMessages, Lang.bind(this, function(src, result) {
|
||||
this._channel.ack_messages_finish(result);}));
|
||||
},
|
||||
|
||||
_summaryItemClicked: function(source, button) {
|
||||
if (button != 1)
|
||||
return;
|
||||
|
||||
this._shouldAck = true;
|
||||
},
|
||||
|
||||
_notificationExpanded: function() {
|
||||
this._shouldAck = true;
|
||||
},
|
||||
|
||||
_notificationCollapsed: function() {
|
||||
if (this._shouldAck)
|
||||
this._ackMessages();
|
||||
|
||||
this._shouldAck = false;
|
||||
}
|
||||
};
|
||||
|
||||
@ -416,17 +537,43 @@ Notification.prototype = {
|
||||
styles.push('chat-action');
|
||||
}
|
||||
|
||||
this.update(this.source.title, messageBody, { customContent: true, bannerMarkup: true });
|
||||
if (message.direction == NotificationDirection.RECEIVED) {
|
||||
this.update(this.source.title, messageBody, { customContent: true,
|
||||
bannerMarkup: true });
|
||||
}
|
||||
|
||||
this._append(messageBody, styles, message.timestamp, noTimestamp);
|
||||
},
|
||||
|
||||
_filterMessages: function() {
|
||||
if (this._history.length < 1)
|
||||
return;
|
||||
|
||||
let lastMessageTime = this._history[0].time;
|
||||
let currentTime = (Date.now() / 1000);
|
||||
|
||||
// Keep the scrollback from growing too long. If the most
|
||||
// recent message (before the one we just added) is within
|
||||
// SCROLLBACK_RECENT_TIME, we will keep
|
||||
// SCROLLBACK_RECENT_LENGTH previous messages. Otherwise
|
||||
// we'll keep SCROLLBACK_IDLE_LENGTH messages.
|
||||
|
||||
let maxLength = (lastMessageTime < currentTime - SCROLLBACK_RECENT_TIME) ?
|
||||
SCROLLBACK_IDLE_LENGTH : SCROLLBACK_RECENT_LENGTH;
|
||||
|
||||
let filteredHistory = this._history.filter(function(item) { return item.realMessage });
|
||||
if (filteredHistory.length > maxLength) {
|
||||
let lastMessageToKeep = filteredHistory[maxLength];
|
||||
let expired = this._history.splice(this._history.indexOf(lastMessageToKeep));
|
||||
for (let i = 0; i < expired.length; i++)
|
||||
expired[i].actor.destroy();
|
||||
}
|
||||
},
|
||||
|
||||
_append: function(text, styles, timestamp, noTimestamp) {
|
||||
let currentTime = (Date.now() / 1000);
|
||||
if (!timestamp)
|
||||
timestamp = currentTime;
|
||||
let lastMessageTime = -1;
|
||||
if (this._history.length > 0)
|
||||
lastMessageTime = this._history[0].time;
|
||||
|
||||
// Reset the old message timeout
|
||||
if (this._timestampTimeoutId)
|
||||
@ -449,23 +596,7 @@ Notification.prototype = {
|
||||
Lang.bind(this, this.appendTimestamp));
|
||||
}
|
||||
|
||||
if (this._history.length > 1) {
|
||||
// Keep the scrollback from growing too long. If the most
|
||||
// recent message (before the one we just added) is within
|
||||
// SCROLLBACK_RECENT_TIME, we will keep
|
||||
// SCROLLBACK_RECENT_LENGTH previous messages. Otherwise
|
||||
// we'll keep SCROLLBACK_IDLE_LENGTH messages.
|
||||
|
||||
let maxLength = (lastMessageTime < currentTime - SCROLLBACK_RECENT_TIME) ?
|
||||
SCROLLBACK_IDLE_LENGTH : SCROLLBACK_RECENT_LENGTH;
|
||||
let filteredHistory = this._history.filter(function(item) { return item.realMessage });
|
||||
if (filteredHistory.length > maxLength) {
|
||||
let lastMessageToKeep = filteredHistory[maxLength];
|
||||
let expired = this._history.splice(this._history.indexOf(lastMessageToKeep));
|
||||
for (let i = 0; i < expired.length; i++)
|
||||
expired[i].actor.destroy();
|
||||
}
|
||||
}
|
||||
this._filterMessages();
|
||||
},
|
||||
|
||||
_formatTimestamp: function(date) {
|
||||
@ -473,6 +604,8 @@ Notification.prototype = {
|
||||
|
||||
var daysAgo = (now.getTime() - date.getTime()) / (24 * 60 * 60 * 1000);
|
||||
|
||||
let format;
|
||||
|
||||
// Show a week day and time if date is in the last week
|
||||
if (daysAgo < 1 || (daysAgo < 7 && now.getDay() != date.getDay())) {
|
||||
/* Translators: this is a time format string followed by a date.
|
||||
@ -505,6 +638,9 @@ Notification.prototype = {
|
||||
this._history.unshift({ actor: timeLabel, time: lastMessageTime, realMessage: false });
|
||||
|
||||
this._timestampTimeoutId = 0;
|
||||
|
||||
this._filterMessages();
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
@ -516,21 +652,23 @@ Notification.prototype = {
|
||||
let label = this.addBody(text, true);
|
||||
label.add_style_class_name('chat-meta-message');
|
||||
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false});
|
||||
|
||||
this._filterMessages();
|
||||
},
|
||||
|
||||
appendAliasChange: function(oldAlias, newAlias) {
|
||||
// FIXME: uncomment this after 3.0 string freeze ends
|
||||
oldAlias = GLib.markup_escape_text(oldAlias, -1);
|
||||
newAlias = GLib.markup_escape_text(newAlias, -1);
|
||||
|
||||
// oldAlias = GLib.markup_escape_text(oldAlias, -1);
|
||||
// newAlias = GLib.markup_escape_text(newAlias, -1);
|
||||
/* Translators: this is the other person changing their old IM name to their new
|
||||
IM name. */
|
||||
let message = '<i>' + _("%s is now known as %s").format(oldAlias, newAlias) + '</i>';
|
||||
let label = this.addBody(message, true);
|
||||
label.add_style_class_name('chat-meta-message');
|
||||
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false });
|
||||
this.update(newAlias, null, { customContent: true });
|
||||
|
||||
// /* Translators: this is the other person changing their old IM name to their new
|
||||
// IM name. */
|
||||
// let message = '<i>' + _("%s is now known as %s").format(oldAlias, newAlias) + '</i>';
|
||||
// let label = this.addBody(message, true);
|
||||
// label.add_style_class_name('chat-meta-message');
|
||||
// this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false });
|
||||
// this.update(newAlias, null, { customContent: true });
|
||||
this._filterMessages();
|
||||
},
|
||||
|
||||
_onEntryActivated: function() {
|
||||
|
@ -8,8 +8,6 @@ const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Search = imports.ui.search;
|
||||
@ -152,10 +150,6 @@ SearchTab.prototype = {
|
||||
return true;
|
||||
}));
|
||||
|
||||
this._entry.connect('secondary-icon-clicked', Lang.bind(this,
|
||||
function() {
|
||||
this._reset();
|
||||
}));
|
||||
this._entry.connect('notify::mapped', Lang.bind(this, this._onMapped));
|
||||
|
||||
global.stage.connect('notify::key-focus', Lang.bind(this, this._updateCursorVisibility));
|
||||
@ -166,7 +160,14 @@ SearchTab.prototype = {
|
||||
hide: function() {
|
||||
BaseTab.prototype.hide.call(this);
|
||||
|
||||
this._reset();
|
||||
// Leave the entry focused when it doesn't have any text;
|
||||
// when replacing a selected search term, Clutter emits
|
||||
// two 'text-changed' signals, one for deleting the previous
|
||||
// text and one for the new one - the second one is handled
|
||||
// incorrectly when we remove focus
|
||||
// (https://bugzilla.gnome.org/show_bug.cgi?id=636341) */
|
||||
if (this._text.text != '')
|
||||
this._reset();
|
||||
},
|
||||
|
||||
_reset: function () {
|
||||
@ -226,7 +227,7 @@ SearchTab.prototype = {
|
||||
if (this._iconClickedId == 0) {
|
||||
this._iconClickedId = this._entry.connect('secondary-icon-clicked',
|
||||
Lang.bind(this, function() {
|
||||
this.reset();
|
||||
this._reset();
|
||||
}));
|
||||
}
|
||||
this._activate();
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
|
@ -6,6 +6,7 @@ const Gio = imports.gi.Gio;
|
||||
const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const AltTab = imports.ui.altTab;
|
||||
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
|
||||
@ -22,8 +23,7 @@ function getDimShader() {
|
||||
if (dimShader === null)
|
||||
return null;
|
||||
if (!dimShader) {
|
||||
let [success, source, length] = GLib.file_get_contents(global.datadir +
|
||||
'/shaders/dim-window.glsl');
|
||||
let source = Shell.get_file_contents_utf8_sync(global.datadir + '/shaders/dim-window.glsl');
|
||||
try {
|
||||
let shader = new Clutter.Shader();
|
||||
shader.set_fragment_source(source, -1);
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GConf = imports.gi.GConf;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
@ -27,6 +28,8 @@ const CLOSE_BUTTON_FADE_TIME = 0.1;
|
||||
|
||||
const DRAGGING_WINDOW_OPACITY = 100;
|
||||
|
||||
const BUTTON_LAYOUT_KEY = '/desktop/gnome/shell/windows/button_layout';
|
||||
|
||||
// Define a layout scheme for small window counts. For larger
|
||||
// counts we fall back to an algorithm. We need more schemes here
|
||||
// unless we have a really good algorithm.
|
||||
@ -237,7 +240,7 @@ WindowClone.prototype = {
|
||||
this.emit('zoom-start');
|
||||
|
||||
if (!this._zoomLightbox)
|
||||
this._zoomLightbox = new Lightbox.Lightbox(global.stage,
|
||||
this._zoomLightbox = new Lightbox.Lightbox(Main.uiGroup,
|
||||
{ fadeTime: LIGHTBOX_FADE_TIME });
|
||||
this._zoomLightbox.show();
|
||||
|
||||
@ -248,7 +251,7 @@ WindowClone.prototype = {
|
||||
this._zoomGlobalOrig.setPosition.apply(this._zoomGlobalOrig, this.actor.get_transformed_position());
|
||||
this._zoomGlobalOrig.setScale(width / this.actor.width, height / this.actor.height);
|
||||
|
||||
this.actor.reparent(global.stage);
|
||||
this.actor.reparent(Main.uiGroup);
|
||||
this._zoomLightbox.highlight(this.actor);
|
||||
|
||||
[this.actor.x, this.actor.y] = this._zoomGlobalOrig.getPosition();
|
||||
@ -296,12 +299,30 @@ WindowClone.prototype = {
|
||||
},
|
||||
|
||||
_onDragBegin : function (draggable, time) {
|
||||
if (this._zooming)
|
||||
this._zoomEnd();
|
||||
|
||||
[this.dragOrigX, this.dragOrigY] = this.actor.get_position();
|
||||
this.dragOrigScale = this.actor.scale_x;
|
||||
this.inDrag = true;
|
||||
this.emit('drag-begin');
|
||||
},
|
||||
|
||||
_getWorkspaceActor : function() {
|
||||
let index = this.metaWindow.get_workspace().index();
|
||||
return Main.overview.workspaces.getWorkspaceByIndex(index);
|
||||
},
|
||||
|
||||
handleDragOver : function(source, actor, x, y, time) {
|
||||
let workspace = this._getWorkspaceActor();
|
||||
return workspace.handleDragOver(source, actor, x, y, time);
|
||||
},
|
||||
|
||||
acceptDrop : function(source, actor, x, y, time) {
|
||||
let workspace = this._getWorkspaceActor();
|
||||
workspace.acceptDrop(source, actor, x, y, time);
|
||||
},
|
||||
|
||||
_onDragCancelled : function (draggable, time) {
|
||||
this.emit('drag-cancelled');
|
||||
},
|
||||
@ -394,6 +415,8 @@ WindowOverlay.prototype = {
|
||||
|
||||
show: function() {
|
||||
this._hidden = false;
|
||||
if (this._windowClone.actor.has_pointer)
|
||||
this.closeButton.show();
|
||||
this.title.show();
|
||||
},
|
||||
|
||||
@ -430,9 +453,20 @@ WindowOverlay.prototype = {
|
||||
let button = this.closeButton;
|
||||
let title = this.title;
|
||||
|
||||
let gconf = GConf.Client.get_default();
|
||||
let layout = gconf.get_string(BUTTON_LAYOUT_KEY);
|
||||
let rtl = St.Widget.get_default_direction() == St.TextDirection.RTL;
|
||||
|
||||
let split = layout.split(":");
|
||||
let side;
|
||||
if (split[0].indexOf("close") > -1)
|
||||
side = rtl ? St.Side.RIGHT : St.Side.LEFT;
|
||||
else
|
||||
side = rtl ? St.Side.LEFT : St.Side.RIGHT;
|
||||
|
||||
let buttonX;
|
||||
let buttonY = cloneY - (button.height - button._overlap);
|
||||
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
|
||||
if (side == St.Side.LEFT)
|
||||
buttonX = cloneX - (button.width - button._overlap);
|
||||
else
|
||||
buttonX = cloneX + (cloneWidth - button._overlap);
|
||||
@ -614,6 +648,7 @@ Workspace.prototype = {
|
||||
function () {
|
||||
this._dropRect.set_position(x, y);
|
||||
this._dropRect.set_size(width, height);
|
||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||
return false;
|
||||
}));
|
||||
|
||||
@ -636,16 +671,6 @@ Workspace.prototype = {
|
||||
return this._windows.length == 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* setReactive:
|
||||
* @reactive: %true iff the workspace should be reactive
|
||||
*
|
||||
* Set the workspace (desktop) reactive
|
||||
**/
|
||||
setReactive: function(reactive) {
|
||||
this.actor.reactive = reactive;
|
||||
},
|
||||
|
||||
// Only use this for n <= 20 say
|
||||
_factorial: function(n) {
|
||||
let result = 1;
|
||||
@ -1113,7 +1138,9 @@ Workspace.prototype = {
|
||||
// the compositor finds out about them...
|
||||
Mainloop.idle_add(Lang.bind(this,
|
||||
function () {
|
||||
if (this.actor && metaWin.get_compositor_private())
|
||||
if (this.actor &&
|
||||
metaWin.get_compositor_private() &&
|
||||
metaWin.get_workspace() == this.metaWorkspace)
|
||||
this._doAddWindow(metaWin);
|
||||
return false;
|
||||
}));
|
||||
|
@ -178,6 +178,11 @@ WorkspaceThumbnail.prototype = {
|
||||
// Create clones for windows that should be visible in the Overview
|
||||
this._windows = [];
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
windows[i].meta_window._minimizedChangedId =
|
||||
windows[i].meta_window.connect('notify::minimized',
|
||||
Lang.bind(this,
|
||||
this._updateMinimized));
|
||||
|
||||
if (this._isOverviewWindow(windows[i])) {
|
||||
this._addWindowClone(windows[i]);
|
||||
}
|
||||
@ -257,11 +262,18 @@ WorkspaceThumbnail.prototype = {
|
||||
return;
|
||||
|
||||
// Check if window still should be here
|
||||
if (win && this._isMyWindow(win))
|
||||
if (win && this._isMyWindow(win) && this._isOverviewWindow(win))
|
||||
return;
|
||||
|
||||
let clone = this._windows[index];
|
||||
this._windows.splice(index, 1);
|
||||
|
||||
if (win && this._isOverviewWindow(win)) {
|
||||
if (metaWin._minimizedChangedId) {
|
||||
metaWin.disconnect(metaWin._minimizedChangedId);
|
||||
delete metaWin._minimizedChangedId;
|
||||
}
|
||||
}
|
||||
clone.destroy();
|
||||
},
|
||||
|
||||
@ -276,7 +288,9 @@ WorkspaceThumbnail.prototype = {
|
||||
// the compositor finds out about them...
|
||||
Mainloop.idle_add(Lang.bind(this,
|
||||
function () {
|
||||
if (this.actor && metaWin.get_compositor_private())
|
||||
if (this.actor &&
|
||||
metaWin.get_compositor_private() &&
|
||||
metaWin.get_workspace() == this.metaWorkspace)
|
||||
this._doAddWindow(metaWin);
|
||||
return false;
|
||||
}));
|
||||
@ -288,6 +302,11 @@ WorkspaceThumbnail.prototype = {
|
||||
if (this._lookupIndex (metaWin) != -1)
|
||||
return;
|
||||
|
||||
if (!metaWin._minimizedChangedId)
|
||||
metaWin._minimizedChangedId = metaWin.connect('notify::minimized',
|
||||
Lang.bind(this,
|
||||
this._updateMinimized));
|
||||
|
||||
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
|
||||
return;
|
||||
|
||||
@ -314,6 +333,13 @@ WorkspaceThumbnail.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_updateMinimized: function(metaWin) {
|
||||
if (metaWin.minimized)
|
||||
this._doRemoveWindow(metaWin);
|
||||
else
|
||||
this._doAddWindow(metaWin);
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
this.actor.destroy();
|
||||
},
|
||||
@ -324,6 +350,14 @@ WorkspaceThumbnail.prototype = {
|
||||
global.screen.disconnect(this._windowEnteredMonitorId);
|
||||
global.screen.disconnect(this._windowLeftMonitorId);
|
||||
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let metaWin = this._windows[i].metaWindow;
|
||||
if (metaWin._minimizedChangedId) {
|
||||
metaWin.disconnect(metaWin._minimizedChangedId);
|
||||
delete metaWin._minimizedChangedId;
|
||||
}
|
||||
}
|
||||
|
||||
this._windows = [];
|
||||
this.actor = null;
|
||||
},
|
||||
@ -337,7 +371,8 @@ WorkspaceThumbnail.prototype = {
|
||||
// Tests if @win should be shown in the Overview
|
||||
_isOverviewWindow : function (win) {
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
return tracker.is_window_interesting(win.get_meta_window());
|
||||
return tracker.is_window_interesting(win.get_meta_window()) &&
|
||||
win.get_meta_window().showing_on_its_workspace();
|
||||
},
|
||||
|
||||
// Create a clone of a (non-desktop) window and add it to the window list
|
||||
|
@ -7,8 +7,6 @@ const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const DND = imports.ui.dnd;
|
||||
const Main = imports.ui.main;
|
||||
@ -51,9 +49,12 @@ WorkspacesView.prototype = {
|
||||
this._height = 0;
|
||||
this._x = 0;
|
||||
this._y = 0;
|
||||
this._clipX = 0;
|
||||
this._clipY = 0;
|
||||
this._clipWidth = 0;
|
||||
this._clipHeight = 0;
|
||||
this._workspaceRatioSpacing = 0;
|
||||
this._spacing = 0;
|
||||
this._lostWorkspaces = [];
|
||||
this._animating = false; // tweening
|
||||
this._scrolling = false; // swipe-scrolling
|
||||
this._animatingScroll = false; // programatically updating the adjustment
|
||||
@ -95,7 +96,8 @@ WorkspacesView.prototype = {
|
||||
this._overviewShownId =
|
||||
Main.overview.connect('shown',
|
||||
Lang.bind(this, function() {
|
||||
this.actor.set_clip(this._x, this._y, this._width, this._height);
|
||||
this.actor.set_clip(this._clipX, this._clipY,
|
||||
this._clipWidth, this._clipHeight);
|
||||
}));
|
||||
|
||||
this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
|
||||
@ -139,6 +141,13 @@ WorkspacesView.prototype = {
|
||||
this._workspaces[i].setGeometry(x, y, width, height);
|
||||
},
|
||||
|
||||
setClipRect: function(x, y, width, height) {
|
||||
this._clipX = x;
|
||||
this._clipY = y;
|
||||
this._clipWidth = width;
|
||||
this._clipHeight = height;
|
||||
},
|
||||
|
||||
_lookupWorkspaceForMetaWindow: function (metaWindow) {
|
||||
for (let i = 0; i < this._workspaces.length; i++) {
|
||||
if (this._workspaces[i].containsMetaWindow(metaWindow))
|
||||
@ -152,6 +161,10 @@ WorkspacesView.prototype = {
|
||||
return this._workspaces[active];
|
||||
},
|
||||
|
||||
getWorkspaceByIndex: function(index) {
|
||||
return this._workspaces[index];
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
let activeWorkspace = this._workspaces[activeWorkspaceIndex];
|
||||
@ -201,12 +214,10 @@ WorkspacesView.prototype = {
|
||||
|
||||
Tweener.removeTweens(workspace.actor);
|
||||
|
||||
let opacity = (this._inDrag && w != active) ? 200 : 255;
|
||||
let y = (w - active) * (this._height + this._spacing + this._workspaceRatioSpacing);
|
||||
|
||||
if (showAnimation) {
|
||||
let params = { y: y,
|
||||
opacity: opacity,
|
||||
time: WORKSPACE_SWITCH_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
};
|
||||
@ -224,32 +235,10 @@ WorkspacesView.prototype = {
|
||||
Tweener.addTween(workspace.actor, params);
|
||||
} else {
|
||||
workspace.actor.set_position(0, y);
|
||||
workspace.actor.opacity = opacity;
|
||||
if (w == 0)
|
||||
this._updateVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
for (let l = 0; l < this._lostWorkspaces.length; l++) {
|
||||
let workspace = this._lostWorkspaces[l];
|
||||
|
||||
Tweener.removeTweens(workspace.actor);
|
||||
|
||||
workspace.actor.show();
|
||||
workspace.hideWindowsOverlays();
|
||||
|
||||
if (showAnimation) {
|
||||
Tweener.addTween(workspace.actor,
|
||||
{ y: workspace.x,
|
||||
time: WORKSPACE_SWITCH_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
this._cleanWorkspaces)
|
||||
});
|
||||
} else {
|
||||
this._cleanWorkspaces();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_updateVisibility: function() {
|
||||
@ -270,17 +259,6 @@ WorkspacesView.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_cleanWorkspaces: function() {
|
||||
if (this._lostWorkspaces.length == 0)
|
||||
return;
|
||||
|
||||
for (let l = 0; l < this._lostWorkspaces.length; l++)
|
||||
this._lostWorkspaces[l].destroy();
|
||||
this._lostWorkspaces = [];
|
||||
|
||||
this._updateWorkspaceActors(false);
|
||||
},
|
||||
|
||||
_updateScrollAdjustment: function(index, showAnimation) {
|
||||
if (this._scrolling)
|
||||
return;
|
||||
@ -303,12 +281,9 @@ WorkspacesView.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
updateWorkspaces: function(oldNumWorkspaces, newNumWorkspaces, lostWorkspaces) {
|
||||
updateWorkspaces: function(oldNumWorkspaces, newNumWorkspaces) {
|
||||
let active = global.screen.get_active_workspace_index();
|
||||
|
||||
for (let l = 0; l < lostWorkspaces.length; l++)
|
||||
lostWorkspaces[l].disconnectAll();
|
||||
|
||||
Tweener.addTween(this._scrollAdjustment,
|
||||
{ upper: newNumWorkspaces,
|
||||
time: WORKSPACE_SWITCH_TIME,
|
||||
@ -316,12 +291,13 @@ WorkspacesView.prototype = {
|
||||
});
|
||||
|
||||
if (newNumWorkspaces > oldNumWorkspaces) {
|
||||
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++)
|
||||
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
|
||||
this._workspaces[w].setGeometry(this._x, this._y,
|
||||
this._width, this._height);
|
||||
this.actor.add_actor(this._workspaces[w].actor);
|
||||
}
|
||||
|
||||
this._updateWorkspaceActors(false);
|
||||
} else {
|
||||
this._lostWorkspaces = lostWorkspaces;
|
||||
}
|
||||
|
||||
this._scrollToActive(true);
|
||||
@ -439,20 +415,14 @@ WorkspacesView.prototype = {
|
||||
if (topWorkspace) {
|
||||
if (topWorkspace.actor.contains(dragEvent.targetActor)) {
|
||||
hoverWorkspace = topWorkspace;
|
||||
topWorkspace.opacity = topWorkspace.actor.opacity = 255;
|
||||
result = topWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
|
||||
} else {
|
||||
topWorkspace.opacity = topWorkspace.actor.opacity = 200;
|
||||
}
|
||||
}
|
||||
|
||||
if (bottomWorkspace) {
|
||||
if (bottomWorkspace.actor.contains(dragEvent.targetActor)) {
|
||||
hoverWorkspace = bottomWorkspace;
|
||||
bottomWorkspace.opacity = bottomWorkspace.actor.opacity = 255;
|
||||
result = bottomWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
|
||||
} else {
|
||||
bottomWorkspace.opacity = bottomWorkspace.actor.opacity = 200;
|
||||
}
|
||||
}
|
||||
|
||||
@ -479,7 +449,7 @@ WorkspacesView.prototype = {
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
this._timeoutId = 0;
|
||||
}
|
||||
DND.removeMonitor(this._dragMonitor);
|
||||
DND.removeDragMonitor(this._dragMonitor);
|
||||
this._inDrag = false;
|
||||
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
@ -598,6 +568,9 @@ WorkspacesDisplay.prototype = {
|
||||
this._updateAlwaysZoom();
|
||||
|
||||
global.screen.connect('monitors-changed', Lang.bind(this, this._updateAlwaysZoom));
|
||||
global.screen.connect('notify::n-workspaces',
|
||||
Lang.bind(this, this._workspacesChanged));
|
||||
|
||||
Main.xdndHandler.connect('drag-begin', Lang.bind(this, function(){
|
||||
this._alwaysZoomOut = true;
|
||||
}));
|
||||
@ -607,7 +580,6 @@ WorkspacesDisplay.prototype = {
|
||||
this._updateAlwaysZoom();
|
||||
}));
|
||||
|
||||
this._nWorkspacesNotifyId = 0;
|
||||
this._switchWorkspaceNotifyId = 0;
|
||||
|
||||
this._itemDragBeginId = 0;
|
||||
@ -637,10 +609,6 @@ WorkspacesDisplay.prototype = {
|
||||
this.workspacesView = new WorkspacesView(this._workspaces);
|
||||
this._updateWorkspacesGeometry();
|
||||
|
||||
this._nWorkspacesNotifyId =
|
||||
global.screen.connect('notify::n-workspaces',
|
||||
Lang.bind(this, this._workspacesChanged));
|
||||
|
||||
this._restackedNotifyId =
|
||||
global.screen.connect('restacked',
|
||||
Lang.bind(this, this._onRestacked));
|
||||
@ -671,10 +639,6 @@ WorkspacesDisplay.prototype = {
|
||||
this._controls.hide();
|
||||
this._thumbnailsBox.hide();
|
||||
|
||||
if (this._nWorkspacesNotifyId > 0) {
|
||||
global.screen.disconnect(this._nWorkspacesNotifyId);
|
||||
this._nWorkspacesNotifyId = 0;
|
||||
}
|
||||
if (this._restackedNotifyId > 0){
|
||||
global.screen.disconnect(this._restackedNotifyId);
|
||||
this._restackedNotifyId = 0;
|
||||
@ -723,7 +687,12 @@ WorkspacesDisplay.prototype = {
|
||||
},
|
||||
|
||||
_updateAlwaysZoom: function() {
|
||||
this._alwaysZoomOut = false;
|
||||
// Always show the pager if workspaces are actually used,
|
||||
// e.g. there are windows on more than one
|
||||
this._alwaysZoomOut = global.screen.n_workspaces > 2;
|
||||
|
||||
if (this._alwaysZoomOut)
|
||||
return;
|
||||
|
||||
let monitors = global.get_monitors();
|
||||
let primary = global.get_primary_monitor();
|
||||
@ -794,6 +763,13 @@ WorkspacesDisplay.prototype = {
|
||||
|
||||
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
|
||||
|
||||
let clipWidth = width - controlsVisible;
|
||||
let clipHeight = (fullHeight / fullWidth) * clipWidth;
|
||||
let clipX = rtl ? x + controlsVisible : x;
|
||||
let clipY = y + (fullHeight - clipHeight) / 2;
|
||||
|
||||
this.workspacesView.setClipRect(clipX, clipY, clipWidth, clipHeight);
|
||||
|
||||
if (this._zoomOut) {
|
||||
width -= controlsNatural;
|
||||
if (rtl)
|
||||
@ -832,6 +808,12 @@ WorkspacesDisplay.prototype = {
|
||||
if (oldNumWorkspaces == newNumWorkspaces)
|
||||
return;
|
||||
|
||||
this._updateAlwaysZoom();
|
||||
this._updateZoom();
|
||||
|
||||
if (this.workspacesView == null)
|
||||
return;
|
||||
|
||||
let lostWorkspaces = [];
|
||||
if (newNumWorkspaces > oldNumWorkspaces) {
|
||||
// Assume workspaces are only added at the end
|
||||
@ -857,24 +839,23 @@ WorkspacesDisplay.prototype = {
|
||||
lostWorkspaces = this._workspaces.splice(removedIndex,
|
||||
removedNum);
|
||||
|
||||
// Don't let the user try to select this workspace as it's
|
||||
// making its exit.
|
||||
for (let l = 0; l < lostWorkspaces.length; l++)
|
||||
lostWorkspaces[l].setReactive(false);
|
||||
for (let l = 0; l < lostWorkspaces.length; l++) {
|
||||
lostWorkspaces[l].disconnectAll();
|
||||
lostWorkspaces[l].destroy();
|
||||
}
|
||||
|
||||
this._thumbnailsBox.removeThumbmails(removedIndex, removedNum);
|
||||
}
|
||||
|
||||
this.workspacesView.updateWorkspaces(oldNumWorkspaces,
|
||||
newNumWorkspaces,
|
||||
lostWorkspaces);
|
||||
newNumWorkspaces);
|
||||
},
|
||||
|
||||
_updateZoom : function() {
|
||||
if (Main.overview.animationInProgress)
|
||||
return;
|
||||
|
||||
let shouldZoom = this._alwaysZoomOut || this._controls.hover || (this._inDrag && !this._cancelledDrag);
|
||||
let shouldZoom = this._alwaysZoomOut || this._controls.hover;
|
||||
if (shouldZoom != this._zoomOut) {
|
||||
this._zoomOut = shouldZoom;
|
||||
this._updateWorkspacesGeometry();
|
||||
@ -898,12 +879,22 @@ WorkspacesDisplay.prototype = {
|
||||
_dragBegin: function() {
|
||||
this._inDrag = true;
|
||||
this._cancelledDrag = false;
|
||||
this._updateZoom();
|
||||
this._dragMonitor = {
|
||||
dragMotion: Lang.bind(this, this._onDragMotion)
|
||||
};
|
||||
DND.addDragMonitor(this._dragMonitor);
|
||||
},
|
||||
|
||||
_dragCancelled: function() {
|
||||
this._cancelledDrag = true;
|
||||
this._updateZoom();
|
||||
DND.removeDragMonitor(this._dragMonitor);
|
||||
},
|
||||
|
||||
_onDragMotion: function(dragEvent) {
|
||||
let controlsHovered = this._controls.contains(dragEvent.targetActor);
|
||||
this._controls.set_hover(controlsHovered);
|
||||
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
},
|
||||
|
||||
_dragEnd: function() {
|
||||
|
@ -36,53 +36,48 @@ visually attractive and easy to use experience.
|
||||
.SH OPTIONS
|
||||
|
||||
.TP
|
||||
.B \-r, \-\-replace
|
||||
Replace the running metacity/gnome-panel
|
||||
.B \-\-replace
|
||||
Replace the running window manager
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-v, \-\-verbose
|
||||
Shows details about the results of running `gnome-shell'.
|
||||
.B \-\-sm-disable
|
||||
Disable connection to the session manager
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-g, \-\-debug
|
||||
Run under a debugger
|
||||
.B \-\-sm-client-id=ID
|
||||
Specify session management ID
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-\-debug\-command
|
||||
Command to use for debugging (defaults to 'gdb \-\-args')
|
||||
.B \-\-sm-save-file=FILE
|
||||
Initialize session from savefile
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-\-screen=SCREEN
|
||||
X screen to use
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-d, \-\-display=DISPLAY
|
||||
X display to use
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-\-sync
|
||||
.br
|
||||
Make X calls synchronously, useful when debugging down X errors
|
||||
Make X calls synchronous
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-\-xephyr
|
||||
Run a debugging instance inside Xephyr
|
||||
.B \-\-version
|
||||
Print version and exit
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-\-geometry
|
||||
Specify Xephyr screen geometry
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-w, \-\-wide
|
||||
Use widescreen (1280x800) with Xephyr
|
||||
.br
|
||||
|
||||
.TP
|
||||
.B \-\-create\-extension
|
||||
Create a new GNOME Shell extension
|
||||
|
||||
.TP
|
||||
.B \-\-eval\-file
|
||||
Evaluate the contents of the given JavaScript file
|
||||
.B \-\-help
|
||||
Display help and exit
|
||||
.br
|
||||
|
||||
.SH BUGS
|
||||
|
@ -1,14 +1,18 @@
|
||||
af
|
||||
an
|
||||
ar
|
||||
be
|
||||
bg
|
||||
bn
|
||||
bn_IN
|
||||
ca
|
||||
ca@valencia
|
||||
cs
|
||||
da
|
||||
de
|
||||
el
|
||||
en_GB
|
||||
eo
|
||||
es
|
||||
et
|
||||
eu
|
||||
@ -38,11 +42,13 @@ pt
|
||||
pt_BR
|
||||
ro
|
||||
ru
|
||||
sk
|
||||
sl
|
||||
sr
|
||||
sr@latin
|
||||
sv
|
||||
ta
|
||||
te
|
||||
th
|
||||
tr
|
||||
ug
|
||||
|
1426
po/ca@valencia.po
Normal file
20
po/de.po
@ -5,7 +5,7 @@
|
||||
# workspace - Arbeitsfläche
|
||||
#
|
||||
# Hendrik Brandt <heb@gnome-de.org>, 2009.
|
||||
# Hendrik Richter <hendrikr@gnome.org>, 2009.
|
||||
# Hendrik Richter <hendrikr@gnome.org>, 2009, 2010, 2011.
|
||||
# Mario Blättermann <mariobl@gnome.org>, 2009, 2010, 2011.
|
||||
# Mario Klug <mario@klug.me>, 2010.
|
||||
# Jakob Kramer <jakob.kramer@gmx.de>, 2010.
|
||||
@ -18,8 +18,8 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-27 14:43+0000\n"
|
||||
"PO-Revision-Date: 2011-03-27 15:45+0200\n"
|
||||
"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n"
|
||||
"PO-Revision-Date: 2011-04-22 14:23+0200\n"
|
||||
"Last-Translator: Hendrik Richter <hendrikr@gnome.org>\n"
|
||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -249,11 +249,15 @@ msgctxt "event list time"
|
||||
msgid "%H:%M"
|
||||
msgstr "%H:%M"
|
||||
|
||||
#
|
||||
# Da wir keine AM/PM-Suffixe haben, die Zeit von Terminen aber eindeutig
|
||||
# angezeigt werden soll, wird im Kalender stets das 24h-Format verwendet.
|
||||
#
|
||||
#. Transators: Shown in calendar event list, if 12h format
|
||||
#: ../js/ui/calendar.js:78
|
||||
msgctxt "event list time"
|
||||
msgid "%l:%M %p"
|
||||
msgstr "%l:%M"
|
||||
msgstr "%H:%M"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Sunday.
|
||||
#. *
|
||||
@ -417,21 +421,21 @@ msgstr "%a %R"
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:177
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a, %e. %b, %H:%M:%S"
|
||||
msgstr "%a, %e. %b, %l:%M:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:178
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a, %e. %b, %H:%M"
|
||||
msgstr "%a, %e. %b, %l:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
msgstr "%a %l:%M:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:183
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %H:%M"
|
||||
msgstr "%a %l:%M"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
|
94
po/ja.po
@ -11,9 +11,9 @@ 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: 2011-04-04 14:08+0000\n"
|
||||
"PO-Revision-Date: 2011-03-30 00:26+0900\n"
|
||||
"Last-Translator: Kiyotaka NISHIBORI <ml.nishibori.kiyotaka@gmail.com>\n"
|
||||
"POT-Creation-Date: 2011-04-22 21:34+0000\n"
|
||||
"PO-Revision-Date: 2011-04-19 23:13+0900\n"
|
||||
"Last-Translator: Jiro Matsuzawa <matsuzawa.jr@gmail.com>\n"
|
||||
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -187,23 +187,23 @@ msgstr "'%s'の実行に失敗しました:"
|
||||
msgid "All"
|
||||
msgstr "すべて"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:329
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "アプリケーション"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:355
|
||||
msgid "SETTINGS"
|
||||
msgstr "設定"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:626
|
||||
msgid "New Window"
|
||||
msgstr "新しいウィンドウで開く"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "お気に入りから削除"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:630
|
||||
msgid "Add to Favorites"
|
||||
msgstr "お気に入りに追加"
|
||||
|
||||
@ -336,13 +336,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "予定がありません"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:492
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%B%e日 (%a)"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:493
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:495
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%Y年%B%e日 (%a)"
|
||||
@ -363,7 +363,7 @@ msgstr "今週"
|
||||
msgid "Next week"
|
||||
msgstr "来週"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "削除"
|
||||
|
||||
@ -490,7 +490,7 @@ msgstr "%d 秒後にシステムを再起動します。"
|
||||
msgid "Restarting the system."
|
||||
msgstr "システムを再起動します。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:417 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "キャンセル"
|
||||
@ -525,11 +525,11 @@ msgstr "ソースの表示"
|
||||
msgid "Web Page"
|
||||
msgstr "ウェブページ"
|
||||
|
||||
#: ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "開く"
|
||||
|
||||
#: ../js/ui/messageTray.js:2164
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "システム情報"
|
||||
|
||||
@ -829,139 +829,139 @@ msgstr "キーボードレイアウトの表示..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "ローカライズ設定"
|
||||
|
||||
#: ../js/ui/status/network.js:105 ../js/ui/status/network.js:1466
|
||||
#: ../js/ui/status/network.js:109 ../js/ui/status/network.js:1498
|
||||
msgid "<unknown>"
|
||||
msgstr "< 不明 >"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:318
|
||||
#: ../js/ui/status/network.js:326
|
||||
msgid "disabled"
|
||||
msgstr "利用不可"
|
||||
|
||||
#: ../js/ui/status/network.js:501
|
||||
#: ../js/ui/status/network.js:521
|
||||
msgid "connecting..."
|
||||
msgstr "接続中..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:504
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "authentication required"
|
||||
msgstr "認証要求"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:534
|
||||
msgid "firmware missing"
|
||||
msgstr "ファームウェア無し"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "cable unplugged"
|
||||
msgstr "ケーブル抜け"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:526
|
||||
#: ../js/ui/status/network.js:546
|
||||
msgid "unavailable"
|
||||
msgstr "利用不可"
|
||||
|
||||
#: ../js/ui/status/network.js:528
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "connection failed"
|
||||
msgstr "接続失敗"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:608 ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:628 ../js/ui/status/network.js:1446
|
||||
msgid "Connected (private)"
|
||||
msgstr "接続 (制限付)"
|
||||
|
||||
#: ../js/ui/status/network.js:689
|
||||
#: ../js/ui/status/network.js:713
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "自動イーサネット接続"
|
||||
|
||||
#: ../js/ui/status/network.js:764
|
||||
#: ../js/ui/status/network.js:788
|
||||
msgid "Auto broadband"
|
||||
msgstr "自動ブロードバンド接続"
|
||||
|
||||
#: ../js/ui/status/network.js:767
|
||||
#: ../js/ui/status/network.js:791
|
||||
msgid "Auto dial-up"
|
||||
msgstr "自動ダイヤルアップ"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:910 ../js/ui/status/network.js:1426
|
||||
#: ../js/ui/status/network.js:937 ../js/ui/status/network.js:1458
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "自動 %s"
|
||||
|
||||
#: ../js/ui/status/network.js:912
|
||||
#: ../js/ui/status/network.js:939
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "自動 Bluetooth 接続"
|
||||
|
||||
#: ../js/ui/status/network.js:1428
|
||||
#: ../js/ui/status/network.js:1460
|
||||
msgid "Auto wireless"
|
||||
msgstr "自動無線接続"
|
||||
|
||||
#: ../js/ui/status/network.js:1486
|
||||
#: ../js/ui/status/network.js:1518
|
||||
msgid "More..."
|
||||
msgstr "その他..."
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Enable networking"
|
||||
msgstr "ネットワークを利用可能にする"
|
||||
|
||||
#: ../js/ui/status/network.js:1521
|
||||
#: ../js/ui/status/network.js:1553
|
||||
msgid "Wired"
|
||||
msgstr "有線接続"
|
||||
|
||||
#: ../js/ui/status/network.js:1532
|
||||
#: ../js/ui/status/network.js:1564
|
||||
msgid "Wireless"
|
||||
msgstr "無線接続"
|
||||
|
||||
#: ../js/ui/status/network.js:1542
|
||||
#: ../js/ui/status/network.js:1574
|
||||
msgid "Mobile broadband"
|
||||
msgstr "モバイルブロードバンド"
|
||||
|
||||
#: ../js/ui/status/network.js:1552
|
||||
#: ../js/ui/status/network.js:1584
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN 接続"
|
||||
|
||||
#: ../js/ui/status/network.js:1564
|
||||
#: ../js/ui/status/network.js:1596
|
||||
msgid "Network Settings"
|
||||
msgstr "ネットワーク設定"
|
||||
msgstr "ネットワークの設定"
|
||||
|
||||
#: ../js/ui/status/network.js:1854
|
||||
#: ../js/ui/status/network.js:1890
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "モバイルブロードバンド '%s' に接続しました"
|
||||
|
||||
#: ../js/ui/status/network.js:1858
|
||||
#: ../js/ui/status/network.js:1894
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "無線ネットワーク '%s' に接続しました"
|
||||
|
||||
#: ../js/ui/status/network.js:1862
|
||||
#: ../js/ui/status/network.js:1898
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "有線ネットワーク '%s' に接続しました"
|
||||
|
||||
#: ../js/ui/status/network.js:1866
|
||||
#: ../js/ui/status/network.js:1902
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "VPN ネットワーク '%s' に接続しました"
|
||||
|
||||
#: ../js/ui/status/network.js:1871
|
||||
#: ../js/ui/status/network.js:1907
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "'%s' に接続しました"
|
||||
|
||||
#: ../js/ui/status/network.js:1879
|
||||
#: ../js/ui/status/network.js:1915
|
||||
msgid "Connection established"
|
||||
msgstr "接続を確立しました"
|
||||
|
||||
#: ../js/ui/status/network.js:2005
|
||||
#: ../js/ui/status/network.js:2041
|
||||
msgid "Networking is disabled"
|
||||
msgstr "ネットワークを利用できません"
|
||||
|
||||
#: ../js/ui/status/network.js:2130
|
||||
#: ../js/ui/status/network.js:2166
|
||||
msgid "Network Manager"
|
||||
msgstr "ネットワークマネージャ"
|
||||
|
||||
@ -1082,7 +1082,7 @@ msgstr "%s は離席中です。"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:484
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "%Aの%Xに送信"
|
||||
@ -1129,7 +1129,7 @@ msgstr[0] "入力数: %u"
|
||||
msgid "System Sounds"
|
||||
msgstr "システムのサウンド"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "バージョンを表示"
|
||||
|
||||
|
114
po/pl.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-28 20:21+0200\n"
|
||||
"PO-Revision-Date: 2011-03-28 20:22+0200\n"
|
||||
"POT-Creation-Date: 2011-04-22 16:23+0200\n"
|
||||
"PO-Revision-Date: 2011-04-22 16:27+0200\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <gnomepl@aviary.pl>\n"
|
||||
"Language: pl\n"
|
||||
@ -196,23 +196,23 @@ msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
|
||||
msgid "All"
|
||||
msgstr "Wszystkie"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:329
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "Programy"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:355
|
||||
msgid "SETTINGS"
|
||||
msgstr "Ustawienia"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:626
|
||||
msgid "New Window"
|
||||
msgstr "Nowe okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Usuń z ulubionych"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:630
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj do ulubionych"
|
||||
|
||||
@ -345,13 +345,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "Nic nie zaplanowano"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:492
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %e %B"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:495
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %e %B %Y"
|
||||
@ -372,7 +372,7 @@ msgstr "Ten tydzień"
|
||||
msgid "Next week"
|
||||
msgstr "Następny tydzień"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "Usuń"
|
||||
|
||||
@ -408,7 +408,7 @@ msgstr "%a, %R"
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:177
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %H:%M:%S %p"
|
||||
msgstr "%a %e %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:178
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
@ -499,7 +499,7 @@ msgstr "System zostanie automatycznie uruchomiony ponownie za %d sekund."
|
||||
msgid "Restarting the system."
|
||||
msgstr "Ponowne uruchamianie systemu."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
@ -534,11 +534,11 @@ msgstr "Wyświetl źródło"
|
||||
msgid "Web Page"
|
||||
msgstr "Strona WWW"
|
||||
|
||||
#: ../js/ui/messageTray.js:993
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "Otwórz"
|
||||
|
||||
#: ../js/ui/messageTray.js:2151
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "Informacje systemowe"
|
||||
|
||||
@ -561,18 +561,18 @@ msgid "Dash"
|
||||
msgstr "Ulubione"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:524
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Zakończ program %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:902
|
||||
msgid "Activities"
|
||||
msgstr "Podgląd"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1003
|
||||
msgid "Top Bar"
|
||||
msgstr "Górny pasek"
|
||||
|
||||
@ -630,11 +630,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Proszę wprowadzić polecenie:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:311
|
||||
msgid "Searching..."
|
||||
msgstr "Wyszukiwanie..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:325
|
||||
msgid "No matching results."
|
||||
msgstr "Brak wyników."
|
||||
|
||||
@ -838,139 +838,139 @@ msgstr "Wyświetl układ klawiatury..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "Ustawienia lokalizacji"
|
||||
|
||||
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:109 ../js/ui/status/network.js:1498
|
||||
msgid "<unknown>"
|
||||
msgstr "<nieznane>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:311
|
||||
#: ../js/ui/status/network.js:326
|
||||
msgid "disabled"
|
||||
msgstr "wyłączone"
|
||||
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:521
|
||||
msgid "connecting..."
|
||||
msgstr "łączenie..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "authentication required"
|
||||
msgstr "wymagane jest uwierzytelnienie"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:507
|
||||
#: ../js/ui/status/network.js:534
|
||||
msgid "firmware missing"
|
||||
msgstr "brak oprogramowania wbudowanego"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel jest niepodłączony"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:519
|
||||
#: ../js/ui/status/network.js:546
|
||||
msgid "unavailable"
|
||||
msgstr "niedostępne"
|
||||
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "connection failed"
|
||||
msgstr "połączenie się nie powiodło"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:602 ../js/ui/status/network.js:1402
|
||||
#: ../js/ui/status/network.js:628 ../js/ui/status/network.js:1446
|
||||
msgid "Connected (private)"
|
||||
msgstr "Połączono (prywatne)"
|
||||
|
||||
#: ../js/ui/status/network.js:683
|
||||
#: ../js/ui/status/network.js:713
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatyczne Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:758
|
||||
#: ../js/ui/status/network.js:788
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatyczne komórkowe"
|
||||
|
||||
#: ../js/ui/status/network.js:761
|
||||
#: ../js/ui/status/network.js:791
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatyczne wdzwaniane"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:904 ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:937 ../js/ui/status/network.js:1458
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatyczne %s"
|
||||
|
||||
#: ../js/ui/status/network.js:906
|
||||
#: ../js/ui/status/network.js:939
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatyczne Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1416
|
||||
#: ../js/ui/status/network.js:1460
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatyczne bezprzewodowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1474
|
||||
#: ../js/ui/status/network.js:1518
|
||||
msgid "More..."
|
||||
msgstr "Więcej..."
|
||||
|
||||
#: ../js/ui/status/network.js:1497
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Enable networking"
|
||||
msgstr "Włącz sieć"
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1553
|
||||
msgid "Wired"
|
||||
msgstr "Przewodowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1520
|
||||
#: ../js/ui/status/network.js:1564
|
||||
msgid "Wireless"
|
||||
msgstr "Bezprzewodowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1530
|
||||
#: ../js/ui/status/network.js:1574
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Komórkowe"
|
||||
|
||||
#: ../js/ui/status/network.js:1540
|
||||
#: ../js/ui/status/network.js:1584
|
||||
msgid "VPN Connections"
|
||||
msgstr "Połączenia VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1549
|
||||
#: ../js/ui/status/network.js:1596
|
||||
msgid "Network Settings"
|
||||
msgstr "Ustawienia sieci"
|
||||
|
||||
#: ../js/ui/status/network.js:1844
|
||||
#: ../js/ui/status/network.js:1890
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Połączono z siecią komórkową \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1848
|
||||
#: ../js/ui/status/network.js:1894
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Połączono z siecią bezprzewodową \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1852
|
||||
#: ../js/ui/status/network.js:1898
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Połączono z siecią przewodową \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1856
|
||||
#: ../js/ui/status/network.js:1902
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Połączono z siecią VPN \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1861
|
||||
#: ../js/ui/status/network.js:1907
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Połączono z siecią \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1869
|
||||
#: ../js/ui/status/network.js:1915
|
||||
msgid "Connection established"
|
||||
msgstr "Nawiązano połączenie"
|
||||
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#: ../js/ui/status/network.js:2041
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Sieć jest wyłączona"
|
||||
|
||||
#: ../js/ui/status/network.js:2116
|
||||
#: ../js/ui/status/network.js:2166
|
||||
msgid "Network Manager"
|
||||
msgstr "Menedżer sieci"
|
||||
|
||||
@ -1076,22 +1076,22 @@ msgstr "Głośność"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:331
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "Użytkownik %s jest online."
|
||||
msgstr "Użytkownik %s jest w trybie online."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:336
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "Użytkownik %s jest offline."
|
||||
msgstr "Użytkownik %s jest w trybie offline."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:339
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "Użytkownik %s jest nieobecny."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:342
|
||||
#: ../js/ui/telepathyClient.js:346
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "Użytkownik %s jest zajęty."
|
||||
@ -1099,7 +1099,7 @@ msgstr "Użytkownik %s jest zajęty."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:473
|
||||
#: ../js/ui/telepathyClient.js:484
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Wysłano o %H:%M w dniu %e %b"
|
||||
@ -1150,7 +1150,7 @@ msgstr[2] "%u wejść"
|
||||
msgid "System Sounds"
|
||||
msgstr "Dźwięki systemowe"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "Wyświetla wersję"
|
||||
|
||||
|
309
po/ug.po
@ -1,19 +1,20 @@
|
||||
# Uyghur translation for gnome-shell.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Gheyret Kenji<gheyret@yahoo.com>,2010.
|
||||
# Sahran <sahran.ug@gmail.com>, 2010.
|
||||
# Zeper <zeper@msn.com>, 2010.
|
||||
# Bakhtiyar<bakhtiyar108@gmail.com>, 2011
|
||||
# Oghlan Temkin <temkin119@gmail.com>,2011
|
||||
#
|
||||
# Uyghur translation for gnome-shell.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Gheyret Kenji<gheyret@yahoo.com>,2010.
|
||||
# Sahran <sahran.ug@gmail.com>, 2010.
|
||||
# Zeper <zeper@msn.com>, 2010.
|
||||
# Bakhtiyar<bakhtiyar108@gmail.com>, 2011
|
||||
# Oghlan Temkin <temkin119@gmail.com>,2011
|
||||
#
|
||||
msgid ""
|
||||
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: 2011-03-24 08:03+0000\n"
|
||||
"PO-Revision-Date: 2010-11-25 14:28+0600\n"
|
||||
"Last-Translator: Oghlan Temkin <temkin119@gmail.com>\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-05-02 05:27+0000\n"
|
||||
"PO-Revision-Date: 2011-04-27 11:38+0600\n"
|
||||
"Last-Translator: Sahran <sahran.ug@gmail.com>\n"
|
||||
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -32,34 +33,41 @@ msgstr "كۆزنەك باشقۇرۇش ۋە پروگرامما ئىجرا قىل
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr "ئىچكى سازلاش ۋە كۆزىتىش قورالىنى زىيارەت قىلىشتا Alt-F2 ئىشلىتىشكە ئىجازەت."
|
||||
msgstr ""
|
||||
"ئىچكى سازلاش ۋە كۆزىتىش قورالىنى زىيارەت قىلىشتا Alt-F2 ئىشلىتىشكە ئىجازەت."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr "ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق كىرىشىگە قۇلايلىق"
|
||||
msgstr ""
|
||||
"ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق "
|
||||
"كىرىشىگە قۇلايلىق"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن ئاتى"
|
||||
msgstr ""
|
||||
"ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن "
|
||||
"ئاتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
|
||||
msgstr ""
|
||||
"ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr "GNOME Shell كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
|
||||
msgstr ""
|
||||
"GNOME Shell كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان "
|
||||
"كېڭەيتىلمىلەر تىزىمىنى كۆرسىتىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "بۇيرۇق (Alt-F2) سۆزلەشكۈنىڭ تارىخى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#| msgid "History for command (Alt-F2) dialog"
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr ""
|
||||
msgstr "looking glass سۆزلەشكۈنىڭ تارىخى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
@ -75,7 +83,7 @@ msgstr "ئەگەر راست(true) بولسا يىلنامىدىكى ISO ھەپت
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەلئۈستى ھۆججەت ID تىزىملىكى"
|
||||
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەلئۈستى ھۆججەت ID تىزىمى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
@ -90,7 +98,18 @@ msgid ""
|
||||
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
|
||||
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
|
||||
"at the optimal thread count on the system."
|
||||
msgstr "ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى قىممىتى 'videorate ! vp8enc سۈپەت=10 سۈرەت=2 سىزىقلار=%T ! قاتار! webmmux' ۋە WEBM گە خاتىرىلەنگەنلەر VP8 كودىنى ئىشلىتىدۇ. T% بولسا سىستېمىنىڭ ئەڭ ياخشى سىزىق ئېلىپبەسىنى ھېسابلايدىغان ئورۇن بەلگىسى"
|
||||
msgstr ""
|
||||
"ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ "
|
||||
"gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad "
|
||||
"بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە "
|
||||
"ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار "
|
||||
"ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ "
|
||||
"قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا "
|
||||
"چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش "
|
||||
"قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى "
|
||||
"قىممىتى 'videorate ! vp8enc سۈپەت=10 سۈرەت=2 سىزىقلار=%T ! قاتار! webmmux' "
|
||||
"ۋە WEBM گە خاتىرىلەنگەنلەر VP8 كودىنى ئىشلىتىدۇ. T% بولسا سىستېمىنىڭ ئەڭ "
|
||||
"ياخشى سىزىق ئېلىپبەسىنى ھېسابلايدىغان ئورۇن بەلگىسى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -115,13 +134,18 @@ msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr "خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا خاتىرىلەيدۇ."
|
||||
msgstr ""
|
||||
"خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ "
|
||||
"بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا "
|
||||
"خاتىرىلەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
|
||||
msgstr ""
|
||||
"GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى "
|
||||
"كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
@ -133,7 +157,11 @@ msgid ""
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr "چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
||||
msgstr ""
|
||||
"چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار"
|
||||
"(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي "
|
||||
"ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق "
|
||||
"قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "Uuids of extensions to disable"
|
||||
@ -163,27 +191,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "«%s» ئىجرا قىلىش مەغلۇپ بولدى:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "ھەممىسى"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "پروگراممىلار"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr ""
|
||||
msgstr "تەڭشەكلەر"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:656
|
||||
msgid "New Window"
|
||||
msgstr "يېڭى كۆزنەك"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:659
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "يىغقۇچتىن چىقىرىۋەت"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:660
|
||||
msgid "Add to Favorites"
|
||||
msgstr "يىغقۇچقا قوش"
|
||||
|
||||
@ -316,13 +344,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "ھېچنېمە پىلانلانمىدى"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:492
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A، %B %d"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:495
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A، %B %d، %Y"
|
||||
@ -343,7 +371,7 @@ msgstr "بۇ ھەپتە"
|
||||
msgid "Next week"
|
||||
msgstr "كېيىنكى ھەپتە"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "چىقىرىۋەت"
|
||||
|
||||
@ -393,7 +421,7 @@ msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:183
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%p%l:%M (%a)"
|
||||
msgstr "%a %l:%M"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
@ -417,7 +445,9 @@ msgstr "تىزىمدىن چىق"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:65
|
||||
msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgstr "تىزىمدىن چىقىش (Log Out) نى بېسىپ پروگراممىدىن چېكىنىش ۋە سىستېما تىزىمىدىن چىقىش."
|
||||
msgstr ""
|
||||
"تىزىمدىن چىقىش (Log Out) نى بېسىپ پروگراممىدىن چېكىنىش ۋە سىستېما تىزىمىدىن "
|
||||
"چىقىش."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:66
|
||||
#, c-format
|
||||
@ -435,23 +465,21 @@ msgstr "سىستېما تىزىمدىن چىقىۋاتىدۇ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr ""
|
||||
msgstr "توكنى ئۈز"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#| msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
"تۈكنى ئۈز چېكىلسە قوللىنىشچان پروگراممىلاردىن چېكىنىپ سىستېمىنى تاقايدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
#, c-format
|
||||
#| msgid "The system will restart automatically in %d seconds."
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr ""
|
||||
msgstr "بۇ سىستېما %d سېكۇنتتىن كېيىن ئۆزلۈكىدىن تاقىلىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
#| msgid "Logging out of the system."
|
||||
msgid "Powering off the system."
|
||||
msgstr ""
|
||||
msgstr "سىستېمىنى تاقاۋاتىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
@ -460,7 +488,9 @@ msgstr "قايتا قوزغات"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "قايتا قوزغىتىش (restart) نى بېسىپ پروگراممىدىن چېكىنىش ۋە سىستېمىنى قايتا قوزغىتىش."
|
||||
msgstr ""
|
||||
"قايتا قوزغات (restart) چېكىلسە پروگراممىدىن چېكىنىپ ۋە سىستېمىنى قايتا "
|
||||
"قوزغىتىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
@ -471,7 +501,7 @@ msgstr "بۇ سىستېما %d سېكۇنتتىن كېيىن ئۆزلۈكىدى
|
||||
msgid "Restarting the system."
|
||||
msgstr "سىستېما قايتا قوزغىلىۋاتىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "ۋاز كەچ"
|
||||
@ -506,11 +536,11 @@ msgstr "مەنبەنى كۆرسەت"
|
||||
msgid "Web Page"
|
||||
msgstr "توربەت"
|
||||
|
||||
#: ../js/ui/messageTray.js:987
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "ئاچ"
|
||||
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "سىستېما ئۇچۇرى"
|
||||
|
||||
@ -530,23 +560,23 @@ msgstr "پروگراممىلار"
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr ""
|
||||
msgstr "سىزىقچە"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s چېكىن"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:911
|
||||
msgid "Activities"
|
||||
msgstr "پائالىيەتلەر"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1012
|
||||
msgid "Top Bar"
|
||||
msgstr ""
|
||||
msgstr "ئۈستى بالداق"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -575,13 +605,17 @@ msgstr "باشقۇرغۇچى"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr ""
|
||||
msgstr "سالاھىيەت دەلىللەش"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
#. Translators: "that didn't work" refers to the fact that the
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:264
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr ""
|
||||
msgstr "كەچۈرۈڭ، خىزمەت قىلالمايدۇ. قايتا سىناڭ."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:276
|
||||
msgid "Password:"
|
||||
msgstr "ئىم:"
|
||||
|
||||
@ -598,17 +632,18 @@ msgstr "toggle-switch-us"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "بۇيرۇق كىرگۈزۈڭ:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:311
|
||||
msgid "Searching..."
|
||||
msgstr "ئىزدەۋاتىدۇ..."
|
||||
msgstr "ئىزدەۋاتىدۇ…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:325
|
||||
msgid "No matching results."
|
||||
msgstr "ماس كېلىدىغان نەتىجە يوق."
|
||||
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr ""
|
||||
msgstr "توكنى ئۈز…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
@ -658,7 +693,7 @@ msgstr "كۆرۈنمە ئاگاھلاندۇرۇش"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:80
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Sticky Keys"
|
||||
msgstr "چاپلاش كۇنۇپكىسى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:83
|
||||
msgid "Slow Keys"
|
||||
@ -666,11 +701,11 @@ msgstr "Slow Keys"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:86
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Bounce Keys"
|
||||
msgstr "قاڭقىش كۇنۇپكىسى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:89
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Mouse Keys"
|
||||
msgstr "چاشقىنەك كۇنۇپكا"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:93
|
||||
msgid "Universal Access Settings"
|
||||
@ -774,7 +809,8 @@ msgstr "ئۈسكۈنە'%s' كومپيۇتېر بىلەن جۈپلەنمەكچى"
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "سىز كىرگۈزگەن PIN '%s' نومۇرى ئۈسكىنىدىكىگە ئوخشايدىغانلىقىنى جەزملەڭ."
|
||||
msgstr ""
|
||||
"سىز كىرگۈزگەن PIN '%s' نومۇرى ئۈسكىنىدىكىگە ئوخشايدىغانلىقىنى جەزملەڭ."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
@ -799,149 +835,145 @@ msgstr "جەزملە"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout..."
|
||||
msgstr ""
|
||||
msgstr "كۇنۇپكا تاختا ئورۇنلاشتۇرۇلۇشىنى كۆرسەت…"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:76
|
||||
msgid "Localization Settings"
|
||||
msgstr "يەرلىكلەشتۈرۈش تەڭشىكى"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
#| msgid "Unknown"
|
||||
#: ../js/ui/status/network.js:109 ../js/ui/status/network.js:1501
|
||||
msgid "<unknown>"
|
||||
msgstr ""
|
||||
msgstr "<يوچۇن>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
#| msgid "Disabled"
|
||||
#: ../js/ui/status/network.js:326
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
msgstr "چەكلەنگەن"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "connecting..."
|
||||
msgstr ""
|
||||
msgstr "باغلىنىۋاتىدۇ…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
#: ../js/ui/status/network.js:527
|
||||
msgid "authentication required"
|
||||
msgstr ""
|
||||
msgstr "سالاھىيەت دەلىللەش زۆرۈر"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:537
|
||||
msgid "firmware missing"
|
||||
msgstr "مۇقىم دېتال كەم"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
#: ../js/ui/status/network.js:544
|
||||
msgid "cable unplugged"
|
||||
msgstr ""
|
||||
msgstr "كابېل چېتىلمىدى"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
#| msgid "Available"
|
||||
#: ../js/ui/status/network.js:549
|
||||
msgid "unavailable"
|
||||
msgstr ""
|
||||
msgstr "ئىشلەتكىلى بولمايدۇ"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:551
|
||||
msgid "connection failed"
|
||||
msgstr ""
|
||||
msgstr "باغلىنىش مەغلۇپ بولدى"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
#: ../js/ui/status/network.js:631 ../js/ui/status/network.js:1449
|
||||
msgid "Connected (private)"
|
||||
msgstr ""
|
||||
msgstr "باغلاندى (شەخسىي)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
#: ../js/ui/status/network.js:716
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "ئاپتوماتىك Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
#: ../js/ui/status/network.js:791
|
||||
msgid "Auto broadband"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك كۆچمە كەڭ بەلۋاغ"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
#: ../js/ui/status/network.js:794
|
||||
msgid "Auto dial-up"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك نومۇر بۇرا"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#: ../js/ui/status/network.js:940 ../js/ui/status/network.js:1461
|
||||
#, c-format
|
||||
#| msgid "Quit %s"
|
||||
msgid "Auto %s"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك %s"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
#| msgid "Bluetooth"
|
||||
#: ../js/ui/status/network.js:942
|
||||
msgid "Auto bluetooth"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك كۆكچىش"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
#: ../js/ui/status/network.js:1463
|
||||
msgid "Auto wireless"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك سىمسىز تور"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
#: ../js/ui/status/network.js:1521
|
||||
msgid "More..."
|
||||
msgstr "تېخىمۇ كۆپ..."
|
||||
msgstr "تېخىمۇ كۆپ…"
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
#: ../js/ui/status/network.js:1544
|
||||
msgid "Enable networking"
|
||||
msgstr ""
|
||||
msgstr "تور ئۇلاشنى قوزغات"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
#: ../js/ui/status/network.js:1556
|
||||
msgid "Wired"
|
||||
msgstr "سىملىق"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
#: ../js/ui/status/network.js:1567
|
||||
msgid "Wireless"
|
||||
msgstr "سىمسىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1577
|
||||
msgid "Mobile broadband"
|
||||
msgstr "كۆچمە كەڭ بەلۋاغ"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:1587
|
||||
msgid "VPN Connections"
|
||||
msgstr ""
|
||||
msgstr "VPN باغلىنىشلىرى"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
#| msgid "Power Settings"
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Network Settings"
|
||||
msgstr "تور تەڭشەكلىرى"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#: ../js/ui/status/network.js:1893
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر كۆچمە كەڭ بەلۋاغ '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#: ../js/ui/status/network.js:1897
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر سىمسىز تور '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#: ../js/ui/status/network.js:1901
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر سىملىق تور '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#: ../js/ui/status/network.js:1905
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر VPN تور '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#: ../js/ui/status/network.js:1910
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:1918
|
||||
msgid "Connection established"
|
||||
msgstr ""
|
||||
msgstr "باغلىنىش تۇرغۇزۇلدى"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
#: ../js/ui/status/network.js:2044
|
||||
msgid "Networking is disabled"
|
||||
msgstr ""
|
||||
msgstr "تورغا باغلىنىش چەكلەنگەن"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
#: ../js/ui/status/network.js:2169
|
||||
msgid "Network Manager"
|
||||
msgstr "تور باشقۇرغۇچ"
|
||||
|
||||
@ -953,7 +985,7 @@ msgstr "توك مەنبە تەڭشىكى"
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr ""
|
||||
msgstr "مۆلچەرلەۋاتىدۇ…"
|
||||
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
@ -1039,22 +1071,22 @@ msgstr "دىسكا"
|
||||
msgid "Microphone"
|
||||
msgstr "مىكروفون"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s توردا."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s توردا يوق."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s يوق."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#: ../js/ui/telepathyClient.js:346
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s ئالدىراش."
|
||||
@ -1062,7 +1094,7 @@ msgstr "%s ئالدىراش."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#: ../js/ui/telepathyClient.js:484
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "سائەت %X %A غا ئەۋەتتى"
|
||||
@ -1073,7 +1105,7 @@ msgstr "سائەت %X %A غا ئەۋەتتى"
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr ""
|
||||
msgstr "كىرگۈزسە ئىزدە…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
@ -1109,15 +1141,14 @@ msgstr[0] "%u كىرگۈزۈلمە"
|
||||
msgid "System Sounds"
|
||||
msgstr "سىستېما ئاۋازى"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "نەشرىنى باس"
|
||||
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
#| msgid "Failed to unmount '%s'"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr ""
|
||||
msgstr "'%s' نى قوزغىتالمىدى"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
@ -1157,7 +1188,7 @@ msgstr "كۆڭۈلدىكى"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr ""
|
||||
msgstr "سالاھىيەت دەلىللەش سۆزلەشكۈنى ئىشلەتكۈچى رەت قىلدى"
|
||||
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
|
234
po/uk.po
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-27 18:25+0300\n"
|
||||
"PO-Revision-Date: 2011-03-27 18:27+0300\n"
|
||||
"POT-Creation-Date: 2011-05-02 02:44+0300\n"
|
||||
"PO-Revision-Date: 2011-05-02 02:46+0300\n"
|
||||
"Last-Translator: Korostil Daniel <ted.korostiled@gmail.com>\n"
|
||||
"Language-Team: translation@linux.org.ua\n"
|
||||
"Language: uk\n"
|
||||
@ -98,7 +98,7 @@ msgstr ""
|
||||
"Вказує канал даних GStreamer для кодування запису. Звідси відповідний "
|
||||
"синтаксис для gst-launch. Канал даних повинен мати нез'єднаний приймальний "
|
||||
"буфер, де відео записано. Зазвичай воно має нез'єднане джерело буфера; вивід "
|
||||
"з цього буфера буде записано в вихідний файл. Однак канал даних також "
|
||||
"з цього буфера буде записано в вихідний файл. Однак канал даних також "
|
||||
"відповідати за власний вивід — це може бути використано для відправлення "
|
||||
"виводу до сервера через протокол shout2send чи будь-який інший. Коли не "
|
||||
"вказано або вказано порожнє значення, буде використано типовий канал даних. "
|
||||
@ -189,27 +189,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "Не вдалось виконати «%s»:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "Всі"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "ПРОГРАМИ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr "ПАРАМЕТРИ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
msgid "New Window"
|
||||
msgstr "Нове вікно"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:661
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Вилучити з улюбленого"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:662
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Додати до улюбленого"
|
||||
|
||||
@ -342,13 +342,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "Нічого не заплановано"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:487
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %B %d"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:490
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %B %d, %Y"
|
||||
@ -369,7 +369,7 @@ msgstr "Цей тиждень"
|
||||
msgid "Next week"
|
||||
msgstr "Наступний тиждень"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "Вилучити"
|
||||
|
||||
@ -495,8 +495,8 @@ msgstr "Система автоматично перезапуститься ч
|
||||
msgid "Restarting the system."
|
||||
msgstr "Перезапуск системи."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:491
|
||||
msgid "Cancel"
|
||||
msgstr "Скасувати"
|
||||
|
||||
@ -530,11 +530,11 @@ msgstr "Переглянути джерело"
|
||||
msgid "Web Page"
|
||||
msgstr "Веб-сторінка"
|
||||
|
||||
#: ../js/ui/messageTray.js:993
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "Відкрити"
|
||||
|
||||
#: ../js/ui/messageTray.js:2151
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "Інформація про систему"
|
||||
|
||||
@ -557,18 +557,18 @@ msgid "Dash"
|
||||
msgstr "Риска"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Вийти з %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:913
|
||||
msgid "Activities"
|
||||
msgstr "Діяльність"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1015
|
||||
msgid "Top Bar"
|
||||
msgstr "Верхня панель"
|
||||
|
||||
@ -626,11 +626,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Будь ласка, введіть команду:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:313
|
||||
msgid "Searching..."
|
||||
msgstr "Пошук…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:327
|
||||
msgid "No matching results."
|
||||
msgstr "Нема збігів."
|
||||
|
||||
@ -713,9 +713,9 @@ msgstr "Висока контрастність"
|
||||
msgid "Large Text"
|
||||
msgstr "Більший текст"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
|
||||
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -728,101 +728,101 @@ msgid "Send Files to Device..."
|
||||
msgstr "Відправити файли до пристрою…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "Встановити новий пристрій…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:95
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Параметри Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Connection"
|
||||
msgstr "З'єднання"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Send Files..."
|
||||
msgstr "Відправити файли…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Browse Files..."
|
||||
msgstr "Огляд файлів…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Error browsing device"
|
||||
msgstr "Помилка перегляду пристрою…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#: ../js/ui/status/bluetooth.js:266
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Потрібний пристрій неможливо переглянути, помилка — «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
#: ../js/ui/status/bluetooth.js:274
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Параметри клавіатури"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
#: ../js/ui/status/bluetooth.js:279
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Параметри миші"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Параметри звуку"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#: ../js/ui/status/bluetooth.js:393
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Запит про авторизацію від %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#: ../js/ui/status/bluetooth.js:399
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Пристрій %s потребує доступ до служби «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
msgid "Always grant access"
|
||||
msgstr "Завжди надавати доступ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
msgid "Grant this time only"
|
||||
msgstr "Надати лише цього разу"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:403
|
||||
msgid "Reject"
|
||||
msgstr "Відмовити"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:433
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Сполучення підтвердження для %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Пристрій %s потребує прив'язання до цього комп'ютера"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Будь ласка, підвердьте, чи «%s» збігається з PIN на пристрої."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Matches"
|
||||
msgstr "Збігається"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Does not match"
|
||||
msgstr "Не збігається"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Запит на сполучення для %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
#: ../js/ui/status/bluetooth.js:474
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Будь ласка, введіть PIN, згаданий на пристрої."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
#: ../js/ui/status/bluetooth.js:490
|
||||
msgid "OK"
|
||||
msgstr "Гаразд"
|
||||
|
||||
@ -834,139 +834,139 @@ msgstr "Показувати розкладку клавіатури…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Параметри локалізації"
|
||||
|
||||
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:113
|
||||
msgid "<unknown>"
|
||||
msgstr "<невідомо>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:311
|
||||
#: ../js/ui/status/network.js:330
|
||||
msgid "disabled"
|
||||
msgstr "вимкнено"
|
||||
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:528
|
||||
msgid "connecting..."
|
||||
msgstr "з'єднання…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/network.js:531
|
||||
msgid "authentication required"
|
||||
msgstr "Потрібна аутентифікація"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:507
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "firmware missing"
|
||||
msgstr "Бракує мікропрограми"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "cable unplugged"
|
||||
msgstr "кабель від'єднано"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:519
|
||||
#: ../js/ui/status/network.js:553
|
||||
msgid "unavailable"
|
||||
msgstr "недоступний"
|
||||
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:555
|
||||
msgid "connection failed"
|
||||
msgstr "не вдалось з'єднатись"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:602 ../js/ui/status/network.js:1402
|
||||
#: ../js/ui/status/network.js:635 ../js/ui/status/network.js:1532
|
||||
msgid "Connected (private)"
|
||||
msgstr "З'єднано (приватно)"
|
||||
|
||||
#: ../js/ui/status/network.js:683
|
||||
#: ../js/ui/status/network.js:720
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Автоматично Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:758
|
||||
#: ../js/ui/status/network.js:795
|
||||
msgid "Auto broadband"
|
||||
msgstr "Автоматично радіомережа"
|
||||
|
||||
#: ../js/ui/status/network.js:761
|
||||
#: ../js/ui/status/network.js:798
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Автоматично додзвін"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:904 ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:944 ../js/ui/status/network.js:1544
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Автоматично %s"
|
||||
|
||||
#: ../js/ui/status/network.js:906
|
||||
#: ../js/ui/status/network.js:946
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Автоматично Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1416
|
||||
#: ../js/ui/status/network.js:1546
|
||||
msgid "Auto wireless"
|
||||
msgstr "Автоматично бездротова мережа"
|
||||
|
||||
#: ../js/ui/status/network.js:1474
|
||||
#: ../js/ui/status/network.js:1583
|
||||
msgid "More..."
|
||||
msgstr "Більше…"
|
||||
|
||||
#: ../js/ui/status/network.js:1497
|
||||
#: ../js/ui/status/network.js:1625
|
||||
msgid "Enable networking"
|
||||
msgstr "Увімкнути мережу"
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1637
|
||||
msgid "Wired"
|
||||
msgstr "Дротова"
|
||||
|
||||
#: ../js/ui/status/network.js:1520
|
||||
#: ../js/ui/status/network.js:1648
|
||||
msgid "Wireless"
|
||||
msgstr "Бездротова"
|
||||
|
||||
#: ../js/ui/status/network.js:1530
|
||||
#: ../js/ui/status/network.js:1658
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Мобільна радіомережа"
|
||||
|
||||
#: ../js/ui/status/network.js:1540
|
||||
#: ../js/ui/status/network.js:1668
|
||||
msgid "VPN Connections"
|
||||
msgstr "З'єднання VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1549
|
||||
#: ../js/ui/status/network.js:1680
|
||||
msgid "Network Settings"
|
||||
msgstr "Налаштування мережі"
|
||||
|
||||
#: ../js/ui/status/network.js:1844
|
||||
#: ../js/ui/status/network.js:1974
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Зараз ви з'єднані через мобільну радіомережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1848
|
||||
#: ../js/ui/status/network.js:1978
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Зараз ви з'єднані через бездротову мережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1852
|
||||
#: ../js/ui/status/network.js:1982
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Зараз ви з'єднані через дротову мережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1856
|
||||
#: ../js/ui/status/network.js:1986
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Зараз ви з'єднані через мережу VPN «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1861
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Зараз ви з'єднані через «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1869
|
||||
#: ../js/ui/status/network.js:1999
|
||||
msgid "Connection established"
|
||||
msgstr "З'єднання встановлено"
|
||||
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#: ../js/ui/status/network.js:2125
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Мережу вимкнено"
|
||||
|
||||
#: ../js/ui/status/network.js:2116
|
||||
#: ../js/ui/status/network.js:2250
|
||||
msgid "Network Manager"
|
||||
msgstr "Керування мережею"
|
||||
|
||||
@ -1072,22 +1072,22 @@ msgstr "Гучність"
|
||||
msgid "Microphone"
|
||||
msgstr "Мікрофон"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:331
|
||||
#: ../js/ui/telepathyClient.js:330
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s в мережі."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:336
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s поза мережею."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:339
|
||||
#: ../js/ui/telepathyClient.js:338
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s відійшов."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:342
|
||||
#: ../js/ui/telepathyClient.js:341
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s зайнятий."
|
||||
@ -1095,11 +1095,18 @@ msgstr "%s зайнятий."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:473
|
||||
#: ../js/ui/telepathyClient.js:479
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Відправити на %X в %A"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:524
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s тепер відомий як %s"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1146,7 +1153,7 @@ msgstr[2] "%u входів"
|
||||
msgid "System Sounds"
|
||||
msgstr "Системні звуки"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "Показати версію"
|
||||
|
||||
@ -1155,42 +1162,6 @@ msgstr "Показати версію"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Не вдалось запустити «%s»"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Менше хвилини тому"
|
||||
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d хвилина тому"
|
||||
msgstr[1] "%d хвилини тому"
|
||||
msgstr[2] "%d хвилин тому"
|
||||
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d година тому"
|
||||
msgstr[1] "%d години тому"
|
||||
msgstr[2] "%d годин тому"
|
||||
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d день тому"
|
||||
msgstr[1] "%d дні тому"
|
||||
msgstr[2] "%d днів тому"
|
||||
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d тиждень тому"
|
||||
msgstr[1] "%d тижні тому"
|
||||
msgstr[2] "%d тижнів тому"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Великобританія"
|
||||
@ -1223,6 +1194,33 @@ msgstr "Файлова система"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Less than a minute ago"
|
||||
#~ msgstr "Менше хвилини тому"
|
||||
|
||||
#~ msgid "%d minute ago"
|
||||
#~ msgid_plural "%d minutes ago"
|
||||
#~ msgstr[0] "%d хвилина тому"
|
||||
#~ msgstr[1] "%d хвилини тому"
|
||||
#~ msgstr[2] "%d хвилин тому"
|
||||
|
||||
#~ msgid "%d hour ago"
|
||||
#~ msgid_plural "%d hours ago"
|
||||
#~ msgstr[0] "%d година тому"
|
||||
#~ msgstr[1] "%d години тому"
|
||||
#~ msgstr[2] "%d годин тому"
|
||||
|
||||
#~ msgid "%d day ago"
|
||||
#~ msgid_plural "%d days ago"
|
||||
#~ msgstr[0] "%d день тому"
|
||||
#~ msgstr[1] "%d дні тому"
|
||||
#~ msgstr[2] "%d днів тому"
|
||||
|
||||
#~ msgid "%d week ago"
|
||||
#~ msgid_plural "%d weeks ago"
|
||||
#~ msgstr[0] "%d тиждень тому"
|
||||
#~ msgstr[1] "%d тижні тому"
|
||||
#~ msgstr[2] "%d тижнів тому"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Вимкнути"
|
||||
|
||||
|
14
po/vi.po
@ -9,7 +9,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-25 20:20+0000\n"
|
||||
"PO-Revision-Date: 2011-03-26 13:58+0700\n"
|
||||
"PO-Revision-Date: 2011-05-22 21:50+0700\n"
|
||||
"Last-Translator: Duy <pclouds@gmail.com>\n"
|
||||
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -551,7 +551,7 @@ msgstr "Ứng dụng"
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr "Khung ứng dụng"
|
||||
msgstr "Neo ứng dụng"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
@ -937,27 +937,27 @@ msgstr "Thiết lập mạng"
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng băng thông rộng '%s'"
|
||||
msgstr "Đã nối mạng '%s' (băng thông rộng)"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng không dây '%s'"
|
||||
msgstr "Đã nối mạng '%s' (không dây)"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng (dây) '%s'"
|
||||
msgstr "Đã nối mạng '%s' (dây)"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Bạn đã kết nối vào mạng VPN '%s'"
|
||||
msgstr "Đã nối mạng VPN '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Bạn đã kết nối vào '%s'"
|
||||
msgstr "Đã kết nối '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
#| msgid "Connection"
|
||||
|
553
po/zh_CN.po
201
po/zh_HK.po
@ -6,10 +6,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 2.91.93\n"
|
||||
"Project-Id-Version: gnome-shell 3.0.0.2\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-04-04 22:08+0800\n"
|
||||
"PO-Revision-Date: 2011-04-04 22:08+0800\n"
|
||||
"POT-Creation-Date: 2011-04-24 05:52+0800\n"
|
||||
"PO-Revision-Date: 2011-04-24 05:54+0800\n"
|
||||
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
||||
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
|
||||
"Language: \n"
|
||||
@ -27,9 +27,7 @@ msgid "Window management and application launching"
|
||||
msgstr "視窗管理與應用程式的執行"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
|
||||
msgstr "允許使用 Alt-F2 對話盒存取內部除錯和監控工具。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
@ -45,9 +43,7 @@ msgid "Framerate used for recording screencasts."
|
||||
msgstr "錄製畫面廣播的框架率。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgid "GNOME Shell extensions have a uuid property; this key lists extensions which should not be loaded."
|
||||
msgstr "GNOME Shell 擴充功能有 uuid 屬性;這個設定鍵列出了不應載入的擴充功能。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
@ -76,17 +72,7 @@ msgstr "喜好的應用程式桌面檔案 ID 清單"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||
"the recorded video is recorded. It will normally have a unconnected source "
|
||||
"pad; output from that pad will be written into the output file. However the "
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
|
||||
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
|
||||
"at the optimal thread count on the system."
|
||||
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
|
||||
msgstr "設定用來錄製的 GStreamer 管線。它根據據 gst-launch 使用的語法。管線應該要有未連接的出口(sink pad),提供錄製視像之用。它通常會有未連接的入口(source pad);從出口輸出的資訊就寫入輸出檔案。然而管線本身也會處理它本身的輸出 - 習慣上是透過 shout2send 之類將輸出傳送到 icecast 伺服器。當取消設定或設定為空值時,就會使用預設的管線。這個值目前為 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' 即使用 VP8 codec 錄製 WEBM。%T 是在系統的最佳化執行緒計數猜測時使用的佔位符。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
@ -102,22 +88,15 @@ msgid "Show time with seconds"
|
||||
msgstr "在時刻中顯示秒數"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
|
||||
msgstr "對應這些辨別碼的應用程式會顯示在喜好區域。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
||||
msgstr "錄製好的畫面廣播檔案名稱會以目前的時刻作為獨特的檔名,並使用這個延伸檔名。當錄製為不同的容器格式時應該做適當更改。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
||||
msgstr "由 GNOME Shell 的畫面廣播錄製程式所錄製成果的框架率,以 frames-per-second 計。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
@ -125,11 +104,7 @@ msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "用來編碼畫面廣播的 gstreamer 管線"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgid "The shell normally monitors active applications in order to present the most used ones (e.g. in launchers). While this data will be kept private, you may want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
|
||||
msgstr "這個 shell 通常會監控使用中的應用程式以便能顯示出最常使用的(例如,在程式執行器中)。雖然這個資料會保持隱密,但是你可能會基於私隱的理由想要停用這個功能。請注意這麼做並不會移除已儲存的資料。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
@ -164,23 +139,23 @@ msgstr "執行「%s」失敗:"
|
||||
msgid "All"
|
||||
msgstr "全部"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:329
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "程式集"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:355
|
||||
msgid "SETTINGS"
|
||||
msgstr "設定值"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:626
|
||||
msgid "New Window"
|
||||
msgstr "新視窗"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "自喜好中移除"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:630
|
||||
msgid "Add to Favorites"
|
||||
msgstr "加入喜好"
|
||||
|
||||
@ -313,13 +288,15 @@ msgid "Nothing Scheduled"
|
||||
msgstr "沒有預訂行程"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/telepathyClient.js:492
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%m月%d日%A"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:493
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/telepathyClient.js:495
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%Y年%m月%d日%A"
|
||||
@ -340,7 +317,8 @@ msgstr "本週"
|
||||
msgid "Next week"
|
||||
msgstr "下週"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
|
||||
#: ../js/ui/dash.js:174
|
||||
#: ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "移除"
|
||||
|
||||
@ -356,41 +334,41 @@ msgstr "開啟行事曆"
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:164
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%m月%e日%a, %R:%S"
|
||||
msgstr "%m月%e日(%a), %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:165
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%m月%e日%a, %R"
|
||||
msgstr "%m月%e日(%a), %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:169
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
msgstr "(%a)%R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:170
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
msgstr "(%a)%R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:177
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%m月%e日%a, %p %l:%M:%S"
|
||||
msgstr "%m月%e日(%a), %p %l:%M:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:178
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%m月%e日%a, %p %l:%M"
|
||||
msgstr "%m月%e日(%a), %p %l:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %p %l:%M:%S"
|
||||
msgstr "(%a)%p %l:%M:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:183
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %p %l:%M"
|
||||
msgstr "(%a)%p %l:%M"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
@ -408,7 +386,8 @@ msgstr "最近使用項目"
|
||||
msgid "Log Out %s"
|
||||
msgstr "登出 %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
#: ../js/ui/endSessionDialog.js:64
|
||||
#: ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "登出"
|
||||
|
||||
@ -430,7 +409,8 @@ msgstr "你會在 %d 秒後自動登出。"
|
||||
msgid "Logging out of the system."
|
||||
msgstr "登出系統。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "關閉電源"
|
||||
|
||||
@ -447,7 +427,8 @@ msgstr "本系統會在 %d 秒後電源。"
|
||||
msgid "Powering off the system."
|
||||
msgstr "關閉系統的電源。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "重新啟動"
|
||||
@ -465,7 +446,8 @@ msgstr "系統會在 %d 秒內自動重新啟動。"
|
||||
msgid "Restarting the system."
|
||||
msgstr "重新啟動系統。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:417 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/endSessionDialog.js:413
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
@ -480,7 +462,8 @@ msgstr "已啟用"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
#: ../js/ui/lookingGlass.js:627
|
||||
#: ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "已停用"
|
||||
|
||||
@ -500,11 +483,11 @@ msgstr "檢示來源"
|
||||
msgid "Web Page"
|
||||
msgstr "網頁"
|
||||
|
||||
#: ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "開啟"
|
||||
|
||||
#: ../js/ui/messageTray.js:2164
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "系統資訊"
|
||||
|
||||
@ -604,18 +587,20 @@ msgstr "搜尋中…"
|
||||
msgid "No matching results."
|
||||
msgstr "沒有相符的結果。"
|
||||
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:161
|
||||
#: ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "關閉電源…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
#: ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "暫停"
|
||||
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "可用"
|
||||
msgstr "有空"
|
||||
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
@ -683,9 +668,12 @@ msgstr "高反差"
|
||||
msgid "Large Text"
|
||||
msgstr "大型文字"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:42
|
||||
#: ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333
|
||||
#: ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "藍牙"
|
||||
|
||||
@ -734,7 +722,8 @@ msgstr "鍵盤設定值"
|
||||
msgid "Mouse Settings"
|
||||
msgstr "滑鼠設定值"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "音效設定值"
|
||||
|
||||
@ -765,7 +754,8 @@ msgstr "拒絕"
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "%s 的配對確認"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
#: ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "裝置 %s 想要和這個電腦配對"
|
||||
@ -804,139 +794,142 @@ msgstr "顯示鍵盤配置…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "本地化設定值"
|
||||
|
||||
#: ../js/ui/status/network.js:105 ../js/ui/status/network.js:1466
|
||||
#: ../js/ui/status/network.js:109
|
||||
#: ../js/ui/status/network.js:1498
|
||||
msgid "<unknown>"
|
||||
msgstr "<不明>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:318
|
||||
#: ../js/ui/status/network.js:326
|
||||
msgid "disabled"
|
||||
msgstr "已停用"
|
||||
|
||||
#: ../js/ui/status/network.js:501
|
||||
#: ../js/ui/status/network.js:521
|
||||
msgid "connecting..."
|
||||
msgstr "連線中…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:504
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "authentication required"
|
||||
msgstr "要求驗證"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:534
|
||||
msgid "firmware missing"
|
||||
msgstr "缺少韌體"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "cable unplugged"
|
||||
msgstr "纜線已拔除"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:526
|
||||
#: ../js/ui/status/network.js:546
|
||||
msgid "unavailable"
|
||||
msgstr "無法使用"
|
||||
|
||||
#: ../js/ui/status/network.js:528
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "connection failed"
|
||||
msgstr "連線失敗"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:608 ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:628
|
||||
#: ../js/ui/status/network.js:1446
|
||||
msgid "Connected (private)"
|
||||
msgstr "已連線 (私人)"
|
||||
|
||||
#: ../js/ui/status/network.js:689
|
||||
#: ../js/ui/status/network.js:713
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "自動使用乙太網絡"
|
||||
|
||||
#: ../js/ui/status/network.js:764
|
||||
#: ../js/ui/status/network.js:788
|
||||
msgid "Auto broadband"
|
||||
msgstr "自動使用行動寬頻"
|
||||
|
||||
#: ../js/ui/status/network.js:767
|
||||
#: ../js/ui/status/network.js:791
|
||||
msgid "Auto dial-up"
|
||||
msgstr "自動使用撥號"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:910 ../js/ui/status/network.js:1426
|
||||
#: ../js/ui/status/network.js:937
|
||||
#: ../js/ui/status/network.js:1458
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "自動使用 %s"
|
||||
|
||||
#: ../js/ui/status/network.js:912
|
||||
#: ../js/ui/status/network.js:939
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "自動使用藍牙"
|
||||
|
||||
#: ../js/ui/status/network.js:1428
|
||||
#: ../js/ui/status/network.js:1460
|
||||
msgid "Auto wireless"
|
||||
msgstr "自動使用無線網絡"
|
||||
|
||||
#: ../js/ui/status/network.js:1486
|
||||
#: ../js/ui/status/network.js:1518
|
||||
msgid "More..."
|
||||
msgstr "更多…"
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Enable networking"
|
||||
msgstr "啟用網絡"
|
||||
|
||||
#: ../js/ui/status/network.js:1521
|
||||
#: ../js/ui/status/network.js:1553
|
||||
msgid "Wired"
|
||||
msgstr "有線"
|
||||
|
||||
#: ../js/ui/status/network.js:1532
|
||||
#: ../js/ui/status/network.js:1564
|
||||
msgid "Wireless"
|
||||
msgstr "無線"
|
||||
|
||||
#: ../js/ui/status/network.js:1542
|
||||
#: ../js/ui/status/network.js:1574
|
||||
msgid "Mobile broadband"
|
||||
msgstr "行動寬頻"
|
||||
|
||||
#: ../js/ui/status/network.js:1552
|
||||
#: ../js/ui/status/network.js:1584
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN 連線"
|
||||
|
||||
#: ../js/ui/status/network.js:1564
|
||||
#: ../js/ui/status/network.js:1596
|
||||
msgid "Network Settings"
|
||||
msgstr "網絡設定值"
|
||||
|
||||
#: ../js/ui/status/network.js:1854
|
||||
#: ../js/ui/status/network.js:1890
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "你現在已連線至行動寬頻網絡連線「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1858
|
||||
#: ../js/ui/status/network.js:1894
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "你現在已連線到無線網絡「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1862
|
||||
#: ../js/ui/status/network.js:1898
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "你現在已連線至有線網絡「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1866
|
||||
#: ../js/ui/status/network.js:1902
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "你現在已連線至 VPN 網絡「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1871
|
||||
#: ../js/ui/status/network.js:1907
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "你現在已連線至「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1879
|
||||
#: ../js/ui/status/network.js:1915
|
||||
msgid "Connection established"
|
||||
msgstr "連線已建立"
|
||||
|
||||
#: ../js/ui/status/network.js:2005
|
||||
#: ../js/ui/status/network.js:2041
|
||||
msgid "Networking is disabled"
|
||||
msgstr "網絡已停用"
|
||||
|
||||
#: ../js/ui/status/network.js:2130
|
||||
#: ../js/ui/status/network.js:2166
|
||||
msgid "Network Manager"
|
||||
msgstr "網絡管理員"
|
||||
|
||||
@ -1022,7 +1015,8 @@ msgstr "手寫板"
|
||||
msgid "Computer"
|
||||
msgstr "電腦"
|
||||
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
#: ../js/ui/status/power.js:250
|
||||
#: ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "不明"
|
||||
|
||||
@ -1057,7 +1051,7 @@ msgstr "%s 正忙碌。"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:484
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "傳送於 %X %A"
|
||||
@ -1070,7 +1064,8 @@ msgstr "傳送於 %X %A"
|
||||
msgid "Type to search..."
|
||||
msgstr "輸入以搜尋…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "搜尋"
|
||||
|
||||
@ -1104,7 +1099,7 @@ msgstr[0] "%u 輸入"
|
||||
msgid "System Sounds"
|
||||
msgstr "系統音效"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "顯示版本"
|
||||
|
||||
@ -1175,18 +1170,14 @@ msgstr "%1$s:%2$s"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "關機"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "點選關機以結束這些應用程式並將系統關機。"
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "本系統會在 %d 秒後自動關閉。"
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "正在關閉系統。"
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "確認"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "沒有這個應用程式"
|
||||
|
||||
|
223
po/zh_TW.po
@ -6,10 +6,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 2.91.93\n"
|
||||
"Project-Id-Version: gnome-shell 3.0.0.2\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-04-04 22:08+0800\n"
|
||||
"PO-Revision-Date: 2011-04-04 14:55+0800\n"
|
||||
"POT-Creation-Date: 2011-04-24 05:52+0800\n"
|
||||
"PO-Revision-Date: 2011-04-24 05:54+0800\n"
|
||||
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
||||
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
|
||||
"Language: \n"
|
||||
@ -27,9 +27,7 @@ msgid "Window management and application launching"
|
||||
msgstr "視窗管理與應用程式的執行"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
|
||||
msgstr "允許使用 Alt-F2 對話盒存取內部除錯和監控工具。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
@ -45,9 +43,7 @@ msgid "Framerate used for recording screencasts."
|
||||
msgstr "錄製畫面廣播的框架率。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgid "GNOME Shell extensions have a uuid property; this key lists extensions which should not be loaded."
|
||||
msgstr "GNOME Shell 擴充功能有 uuid 屬性;這個設定鍵列出了不應載入的擴充功能。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
@ -76,25 +72,8 @@ msgstr "喜好的應用程式桌面檔案 ID 清單"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||
"the recorded video is recorded. It will normally have a unconnected source "
|
||||
"pad; output from that pad will be written into the output file. However the "
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
|
||||
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
|
||||
"at the optimal thread count on the system."
|
||||
msgstr ""
|
||||
"設定用來錄製的 GStreamer 管線。它依據 gst-launch 使用的語法。管線應該要有未連"
|
||||
"接的出口(sink pad),提供錄製視訊之用。它通常會有未連接的入口(source pad);從"
|
||||
"出口輸出的資訊就寫入輸出檔案。然而管線本身也會處理它本身的輸出 - 習慣上是透"
|
||||
"過 shout2send 之類將輸出傳送到 icecast 伺服器。當取消設定或設定為空值時,就會"
|
||||
"使用預設的管線。這個值目前為 'videorate ! vp8enc quality=10 speed=2 threads="
|
||||
"%T ! queue ! webmmux' 即使用 VP8 codec 錄製 WEBM。%T 是在系統的最佳化執行緒計"
|
||||
"數猜測時使用的佔位符。"
|
||||
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
|
||||
msgstr "設定用來錄製的 GStreamer 管線。它依據 gst-launch 使用的語法。管線應該要有未連接的出口(sink pad),提供錄製視訊之用。它通常會有未連接的入口(source pad);從出口輸出的資訊就寫入輸出檔案。然而管線本身也會處理它本身的輸出 - 習慣上是透過 shout2send 之類將輸出傳送到 icecast 伺服器。當取消設定或設定為空值時,就會使用預設的管線。這個值目前為 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' 即使用 VP8 codec 錄製 WEBM。%T 是在系統的最佳化執行緒計數猜測時使用的佔位符。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -109,42 +88,24 @@ msgid "Show time with seconds"
|
||||
msgstr "在時刻中顯示秒數"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
|
||||
msgstr "對應這些辨別碼的應用程式會顯示在喜好區域。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr ""
|
||||
"錄製好的畫面廣播檔案名稱會以目前的時刻作為獨特的檔名,並使用這個延伸檔名。當"
|
||||
"錄製為不同的容器格式時應該做適當變更。"
|
||||
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
||||
msgstr "錄製好的畫面廣播檔案名稱會以目前的時刻作為獨特的檔名,並使用這個延伸檔名。當錄製為不同的容器格式時應該做適當變更。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"由 GNOME Shell 的畫面廣播錄製程式所錄製成果的框架率,以 frames-per-second "
|
||||
"計。"
|
||||
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
||||
msgstr "由 GNOME Shell 的畫面廣播錄製程式所錄製成果的框架率,以 frames-per-second 計。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "用來編碼畫面廣播的 gstreamer 管線"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"這個 shell 通常會監控使用中的應用程式以便能顯示出最常使用的(例如,在程式執行"
|
||||
"器中)。雖然這個資料會保持隱密,但是您可能會基於隱私的理由想要停用這個功能。"
|
||||
"請注意這麼做並不會移除已儲存的資料。"
|
||||
msgid "The shell normally monitors active applications in order to present the most used ones (e.g. in launchers). While this data will be kept private, you may want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
|
||||
msgstr "這個 shell 通常會監控使用中的應用程式以便能顯示出最常使用的(例如,在程式執行器中)。雖然這個資料會保持隱密,但是您可能會基於隱私的理由想要停用這個功能。請注意這麼做並不會移除已儲存的資料。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "Uuids of extensions to disable"
|
||||
@ -178,23 +139,23 @@ msgstr "執行「%s」失敗:"
|
||||
msgid "All"
|
||||
msgstr "全部"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:329
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "程式集"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:355
|
||||
msgid "SETTINGS"
|
||||
msgstr "設定值"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:626
|
||||
msgid "New Window"
|
||||
msgstr "新視窗"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "自喜好中移除"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:630
|
||||
msgid "Add to Favorites"
|
||||
msgstr "加入喜好"
|
||||
|
||||
@ -327,13 +288,15 @@ msgid "Nothing Scheduled"
|
||||
msgstr "沒有預訂行程"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/telepathyClient.js:492
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%m月%d日%A"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:493
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/telepathyClient.js:495
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%Y年%m月%d日%A"
|
||||
@ -354,7 +317,8 @@ msgstr "本週"
|
||||
msgid "Next week"
|
||||
msgstr "下週"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
|
||||
#: ../js/ui/dash.js:174
|
||||
#: ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "移除"
|
||||
|
||||
@ -370,41 +334,41 @@ msgstr "開啟行事曆"
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:164
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%m月%e日%a, %R:%S"
|
||||
msgstr "%m月%e日(%a), %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:165
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%m月%e日%a, %R"
|
||||
msgstr "%m月%e日(%a), %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:169
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
msgstr "(%a)%R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:170
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
msgstr "(%a)%R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:177
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%m月%e日%a, %p %l:%M:%S"
|
||||
msgstr "%m月%e日(%a), %p %l:%M:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:178
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%m月%e日%a, %p %l:%M"
|
||||
msgstr "%m月%e日(%a), %p %l:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %p %l:%M:%S"
|
||||
msgstr "(%a)%p %l:%M:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:183
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %p %l:%M"
|
||||
msgstr "(%a)%p %l:%M"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
@ -422,7 +386,8 @@ msgstr "最近使用項目"
|
||||
msgid "Log Out %s"
|
||||
msgstr "登出 %s"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||
#: ../js/ui/endSessionDialog.js:64
|
||||
#: ../js/ui/endSessionDialog.js:70
|
||||
msgid "Log Out"
|
||||
msgstr "登出"
|
||||
|
||||
@ -444,7 +409,8 @@ msgstr "您會在 %d 秒後自動登出。"
|
||||
msgid "Logging out of the system."
|
||||
msgstr "登出系統。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr "關閉電源"
|
||||
|
||||
@ -461,7 +427,8 @@ msgstr "本系統會在 %d 秒後電源。"
|
||||
msgid "Powering off the system."
|
||||
msgstr "關閉系統的電源。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
msgid "Restart"
|
||||
msgstr "重新啟動"
|
||||
@ -479,7 +446,8 @@ msgstr "系統會在 %d 秒內自動重新啟動。"
|
||||
msgid "Restarting the system."
|
||||
msgstr "重新啟動系統。"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:417 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/endSessionDialog.js:413
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
@ -494,7 +462,8 @@ msgstr "已啟用"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
|
||||
#: ../js/ui/lookingGlass.js:627
|
||||
#: ../src/gvc/gvc-mixer-control.c:1091
|
||||
msgid "Disabled"
|
||||
msgstr "已停用"
|
||||
|
||||
@ -514,11 +483,11 @@ msgstr "檢示來源"
|
||||
msgid "Web Page"
|
||||
msgstr "網頁"
|
||||
|
||||
#: ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "開啟"
|
||||
|
||||
#: ../js/ui/messageTray.js:2164
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "系統資訊"
|
||||
|
||||
@ -618,18 +587,20 @@ msgstr "搜尋中…"
|
||||
msgid "No matching results."
|
||||
msgstr "沒有相符的結果。"
|
||||
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:161
|
||||
#: ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr "關閉電源…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
#: ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
msgstr "暫停"
|
||||
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "可用"
|
||||
msgstr "有空"
|
||||
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
@ -697,9 +668,12 @@ msgstr "高反差"
|
||||
msgid "Large Text"
|
||||
msgstr "大型文字"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:42
|
||||
#: ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333
|
||||
#: ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
msgid "Bluetooth"
|
||||
msgstr "藍牙"
|
||||
|
||||
@ -748,7 +722,8 @@ msgstr "鍵盤設定值"
|
||||
msgid "Mouse Settings"
|
||||
msgstr "滑鼠設定值"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "音效設定值"
|
||||
|
||||
@ -779,7 +754,8 @@ msgstr "拒絕"
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "%s 的配對確認"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
#: ../js/ui/status/bluetooth.js:448
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "裝置 %s 想要和這個電腦配對"
|
||||
@ -818,139 +794,142 @@ msgstr "顯示鍵盤配置…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "本地化設定值"
|
||||
|
||||
#: ../js/ui/status/network.js:105 ../js/ui/status/network.js:1466
|
||||
#: ../js/ui/status/network.js:109
|
||||
#: ../js/ui/status/network.js:1498
|
||||
msgid "<unknown>"
|
||||
msgstr "<不明>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:318
|
||||
#: ../js/ui/status/network.js:326
|
||||
msgid "disabled"
|
||||
msgstr "已停用"
|
||||
|
||||
#: ../js/ui/status/network.js:501
|
||||
#: ../js/ui/status/network.js:521
|
||||
msgid "connecting..."
|
||||
msgstr "連線中…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:504
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "authentication required"
|
||||
msgstr "要求驗證"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:534
|
||||
msgid "firmware missing"
|
||||
msgstr "缺少韌體"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "cable unplugged"
|
||||
msgstr "纜線已拔除"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:526
|
||||
#: ../js/ui/status/network.js:546
|
||||
msgid "unavailable"
|
||||
msgstr "無法使用"
|
||||
|
||||
#: ../js/ui/status/network.js:528
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "connection failed"
|
||||
msgstr "連線失敗"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:608 ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:628
|
||||
#: ../js/ui/status/network.js:1446
|
||||
msgid "Connected (private)"
|
||||
msgstr "已連線 (私人)"
|
||||
|
||||
#: ../js/ui/status/network.js:689
|
||||
#: ../js/ui/status/network.js:713
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "自動使用乙太網路"
|
||||
|
||||
#: ../js/ui/status/network.js:764
|
||||
#: ../js/ui/status/network.js:788
|
||||
msgid "Auto broadband"
|
||||
msgstr "自動使用行動寬頻"
|
||||
|
||||
#: ../js/ui/status/network.js:767
|
||||
#: ../js/ui/status/network.js:791
|
||||
msgid "Auto dial-up"
|
||||
msgstr "自動使用撥接"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:910 ../js/ui/status/network.js:1426
|
||||
#: ../js/ui/status/network.js:937
|
||||
#: ../js/ui/status/network.js:1458
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "自動使用 %s"
|
||||
|
||||
#: ../js/ui/status/network.js:912
|
||||
#: ../js/ui/status/network.js:939
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "自動使用藍牙"
|
||||
|
||||
#: ../js/ui/status/network.js:1428
|
||||
#: ../js/ui/status/network.js:1460
|
||||
msgid "Auto wireless"
|
||||
msgstr "自動使用無線網路"
|
||||
|
||||
#: ../js/ui/status/network.js:1486
|
||||
#: ../js/ui/status/network.js:1518
|
||||
msgid "More..."
|
||||
msgstr "更多…"
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Enable networking"
|
||||
msgstr "啟用網路"
|
||||
|
||||
#: ../js/ui/status/network.js:1521
|
||||
#: ../js/ui/status/network.js:1553
|
||||
msgid "Wired"
|
||||
msgstr "有線"
|
||||
|
||||
#: ../js/ui/status/network.js:1532
|
||||
#: ../js/ui/status/network.js:1564
|
||||
msgid "Wireless"
|
||||
msgstr "無線"
|
||||
|
||||
#: ../js/ui/status/network.js:1542
|
||||
#: ../js/ui/status/network.js:1574
|
||||
msgid "Mobile broadband"
|
||||
msgstr "行動寬頻"
|
||||
|
||||
#: ../js/ui/status/network.js:1552
|
||||
#: ../js/ui/status/network.js:1584
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN 連線"
|
||||
|
||||
#: ../js/ui/status/network.js:1564
|
||||
#: ../js/ui/status/network.js:1596
|
||||
msgid "Network Settings"
|
||||
msgstr "網路設定值"
|
||||
|
||||
#: ../js/ui/status/network.js:1854
|
||||
#: ../js/ui/status/network.js:1890
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "您現在已連線至行動寬頻網路連線「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1858
|
||||
#: ../js/ui/status/network.js:1894
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "您現在已連線到無線網路「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1862
|
||||
#: ../js/ui/status/network.js:1898
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "您現在已連線至有線網路「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1866
|
||||
#: ../js/ui/status/network.js:1902
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "您現在已連線至 VPN 網路「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1871
|
||||
#: ../js/ui/status/network.js:1907
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "您現在已連線至「%s」"
|
||||
|
||||
#: ../js/ui/status/network.js:1879
|
||||
#: ../js/ui/status/network.js:1915
|
||||
msgid "Connection established"
|
||||
msgstr "連線已建立"
|
||||
|
||||
#: ../js/ui/status/network.js:2005
|
||||
#: ../js/ui/status/network.js:2041
|
||||
msgid "Networking is disabled"
|
||||
msgstr "網路已停用"
|
||||
|
||||
#: ../js/ui/status/network.js:2130
|
||||
#: ../js/ui/status/network.js:2166
|
||||
msgid "Network Manager"
|
||||
msgstr "網路管理員"
|
||||
|
||||
@ -1036,7 +1015,8 @@ msgstr "手寫板"
|
||||
msgid "Computer"
|
||||
msgstr "電腦"
|
||||
|
||||
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
|
||||
#: ../js/ui/status/power.js:250
|
||||
#: ../src/shell-app-system.c:1088
|
||||
msgid "Unknown"
|
||||
msgstr "不明"
|
||||
|
||||
@ -1071,7 +1051,7 @@ msgstr "%s 正忙碌。"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:484
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "傳送於 %X %A"
|
||||
@ -1084,7 +1064,8 @@ msgstr "傳送於 %X %A"
|
||||
msgid "Type to search..."
|
||||
msgstr "輸入以搜尋…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
#: ../js/ui/viewSelector.js:142
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "搜尋"
|
||||
|
||||
@ -1118,7 +1099,7 @@ msgstr[0] "%u 輸入"
|
||||
msgid "System Sounds"
|
||||
msgstr "系統音效"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "顯示版本"
|
||||
|
||||
@ -1189,18 +1170,14 @@ msgstr "%1$s:%2$s"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "關機"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "點選關機以結束這些應用程式並將系統關機。"
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "本系統會在 %d 秒後自動關閉。"
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "正在關閉系統。"
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "確認"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "沒有這個應用程式"
|
||||
|
||||
|
@ -47,20 +47,20 @@ st-marshal.c: Makefile st/st-marshal.list
|
||||
|
||||
st-enum-types.h: stamp-st-enum-types.h Makefile
|
||||
@true
|
||||
stamp-st-enum-types.h: $(source_h) st/st-enum-types.h.in $(st_source_h)
|
||||
$(AM_V_GEN) ( cd $(srcdir) && \
|
||||
stamp-st-enum-types.h: $(source_h) $(srcdir)/st/st-enum-types.h.in $(st_source_h)
|
||||
$(AM_V_GEN) ( \
|
||||
$(GLIB_MKENUMS) \
|
||||
--template st/st-enum-types.h.in \
|
||||
$(st_source_h) ) >> $@.tmp && \
|
||||
--template $(srcdir)/st/st-enum-types.h.in \
|
||||
$(addprefix $(srcdir)/, $(st_source_h)) ) >> $@.tmp && \
|
||||
(cmp -s $@.tmp st-enum-types.h || cp $@.tmp st-enum-types.h) && \
|
||||
rm -f $@.tmp && \
|
||||
echo timestamp > $(@F)
|
||||
|
||||
st-enum-types.c: stamp-st-enum-types.h st/st-enum-types.c.in
|
||||
$(AM_V_GEN) ( cd $(srcdir) && \
|
||||
st-enum-types.c: stamp-st-enum-types.h $(srcdir)/st/st-enum-types.c.in
|
||||
$(AM_V_GEN) ( \
|
||||
$(GLIB_MKENUMS) \
|
||||
--template st/st-enum-types.c.in \
|
||||
$(st_source_h) ) >> $@.tmp && \
|
||||
--template $(srcdir)/st/st-enum-types.c.in \
|
||||
$(addprefix $(srcdir)/,$(st_source_h)) ) >> $@.tmp && \
|
||||
cp $@.tmp $@ && \
|
||||
rm -f $@.tmp
|
||||
|
||||
|
@ -29,9 +29,11 @@ endif
|
||||
|
||||
noinst_DATA = gnome-shell
|
||||
gnome-shell: $(gnome_shell) Makefile
|
||||
cp $< $@.tmp && mv $@.tmp $@
|
||||
$(AM_V_GEN) cp $< $@.tmp && mv $@.tmp $@
|
||||
install-exec-hook:
|
||||
mv $(DESTDIR)$(bindir)/$(gnome_shell) $(DESTDIR)$(bindir)/gnome-shell
|
||||
uninstall-hook:
|
||||
rm -f $(DESTDIR)$(bindir)/gnome-shell
|
||||
|
||||
generated_script_substitutions = \
|
||||
-e "s|@bindir[@]|$(bindir)|" \
|
||||
@ -98,6 +100,7 @@ shell_public_headers_h = \
|
||||
shell-perf-log.h \
|
||||
shell-slicer.h \
|
||||
shell-stack.h \
|
||||
shell-tp-client.h \
|
||||
shell-tray-icon.h \
|
||||
shell-tray-manager.h \
|
||||
shell-util.h \
|
||||
@ -132,6 +135,7 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-polkit-authentication-agent.c \
|
||||
shell-slicer.c \
|
||||
shell-stack.c \
|
||||
shell-tp-client.c \
|
||||
shell-tray-icon.c \
|
||||
shell-tray-manager.c \
|
||||
shell-util.c \
|
||||
@ -182,27 +186,10 @@ gnome_shell_perf_helper_LDADD = $(SHELL_PERF_HELPER_LIBS)
|
||||
|
||||
########################################
|
||||
|
||||
# In order to run the interactive tests for GUI components, we need to have
|
||||
# an executable that exports the St components. Libtool doesn't have a way
|
||||
# to include all the symbols from a convenience library into a executable
|
||||
# so what we do is build a small uninstalled library that pulls in the
|
||||
# St convenience library and link the test running program to that.
|
||||
|
||||
noinst_LTLIBRARIES += libjs-test.la
|
||||
|
||||
libjs_test_la_LDFLAGS = -rpath $(libdir)
|
||||
libjs_test_la_CPPFLAGS = $(JS_TEST_CFLAGS)
|
||||
libjs_test_la_LIBADD = $(JS_TEST_LIBS) libst-1.0.la
|
||||
|
||||
# The tests use or reference a couple of Shell classes
|
||||
libjs_test_la_SOURCES = \
|
||||
shell-generic-container.c \
|
||||
shell-perf-log.c
|
||||
|
||||
noinst_PROGRAMS += run-js-test
|
||||
|
||||
run_js_test_CPPFLAGS = $(JS_TEST_CFLAGS)
|
||||
run_js_test_LDADD = $(JS_TEST_LIBS) libjs-test.la
|
||||
run_js_test_CPPFLAGS = $(gnome_shell_cflags)
|
||||
run_js_test_LDADD = libgnome-shell.la $(libgnome_shell_la_LIBADD)
|
||||
run_js_test_LDFLAGS = -export-dynamic
|
||||
|
||||
run_js_test_SOURCES = \
|
||||
@ -235,21 +222,21 @@ shell-marshal.c: Makefile shell-marshal.list
|
||||
shell-enum-types.h: stamp-shell-enum-types.h Makefile
|
||||
@true
|
||||
stamp-shell-enum-types.h: $(srcdir)/shell-enum-types.h.in $(shell_public_headers_h)
|
||||
$(AM_V_GEN) ( cd $(srcdir) && \
|
||||
$(AM_V_GEN) ( \
|
||||
$(GLIB_MKENUMS) \
|
||||
--template $< \
|
||||
$(shell_public_headers_h) ) > $(@F).tmp && \
|
||||
$(addprefix $(srcdir)/,$(shell_public_headers_h)) ) > $(@F).tmp && \
|
||||
(cmp -s $(@F).tmp shell-enum-types.h || mv $(@F).tmp shell-enum-types.h) && \
|
||||
rm -f $(@F).tmp && \
|
||||
echo timestamp > $(@F)
|
||||
EXTRA_DIST += shell-enum-types.h.in
|
||||
CLEANFILES += stamp-shell-enum-types.h
|
||||
|
||||
shell-enum-types.c: shell-enum-types.c.in stamp-shell-enum-types.h
|
||||
$(AM_V_GEN) ( cd $(srcdir) && \
|
||||
shell-enum-types.c: $(srcdir)/shell-enum-types.c.in stamp-shell-enum-types.h
|
||||
$(AM_V_GEN) ( \
|
||||
$(GLIB_MKENUMS) \
|
||||
--template $< \
|
||||
$(shell_public_headers_h) ) > $(@F).tmp && \
|
||||
$(addprefix $(srcdir)/,$(shell_public_headers_h)) ) > $(@F).tmp && \
|
||||
mv $(@F).tmp $(@F) && \
|
||||
rm -f $(@F).tmp
|
||||
EXTRA_DIST += shell-enum-types.c.in
|
||||
@ -271,7 +258,7 @@ Shell-0.1.gir: libgnome-shell.la St-1.0.gir
|
||||
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 TelepathyLogger-0.2
|
||||
Shell_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
|
||||
Shell_0_1_gir_LIBS = libgnome-shell.la
|
||||
Shell_0_1_gir_FILES = $(addprefix $(srcdir)/,$(libgnome_shell_la_gir_sources))
|
||||
Shell_0_1_gir_FILES = $(libgnome_shell_la_gir_sources)
|
||||
Shell_0_1_gir_SCANNERFLAGS = --include-uninstalled=$(builddir)/St-1.0.gir \
|
||||
--add-include-path=$(MUTTER_GIR_DIR)
|
||||
INTROSPECTION_GIRS += Shell-0.1.gir
|
||||
|
@ -777,7 +777,10 @@ remove_user (GdmUserManager *manager,
|
||||
if (gdm_user_get_object_path (user) != NULL) {
|
||||
g_hash_table_remove (manager->priv->users_by_object_path, gdm_user_get_object_path (user));
|
||||
}
|
||||
g_hash_table_remove (manager->priv->users_by_name, gdm_user_get_user_name (user));
|
||||
|
||||
if (gdm_user_get_user_name (user) != NULL) {
|
||||
g_hash_table_remove (manager->priv->users_by_name, gdm_user_get_user_name (user));
|
||||
}
|
||||
|
||||
if (manager->priv->is_loaded) {
|
||||
g_signal_emit (manager, signals[USER_REMOVED], 0, user);
|
||||
@ -884,6 +887,13 @@ on_user_removed_in_accounts_service (DBusGProxy *proxy,
|
||||
|
||||
user = g_hash_table_lookup (manager->priv->users_by_object_path, object_path);
|
||||
|
||||
if (user == NULL) {
|
||||
g_debug ("GdmUserManager: ignoring untracked user %s", object_path);
|
||||
return;
|
||||
} else {
|
||||
g_debug ("GdmUserManager: tracked user %s removed from accounts service", object_path);
|
||||
}
|
||||
|
||||
manager->priv->new_users = g_slist_remove (manager->priv->new_users, user);
|
||||
|
||||
remove_user (manager, user);
|
||||
|