Compare commits
239 Commits
Author | SHA1 | Date | |
---|---|---|---|
f8c980cb22 | |||
74ed3646ad | |||
80dfda17cd | |||
3e98d47687 | |||
3d3494a15b | |||
3bf11dbd31 | |||
626e962e03 | |||
759de873b5 | |||
552ae78557 | |||
d85a16589b | |||
136c76dcbe | |||
2d95201af2 | |||
039c683bac | |||
d9ab2320d5 | |||
fa515328eb | |||
0cfedcaad6 | |||
65230bfd7f | |||
a5324462c3 | |||
7e654ab3ca | |||
9601908fca | |||
ab4c160f9d | |||
234882cbc6 | |||
e890674e49 | |||
cd01e2fb25 | |||
62027beb8e | |||
ee4d861a29 | |||
3a3e26c1bd | |||
bf2ad9d4e8 | |||
b053d9c84f | |||
4afa8bebdb | |||
caf3d5add0 | |||
7cf038474a | |||
c7bcc8150c | |||
6d58397508 | |||
49d0fc178d | |||
b83b8f64ff | |||
6cc8a42720 | |||
50a2d285eb | |||
fdf05310e9 | |||
7baa393b1b | |||
113694c44b | |||
0c2f51b27f | |||
04cb84de2a | |||
9475c16e80 | |||
6f41a9e10c | |||
be3b939a24 | |||
04fb3a5a7c | |||
697b6dbfff | |||
bb4639e423 | |||
69db63b4cd | |||
f9d17b214e | |||
bba5198e63 | |||
9e2bab008a | |||
5ea032bbf7 | |||
897fadfb40 | |||
b05f71eb9b | |||
4ce0e80956 | |||
577ccc4d56 | |||
39d12351ba | |||
e37bc6d7f0 | |||
9593ff3582 | |||
ad8dfd7b04 | |||
ca5ab20f67 | |||
0eab448221 | |||
a26a77f9db | |||
c3df6bb8bd | |||
ce3a26cf37 | |||
04482c23c4 | |||
ff20fe856e | |||
12e3921f81 | |||
928fbee15b | |||
a103c028f9 | |||
775347d865 | |||
6d0be86a4e | |||
a4b69db8af | |||
790b9d3371 | |||
adef2009a5 | |||
1721db6d8d | |||
6d95e8b988 | |||
b07f9932db | |||
9439da81c4 | |||
6257e64d03 | |||
ba110f2d2e | |||
6bdf621d05 | |||
1c4db98c95 | |||
dadac957e4 | |||
cf3976d496 | |||
82ed80c9c3 | |||
67222525ad | |||
fff0861773 | |||
13ffe41498 | |||
96e0528a7b | |||
3df30fbd57 | |||
b57d8b336b | |||
3169b2c440 | |||
6bc34e0f32 | |||
cecb1a41fb | |||
b9069df85c | |||
aee3c6f041 | |||
c427bba9f1 | |||
da83ad561b | |||
85520e34ab | |||
d0edd970e1 | |||
8529ca70af | |||
1a8d78212f | |||
4270a2806d | |||
4333bdc709 | |||
75b824d032 | |||
7bc2573d85 | |||
67b7b7a950 | |||
786cfbd397 | |||
9df8b583cf | |||
8e32290dc9 | |||
23478f3336 | |||
2e244ecb63 | |||
e307680206 | |||
6bb1a3e2c4 | |||
8a1ac6b13f | |||
61b8af2252 | |||
c99afed012 | |||
2947b92148 | |||
39c5d23a87 | |||
d839670f54 | |||
0d1b7e15d1 | |||
ac678f63ee | |||
d862c0879b | |||
23a4d4c69e | |||
472b20d933 | |||
492dd718fb | |||
0d5618fdd1 | |||
503508af41 | |||
4ec5e55122 | |||
8daca865ca | |||
f9b37a21e8 | |||
c398f319fc | |||
1e049f88b8 | |||
4831d9c3a3 | |||
f13f5bc1bb | |||
4e114107ed | |||
0ccb280008 | |||
28c3e0693e | |||
c321c8a02f | |||
2407ec7b47 | |||
70eeb75716 | |||
751d250471 | |||
c28217db80 | |||
0968e556fa | |||
130f2cf808 | |||
4eec7413c7 | |||
efc3246d26 | |||
9930dbc0ff | |||
754f87dac3 | |||
51139bd096 | |||
6e0119d620 | |||
a3528bf973 | |||
77c36af588 | |||
69c0a52a33 | |||
a7442cd0a5 | |||
d47a013931 | |||
745f9c0e6e | |||
414f49fd80 | |||
e49a595f54 | |||
77485c2a04 | |||
e9b28634e5 | |||
b43dcb8876 | |||
f0c1eeece8 | |||
1e6b824ede | |||
1e2d16273c | |||
32dc24c59b | |||
7a8a189c48 | |||
6aa411fecc | |||
9c76318df8 | |||
6510904711 | |||
a9817f4832 | |||
9067689839 | |||
4e9e91fdce | |||
73cc91ba60 | |||
0ab0d0860f | |||
337b399a75 | |||
46f21e81e3 | |||
c1300ddbbc | |||
8bd5b1e696 | |||
40c5db397d | |||
8b52919b4d | |||
2859f23038 | |||
00384ccb47 | |||
0191cc589a | |||
dae6db9b51 | |||
4d912c9feb | |||
07c4b46466 | |||
e9cdce49a3 | |||
84c3ce8778 | |||
d5a32a7fe4 | |||
cc4dfda21b | |||
703b37aa7b | |||
b433de9022 | |||
0c1a22ff95 | |||
4d526e40c3 | |||
4586c7b36b | |||
3d60b73b60 | |||
4ef5cd8ef6 | |||
6959bd19f1 | |||
17e4ce5ea8 | |||
33094b4988 | |||
a8fdcffd44 | |||
5adb5411fa | |||
ff0d11c89c | |||
5f6dce2b5c | |||
a7405e8b39 | |||
d87c520bad | |||
24959f8d34 | |||
6d1432e166 | |||
2c7ba2c125 | |||
a0ba664c64 | |||
131da5f523 | |||
7c6144450a | |||
4c7369db16 | |||
f4355de896 | |||
4a3db9f44d | |||
6c0a9ff9cc | |||
57b1695fcf | |||
045c6546cc | |||
ce5bd954bf | |||
6ef00a4a3b | |||
569d9718a0 | |||
00a3a8697f | |||
c93444e390 | |||
5e5788ab14 | |||
abf57e6362 | |||
74c2074d5a | |||
b74606312e | |||
0c849df4d5 | |||
38690d4a09 | |||
b64c237cb3 | |||
3fbee8e027 | |||
a68e6e3c63 | |||
db5a72774d | |||
966f90f24a | |||
eaa664c023 |
148
NEWS
148
NEWS
@ -1,3 +1,151 @@
|
||||
3.2.2
|
||||
=====
|
||||
* Fix crash when searching in the shell caused by .desktop files
|
||||
without Exec= lines (commonly, nautilus-pastebin) [Ray; #663815]
|
||||
* Message Tray:
|
||||
- Fix bug that would cause confusion between notifications from different
|
||||
services running in the gnome-settings-daemon process
|
||||
[Marina, Jasper; #664138]
|
||||
- Don't steal the focus when popping up beneath the pointer [Rui; #661358]
|
||||
- Only pop up the message tray from a hot corner, rather than trapping
|
||||
clicks on the entire bottom row. [Rui; #663366]
|
||||
* Browser plugin and extension.gnome.org integration
|
||||
- Fix multiple bugs that kept the plugin from working in WebKit-based browsers
|
||||
[Jasper, #663823, #666444]
|
||||
- Fix plugin crash when the shell is installed but not running [Jürg]
|
||||
- Fix problem that kept plugin uninstallation from working [Jasper]
|
||||
* gnome-shell-extension-tool
|
||||
- Fix error that was printed after creating an extension [Jasper; #661623]
|
||||
- Use xdg-open rather than the deprecated gnome-open [Jasper]
|
||||
* Don't recreate dash icons unnecessarily - this hopefully fixes various
|
||||
crashes. [Owen, Giovanni; #648450]
|
||||
* Fix several bugs that caused errors and slowdowns when updating the
|
||||
network menu. [Giovanni; #651378, #659277, #663278]
|
||||
* Fix several crashers related to updating workspace thumbnails
|
||||
[Owen; #667652]
|
||||
* Fix memory management error causing gnome-shell-hotplug-sniffer to crash
|
||||
[Owen; #667378]
|
||||
* Fix crash and misdrawing with shadowed elements [Owen; #668048, #668050]
|
||||
* Fix several small memory leaks. [Jasper, Florian]
|
||||
|
||||
Contributors:
|
||||
Jürg Billeter, Rui Matos, Florian Müllner, Jasper St. Pierre, Ray Strode,
|
||||
Owen Taylor, Marina Zhurakhinskaya
|
||||
|
||||
Translations:
|
||||
Alexander Shopov [bg], Gil Forcada [ca], Carles Ferrando [ca@valencia],
|
||||
Marek Černocký [cz], Kris Thomsen [dk], Bruce Cowan [en_GB],
|
||||
Kristjan Schmidt [eo], Daniel Mustieles [es], Arash Mousavi [fa],
|
||||
Ville-Pekka Vainio [fi], Bruno Brouard [fr], Hideki Yamane [ja],
|
||||
Žygimantas Beručka, Aurimas Černius [lt], Kjartan Maraas [nb],
|
||||
"Andreas N" [nn], Djavan Fagundes, Antonio Fernandes C. Neto [pt_BR],
|
||||
Daniel Nylander [se], Matej Urbančič [sl], Praveen Illa [te],
|
||||
Nguyễn Thái Ngọc Duy [vi]
|
||||
|
||||
3.2.1
|
||||
=====
|
||||
* Restore the IM state on startup - if you were available in when you logged
|
||||
out, then you'll be set available again when you log in.
|
||||
[Florian; #65902, #661485]
|
||||
* Improve searching for contacts in the overview: search more fields,
|
||||
show a more meaningful name, require that all search terms match.
|
||||
[Florian, Matthias; #660580]
|
||||
* Improve search for applications in the overview: take frequency into
|
||||
account and tweak match algorithm [Florian; #623372]
|
||||
* Remove the "Show Password" switch from network password prompts, and
|
||||
move the functionality to a right-click menu [Florian; #658948]
|
||||
* Add context menus with Cut/Paste options to most entries [Florian; #659275]
|
||||
* On screen keyboard:
|
||||
- Show the keyboard immediately when it's turned enabled [Dan; #659743]
|
||||
- Fix problem where keyboard would hide when starting to type
|
||||
in the search entry [Nohemi; #661340]
|
||||
- Fix problem with keyboard hiding when selected accented characters
|
||||
[Nohemi; 661707]
|
||||
* Login mode:
|
||||
- Allow hitting Enter to select the first user [Ray; #657996]
|
||||
- Fix flicker of a fingerprint prompt that could show up [Ray; #660492]
|
||||
- Fix password bullets vanishing during login [Ray; #657894]
|
||||
- Misc bug fixes and visual tweaks [Ray; #659763, #660919, #661479]
|
||||
* Display a caps-lock warning in password entries [Florian; #660806]
|
||||
* Show the state of installed extensions in Looking Glass [Jasper; #660494]
|
||||
* Load user extensions after system ones [Jasper; #661815]
|
||||
* Fix problem with many applications showing extra-large icons in
|
||||
notifications [Marina; #659158]
|
||||
* Fix a problem where alt-Tab had trouble tracking the current
|
||||
application with certain applications such as Emacs. [Dan; #645026]
|
||||
* Fix confusion between different users avatar images [Florian; #660585]
|
||||
* Remove behavior where you could switch workspaces by bumping
|
||||
a dragged window in the overview against a screen edge; it was
|
||||
leftover and just confusing. [Florian; #660838]
|
||||
* Fix long-standing bug where the Dash in the overview could end up mis-sized
|
||||
and run off the screen [Florian; #649248]
|
||||
* Fix automatic launching of applications when media is inserted
|
||||
[Cosimo; #660821]
|
||||
* Fix handling of vertically stacked monitors with NVIDIA drivers
|
||||
[Florian; #661387]
|
||||
* Translation marking fixes [Jasper, Wouter; #660600]
|
||||
* Code cleanups and warning fixes [Adel, Dan, Florian, Jasper;
|
||||
#659822, #659940, #660122, #660358, #660968, #661231]
|
||||
* Small memory leak fixes [Florian, Jasper; #661231]
|
||||
* Misc bug fixes [Adel, Florian, Jasper; #659274, #659861, #660166, #660310,
|
||||
#660397, #660608, #660606, #660674, #660774. #660848, #661151, #661617]
|
||||
|
||||
Contributors:
|
||||
Wouter Bolsterlee, Cosimo Cecchi, Matthias Clasen, Nohemi Fernandez,
|
||||
Adel Gadllah, Florian Müllner, Jasper St. Pierre, Ray Strode, Dan Winship,
|
||||
Marina Zhurakhinskaya
|
||||
|
||||
Translations:
|
||||
Tiffany Antopolski [eo], Xandru Armesto [ast], Alexander Shopov,
|
||||
Ivaylo Valkov [bg], Gil Forcada [ca], Carles Ferrando [ca@valencia],
|
||||
Mario Blättermann, Paul Seyfert [de], Bruce Cowan [en_GB],
|
||||
Jorge González, Daniel Mustieles [es], Arash Mousavi [fa], Bruno Brouard [fr],
|
||||
Seán de Búrca [ga], Fran Diéguez [gl], Gabor Kelemen [hu], Luca Ferretti [it],
|
||||
Takayuki Kusano [ja], Changwoo Ryu [ko], Erdal Ronahi [ku],
|
||||
Algimantas Margevičius [lt], Rudolfs Mazurs [lv], Wouter Bolsterlee [nl],
|
||||
Piotr Drąg [pl], Adorilson Bezerra [pt_BR], Yuri Myasoedov [ru],
|
||||
Matej Urbančič [sl], Daniel Nylander [sv], Miroslav Nikolić [sr, sr@latin],
|
||||
Tirumurti Vasudevan [ta], Krishnababu Krothapalli [te], Daniel Korostil [uk],
|
||||
Nguyễn Thái Ngọc Duy [vi], YunQiang Su [zh_CN]
|
||||
|
||||
3.2.0
|
||||
=====
|
||||
* Prevent the fallback on-screen keyboard from showing up while
|
||||
GNOME Shell is running [Dan, #659865]
|
||||
* Disable code to reposition windows around the on-screen keyboard;
|
||||
it wasn't finished or working properly. [Dan; #659643]
|
||||
* Fix interaction between on-screen keyboard and notifications
|
||||
[Dan; #658603]
|
||||
* Fix menu-sizing problems in right-to-left locales. [Florian; #659827]
|
||||
* Update chat icons in the message tray when an avatar image changes
|
||||
[Marina; #659768]
|
||||
* Fix problem with empty notification bubbles being left [Marina; #659862]
|
||||
* Fix problem with chat notifications bouncing when new messages come in.
|
||||
[Marina; #659768]
|
||||
* Fix bug that was causing SIP calls to automatically be accepted in some
|
||||
circumstances [Guillaume; #660084]
|
||||
* Fix string that should have been marked translatable [Frédéric]
|
||||
* Fix a crash that could happen during CSS transitions [Florian; #659676]
|
||||
* Build fixes [Colin, Florian]
|
||||
|
||||
Contributors:
|
||||
Guillaume Desmottes, Florian Müllner, Frédéric Péters, Colin Walters,
|
||||
Dan Winship, Marina Zhurakhinskaya
|
||||
|
||||
Translations:
|
||||
Friedel Wolff [af], Nilamdyuti Goswami [as], Ihar Hrachyshka [be],
|
||||
Ivaylo Valkov [bg], Gil Forcada [ca], Carles Ferrando [ca@valencia],
|
||||
Petr Kovar [cz], Mario Blättermann [de], Kris Thomsen [dk],
|
||||
Tiffany Antopolski, Kristjan Schmidt [eo], Daniel Mustieles [es],
|
||||
Inaki Larranaga Murgoitio [eu], Tommi Vainikainen [fi], Bruno Brouard [fr],
|
||||
Fran Dieguez [gl], Yaron Shahrabani [he], Gabor Kelemen [hu],
|
||||
Andika Triwidada [id], Jiro Matsuzawa [ja], Changwoo Ryu [ko],
|
||||
Rudolfs Mazurs [lv], Aurimas Černius [lt], Kjartan Maraas [nb],
|
||||
A S Alam [pa], Piotr Drąg [pl], Duarte Loreto [pt], Djavan Fagundes,
|
||||
Rodolfo Ribeiro Gomes, Gabriel F. Vilar [pt_BR], Yuri Myasoedov [ru],
|
||||
Daniel Nylander [se], Martin Srebotnjak [sl], Michal Štrba [sv],
|
||||
Krishnababu Krothapalli, Praveen Illa [te], Cheng-Chia Tseng [zh_KH, zh_TW]
|
||||
|
||||
3.1.92
|
||||
======
|
||||
|
||||
|
@ -47,8 +47,6 @@ typedef struct {
|
||||
GDBusProxy *proxy;
|
||||
} PluginData;
|
||||
|
||||
/* =============== public entry points =================== */
|
||||
|
||||
static NPNetscapeFuncs funcs;
|
||||
|
||||
static inline gchar *
|
||||
@ -71,10 +69,7 @@ get_string_property (NPP instance,
|
||||
goto out;
|
||||
|
||||
result_str = NPVARIANT_TO_STRING (result);
|
||||
if (strlen (result_str.UTF8Characters) != result_str.UTF8Length)
|
||||
goto out;
|
||||
|
||||
result_copy = g_strdup (result_str.UTF8Characters);
|
||||
result_copy = g_strndup (result_str.UTF8Characters, result_str.UTF8Length);
|
||||
|
||||
out:
|
||||
funcs.releasevariantvalue (&result);
|
||||
@ -150,6 +145,8 @@ check_origin_and_protocol (NPP instance)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* =============== public entry points =================== */
|
||||
|
||||
NPError
|
||||
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
||||
{
|
||||
@ -458,7 +455,7 @@ plugin_enable_extension (PluginObject *obj,
|
||||
NPString uuid,
|
||||
gboolean enabled)
|
||||
{
|
||||
const gchar *uuid_str = uuid.UTF8Characters;
|
||||
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||
if (!uuid_is_valid (uuid_str))
|
||||
return FALSE;
|
||||
|
||||
@ -471,6 +468,8 @@ plugin_enable_extension (PluginObject *obj,
|
||||
NULL, /* callback */
|
||||
NULL /* user_data */);
|
||||
|
||||
g_free (uuid_str);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -479,21 +478,32 @@ plugin_install_extension (PluginObject *obj,
|
||||
NPString uuid,
|
||||
NPString version_tag)
|
||||
{
|
||||
const gchar *uuid_str = uuid.UTF8Characters;
|
||||
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||
gchar *version_tag_str;
|
||||
|
||||
if (!uuid_is_valid (uuid_str))
|
||||
return FALSE;
|
||||
{
|
||||
g_free (uuid_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
version_tag_str = g_strndup (version_tag.UTF8Characters,
|
||||
version_tag.UTF8Length);
|
||||
|
||||
g_dbus_proxy_call (obj->proxy,
|
||||
"InstallRemoteExtension",
|
||||
g_variant_new ("(ss)",
|
||||
uuid_str,
|
||||
version_tag.UTF8Characters),
|
||||
version_tag_str),
|
||||
G_DBUS_CALL_FLAGS_NONE,
|
||||
-1, /* timeout */
|
||||
NULL, /* cancellable */
|
||||
NULL, /* callback */
|
||||
NULL /* user_data */);
|
||||
|
||||
g_free (uuid_str);
|
||||
g_free (version_tag_str);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -504,11 +514,14 @@ plugin_uninstall_extension (PluginObject *obj,
|
||||
{
|
||||
GError *error = NULL;
|
||||
GVariant *res;
|
||||
const gchar *uuid_str;
|
||||
gchar *uuid_str;
|
||||
|
||||
uuid_str = uuid.UTF8Characters;
|
||||
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||
if (!uuid_is_valid (uuid_str))
|
||||
return FALSE;
|
||||
{
|
||||
g_free (uuid_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||
"UninstallExtension",
|
||||
@ -519,6 +532,8 @@ plugin_uninstall_extension (PluginObject *obj,
|
||||
NULL, /* cancellable */
|
||||
&error);
|
||||
|
||||
g_free (uuid_str);
|
||||
|
||||
if (!res)
|
||||
{
|
||||
g_warning ("Failed to uninstall extension: %s", error->message);
|
||||
@ -536,11 +551,14 @@ plugin_get_info (PluginObject *obj,
|
||||
{
|
||||
GError *error = NULL;
|
||||
GVariant *res;
|
||||
const gchar *uuid_str;
|
||||
gchar *uuid_str;
|
||||
|
||||
uuid_str = uuid.UTF8Characters;
|
||||
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||
if (!uuid_is_valid (uuid_str))
|
||||
return FALSE;
|
||||
{
|
||||
g_free (uuid_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||
"GetExtensionInfo",
|
||||
@ -550,6 +568,8 @@ plugin_get_info (PluginObject *obj,
|
||||
NULL, /* cancellable */
|
||||
&error);
|
||||
|
||||
g_free (uuid_str);
|
||||
|
||||
if (!res)
|
||||
{
|
||||
g_warning ("Failed to retrieve extension metadata: %s", error->message);
|
||||
@ -567,11 +587,14 @@ plugin_get_errors (PluginObject *obj,
|
||||
{
|
||||
GError *error = NULL;
|
||||
GVariant *res;
|
||||
const gchar *uuid_str;
|
||||
gchar *uuid_str;
|
||||
|
||||
uuid_str = uuid.UTF8Characters;
|
||||
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||
if (!uuid_is_valid (uuid_str))
|
||||
return FALSE;
|
||||
{
|
||||
g_free (uuid_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||
"GetExtensionErrors",
|
||||
@ -581,6 +604,8 @@ plugin_get_errors (PluginObject *obj,
|
||||
NULL, /* cancellable */
|
||||
&error);
|
||||
|
||||
g_free (uuid_str);
|
||||
|
||||
if (!res)
|
||||
{
|
||||
g_warning ("Failed to retrieve errors: %s", error->message);
|
||||
@ -636,7 +661,8 @@ plugin_get_shell_version (PluginObject *obj,
|
||||
STRINGN_TO_NPVARIANT (buffer, length, *result);
|
||||
|
||||
out:
|
||||
g_variant_unref (res);
|
||||
if (res)
|
||||
g_variant_unref (res);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -816,6 +842,11 @@ NPP_GetValue(NPP instance,
|
||||
|
||||
*(NPObject**)value = funcs.createobject (instance, &plugin_class);
|
||||
break;
|
||||
|
||||
case NPPVpluginNeedsXEmbed:
|
||||
*(bool *)value = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.1.92],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.2.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -9,7 +9,7 @@ AC_CONFIG_AUX_DIR([config])
|
||||
AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
|
||||
AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.10 dist-xz no-dist-gzip foreign])
|
||||
AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar foreign])
|
||||
AM_MAINTAINER_MODE([enable])
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||
@ -66,8 +66,8 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||
|
||||
CLUTTER_MIN_VERSION=1.7.5
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||
GJS_MIN_VERSION=1.29.15
|
||||
MUTTER_MIN_VERSION=3.0.0
|
||||
GJS_MIN_VERSION=1.29.18
|
||||
MUTTER_MIN_VERSION=3.2.1
|
||||
FOLKS_MIN_VERSION=0.5.2
|
||||
GTK_MIN_VERSION=3.0.0
|
||||
GIO_MIN_VERSION=2.29.10
|
||||
|
@ -50,6 +50,14 @@
|
||||
<default>[]</default>
|
||||
<_summary>History for the looking glass dialog</_summary>
|
||||
</key>
|
||||
<key name="saved-im-presence" type="i">
|
||||
<default>1</default>
|
||||
<_summary></_summary>
|
||||
</key>
|
||||
<key name="saved-session-presence" type="i">
|
||||
<default>0</default>
|
||||
<_summary></_summary>
|
||||
</key>
|
||||
<child name="clock" schema="org.gnome.shell.clock"/>
|
||||
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
||||
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
||||
|
@ -98,8 +98,12 @@
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
.login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.login-dialog-prompt-layout {
|
||||
padding-bottom: 64px;
|
||||
padding-bottom: 32px;
|
||||
}
|
||||
.login-dialog-prompt-label {
|
||||
color: white;
|
||||
@ -117,6 +121,16 @@
|
||||
width: 15em;
|
||||
}
|
||||
|
||||
.login-dialog-prompt-entry .capslock-warning {
|
||||
icon-size: 16px;
|
||||
warning-color: #999;
|
||||
}
|
||||
|
||||
.login-dialog-prompt-entry:insensitive {
|
||||
color: rgba(0,0,0,0.7);
|
||||
border: 2px solid #565656;
|
||||
}
|
||||
|
||||
.login-dialog-session-list {
|
||||
color: #ffffff;
|
||||
font-size: 10.5pt;
|
||||
|
@ -907,7 +907,7 @@ StTooltip StLabel {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.lg-extension-actions {
|
||||
.lg-extension-meta {
|
||||
spacing: 6px;
|
||||
}
|
||||
|
||||
@ -1907,6 +1907,12 @@ StTooltip StLabel {
|
||||
border: 2px solid #3465a4;
|
||||
}
|
||||
|
||||
.polkit-dialog-password-entry .capslock-warning {
|
||||
icon-size: 16px;
|
||||
warning-color: #999;
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
.polkit-dialog-error-label {
|
||||
font-size: 10pt;
|
||||
color: #ffff00;
|
||||
@ -1925,14 +1931,6 @@ StTooltip StLabel {
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
.network-dialog-show-password-checkbox {
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
font-size: 10pt;
|
||||
color: white;
|
||||
spacing: 10px;
|
||||
}
|
||||
|
||||
.network-dialog-secret-table {
|
||||
spacing-rows: 15px;
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ nobase_dist_js_DATA = \
|
||||
ui/messageTray.js \
|
||||
ui/modalDialog.js \
|
||||
ui/networkAgent.js \
|
||||
ui/shellEntry.js \
|
||||
ui/shellMountOperation.js \
|
||||
ui/notificationDaemon.js \
|
||||
ui/overview.js \
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
*
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/*
|
||||
* Copyright 2011 Red Hat, Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -1,4 +1,4 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
*
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/*
|
||||
* Copyright 2011 Red Hat, Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -297,6 +297,20 @@ UserList.prototype = {
|
||||
x_align: St.Align.START,
|
||||
y_align: St.Align.MIDDLE });
|
||||
this._items = {};
|
||||
|
||||
this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems));
|
||||
},
|
||||
|
||||
_moveFocusToItems: function() {
|
||||
let hasItems = Object.keys(this._items).length > 0;
|
||||
|
||||
if (!hasItems)
|
||||
return;
|
||||
|
||||
if (global.stage.get_key_focus() != this.actor)
|
||||
return;
|
||||
|
||||
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||
},
|
||||
|
||||
_showItem: function(item) {
|
||||
@ -502,6 +516,8 @@ UserList.prototype = {
|
||||
item.showFocusAnimation(0);
|
||||
}));
|
||||
|
||||
this._moveFocusToItems();
|
||||
|
||||
this.emit('item-added', item);
|
||||
},
|
||||
|
||||
@ -694,10 +710,13 @@ SessionList.prototype = {
|
||||
let ids = GdmGreeter.get_session_ids();
|
||||
ids.sort();
|
||||
|
||||
if (ids.length <= 1)
|
||||
if (ids.length <= 1) {
|
||||
this._box.hide();
|
||||
else
|
||||
this._button.hide();
|
||||
} else {
|
||||
this._button.show();
|
||||
this._box.show();
|
||||
}
|
||||
|
||||
for (let i = 0; i < ids.length; i++) {
|
||||
let [sessionName, sessionDescription] = GdmGreeter.get_session_name_and_description(ids[i]);
|
||||
@ -922,6 +941,7 @@ LoginDialog.prototype = {
|
||||
|
||||
function() {
|
||||
this._sessionList.close();
|
||||
this._promptFingerprintMessage.hide();
|
||||
this._userList.actor.show();
|
||||
this._userList.actor.opacity = 255;
|
||||
return this._userList.showItems();
|
||||
@ -943,7 +963,18 @@ LoginDialog.prototype = {
|
||||
},
|
||||
|
||||
_onInfo: function(client, serviceName, info) {
|
||||
// we don't want fingerprint messages with the word UPEK in them
|
||||
// We don't display fingerprint messages, because they
|
||||
// have words like UPEK in them. Instead we use the messages
|
||||
// as a cue to display our own message.
|
||||
if (serviceName == _FINGERPRINT_SERVICE_NAME &&
|
||||
this._haveFingerprintReader &&
|
||||
(!this._promptFingerprintMessage.visible ||
|
||||
this._promptFingerprintMessage.opacity != 255)) {
|
||||
|
||||
_fadeInActor(this._promptFingerprintMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
Main.notifyError(info);
|
||||
@ -971,10 +1002,10 @@ LoginDialog.prototype = {
|
||||
},
|
||||
|
||||
function() {
|
||||
if (!this._haveFingerprintReader)
|
||||
return null;
|
||||
|
||||
return _fadeInActor(this._promptFingerprintMessage);
|
||||
// Show it with 0 opacity so we preallocate space for it
|
||||
// in the event we need to fade in the message
|
||||
this._promptFingerprintMessage.opacity = 0;
|
||||
this._promptFingerprintMessage.show();
|
||||
},
|
||||
|
||||
function() {
|
||||
@ -1046,6 +1077,8 @@ LoginDialog.prototype = {
|
||||
|
||||
function() {
|
||||
this._promptFingerprintMessage.hide();
|
||||
this._promptEntry.reactive = true;
|
||||
this._promptEntry.remove_style_pseudo_class('insensitive');
|
||||
this._promptEntry.set_text('');
|
||||
}];
|
||||
|
||||
@ -1061,7 +1094,8 @@ LoginDialog.prototype = {
|
||||
|
||||
function() {
|
||||
let _text = this._promptEntry.get_text();
|
||||
this._promptEntry.set_text('');
|
||||
this._promptEntry.reactive = false;
|
||||
this._promptEntry.add_style_pseudo_class('insensitive');
|
||||
this._greeterClient.call_answer_query(serviceName, _text);
|
||||
}];
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
*
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/*
|
||||
* Copyright 2011 Red Hat, Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -1,4 +1,5 @@
|
||||
/* mode: js2; indent-tabs-mode: nil; tab-size: 4 */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
/* The name of this package (not localized) */
|
||||
const PACKAGE_NAME = '@PACKAGE_NAME@';
|
||||
/* The version of this package */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
@ -1,3 +1,5 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
|
||||
@ -36,7 +38,7 @@ function recursivelyDeleteDir(dir) {
|
||||
let child = dir.get_child(info.get_name());
|
||||
if (type == Gio.FileType.REGULAR)
|
||||
deleteGFile(child);
|
||||
else if (type == Gio.TypeType.DIRECTORY)
|
||||
else if (type == Gio.FileType.DIRECTORY)
|
||||
recursivelyDeleteDir(child);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
/*
|
||||
* This function is intended to extend the String object and provide
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
@ -78,7 +78,7 @@ function Inhibitor(objectPath) {
|
||||
Inhibitor.prototype = {
|
||||
_init: function(objectPath) {
|
||||
DBus.session.proxifyObject(this,
|
||||
"org.gnome.SessionManager",
|
||||
'org.gnome.SessionManager',
|
||||
objectPath);
|
||||
this.isLoaded = false;
|
||||
this._loadingPropertiesCount = InhibitorIface.properties.length;
|
||||
@ -94,7 +94,7 @@ Inhibitor.prototype = {
|
||||
|
||||
if (this._loadingPropertiesCount == 0) {
|
||||
this.isLoaded = true;
|
||||
this.emit("is-loaded");
|
||||
this.emit('is-loaded');
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
@ -1,4 +1,4 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
// parse:
|
||||
// @params: caller-provided parameter object, or %null
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Gdk = imports.gi.Gdk;
|
||||
const Gio = imports.gi.Gio;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Scripting = imports.ui.scripting;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
@ -134,11 +134,40 @@ AltTabPopup.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
show : function(backward, binding, mask) {
|
||||
_getAppLists: function() {
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
let appSys = Shell.AppSystem.get_default();
|
||||
let apps = appSys.get_running ();
|
||||
let allApps = appSys.get_running ();
|
||||
|
||||
if (!apps.length)
|
||||
let screen = global.screen;
|
||||
let display = screen.get_display();
|
||||
let windows = display.get_tab_list(Meta.TabList.NORMAL, screen,
|
||||
screen.get_active_workspace());
|
||||
|
||||
// windows is only the windows on the current workspace. For
|
||||
// each one, if it corresponds to an app we know, move that
|
||||
// app from allApps to apps.
|
||||
let apps = [];
|
||||
for (let i = 0; i < windows.length && allApps.length != 0; i++) {
|
||||
let app = tracker.get_window_app(windows[i]);
|
||||
let index = allApps.indexOf(app);
|
||||
if (index != -1) {
|
||||
apps.push(app);
|
||||
allApps.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Now @apps is a list of apps on the current workspace, in
|
||||
// standard Alt+Tab order (MRU except for minimized windows),
|
||||
// and allApps is a list of apps that only appear on other
|
||||
// workspaces, sorted by user_time, which is good enough.
|
||||
return [apps, allApps];
|
||||
},
|
||||
|
||||
show : function(backward, binding, mask) {
|
||||
let [localApps, otherApps] = this._getAppLists();
|
||||
|
||||
if (localApps.length == 0 && otherApps.length == 0)
|
||||
return false;
|
||||
|
||||
if (!Main.pushModal(this.actor))
|
||||
@ -152,7 +181,7 @@ AltTabPopup.prototype = {
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||
|
||||
this._appSwitcher = new AppSwitcher(apps, this);
|
||||
this._appSwitcher = new AppSwitcher(localApps, otherApps, this);
|
||||
this.actor.add_actor(this._appSwitcher.actor);
|
||||
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
|
||||
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
|
||||
@ -846,33 +875,32 @@ AppIcon.prototype = {
|
||||
}
|
||||
};
|
||||
|
||||
function AppSwitcher(apps, altTabPopup) {
|
||||
this._init(apps, altTabPopup);
|
||||
function AppSwitcher() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
AppSwitcher.prototype = {
|
||||
__proto__ : SwitcherList.prototype,
|
||||
|
||||
_init : function(apps, altTabPopup) {
|
||||
_init : function(localApps, otherApps, altTabPopup) {
|
||||
SwitcherList.prototype._init.call(this, true);
|
||||
|
||||
// Construct the AppIcons, sort by time, add to the popup
|
||||
// Construct the AppIcons, add to the popup
|
||||
let activeWorkspace = global.screen.get_active_workspace();
|
||||
let workspaceIcons = [];
|
||||
let otherIcons = [];
|
||||
for (let i = 0; i < apps.length; i++) {
|
||||
let appIcon = new AppIcon(apps[i]);
|
||||
for (let i = 0; i < localApps.length; i++) {
|
||||
let appIcon = new AppIcon(localApps[i]);
|
||||
// Cache the window list now; we don't handle dynamic changes here,
|
||||
// and we don't want to be continually retrieving it
|
||||
appIcon.cachedWindows = appIcon.app.get_windows();
|
||||
if (this._hasWindowsOnWorkspace(appIcon, activeWorkspace))
|
||||
workspaceIcons.push(appIcon);
|
||||
else
|
||||
otherIcons.push(appIcon);
|
||||
workspaceIcons.push(appIcon);
|
||||
}
|
||||
for (let i = 0; i < otherApps.length; i++) {
|
||||
let appIcon = new AppIcon(otherApps[i]);
|
||||
appIcon.cachedWindows = appIcon.app.get_windows();
|
||||
otherIcons.push(appIcon);
|
||||
}
|
||||
|
||||
workspaceIcons.sort(Lang.bind(this, this._sortAppIcon));
|
||||
otherIcons.sort(Lang.bind(this, this._sortAppIcon));
|
||||
|
||||
this.icons = [];
|
||||
this._arrows = [];
|
||||
@ -1012,19 +1040,6 @@ AppSwitcher.prototype = {
|
||||
|
||||
if (appIcon.cachedWindows.length == 1)
|
||||
arrow.hide();
|
||||
},
|
||||
|
||||
_hasWindowsOnWorkspace: function(appIcon, workspace) {
|
||||
let windows = appIcon.cachedWindows;
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
if (windows[i].get_workspace() == workspace)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
_sortAppIcon : function(appIcon1, appIcon2) {
|
||||
return appIcon1.app.compare(appIcon2.app);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GLib = imports.gi.GLib;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Shell = imports.gi.Shell;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const DBus = imports.dbus;
|
||||
@ -209,10 +209,14 @@ AutomountManager.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
// Volume is already mounted, don't bother.
|
||||
if (volume.get_mount())
|
||||
return;
|
||||
|
||||
if (!this._settings.get_boolean(SETTING_ENABLE_AUTOMOUNT) ||
|
||||
!volume.should_automount() ||
|
||||
!volume.can_mount()) {
|
||||
// allow the autorun to run anyway; this can happen if the
|
||||
// allow the autorun to run anyway; this can happen if the
|
||||
// mount gets added programmatically later, even if
|
||||
// should_automount() or can_mount() are false, like for
|
||||
// blank optical media.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const DBus = imports.dbus;
|
||||
@ -277,7 +277,7 @@ AutorunResidentSource.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init: function() {
|
||||
MessageTray.Source.prototype._init.call(this, _('Removable Devices'));
|
||||
MessageTray.Source.prototype._init.call(this, _("Removable Devices"));
|
||||
|
||||
this._mounts = [];
|
||||
|
||||
@ -491,7 +491,7 @@ AutorunTransientDispatcher.prototype = {
|
||||
let app = null;
|
||||
|
||||
if (setting == AutorunSetting.RUN) {
|
||||
app = Gio.app_info_get_default_for_type(type, false);
|
||||
app = Gio.app_info_get_default_for_type(contentTypes[0], false);
|
||||
} else if (setting == AutorunSetting.FILES) {
|
||||
app = Gio.app_info_get_default_for_type('inode/directory', false);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
@ -46,6 +46,7 @@ BoxPointer.prototype = {
|
||||
this._yOffset = 0;
|
||||
this._xPosition = 0;
|
||||
this._yPosition = 0;
|
||||
this._sourceAlignment = 0.5;
|
||||
},
|
||||
|
||||
show: function(animate, onComplete) {
|
||||
@ -75,7 +76,7 @@ BoxPointer.prototype = {
|
||||
Tweener.addTween(this, { opacity: 255,
|
||||
xOffset: 0,
|
||||
yOffset: 0,
|
||||
transition: "linear",
|
||||
transition: 'linear',
|
||||
onComplete: onComplete,
|
||||
time: POPUP_ANIMATION_TIME });
|
||||
},
|
||||
@ -106,7 +107,7 @@ BoxPointer.prototype = {
|
||||
Tweener.addTween(this, { opacity: 0,
|
||||
xOffset: xOffset,
|
||||
yOffset: yOffset,
|
||||
transition: "linear",
|
||||
transition: 'linear',
|
||||
time: POPUP_ANIMATION_TIME,
|
||||
onComplete: Lang.bind(this, function () {
|
||||
this.actor.hide();
|
||||
@ -180,7 +181,7 @@ BoxPointer.prototype = {
|
||||
this.bin.allocate(childBox, flags);
|
||||
|
||||
if (this._sourceActor && this._sourceActor.mapped)
|
||||
this._reposition(this._sourceActor, this._alignment);
|
||||
this._reposition(this._sourceActor, this._arrowAlignment);
|
||||
},
|
||||
|
||||
_drawBorder: function(area) {
|
||||
@ -312,24 +313,37 @@ BoxPointer.prototype = {
|
||||
this.actor.show();
|
||||
|
||||
this._sourceActor = sourceActor;
|
||||
this._alignment = alignment;
|
||||
this._arrowAlignment = alignment;
|
||||
|
||||
this._reposition(sourceActor, alignment);
|
||||
},
|
||||
|
||||
setSourceAlignment: function(alignment) {
|
||||
this._sourceAlignment = alignment;
|
||||
|
||||
if (!this._sourceActor)
|
||||
return;
|
||||
|
||||
// We need to show it now to force an allocation,
|
||||
// so that we can query the correct size.
|
||||
this.actor.show();
|
||||
|
||||
this._reposition(this._sourceActor, this._arrowAlignment);
|
||||
},
|
||||
|
||||
_reposition: function(sourceActor, alignment) {
|
||||
// Position correctly relative to the sourceActor
|
||||
let sourceNode = sourceActor.get_theme_node();
|
||||
let sourceContentBox = sourceNode.get_content_box(sourceActor.get_allocation_box());
|
||||
let sourceAllocation = Shell.util_get_transformed_allocation(sourceActor);
|
||||
let sourceCenterX = sourceAllocation.x1 + sourceContentBox.x1 + (sourceContentBox.x2 - sourceContentBox.x1) / 2;
|
||||
let sourceCenterY = sourceAllocation.y1 + sourceContentBox.y1 + (sourceContentBox.y2 - sourceContentBox.y1) / 2;
|
||||
let sourceCenterX = sourceAllocation.x1 + sourceContentBox.x1 + (sourceContentBox.x2 - sourceContentBox.x1) * this._sourceAlignment;
|
||||
let sourceCenterY = sourceAllocation.y1 + sourceContentBox.y1 + (sourceContentBox.y2 - sourceContentBox.y1) * this._sourceAlignment;
|
||||
let [minWidth, minHeight, natWidth, natHeight] = this.actor.get_preferred_size();
|
||||
|
||||
// We also want to keep it onscreen, and separated from the
|
||||
// edge by the same distance as the main part of the box is
|
||||
// separated from its sourceActor
|
||||
let primary = Main.layoutManager.primaryMonitor;
|
||||
let monitor = Main.layoutManager.findMonitorForActor(sourceActor);
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let borderWidth = themeNode.get_length('-arrow-border-width');
|
||||
let arrowBase = themeNode.get_length('-arrow-base');
|
||||
@ -364,8 +378,8 @@ BoxPointer.prototype = {
|
||||
case St.Side.BOTTOM:
|
||||
resX = sourceCenterX - (halfMargin + (natWidth - margin) * alignment);
|
||||
|
||||
resX = Math.max(resX, primary.x + 10);
|
||||
resX = Math.min(resX, primary.x + primary.width - (10 + natWidth));
|
||||
resX = Math.max(resX, monitor.x + 10);
|
||||
resX = Math.min(resX, monitor.x + monitor.width - (10 + natWidth));
|
||||
this.setArrowOrigin(sourceCenterX - resX);
|
||||
break;
|
||||
|
||||
@ -373,8 +387,8 @@ BoxPointer.prototype = {
|
||||
case St.Side.RIGHT:
|
||||
resY = sourceCenterY - (halfMargin + (natHeight - margin) * alignment);
|
||||
|
||||
resY = Math.max(resY, primary.y + 10);
|
||||
resY = Math.min(resY, primary.y + primary.height - (10 + natHeight));
|
||||
resY = Math.max(resY, monitor.y + 10);
|
||||
resY = Math.min(resY, monitor.y + monitor.height - (10 + natHeight));
|
||||
|
||||
this.setArrowOrigin(sourceCenterY - resY);
|
||||
break;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Folks = imports.gi.Folks
|
||||
const Lang = imports.lang;
|
||||
@ -26,7 +26,8 @@ function Contact(id) {
|
||||
|
||||
Contact.prototype = {
|
||||
_init: function(id) {
|
||||
this.individual = Shell.ContactSystem.get_default().get_individual(id);
|
||||
this._contactSys = Shell.ContactSystem.get_default();
|
||||
this.individual = this._contactSys.get_individual(id);
|
||||
|
||||
this.actor = new St.Bin({ style_class: 'contact',
|
||||
reactive: true,
|
||||
@ -56,7 +57,12 @@ Contact.prototype = {
|
||||
x_align: St.Align.START,
|
||||
y_align: St.Align.MIDDLE });
|
||||
|
||||
let aliasText = this.individual.alias || _("Unknown");
|
||||
let email = this._contactSys.get_email_for_display(this.individual);
|
||||
let aliasText = this.individual.alias ||
|
||||
this.individual.full_name ||
|
||||
this.individual.nickname ||
|
||||
email ||
|
||||
_("Unknown");
|
||||
let aliasLabel = new St.Label({ text: aliasText,
|
||||
style_class: 'contact-details-alias' });
|
||||
details.add(aliasLabel, { x_fill: true,
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
|
110
js/ui/dash.js
110
js/ui/dash.js
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Signals = imports.signals;
|
||||
@ -37,6 +37,7 @@ DashItemContainer.prototype = {
|
||||
this.child = null;
|
||||
this._childScale = 1;
|
||||
this._childOpacity = 255;
|
||||
this.animatingOut = false;
|
||||
},
|
||||
|
||||
_allocate: function(actor, box, flags) {
|
||||
@ -115,6 +116,7 @@ DashItemContainer.prototype = {
|
||||
return;
|
||||
}
|
||||
|
||||
this.animatingOut = true;
|
||||
this.childScale = 1.0;
|
||||
Tweener.addTween(this,
|
||||
{ childScale: 0.0,
|
||||
@ -177,12 +179,6 @@ RemoveFavoriteIcon.prototype = {
|
||||
this._iconBin._delegate = this;
|
||||
|
||||
this.setChild(this._iconBin);
|
||||
this.hiding = false;
|
||||
},
|
||||
|
||||
animateOutAndDestroy: function() {
|
||||
DashItemContainer.prototype.animateOutAndDestroy.call(this);
|
||||
this.hiding = true;
|
||||
},
|
||||
|
||||
_createIcon: function(size) {
|
||||
@ -314,15 +310,12 @@ Dash.prototype = {
|
||||
_endDrag: function() {
|
||||
this._clearDragPlaceholder();
|
||||
if (this._favRemoveTarget) {
|
||||
this._favRemoveTarget.actor.hide();
|
||||
this._adjustIconSize();
|
||||
this._favRemoveTarget.actor.show();
|
||||
|
||||
this._favRemoveTarget.animateOutAndDestroy();
|
||||
this._favRemoveTarget.actor.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
this._favRemoveTarget = null;
|
||||
}));
|
||||
this._adjustIconSize();
|
||||
}
|
||||
DND.removeDragMonitor(this._dragMonitor);
|
||||
},
|
||||
@ -401,8 +394,18 @@ Dash.prototype = {
|
||||
},
|
||||
|
||||
_adjustIconSize: function() {
|
||||
let children = this._box.get_children();
|
||||
if (children.length == 0) {
|
||||
// For the icon size, we only consider children which are "proper"
|
||||
// icons (i.e. ignoring drag placeholders) and which are not
|
||||
// animating out (which means they will be destroyed at the end of
|
||||
// the animation)
|
||||
let iconChildren = this._box.get_children().filter(function(actor) {
|
||||
return actor._delegate.child &&
|
||||
actor._delegate.child._delegate &&
|
||||
actor._delegate.child._delegate.icon &&
|
||||
!actor._delegate.animatingOut;
|
||||
});
|
||||
|
||||
if (iconChildren.length == 0) {
|
||||
this._box.add_style_pseudo_class('empty');
|
||||
return;
|
||||
}
|
||||
@ -412,23 +415,45 @@ Dash.prototype = {
|
||||
if (this._maxHeight == -1)
|
||||
return;
|
||||
|
||||
let iconChildren = children.filter(function(actor) {
|
||||
return actor.visible &&
|
||||
actor._delegate.child &&
|
||||
actor._delegate.child._delegate &&
|
||||
actor._delegate.child._delegate.icon;
|
||||
});
|
||||
|
||||
// Compute the amount of extra space (or missing space) we have
|
||||
// per icon with the current icon size
|
||||
let [minHeight, natHeight] = this.actor.get_preferred_height(-1);
|
||||
let diff = (this._maxHeight - natHeight) / iconChildren.length;
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let maxAllocation = new Clutter.ActorBox({ x1: 0, y1: 0,
|
||||
x2: 42 /* whatever */,
|
||||
y2: this._maxHeight });
|
||||
let maxContent = themeNode.get_content_box(maxAllocation);
|
||||
let availHeight = maxContent.y2 - maxContent.y1;
|
||||
let spacing = themeNode.get_length('spacing');
|
||||
|
||||
|
||||
let firstIcon = iconChildren[0]._delegate.child._delegate.icon;
|
||||
|
||||
let minHeight, natHeight;
|
||||
|
||||
// Enforce the current icon size during the size request if
|
||||
// the icon is animating
|
||||
if (firstIcon._animating) {
|
||||
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
|
||||
|
||||
firstIcon.icon.set_size(this.iconSize, this.iconSize);
|
||||
[minHeight, natHeight] = iconChildren[0].get_preferred_height(-1);
|
||||
|
||||
firstIcon.icon.set_size(currentWidth, currentHeight);
|
||||
} else {
|
||||
[minHeight, natHeight] = iconChildren[0].get_preferred_height(-1);
|
||||
}
|
||||
|
||||
|
||||
// Subtract icon padding and box spacing from the available height
|
||||
availHeight -= iconChildren.length * (natHeight - this.iconSize) +
|
||||
(iconChildren.length - 1) * spacing;
|
||||
|
||||
let availSize = availHeight / iconChildren.length;
|
||||
|
||||
let iconSizes = [ 16, 22, 24, 32, 48, 64 ];
|
||||
|
||||
let newIconSize = 16;
|
||||
for (let i = 0; i < iconSizes.length; i++) {
|
||||
if (iconSizes[i] < this.iconSize + diff)
|
||||
if (iconSizes[i] < availSize)
|
||||
newIconSize = iconSizes[i];
|
||||
}
|
||||
|
||||
@ -459,11 +484,15 @@ Dash.prototype = {
|
||||
icon.icon.set_size(icon.icon.width * scale,
|
||||
icon.icon.height * scale);
|
||||
|
||||
icon._animating = true;
|
||||
Tweener.addTween(icon.icon,
|
||||
{ width: targetWidth,
|
||||
height: targetHeight,
|
||||
time: DASH_ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: function() {
|
||||
icon._animating = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
@ -566,29 +595,7 @@ Dash.prototype = {
|
||||
this._box.insert_actor(addedItems[i].item.actor,
|
||||
addedItems[i].pos);
|
||||
|
||||
// Hide removed actors to not take them into account
|
||||
// when adjusting the icon size ...
|
||||
for (let i = 0; i < removedActors.length; i++)
|
||||
removedActors[i].hide();
|
||||
|
||||
// ... and do the same for the remove target if necessary
|
||||
if (this._favRemoveTarget && this._favRemoveTarget.hiding)
|
||||
this._favRemoveTarget.actor.hide();
|
||||
|
||||
this._adjustIconSize();
|
||||
|
||||
if (this._favRemoveTarget && this._favRemoveTarget.hiding)
|
||||
this._favRemoveTarget.actor.show();
|
||||
|
||||
// Skip animations on first run when adding the initial set
|
||||
// of items, to avoid all items zooming in at once
|
||||
if (!this._shownInitially) {
|
||||
this._shownInitially = true;
|
||||
return;
|
||||
}
|
||||
|
||||
for (let i = 0; i < removedActors.length; i++) {
|
||||
removedActors[i].show();
|
||||
let item = removedActors[i]._delegate;
|
||||
|
||||
// Don't animate item removal when the overview is hidden
|
||||
@ -598,6 +605,15 @@ Dash.prototype = {
|
||||
item.actor.destroy();
|
||||
}
|
||||
|
||||
this._adjustIconSize();
|
||||
|
||||
// Skip animations on first run when adding the initial set
|
||||
// of items, to avoid all items zooming in at once
|
||||
if (!this._shownInitially) {
|
||||
this._shownInitially = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't animate item addition when the overview is hidden
|
||||
if (!Main.overview.visible)
|
||||
return;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DocInfo = imports.misc.docInfo;
|
||||
const Params = imports.misc.params;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
*
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/*
|
||||
* Copyright 2010 Red Hat, Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
imports.gi.versions.Clutter = '1.0';
|
||||
imports.gi.versions.Gio = '2.0';
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
@ -289,7 +289,7 @@ function loadExtension(dir, enabled, type) {
|
||||
}
|
||||
|
||||
if (extensions[uuid] != undefined) {
|
||||
logExtensionError(uuid, "extension already loaded");
|
||||
logExtensionError(uuid, 'extension already loaded');
|
||||
return;
|
||||
}
|
||||
|
||||
@ -450,7 +450,6 @@ function _loadExtensionsIn(dir, type) {
|
||||
}
|
||||
|
||||
function loadExtensions() {
|
||||
_loadExtensionsIn(userExtensionsDir, ExtensionType.PER_USER);
|
||||
let systemDataDirs = GLib.get_system_data_dirs();
|
||||
for (let i = 0; i < systemDataDirs.length; i++) {
|
||||
let dirPath = systemDataDirs[i] + '/gnome-shell/extensions';
|
||||
@ -458,6 +457,7 @@ function loadExtensions() {
|
||||
if (dir.query_exists(null))
|
||||
_loadExtensionsIn(dir, ExtensionType.SYSTEM);
|
||||
}
|
||||
_loadExtensionsIn(userExtensionsDir, ExtensionType.PER_USER);
|
||||
}
|
||||
|
||||
function InstallExtensionDialog(uuid, version_tag, name) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Shell = imports.gi.Shell;
|
||||
@ -147,6 +147,11 @@ BaseIcon.prototype = {
|
||||
size = found ? len : ICON_SIZE;
|
||||
}
|
||||
|
||||
// don't create icons unnecessarily
|
||||
if (size == this.iconSize &&
|
||||
this._iconBin.child)
|
||||
return;
|
||||
|
||||
this._createIconTexture(size);
|
||||
}
|
||||
};
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Caribou = imports.gi.Caribou;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
@ -75,7 +75,7 @@ Key.prototype = {
|
||||
this._extended_keys = this._key.get_extended_keys();
|
||||
this._extended_keyboard = null;
|
||||
|
||||
if (this._key.name == "Control_L" || this._key.name == "Alt_L")
|
||||
if (this._key.name == 'Control_L' || this._key.name == 'Alt_L')
|
||||
this._key.latch = true;
|
||||
|
||||
this._key.connect('key-pressed', Lang.bind(this, function ()
|
||||
@ -218,7 +218,7 @@ Keyboard.prototype = {
|
||||
this._redraw();
|
||||
},
|
||||
|
||||
_settingsChanged: function () {
|
||||
_settingsChanged: function (settings, key) {
|
||||
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD);
|
||||
if (!this._enableKeyboard && !this._keyboard)
|
||||
return;
|
||||
@ -228,9 +228,20 @@ Keyboard.prototype = {
|
||||
|
||||
if (this._keyboard)
|
||||
this._destroyKeyboard();
|
||||
if (this._enableKeyboard)
|
||||
this._setupKeyboard();
|
||||
else
|
||||
|
||||
if (this._enableKeyboard) {
|
||||
// If we've been called because the setting actually just
|
||||
// changed to true (as opposed to being called from
|
||||
// this._init()), then we want to pop up the keyboard.
|
||||
let showKeyboard = (settings != null);
|
||||
|
||||
// However, caribou-gtk-module or this._onKeyFocusChanged
|
||||
// will probably immediately tell us to hide it, so we
|
||||
// have to fake things out so we'll ignore that request.
|
||||
if (showKeyboard)
|
||||
this._timestamp = global.display.get_current_time_roundtrip() + 1;
|
||||
this._setupKeyboard(showKeyboard);
|
||||
} else
|
||||
Main.layoutManager.hideKeyboard(true);
|
||||
},
|
||||
|
||||
@ -246,7 +257,7 @@ Keyboard.prototype = {
|
||||
this._destroySource();
|
||||
},
|
||||
|
||||
_setupKeyboard: function() {
|
||||
_setupKeyboard: function(show) {
|
||||
this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true });
|
||||
Main.layoutManager.keyboardBox.add_actor(this.actor);
|
||||
Main.layoutManager.trackChrome(this.actor);
|
||||
@ -263,20 +274,26 @@ Keyboard.prototype = {
|
||||
|
||||
this._keyboardNotifyId = this._keyboard.connect('notify::active-group', Lang.bind(this, this._onGroupChanged));
|
||||
this._focusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged));
|
||||
this._createSource();
|
||||
|
||||
if (show)
|
||||
this.show();
|
||||
else
|
||||
this._createSource();
|
||||
},
|
||||
|
||||
_onKeyFocusChanged: function () {
|
||||
let focus = global.stage.key_focus;
|
||||
|
||||
// Showing an extended key popup will grab focus, but ignore that
|
||||
if (focus && focus._extended_keys)
|
||||
// Showing an extended key popup and clicking a key from the extended keys
|
||||
// will grab focus, but ignore that
|
||||
if (focus && (focus._extended_keys || (focus._key && focus._key.extended_key)))
|
||||
return;
|
||||
|
||||
let time = global.current_event_time();
|
||||
if (focus instanceof Clutter.Text)
|
||||
this.show();
|
||||
this.Show(time);
|
||||
else
|
||||
this.hide();
|
||||
this.Hide(time);
|
||||
},
|
||||
|
||||
_addKeys: function () {
|
||||
@ -305,7 +322,8 @@ Keyboard.prototype = {
|
||||
},
|
||||
|
||||
_getTrayIcon: function () {
|
||||
let trayButton = new St.Button ({ label: "tray", style_class: 'keyboard-key' });
|
||||
let trayButton = new St.Button ({ label: _("tray"),
|
||||
style_class: 'keyboard-key' });
|
||||
trayButton.key_width = 1;
|
||||
trayButton.connect('button-press-event', Lang.bind(this, function () {
|
||||
Main.messageTray.toggle();
|
||||
@ -339,7 +357,7 @@ Keyboard.prototype = {
|
||||
right_box.add(button.actor);
|
||||
else
|
||||
left_box.add(button.actor);
|
||||
if (key.name == "Caribou_Prefs") {
|
||||
if (key.name == 'Caribou_Prefs') {
|
||||
key.connect('key-released', Lang.bind(this, this.hide));
|
||||
|
||||
// Add new key for hiding message tray
|
||||
@ -476,6 +494,9 @@ Keyboard.prototype = {
|
||||
|
||||
// D-Bus methods
|
||||
Show: function(timestamp) {
|
||||
if (!this._enableKeyboard)
|
||||
return;
|
||||
|
||||
if (timestamp - this._timestamp < 0)
|
||||
return;
|
||||
|
||||
@ -484,6 +505,9 @@ Keyboard.prototype = {
|
||||
},
|
||||
|
||||
Hide: function(timestamp) {
|
||||
if (!this._enableKeyboard)
|
||||
return;
|
||||
|
||||
if (timestamp - this._timestamp < 0)
|
||||
return;
|
||||
|
||||
@ -492,11 +516,17 @@ Keyboard.prototype = {
|
||||
},
|
||||
|
||||
SetCursorLocation: function(x, y, w, h) {
|
||||
this._setLocation(x, y);
|
||||
if (!this._enableKeyboard)
|
||||
return;
|
||||
|
||||
// this._setLocation(x, y);
|
||||
},
|
||||
|
||||
SetEntryLocation: function(x, y, w, h) {
|
||||
this._setLocation(x, y);
|
||||
if (!this._enableKeyboard)
|
||||
return;
|
||||
|
||||
// this._setLocation(x, y);
|
||||
},
|
||||
|
||||
get Name() {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
@ -45,7 +45,9 @@ LayoutManager.prototype = {
|
||||
this.trayBox.connect('allocation-changed',
|
||||
Lang.bind(this, this._updateTrayBarrier));
|
||||
|
||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox' });
|
||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
this.addChrome(this.keyboardBox, { visibleInFullscreen: true });
|
||||
this._keyboardHeightNotifyId = 0;
|
||||
|
||||
@ -214,10 +216,10 @@ LayoutManager.prototype = {
|
||||
let monitorLeft = monitor.x, monitorRight = monitor.x + monitor.width;
|
||||
let primaryLeft = primary.x, primaryRight = primary.x + primary.width;
|
||||
|
||||
if ((monitorLeft >= primaryLeft && monitorLeft <= primaryRight) ||
|
||||
(monitorRight >= primaryLeft && monitorRight <= primaryRight) ||
|
||||
(primaryLeft >= monitorLeft && primaryLeft <= monitorRight) ||
|
||||
(primaryRight >= monitorLeft && primaryRight <= monitorRight))
|
||||
if ((monitorLeft >= primaryLeft && monitorLeft < primaryRight) ||
|
||||
(monitorRight > primaryLeft && monitorRight <= primaryRight) ||
|
||||
(primaryLeft >= monitorLeft && primaryLeft < monitorRight) ||
|
||||
(primaryRight > monitorLeft && primaryRight <= monitorRight))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@ -367,6 +369,10 @@ LayoutManager.prototype = {
|
||||
// Removes @actor from the chrome
|
||||
removeChrome: function(actor) {
|
||||
this._chrome.removeActor(actor);
|
||||
},
|
||||
|
||||
findMonitorForActor: function(actor) {
|
||||
return this._chrome.findMonitorForActor(actor);
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(LayoutManager.prototype);
|
||||
@ -619,7 +625,7 @@ Chrome.prototype = {
|
||||
// We can't use Params.parse here because we want to drop
|
||||
// the extra values like ancestorData.actor
|
||||
for (let prop in defaultParams) {
|
||||
if (!params[prop])
|
||||
if (!params.hasOwnProperty(prop))
|
||||
params[prop] = ancestorData[prop];
|
||||
}
|
||||
|
||||
@ -698,7 +704,7 @@ Chrome.prototype = {
|
||||
else if (this._inOverview)
|
||||
visible = true;
|
||||
else if (!actorData.visibleInFullscreen &&
|
||||
this._findMonitorForActor(actorData.actor).inFullscreen)
|
||||
this.findMonitorForActor(actorData.actor).inFullscreen)
|
||||
visible = false;
|
||||
else
|
||||
visible = true;
|
||||
@ -760,7 +766,7 @@ Chrome.prototype = {
|
||||
|
||||
// This call guarantees that we return some monitor to simplify usage of it
|
||||
// In practice all tracked actors should be visible on some monitor anyway
|
||||
_findMonitorForActor: function(actor) {
|
||||
findMonitorForActor: function(actor) {
|
||||
let [x, y] = actor.get_transformed_position();
|
||||
let [w, h] = actor.get_transformed_size();
|
||||
let monitor = this._findMonitorForRect(x, y, w, h);
|
||||
@ -819,6 +825,18 @@ Chrome.prototype = {
|
||||
monitor.inFullscreen = true;
|
||||
}
|
||||
if (layer == Meta.StackLayer.OVERRIDE_REDIRECT) {
|
||||
// Check whether the window is screen sized
|
||||
let isScreenSized =
|
||||
(window.x == 0 && window.y == 0 &&
|
||||
window.width == global.screen_width &&
|
||||
window.height == global.screen_height);
|
||||
|
||||
if (isScreenSized) {
|
||||
for (let i = 0; i < this._monitors.length; i++)
|
||||
this._monitors[i].inFullscreen = true;
|
||||
}
|
||||
|
||||
// Or whether it is monitor sized
|
||||
let monitor = this._findMonitorForWindow(window);
|
||||
if (monitor &&
|
||||
window.x <= monitor.x &&
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Cogl = imports.gi.Cogl;
|
||||
@ -17,6 +17,7 @@ const Mainloop = imports.mainloop;
|
||||
const History = imports.misc.history;
|
||||
const ExtensionSystem = imports.ui.extensionSystem;
|
||||
const Link = imports.ui.link;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
@ -157,9 +158,9 @@ Signals.addSignalMethods(Notebook.prototype);
|
||||
function objectToString(o) {
|
||||
if (typeof(o) == typeof(objectToString)) {
|
||||
// special case this since the default is way, way too verbose
|
||||
return "<js function>";
|
||||
return '<js function>';
|
||||
} else {
|
||||
return "" + o;
|
||||
return '' + o;
|
||||
}
|
||||
}
|
||||
|
||||
@ -322,7 +323,7 @@ ObjInspector.prototype = {
|
||||
link = new St.Label({ text: '<error>' });
|
||||
}
|
||||
let hbox = new St.BoxLayout();
|
||||
let propText = propName + ": " + valueStr;
|
||||
let propText = propName + ': ' + valueStr;
|
||||
hbox.add(new St.Label({ text: propName + ': ' }));
|
||||
hbox.add(link);
|
||||
this._container.add_actor(hbox);
|
||||
@ -343,7 +344,7 @@ ObjInspector.prototype = {
|
||||
this.actor.move_anchor_point(Math.floor(sourceX + sourceWidth / 2),
|
||||
Math.floor(sourceY + sourceHeight / 2));
|
||||
Tweener.addTween(this.actor, { scale_x: 1, scale_y: 1,
|
||||
transition: "easeOutQuad",
|
||||
transition: 'easeOutQuad',
|
||||
time: 0.2 });
|
||||
} else {
|
||||
this.actor.set_scale(1, 1);
|
||||
@ -710,27 +711,23 @@ Extensions.prototype = {
|
||||
text: meta.description || 'No description' });
|
||||
box.add(description, { expand: true });
|
||||
|
||||
let metaBox = new St.BoxLayout();
|
||||
let metaBox = new St.BoxLayout({ style_class: 'lg-extension-meta' });
|
||||
box.add(metaBox);
|
||||
let stateString = this._stateToString(meta.state);
|
||||
let state = new St.Label({ style_class: 'lg-extension-state',
|
||||
text: this._stateToString(meta.state) });
|
||||
|
||||
let actionsContainer = new St.Bin({ x_align: St.Align.END });
|
||||
metaBox.add(actionsContainer);
|
||||
let actionsBox = new St.BoxLayout({ style_class: 'lg-extension-actions' });
|
||||
actionsContainer.set_child(actionsBox);
|
||||
metaBox.add(state);
|
||||
|
||||
let viewsource = new Link.Link({ label: _("View Source") });
|
||||
viewsource.actor._extensionMeta = meta;
|
||||
viewsource.actor.connect('clicked', Lang.bind(this, this._onViewSource));
|
||||
actionsBox.add(viewsource.actor);
|
||||
metaBox.add(viewsource.actor);
|
||||
|
||||
if (meta.url) {
|
||||
let webpage = new Link.Link({ label: _("Web Page") });
|
||||
webpage.actor._extensionMeta = meta;
|
||||
webpage.actor.connect('clicked', Lang.bind(this, this._onWebPage));
|
||||
actionsBox.add(webpage.actor);
|
||||
metaBox.add(webpage.actor);
|
||||
}
|
||||
|
||||
return box;
|
||||
@ -820,6 +817,7 @@ LookingGlass.prototype = {
|
||||
entryArea.add(label);
|
||||
|
||||
this._entry = new St.Entry({ can_focus: true });
|
||||
ShellEntry.addContextMenu(this._entry);
|
||||
entryArea.add(this._entry, { expand: true });
|
||||
|
||||
this._windowList = new WindowList();
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Main = imports.ui.main;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const DBus = imports.dbus;
|
||||
@ -129,8 +129,6 @@ function _initRecorder() {
|
||||
function _initUserSession() {
|
||||
_initRecorder();
|
||||
|
||||
keyboard.init();
|
||||
|
||||
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT, false, -1, 1);
|
||||
|
||||
ExtensionSystem.init();
|
||||
@ -496,9 +494,9 @@ function notify(msg, details) {
|
||||
function notifyError(msg, details) {
|
||||
// Also print to stderr so it's logged somewhere
|
||||
if (details)
|
||||
log("error: " + msg + ": " + details);
|
||||
log('error: ' + msg + ': ' + details);
|
||||
else
|
||||
log("error: " + msg)
|
||||
log('error: ' + msg);
|
||||
|
||||
notify(msg, details);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GLib = imports.gi.GLib;
|
||||
@ -252,7 +252,8 @@ FocusGrabber.prototype = {
|
||||
this._prevFocusedWindow = global.display.focus_window;
|
||||
this._prevKeyFocusActor = global.stage.get_key_focus();
|
||||
|
||||
if (!Main.overview.visible)
|
||||
if (global.stage_input_mode == Shell.StageInputMode.NONREACTIVE ||
|
||||
global.stage_input_mode == Shell.StageInputMode.NORMAL)
|
||||
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
|
||||
|
||||
// Use captured-event to notice clicks outside the focused actor
|
||||
@ -416,6 +417,7 @@ Notification.prototype = {
|
||||
|
||||
_init: function(source, title, banner, params) {
|
||||
this.source = source;
|
||||
this.title = title;
|
||||
this.urgency = Urgency.NORMAL;
|
||||
this.resident = false;
|
||||
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
||||
@ -503,8 +505,11 @@ Notification.prototype = {
|
||||
|
||||
let oldFocus = global.stage.key_focus;
|
||||
|
||||
if (this._icon)
|
||||
if (this._icon && (params.icon || params.clear)) {
|
||||
this._icon.destroy();
|
||||
this._icon = null;
|
||||
}
|
||||
|
||||
// We always clear the content area if we don't have custom
|
||||
// content because it might contain the @banner that didn't
|
||||
// fit in the banner mode.
|
||||
@ -530,14 +535,17 @@ Notification.prototype = {
|
||||
if (!this._scrollArea && !this._actionArea && !this._imageBin)
|
||||
this._table.remove_style_class_name('multi-line-notification');
|
||||
|
||||
this._icon = params.icon || this.source.createNotificationIcon();
|
||||
this._table.add(this._icon, { row: 0,
|
||||
col: 0,
|
||||
x_expand: false,
|
||||
y_expand: false,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
if (!this._icon) {
|
||||
this._icon = params.icon || this.source.createNotificationIcon();
|
||||
this._table.add(this._icon, { row: 0,
|
||||
col: 0,
|
||||
x_expand: false,
|
||||
y_expand: false,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
}
|
||||
|
||||
this.title = title;
|
||||
title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
|
||||
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
|
||||
|
||||
@ -695,6 +703,7 @@ Notification.prototype = {
|
||||
this._imageBin.opacity = 230;
|
||||
this._table.add_style_class_name('multi-line-notification');
|
||||
this._table.add_style_class_name('notification-with-image');
|
||||
this._addBannerBody();
|
||||
this._updateLastColumnSettings();
|
||||
this._table.add(this._imageBin, { row: 1,
|
||||
col: 1,
|
||||
@ -1349,6 +1358,7 @@ MessageTray.prototype = {
|
||||
this._summaryBin.opacity = 0;
|
||||
|
||||
this._summaryMotionId = 0;
|
||||
this._trayMotionId = 0;
|
||||
|
||||
this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
|
||||
{ reactive: true,
|
||||
@ -1388,12 +1398,15 @@ MessageTray.prototype = {
|
||||
}));
|
||||
this._focusGrabber.connect('escape-pressed', Lang.bind(this, this._escapeTray));
|
||||
|
||||
Main.layoutManager.keyboardBox.connect('notify::hover', Lang.bind(this, this._onKeyboardHoverChanged));
|
||||
|
||||
this._trayState = State.HIDDEN;
|
||||
this._locked = false;
|
||||
this._traySummoned = false;
|
||||
this._useLongerTrayLeftTimeout = false;
|
||||
this._trayLeftTimeoutId = 0;
|
||||
this._pointerInTray = false;
|
||||
this._pointerInKeyboard = false;
|
||||
this._summaryState = State.HIDDEN;
|
||||
this._summaryTimeoutId = 0;
|
||||
this._pointerInSummary = false;
|
||||
@ -1406,8 +1419,16 @@ MessageTray.prototype = {
|
||||
this._notificationRemoved = false;
|
||||
this._reNotifyAfterHideNotification = null;
|
||||
|
||||
this._corner = new Clutter.Rectangle({ width: 1,
|
||||
height: 1,
|
||||
opacity: 0,
|
||||
reactive: true });
|
||||
this._corner.connect('enter-event', Lang.bind(this, this._onCornerEnter));
|
||||
Main.layoutManager.trayBox.add_actor(this._corner);
|
||||
Main.layoutManager.trackChrome(this._corner);
|
||||
|
||||
Main.layoutManager.trayBox.add_actor(this.actor);
|
||||
this.actor.y = -1;
|
||||
this.actor.y = this.actor.height;
|
||||
Main.layoutManager.trackChrome(this.actor);
|
||||
Main.layoutManager.trackChrome(this._notificationBin);
|
||||
|
||||
@ -1446,12 +1467,24 @@ MessageTray.prototype = {
|
||||
this._chatSummaryItemsCount = 0;
|
||||
},
|
||||
|
||||
_onCornerEnter: function(actor, event) {
|
||||
this._pointerInSummary = true;
|
||||
this._updateState();
|
||||
},
|
||||
|
||||
_setSizePosition: function() {
|
||||
let monitor = Main.layoutManager.bottomMonitor;
|
||||
this._notificationBin.x = 0;
|
||||
this._notificationBin.width = monitor.width;
|
||||
this._summaryBin.x = 0;
|
||||
this._summaryBin.width = monitor.width;
|
||||
|
||||
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
|
||||
this._corner.x = 0;
|
||||
else
|
||||
this._corner.x = Main.layoutManager.trayBox.width - 1;
|
||||
|
||||
this._corner.y = Main.layoutManager.trayBox.height - 1;
|
||||
},
|
||||
|
||||
contains: function(source) {
|
||||
@ -1574,7 +1607,7 @@ MessageTray.prototype = {
|
||||
|
||||
summaryItemToRemove.actor.destroy();
|
||||
|
||||
if (needUpdate);
|
||||
if (needUpdate)
|
||||
this._updateState();
|
||||
},
|
||||
|
||||
@ -1819,7 +1852,7 @@ MessageTray.prototype = {
|
||||
// automatically. Instead, the user is able to expand the notification by mousing away from it and then
|
||||
// mousing back in. Because this is an expected action, we set the boolean flag that indicates that a longer
|
||||
// timeout should be used before popping down the notification.
|
||||
if (this._notificationBin.contains(actorAtShowNotificationPosition)) {
|
||||
if (this.actor.contains(actorAtShowNotificationPosition)) {
|
||||
this._useLongerTrayLeftTimeout = true;
|
||||
return;
|
||||
}
|
||||
@ -1843,6 +1876,24 @@ MessageTray.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_onKeyboardHoverChanged: function(keyboard) {
|
||||
this._pointerInKeyboard = keyboard.hover;
|
||||
|
||||
if (!keyboard.hover) {
|
||||
let event = Clutter.get_current_event();
|
||||
if (event && event.type() == Clutter.EventType.LEAVE) {
|
||||
let into = event.get_related();
|
||||
if (into && this.actor.contains(into)) {
|
||||
// Don't call _updateState, because pointerInTray is
|
||||
// still false
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._updateState();
|
||||
},
|
||||
|
||||
_onStatusChanged: function(presence, status) {
|
||||
this._backFromAway = (this._userStatus == GnomeSession.PresenceStatus.IDLE && this._userStatus != status);
|
||||
this._userStatus = status;
|
||||
@ -1907,7 +1958,7 @@ MessageTray.prototype = {
|
||||
let notificationsPending = this._notificationQueue.length > 0 && (!this._busy || notificationUrgent);
|
||||
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
||||
let notificationExpanded = this._notificationBin.y < 0;
|
||||
let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked) || this._notificationRemoved;
|
||||
let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked && !(this._pointerInKeyboard && notificationExpanded)) || this._notificationRemoved;
|
||||
let canShowNotification = notificationsPending && this._summaryState == State.HIDDEN;
|
||||
|
||||
if (this._notificationState == State.HIDDEN) {
|
||||
@ -2026,7 +2077,7 @@ MessageTray.prototype = {
|
||||
|
||||
_hideTray: function() {
|
||||
this._tween(this.actor, '_trayState', State.HIDDEN,
|
||||
{ y: -1,
|
||||
{ y: this.actor.height,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
@ -2265,6 +2316,8 @@ MessageTray.prototype = {
|
||||
// _clickedSummaryItem.actor can change absolute position without changing allocation
|
||||
this._summaryMotionId = this._summary.connect('allocation-changed',
|
||||
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||
this._trayMotionId = Main.layoutManager.trayBox.connect('notify::anchor-y',
|
||||
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||
|
||||
this._summaryBoxPointer.actor.opacity = 0;
|
||||
this._summaryBoxPointer.actor.show();
|
||||
@ -2296,8 +2349,10 @@ MessageTray.prototype = {
|
||||
if (this._clickedSummaryItemAllocationChangedId) {
|
||||
this._clickedSummaryItem.actor.disconnect(this._clickedSummaryItemAllocationChangedId);
|
||||
this._summary.disconnect(this._summaryMotionId);
|
||||
Main.layoutManager.trayBox.disconnect(this._trayMotionId);
|
||||
this._clickedSummaryItemAllocationChangedId = 0;
|
||||
this._summaryMotionId = 0;
|
||||
this._trayMotionId = 0;
|
||||
}
|
||||
|
||||
if (this._clickedSummaryItem)
|
||||
@ -2316,8 +2371,9 @@ MessageTray.prototype = {
|
||||
}
|
||||
|
||||
this._summaryBoxPointerState = State.HIDING;
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary
|
||||
if (this._summaryState != State.SHOWN)
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary or if
|
||||
// this._clickedSummaryItem is still the item associated with the currently showing box pointer
|
||||
if (this._summaryState != State.SHOWN || this._summaryBoxPointerItem == this._clickedSummaryItem)
|
||||
this._unsetClickedSummaryItem();
|
||||
|
||||
this._focusGrabber.ungrabFocus();
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
*
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/*
|
||||
* Copyright 2011 Giovanni Campagna <scampa.giovanni@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -30,6 +30,7 @@ const St = imports.gi.St;
|
||||
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
|
||||
function NetworkSecretDialog() {
|
||||
this._init.apply(this, arguments);
|
||||
@ -103,6 +104,8 @@ NetworkSecretDialog.prototype = {
|
||||
secret.entry = new St.Entry({ style_class: 'polkit-dialog-password-entry',
|
||||
text: secret.value, can_focus: reactive,
|
||||
reactive: reactive });
|
||||
ShellEntry.addContextMenu(secret.entry,
|
||||
{ isPassword: secret.password });
|
||||
|
||||
if (secret.validate)
|
||||
secret.valid = secret.validate(secret);
|
||||
@ -127,34 +130,14 @@ NetworkSecretDialog.prototype = {
|
||||
} else
|
||||
secret.valid = true;
|
||||
|
||||
secretTable.add(label, { row: pos, col: 0, x_align: St.Align.START, y_align: St.Align.START });
|
||||
secretTable.add(label, { row: pos, col: 0, x_expand: false, x_fill: true, x_align: St.Align.START, y_align: St.Align.START });
|
||||
secretTable.add(secret.entry, { row: pos, col: 1, x_expand: true, x_fill: true, y_align: St.Align.END });
|
||||
pos++;
|
||||
|
||||
if (secret.password) {
|
||||
if (secret.password)
|
||||
secret.entry.clutter_text.set_password_char('\u25cf');
|
||||
|
||||
// FIXME: need a real checkbox here
|
||||
let button = new St.Button({ button_mask: St.ButtonMask.ONE,
|
||||
can_focus: true });
|
||||
let checkbox = new St.BoxLayout({ vertical: false,
|
||||
style_class: 'network-dialog-show-password-checkbox'
|
||||
});
|
||||
let _switch = new PopupMenu.Switch(false);
|
||||
checkbox.add(_switch.actor);
|
||||
checkbox.add(new St.Label({ text: _("Show password") }), { expand: true });
|
||||
button.connect('clicked', function() {
|
||||
_switch.toggle();
|
||||
if (_switch.state)
|
||||
secret.entry.clutter_text.set_password_char('');
|
||||
else
|
||||
secret.entry.clutter_text.set_password_char('\u25cf');
|
||||
});
|
||||
button.child = checkbox;
|
||||
secretTable.add(button, { row: pos, col: 1, x_expand: true, x_fill: true, y_fill: true })
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
||||
messageBox.add(secretTable);
|
||||
|
||||
this._okButton = { label: _("Connect"),
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const DBus = imports.dbus;
|
||||
@ -92,7 +92,7 @@ NotificationDaemon.prototype = {
|
||||
_init: function() {
|
||||
DBus.session.exportObject('/org/freedesktop/Notifications', this);
|
||||
|
||||
this._sources = {};
|
||||
this._sources = [];
|
||||
this._senderToPid = {};
|
||||
this._notifications = {};
|
||||
this._busProxy = new Bus();
|
||||
@ -109,6 +109,14 @@ NotificationDaemon.prototype = {
|
||||
_iconForNotificationData: function(icon, hints, size) {
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
|
||||
// If an icon is not specified, we use 'image-data' or 'image-path' hint for an icon
|
||||
// and don't show a large image. There are currently many applications that use
|
||||
// notify_notification_set_icon_from_pixbuf() from libnotify, which in turn sets
|
||||
// the 'image-data' hint. These applications don't typically pass in 'app_icon'
|
||||
// argument to Notify() and actually expect the pixbuf to be shown as an icon.
|
||||
// So the logic here does the right thing for this case. If both an icon and either
|
||||
// one of 'image-data' or 'image-path' are specified, we show both an icon and
|
||||
// a large image.
|
||||
if (icon) {
|
||||
if (icon.substr(0, 7) == 'file://')
|
||||
return textureCache.load_uri_async(icon, size, size);
|
||||
@ -119,6 +127,12 @@ NotificationDaemon.prototype = {
|
||||
return new St.Icon({ icon_name: icon,
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: size });
|
||||
} else if (hints['image-data']) {
|
||||
let [width, height, rowStride, hasAlpha,
|
||||
bitsPerSample, nChannels, data] = hints['image-data'];
|
||||
return textureCache.load_from_raw(data, hasAlpha, width, height, rowStride, size);
|
||||
} else if (hints['image-path']) {
|
||||
return textureCache.load_uri_async(GLib.filename_to_uri(hints['image-path'], null), size, size);
|
||||
} else {
|
||||
let stockIcon;
|
||||
switch (hints.urgency) {
|
||||
@ -136,14 +150,30 @@ NotificationDaemon.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_lookupSource: function(title, pid, trayIcon) {
|
||||
for (let i = 0; i < this._sources.length; i++) {
|
||||
let source = this._sources[i];
|
||||
if (source.pid == pid &&
|
||||
(source.initialTitle == title || source.trayIcon || trayIcon))
|
||||
return source;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
// Returns the source associated with ndata.notification if it is set.
|
||||
// Otherwise, returns the source associated with the pid if one is
|
||||
// stored in this._sources and the notification is not transient.
|
||||
// Otherwise, creates a new source as long as pid is provided.
|
||||
// Otherwise, returns the source associated with the title and pid if
|
||||
// such source is stored in this._sources and the notification is not
|
||||
// transient. If the existing or requested source is associated with
|
||||
// a tray icon and passed in pid matches a pid of an existing source,
|
||||
// the title match is ignored to enable representing a tray icon and
|
||||
// notifications from the same application with a single source.
|
||||
//
|
||||
// If no existing source is found, a new source is created as long as
|
||||
// pid is provided.
|
||||
//
|
||||
// Either a pid or ndata.notification is needed to retrieve or
|
||||
// create a source.
|
||||
_getSource: function(title, pid, ndata, sender) {
|
||||
_getSource: function(title, pid, ndata, sender, trayIcon) {
|
||||
if (!pid && !(ndata && ndata.notification))
|
||||
return null;
|
||||
|
||||
@ -160,20 +190,24 @@ 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]) {
|
||||
let source = this._sources[pid];
|
||||
source.setTitle(title);
|
||||
return source;
|
||||
if (!isForTransientNotification) {
|
||||
let source = this._lookupSource(title, pid, trayIcon);
|
||||
if (source) {
|
||||
source.setTitle(title);
|
||||
return source;
|
||||
}
|
||||
}
|
||||
|
||||
let source = new Source(title, pid, sender);
|
||||
let source = new Source(title, pid, sender, trayIcon);
|
||||
source.setTransient(isForTransientNotification);
|
||||
|
||||
if (!isForTransientNotification) {
|
||||
this._sources[pid] = source;
|
||||
this._sources.push(source);
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
delete this._sources[pid];
|
||||
let index = this._sources.indexOf(source);
|
||||
if (index >= 0)
|
||||
this._sources.splice(index, 1);
|
||||
}));
|
||||
}
|
||||
|
||||
@ -247,7 +281,7 @@ NotificationDaemon.prototype = {
|
||||
let sender = DBus.getCurrentMessageContext().sender;
|
||||
let pid = this._senderToPid[sender];
|
||||
|
||||
let source = this._getSource(appName, pid, ndata, sender);
|
||||
let source = this._getSource(appName, pid, ndata, sender, null);
|
||||
|
||||
if (source) {
|
||||
this._notifyForSource(source, ndata);
|
||||
@ -268,7 +302,7 @@ NotificationDaemon.prototype = {
|
||||
if (!ndata)
|
||||
return;
|
||||
|
||||
source = this._getSource(appName, pid, ndata, sender);
|
||||
source = this._getSource(appName, pid, ndata, sender, null);
|
||||
|
||||
// We only store sender-pid entries for persistent sources.
|
||||
// Removing the entries once the source is destroyed
|
||||
@ -330,7 +364,8 @@ NotificationDaemon.prototype = {
|
||||
clear: true });
|
||||
}
|
||||
|
||||
if (hints['image-data'] || hints['image-path']) {
|
||||
// We only display a large image if an icon is also specified.
|
||||
if (icon && (hints['image-data'] || hints['image-path'])) {
|
||||
let image = null;
|
||||
if (hints['image-data']) {
|
||||
let [width, height, rowStride, hasAlpha,
|
||||
@ -417,8 +452,8 @@ NotificationDaemon.prototype = {
|
||||
if (!tracker.focus_app)
|
||||
return;
|
||||
|
||||
for (let id in this._sources) {
|
||||
let source = this._sources[id];
|
||||
for (let i = 0; i < this._sources.length; i++) {
|
||||
let source = this._sources[i];
|
||||
if (source.app == tracker.focus_app) {
|
||||
source.destroyNonResidentNotifications();
|
||||
return;
|
||||
@ -441,12 +476,11 @@ NotificationDaemon.prototype = {
|
||||
},
|
||||
|
||||
_onTrayIconAdded: function(o, icon) {
|
||||
let source = this._getSource(icon.title || icon.wm_class || _("Unknown"), icon.pid, null, null);
|
||||
source.setTrayIcon(icon);
|
||||
let source = this._getSource(icon.title || icon.wm_class || _("Unknown"), icon.pid, null, null, icon);
|
||||
},
|
||||
|
||||
_onTrayIconRemoved: function(o, icon) {
|
||||
let source = this._sources[icon.pid];
|
||||
let source = this._lookupSource(icon.pid, null, true);
|
||||
if (source)
|
||||
source.destroy();
|
||||
}
|
||||
@ -461,10 +495,12 @@ function Source(title, pid, sender) {
|
||||
Source.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init: function(title, pid, sender) {
|
||||
_init: function(title, pid, sender, trayIcon) {
|
||||
MessageTray.Source.prototype._init.call(this, title);
|
||||
|
||||
this._pid = pid;
|
||||
this.initialTitle = title;
|
||||
|
||||
this.pid = pid;
|
||||
if (sender)
|
||||
// TODO: dbus-glib implementation of watch_name() doesn’t return an id to be used for
|
||||
// unwatch_name() or implement unwatch_name(), however when we move to using GDBus implementation,
|
||||
@ -481,7 +517,12 @@ Source.prototype = {
|
||||
this.title = this.app.get_name();
|
||||
else
|
||||
this.useNotificationIcon = true;
|
||||
this._trayIcon = null;
|
||||
|
||||
this.trayIcon = trayIcon;
|
||||
if (this.trayIcon) {
|
||||
this._setSummaryIcon(this.trayIcon);
|
||||
this.useNotificationIcon = false;
|
||||
}
|
||||
},
|
||||
|
||||
_onNameVanished: function() {
|
||||
@ -508,7 +549,7 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
handleSummaryClick: function() {
|
||||
if (!this._trayIcon)
|
||||
if (!this.trayIcon)
|
||||
return false;
|
||||
|
||||
let event = Clutter.get_current_event();
|
||||
@ -529,11 +570,11 @@ Source.prototype = {
|
||||
let id = global.connect('notify::stage-input-mode', Lang.bind(this,
|
||||
function () {
|
||||
global.disconnect(id);
|
||||
this._trayIcon.click(event);
|
||||
this.trayIcon.click(event);
|
||||
}));
|
||||
Main.overview.hide();
|
||||
} else {
|
||||
this._trayIcon.click(event);
|
||||
this.trayIcon.click(event);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
@ -542,31 +583,25 @@ Source.prototype = {
|
||||
if (this.app)
|
||||
return;
|
||||
|
||||
this.app = Shell.WindowTracker.get_default().get_app_from_pid(this._pid);
|
||||
this.app = Shell.WindowTracker.get_default().get_app_from_pid(this.pid);
|
||||
if (!this.app)
|
||||
return;
|
||||
|
||||
// Only override the icon if we were previously using
|
||||
// notification-based icons (ie, not a trayicon) or if it was unset before
|
||||
if (!this._trayIcon) {
|
||||
if (!this.trayIcon) {
|
||||
this.useNotificationIcon = false;
|
||||
this._setSummaryIcon(this.app.create_icon_texture (this.ICON_SIZE));
|
||||
}
|
||||
},
|
||||
|
||||
setTrayIcon: function(icon) {
|
||||
this._setSummaryIcon(icon);
|
||||
this.useNotificationIcon = false;
|
||||
this._trayIcon = icon;
|
||||
},
|
||||
|
||||
open: function(notification) {
|
||||
this.destroyNonResidentNotifications();
|
||||
this.openApp();
|
||||
},
|
||||
|
||||
_lastNotificationRemoved: function() {
|
||||
if (!this._trayIcon)
|
||||
if (!this.trayIcon)
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Cairo = imports.cairo;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
*
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/*
|
||||
* Copyright 2010 Red Hat, Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -33,6 +33,7 @@ const Polkit = imports.gi.Polkit;
|
||||
const PolkitAgent = imports.gi.PolkitAgent;
|
||||
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
|
||||
function AuthenticationDialog(actionId, message, cookie, userNames) {
|
||||
this._init(actionId, message, cookie, userNames);
|
||||
@ -139,6 +140,7 @@ AuthenticationDialog.prototype = {
|
||||
this._passwordEntry = new St.Entry({ style_class: 'polkit-dialog-password-entry',
|
||||
text: "",
|
||||
can_focus: true});
|
||||
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
|
||||
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
|
||||
this._passwordBox.add(this._passwordEntry,
|
||||
{expand: true });
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Cairo = imports.cairo;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
@ -320,10 +320,14 @@ PopupBaseMenuItem.prototype = {
|
||||
}
|
||||
extraWidth = availWidth - naturalWidth;
|
||||
} else {
|
||||
if (child.span == -1)
|
||||
availWidth = box.x2 - x;
|
||||
else
|
||||
if (child.span == -1) {
|
||||
if (direction == St.TextDirection.LTR)
|
||||
availWidth = box.x2 - x;
|
||||
else
|
||||
availWidth = x - box.x1;
|
||||
} else {
|
||||
availWidth = naturalWidth;
|
||||
}
|
||||
extraWidth = 0;
|
||||
}
|
||||
|
||||
@ -1138,10 +1142,10 @@ function PopupMenu() {
|
||||
PopupMenu.prototype = {
|
||||
__proto__: PopupMenuBase.prototype,
|
||||
|
||||
_init: function(sourceActor, alignment, arrowSide) {
|
||||
_init: function(sourceActor, arrowAlignment, arrowSide) {
|
||||
PopupMenuBase.prototype._init.call (this, sourceActor, 'popup-menu-content');
|
||||
|
||||
this._alignment = alignment;
|
||||
this._arrowAlignment = arrowAlignment;
|
||||
this._arrowSide = arrowSide;
|
||||
|
||||
this._boxPointer = new BoxPointer.BoxPointer(arrowSide,
|
||||
@ -1194,13 +1198,17 @@ PopupMenu.prototype = {
|
||||
this._boxPointer.setArrowOrigin(origin);
|
||||
},
|
||||
|
||||
setSourceAlignment: function(alignment) {
|
||||
this._boxPointer.setSourceAlignment(alignment);
|
||||
},
|
||||
|
||||
open: function(animate) {
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
this.isOpen = true;
|
||||
|
||||
this._boxPointer.setPosition(this.sourceActor, this._alignment);
|
||||
this._boxPointer.setPosition(this.sourceActor, this._arrowAlignment);
|
||||
this._boxPointer.show(animate);
|
||||
|
||||
this.actor.raise_top();
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
@ -12,6 +12,7 @@ const Signals = imports.signals;
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const Util = imports.misc.util;
|
||||
const History = imports.misc.history;
|
||||
@ -210,6 +211,7 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
||||
this.contentLayout.add(label, { y_align: St.Align.START });
|
||||
|
||||
let entry = new St.Entry({ style_class: 'run-dialog-entry' });
|
||||
ShellEntry.addContextMenu(entry);
|
||||
|
||||
this._entryText = entry.clutter_text;
|
||||
this.contentLayout.add(entry, { y_align: St.Align.START });
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Gio = imports.gi.Gio;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
|
173
js/ui/shellEntry.js
Normal file
173
js/ui/shellEntry.js
Normal file
@ -0,0 +1,173 @@
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Params = imports.misc.params;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
|
||||
function _EntryMenu(entry, params) {
|
||||
this._init(entry, params);
|
||||
};
|
||||
|
||||
_EntryMenu.prototype = {
|
||||
__proto__: PopupMenu.PopupMenu.prototype,
|
||||
|
||||
_init: function(entry, params) {
|
||||
params = Params.parse (params, { isPassword: false });
|
||||
|
||||
PopupMenu.PopupMenu.prototype._init.call(this, entry, 0, St.Side.TOP);
|
||||
|
||||
this.actor.add_style_class_name('entry-context-menu');
|
||||
|
||||
this._entry = entry;
|
||||
this._clipboard = St.Clipboard.get_default();
|
||||
|
||||
// Populate menu
|
||||
let item;
|
||||
item = new PopupMenu.PopupMenuItem(_("Copy"));
|
||||
item.connect('activate', Lang.bind(this, this._onCopyActivated));
|
||||
this.addMenuItem(item);
|
||||
this._copyItem = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Paste"));
|
||||
item.connect('activate', Lang.bind(this, this._onPasteActivated));
|
||||
this.addMenuItem(item);
|
||||
this._pasteItem = item;
|
||||
|
||||
this._passwordItem = null;
|
||||
if (params.isPassword) {
|
||||
item = new PopupMenu.PopupMenuItem('');
|
||||
item.connect('activate', Lang.bind(this,
|
||||
this._onPasswordActivated));
|
||||
this.addMenuItem(item);
|
||||
this._passwordItem = item;
|
||||
}
|
||||
|
||||
Main.uiGroup.add_actor(this.actor);
|
||||
this.actor.hide();
|
||||
},
|
||||
|
||||
open: function() {
|
||||
this._updatePasteItem();
|
||||
this._updateCopyItem();
|
||||
if (this._passwordItem)
|
||||
this._updatePasswordItem();
|
||||
|
||||
let direction = Gtk.DirectionType.TAB_FORWARD;
|
||||
if (!this.actor.navigate_focus(null, direction, false))
|
||||
this.actor.grab_key_focus();
|
||||
|
||||
PopupMenu.PopupMenu.prototype.open.call(this);
|
||||
},
|
||||
|
||||
_updateCopyItem: function() {
|
||||
let selection = this._entry.clutter_text.get_selection();
|
||||
this._copyItem.setSensitive(selection && selection != '');
|
||||
},
|
||||
|
||||
_updatePasteItem: function() {
|
||||
this._clipboard.get_text(Lang.bind(this,
|
||||
function(clipboard, text) {
|
||||
this._pasteItem.setSensitive(text && text != '');
|
||||
}));
|
||||
},
|
||||
|
||||
_updatePasswordItem: function() {
|
||||
let textHidden = (this._entry.clutter_text.password_char);
|
||||
if (textHidden)
|
||||
this._passwordItem.label.set_text(_("Show Text"));
|
||||
else
|
||||
this._passwordItem.label.set_text(_("Hide Text"));
|
||||
},
|
||||
|
||||
_onCopyActivated: function() {
|
||||
let selection = this._entry.clutter_text.get_selection();
|
||||
this._clipboard.set_text(selection);
|
||||
},
|
||||
|
||||
_onPasteActivated: function() {
|
||||
this._clipboard.get_text(Lang.bind(this,
|
||||
function(clipboard, text) {
|
||||
if (!text)
|
||||
return;
|
||||
this._entry.clutter_text.delete_selection();
|
||||
let pos = this._entry.clutter_text.get_cursor_position();
|
||||
this._entry.clutter_text.insert_text(text, pos);
|
||||
}));
|
||||
},
|
||||
|
||||
_onPasswordActivated: function() {
|
||||
let visible = !!(this._entry.clutter_text.password_char);
|
||||
this._entry.clutter_text.set_password_char(visible ? '' : '\u25cf');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function _setMenuAlignment(entry, stageX) {
|
||||
let [success, entryX, entryY] = entry.transform_stage_point(stageX, 0);
|
||||
if (success)
|
||||
entry._menu.setSourceAlignment(entryX / entry.width);
|
||||
};
|
||||
|
||||
function _onClicked(action, actor) {
|
||||
let entry = actor._menu ? actor : actor.get_parent();
|
||||
|
||||
if (entry._menu.isOpen) {
|
||||
entry._menu.close();
|
||||
} else if (action.get_button() == 3) {
|
||||
let [stageX, stageY] = action.get_coords();
|
||||
_setMenuAlignment(entry, stageX);
|
||||
entry._menu.open();
|
||||
}
|
||||
};
|
||||
|
||||
function _onLongPress(action, actor, state) {
|
||||
let entry = actor._menu ? actor : actor.get_parent();
|
||||
|
||||
if (state == Clutter.LongPressState.QUERY)
|
||||
return action.get_button() == 1 && !entry._menu.isOpen;
|
||||
|
||||
if (state == Clutter.LongPressState.ACTIVATE) {
|
||||
let [stageX, stageY] = action.get_coords();
|
||||
_setMenuAlignment(entry, stageX);
|
||||
entry._menu.open();
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
function _onPopup(actor) {
|
||||
let entry = actor._menu ? actor : actor.get_parent();
|
||||
let [success, textX, textY, lineHeight] = entry.clutter_text.position_to_coords(-1);
|
||||
if (success)
|
||||
entry._menu.setSourceAlignment(textX / entry.width);
|
||||
entry._menu.open();
|
||||
};
|
||||
|
||||
function addContextMenu(entry, params) {
|
||||
if (entry._menu)
|
||||
return;
|
||||
|
||||
entry._menu = new _EntryMenu(entry, params);
|
||||
entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry });
|
||||
entry._menuManager.addMenu(entry._menu);
|
||||
|
||||
let clickAction;
|
||||
|
||||
// Add a click action to both the entry and its clutter_text; the former
|
||||
// so padding is included in the clickable area, the latter because the
|
||||
// event processing of ClutterText prevents event-bubbling.
|
||||
clickAction = new Clutter.ClickAction();
|
||||
clickAction.connect('clicked', _onClicked);
|
||||
clickAction.connect('long-press', _onLongPress);
|
||||
entry.clutter_text.add_action(clickAction);
|
||||
|
||||
clickAction = new Clutter.ClickAction();
|
||||
clickAction.connect('clicked', _onClicked);
|
||||
clickAction.connect('long-press', _onLongPress);
|
||||
entry.add_action(clickAction);
|
||||
|
||||
entry.connect('popup-menu', _onPopup);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const GConf = imports.gi.GConf;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GdkPixbuf = imports.gi.GdkPixbuf;
|
||||
|
@ -1,4 +1,4 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
const ByteArray = imports.byteArray;
|
||||
const DBus = imports.dbus;
|
||||
const GLib = imports.gi.GLib;
|
||||
@ -1104,10 +1104,10 @@ NMDeviceWireless.prototype = {
|
||||
let activeAp = this.device.active_access_point;
|
||||
|
||||
if (activeAp) {
|
||||
let pos = this._findNetwork(activeAp);
|
||||
let res = this._findExistingNetwork(activeAp);
|
||||
|
||||
if (pos != -1)
|
||||
this._activeNetwork = this._networks[pos];
|
||||
if (res != null)
|
||||
this._activeNetwork = this._networks[res.network];
|
||||
}
|
||||
|
||||
// we don't refresh the view here, setActiveConnection will
|
||||
@ -1181,6 +1181,18 @@ NMDeviceWireless.prototype = {
|
||||
return true;
|
||||
},
|
||||
|
||||
_findExistingNetwork: function(accessPoint) {
|
||||
for (let i = 0; i < this._networks.length; i++) {
|
||||
let apObj = this._networks[i];
|
||||
for (let j = 0; j < apObj.accessPoints.length; j++) {
|
||||
if (apObj.accessPoints[j] == accessPoint)
|
||||
return { network: i, ap: j };
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
|
||||
_findNetwork: function(accessPoint) {
|
||||
if (accessPoint.get_ssid() == null)
|
||||
return -1;
|
||||
@ -1273,22 +1285,15 @@ NMDeviceWireless.prototype = {
|
||||
},
|
||||
|
||||
_accessPointRemoved: function(device, accessPoint) {
|
||||
let pos = this._findNetwork(accessPoint);
|
||||
let res = this._findExistingNetwork(accessPoint);
|
||||
|
||||
if (pos == -1) {
|
||||
if (res == null) {
|
||||
log('Removing an access point that was never added');
|
||||
return;
|
||||
}
|
||||
|
||||
let apObj = this._networks[pos];
|
||||
let i = apObj.accessPoints.indexOf(accessPoint);
|
||||
|
||||
if (i == -1) {
|
||||
log('Removing an access point that was never added');
|
||||
return;
|
||||
}
|
||||
|
||||
apObj.accessPoints.splice(i, 1);
|
||||
let apObj = this._networks[res.network];
|
||||
apObj.accessPoints.splice(res.ap, 1);
|
||||
|
||||
if (apObj.accessPoints.length == 0) {
|
||||
if (this._activeNetwork == apObj)
|
||||
@ -1302,22 +1307,26 @@ NMDeviceWireless.prototype = {
|
||||
// we removed an item in the main menu, and we have a more submenu
|
||||
// we need to extract the first item in more and move it to the submenu
|
||||
|
||||
let apObj = this._overflowItem.menu.firstMenuItem;
|
||||
if (apObj.item) {
|
||||
apObj.item.destroy();
|
||||
let item = this._overflowItem.menu.firstMenuItem;
|
||||
if (item && item._apObj) {
|
||||
item.destroy();
|
||||
// clear the cycle, and allow the construction of the new item
|
||||
item._apObj.item = null;
|
||||
|
||||
this._createNetworkItem(apObj, NUM_VISIBLE_NETWORKS-1);
|
||||
this._createNetworkItem(item._apObj, NUM_VISIBLE_NETWORKS-1);
|
||||
} else {
|
||||
log('The more... menu was existing and empty! This should not happen');
|
||||
}
|
||||
}
|
||||
|
||||
// This can happen if the removed connection is from the overflow
|
||||
// menu, or if we just moved the last connection out from the menu
|
||||
if (this._overflowItem.menu.length == 0) {
|
||||
if (this._overflowItem.menu.numMenuItems == 0) {
|
||||
this._overflowItem.destroy();
|
||||
this._overflowItem = null;
|
||||
}
|
||||
}
|
||||
this._networks.splice(pos, 1);
|
||||
this._networks.splice(res.network, 1);
|
||||
|
||||
} else if (apObj.item)
|
||||
apObj.item.updateAccessPoints(apObj.accessPoints);
|
||||
@ -1489,18 +1498,16 @@ NMDeviceWireless.prototype = {
|
||||
}
|
||||
|
||||
if(apObj.connections.length > 0) {
|
||||
if (apObj.connections.length == 1)
|
||||
if (apObj.connections.length == 1) {
|
||||
apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
|
||||
else {
|
||||
} else {
|
||||
let title = apObj.ssidText;
|
||||
apObj.item = new PopupMenu.PopupSubMenuMenuItem(title);
|
||||
apObj.item._apObj = apObj;
|
||||
for (let i = 0; i < apObj.connections.length; i++)
|
||||
apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true));
|
||||
}
|
||||
} else {
|
||||
apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
|
||||
apObj.item._apObj = apObj;
|
||||
apObj.item.connect('activate', Lang.bind(this, function() {
|
||||
let accessPoints = sortAccessPoints(apObj.accessPoints);
|
||||
if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT)
|
||||
@ -1515,6 +1522,8 @@ NMDeviceWireless.prototype = {
|
||||
}
|
||||
}));
|
||||
}
|
||||
apObj.item._apObj = apObj;
|
||||
|
||||
if (position < NUM_VISIBLE_NETWORKS) {
|
||||
apObj.isMore = false;
|
||||
this.section.addMenuItem(apObj.item, position);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const DBus = imports.dbus;
|
||||
@ -43,8 +43,8 @@ const UPDeviceState = {
|
||||
const PowerManagerInterface = {
|
||||
name: 'org.gnome.SettingsDaemon.Power',
|
||||
methods: [
|
||||
{ name: 'GetDevices', inSignature: '', outSignature: 'a(susbut)' },
|
||||
{ name: 'GetPrimaryDevice', inSignature: '', outSignature: '(susbut)' },
|
||||
{ name: 'GetDevices', inSignature: '', outSignature: 'a(susdut)' },
|
||||
{ name: 'GetPrimaryDevice', inSignature: '', outSignature: '(susdut)' },
|
||||
],
|
||||
signals: [
|
||||
{ name: 'Changed', inSignature: '' },
|
||||
@ -155,7 +155,7 @@ Indicator.prototype = {
|
||||
_devicesChanged: function() {
|
||||
this._proxy.GetRemote('Icon', Lang.bind(this, function(icon, error) {
|
||||
if (icon) {
|
||||
let gicon = Shell.util_icon_from_string (icon);
|
||||
let gicon = Gio.icon_new_for_string(icon);
|
||||
this.setGIcon(gicon);
|
||||
this.actor.show();
|
||||
} else {
|
||||
@ -183,7 +183,7 @@ DeviceItem.prototype = {
|
||||
this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' });
|
||||
this._label = new St.Label({ text: this._deviceTypeToString(device_type) });
|
||||
|
||||
this._icon = new St.Icon({ gicon: Shell.util_icon_from_string(icon),
|
||||
this._icon = new St.Icon({ gicon: Gio.icon_new_for_string(icon),
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
style_class: 'popup-menu-icon' });
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const DBus = imports.dbus;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Gio = imports.gi.Gio;
|
||||
@ -257,7 +257,7 @@ Client.prototype = {
|
||||
// FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
// system-users for now as Empathy does.
|
||||
let source = new ApproverSource(dispatchOp, _("Invitation"),
|
||||
Shell.util_icon_from_string('system-users'));
|
||||
Gio.icon_new_for_string('system-users'));
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notif = new RoomInviteNotification(source, dispatchOp, channel, contacts[0]);
|
||||
@ -305,6 +305,8 @@ Client.prototype = {
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, this._createAudioVideoSource, channel, context, dispatchOp));
|
||||
|
||||
context.delay();
|
||||
},
|
||||
|
||||
_createAudioVideoSource: function(connection, contacts, failed, channel, context, dispatchOp) {
|
||||
@ -323,8 +325,8 @@ Client.prototype = {
|
||||
|
||||
// We got the TpContact
|
||||
let source = new ApproverSource(dispatchOp, _("Call"), isVideo ?
|
||||
Shell.util_icon_from_string('camera-web') :
|
||||
Shell.util_icon_from_string('audio-input-microphone'));
|
||||
Gio.icon_new_for_string('camera-web') :
|
||||
Gio.icon_new_for_string('audio-input-microphone'));
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notif = new AudioVideoNotification(source, dispatchOp, channel, contacts[0], isVideo);
|
||||
@ -338,6 +340,8 @@ Client.prototype = {
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, this._createFileTransferSource, channel, context, dispatchOp));
|
||||
|
||||
context.delay();
|
||||
},
|
||||
|
||||
_createFileTransferSource: function(connection, contacts, failed, channel, context, dispatchOp) {
|
||||
@ -535,21 +539,18 @@ ChatSource.prototype = {
|
||||
|
||||
_updateAlias: function() {
|
||||
let oldAlias = this.title;
|
||||
this.setTitle(this._contact.get_alias());
|
||||
this._notification.appendAliasChange(oldAlias, this.title);
|
||||
this.pushNotification(this._notification);
|
||||
let newAlias = this._contact.get_alias();
|
||||
|
||||
if (oldAlias == newAlias)
|
||||
return;
|
||||
|
||||
this.setTitle(newAlias);
|
||||
this._notification.appendAliasChange(oldAlias, newAlias);
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
this._iconBox = new St.Bin({ style_class: 'avatar-box' });
|
||||
this._iconBox._size = this.ICON_SIZE;
|
||||
|
||||
this._updateAvatarIcon();
|
||||
|
||||
return this._iconBox;
|
||||
},
|
||||
|
||||
_updateAvatarIcon: function() {
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
let file = this._contact.get_avatar_file();
|
||||
|
||||
@ -561,12 +562,19 @@ ChatSource.prototype = {
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this._iconBox._size });
|
||||
}
|
||||
|
||||
return this._iconBox;
|
||||
},
|
||||
|
||||
_updateAvatarIcon: function() {
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
this._notification.update(this._notification.title, null, { customContent: true, icon: this.createNotificationIcon() });
|
||||
},
|
||||
|
||||
open: function(notification) {
|
||||
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);
|
||||
this._client.delegate_channels_async([this._channel], global.get_current_time(), '', null);
|
||||
}
|
||||
else {
|
||||
// We are not the handler, just ask to present the channel
|
||||
@ -1194,6 +1202,7 @@ AudioVideoNotification.prototype = {
|
||||
this.setResident(true);
|
||||
|
||||
this.addButton('reject', _("Reject"));
|
||||
/* translators: this is a button label (verb), not a noun */
|
||||
this.addButton('answer', _("Answer"));
|
||||
|
||||
this.connect('action-invoked', Lang.bind(this, function(self, action) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const AccountsService = imports.gi.AccountsService;
|
||||
const DBus = imports.dbus;
|
||||
@ -158,22 +158,29 @@ IMStatusChooserItem.prototype = {
|
||||
Lang.bind(this, this._changeIMStatus));
|
||||
|
||||
this._presence = new GnomeSession.Presence();
|
||||
this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
|
||||
this._presence.connect('StatusChanged',
|
||||
Lang.bind(this, this._sessionStatusChanged));
|
||||
|
||||
this._sessionPresenceRestored = false;
|
||||
this._imPresenceRestored = false;
|
||||
this._currentPresence = undefined;
|
||||
this._previousPresence = undefined;
|
||||
|
||||
this._accountMgr = Tp.AccountManager.dup()
|
||||
this._accountMgr.connect('most-available-presence-changed',
|
||||
Lang.bind(this, this._IMStatusChanged));
|
||||
this._accountMgr.prepare_async(null, Lang.bind(this,
|
||||
function(mgr) {
|
||||
let [presence, s, msg] = mgr.get_most_available_presence();
|
||||
let [presence, status, msg] = mgr.get_most_available_presence();
|
||||
|
||||
this._previousPresence = presence;
|
||||
this._IMStatusChanged(mgr, presence, s, msg);
|
||||
let savedPresence = global.settings.get_int('saved-im-presence');
|
||||
if (savedPresence == presence) {
|
||||
this._IMStatusChanged(mgr, presence, status, msg);
|
||||
} else {
|
||||
this._setComboboxPresence(savedPresence);
|
||||
status = this._statusForPresence(savedPresence);
|
||||
msg = msg ? msg : '';
|
||||
mgr.set_all_requested_presences(savedPresence, status, msg);
|
||||
}
|
||||
}));
|
||||
|
||||
this._userManager = AccountsService.UserManager.get_default();
|
||||
@ -261,19 +268,35 @@ IMStatusChooserItem.prototype = {
|
||||
},
|
||||
|
||||
_IMStatusChanged: function(accountMgr, presence, status, message) {
|
||||
if (!this._imPresenceRestored)
|
||||
this._imPresenceRestored = true;
|
||||
|
||||
if (presence == this._currentPresence)
|
||||
return;
|
||||
|
||||
this._currentPresence = presence;
|
||||
this._setComboboxPresence(presence);
|
||||
|
||||
if (!this._sessionPresenceRestored) {
|
||||
this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
|
||||
return;
|
||||
}
|
||||
|
||||
if (presence == Tp.ConnectionPresenceType.AVAILABLE)
|
||||
this._presence.setStatus(GnomeSession.PresenceStatus.AVAILABLE);
|
||||
|
||||
if (!this._expectedPresence || presence != this._expectedPresence)
|
||||
this._previousPresence = presence;
|
||||
// We ignore the actual value of _expectedPresence and never safe
|
||||
// the first presence change after an "automatic" change, assuming
|
||||
// that it is the response to our request; this is to account for
|
||||
// mission control falling back to "similar" presences if an account
|
||||
// type does not implement the requested presence.
|
||||
if (!this._expectedPresence)
|
||||
global.settings.set_int('saved-im-presence', presence);
|
||||
else
|
||||
this._expectedPresence = undefined;
|
||||
},
|
||||
|
||||
_setComboboxPresence: function(presence) {
|
||||
let activatedItem;
|
||||
|
||||
if (presence == Tp.ConnectionPresenceType.AVAILABLE)
|
||||
@ -310,13 +333,16 @@ IMStatusChooserItem.prototype = {
|
||||
return;
|
||||
|
||||
status = this._statusForPresence(newPresence);
|
||||
msg = msg ? msg : "";
|
||||
msg = msg ? msg : '';
|
||||
this._accountMgr.set_all_requested_presences(newPresence, status, msg);
|
||||
},
|
||||
|
||||
getIMPresenceForSessionStatus: function(sessionStatus) {
|
||||
// Restore the last user-set presence when coming back from
|
||||
// BUSY/IDLE (otherwise the last user-set presence matches
|
||||
// the current one)
|
||||
if (sessionStatus == GnomeSession.PresenceStatus.AVAILABLE)
|
||||
return this._previousPresence;
|
||||
return global.settings.get_int('saved-im-presence');
|
||||
|
||||
if (sessionStatus == GnomeSession.PresenceStatus.BUSY) {
|
||||
// Only change presence if the current one is "more present" than
|
||||
@ -337,6 +363,20 @@ IMStatusChooserItem.prototype = {
|
||||
},
|
||||
|
||||
_sessionStatusChanged: function(sessionPresence, sessionStatus) {
|
||||
if (!this._imPresenceRestored)
|
||||
return;
|
||||
|
||||
if (!this._sessionPresenceRestored) {
|
||||
let savedStatus = global.settings.get_int('saved-session-presence');
|
||||
if (sessionStatus != savedStatus) {
|
||||
this._presence.setStatus(savedStatus);
|
||||
return;
|
||||
}
|
||||
this._sessionPresenceRestored = true;
|
||||
}
|
||||
|
||||
global.settings.set_int('saved-session-presence', sessionStatus);
|
||||
|
||||
let [presence, s, msg] = this._accountMgr.get_most_available_presence();
|
||||
let newPresence, status;
|
||||
|
||||
@ -346,7 +386,7 @@ IMStatusChooserItem.prototype = {
|
||||
return;
|
||||
|
||||
status = this._statusForPresence(newPresence);
|
||||
msg = msg ? msg : "";
|
||||
msg = msg ? msg : '';
|
||||
|
||||
this._expectedPresence = newPresence;
|
||||
this._accountMgr.set_all_requested_presences(newPresence, status, msg);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
@ -12,6 +12,7 @@ const St = imports.gi.St;
|
||||
const Main = imports.ui.main;
|
||||
const Search = imports.ui.search;
|
||||
const SearchDisplay = imports.ui.searchDisplay;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
function BaseTab(titleActor, pageActor, name, a11yIcon) {
|
||||
@ -120,6 +121,7 @@ SearchTab.prototype = {
|
||||
hint_text: _("Type to search..."),
|
||||
track_hover: true,
|
||||
can_focus: true });
|
||||
ShellEntry.addContextMenu(this._entry);
|
||||
this._text = this._entry.clutter_text;
|
||||
this._text.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
||||
|
||||
@ -289,9 +291,11 @@ SearchTab.prototype = {
|
||||
_onCapturedEvent: function(actor, event) {
|
||||
if (event.type() == Clutter.EventType.BUTTON_PRESS) {
|
||||
let source = event.get_source();
|
||||
if (source != this._text && this._text.text == '') {
|
||||
if (source != this._text && this._text.text == '' &&
|
||||
!Main.layoutManager.keyboardBox.contains(source)) {
|
||||
// the user clicked outside after activating the entry, but
|
||||
// with no search term entered - cancel the search
|
||||
// with no search term entered and no keyboard button pressed
|
||||
// - cancel the search
|
||||
this._reset();
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
@ -12,35 +12,10 @@ function WindowAttentionHandler() {
|
||||
|
||||
WindowAttentionHandler.prototype = {
|
||||
_init : function() {
|
||||
this._startupIds = {};
|
||||
this._tracker = Shell.WindowTracker.get_default();
|
||||
this._tracker.connect('startup-sequence-changed', Lang.bind(this, this._onStartupSequenceChanged));
|
||||
|
||||
global.display.connect('window-demands-attention', Lang.bind(this, this._onWindowDemandsAttention));
|
||||
},
|
||||
|
||||
_onStartupSequenceChanged : function(tracker) {
|
||||
let sequences = tracker.get_startup_sequences();
|
||||
this._startupIds = {};
|
||||
for(let i = 0; i < sequences.length; i++) {
|
||||
this._startupIds[sequences[i].get_id()] = true;
|
||||
}
|
||||
},
|
||||
|
||||
_getTitle : function(app, window) {
|
||||
if (this._startupIds[window.get_startup_id()])
|
||||
return app.get_name();
|
||||
else
|
||||
return window.title;
|
||||
},
|
||||
|
||||
_getBanner : function(app, window) {
|
||||
if (this._startupIds[window.get_startup_id()])
|
||||
return _("%s has finished starting").format(app.get_name());
|
||||
else
|
||||
return _("'%s' is ready").format(window.title);
|
||||
},
|
||||
|
||||
_onWindowDemandsAttention : function(display, window) {
|
||||
// We don't want to show the notification when the window is already focused,
|
||||
// because this is rather pointless.
|
||||
@ -57,12 +32,16 @@ WindowAttentionHandler.prototype = {
|
||||
let source = new Source(app, window);
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notification = new MessageTray.Notification(source, this._getTitle(app, window), this._getBanner(app, window));
|
||||
let banner = _("'%s' is ready").format(window.title);
|
||||
let title = app.get_name();
|
||||
|
||||
let notification = new MessageTray.Notification(source, title, banner);
|
||||
source.notify(notification);
|
||||
|
||||
source.signalIDs.push(window.connect('notify::title', Lang.bind(this, function(win) {
|
||||
notification.update(this._getTitle(app, win), this._getBanner(app, win));
|
||||
})));
|
||||
source.signalIDs.push(window.connect('notify::title',
|
||||
Lang.bind(this, function() {
|
||||
notification.update(title, banner);
|
||||
})));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GLib = imports.gi.GLib;
|
||||
@ -37,28 +37,36 @@ function WindowDimmer(actor) {
|
||||
|
||||
WindowDimmer.prototype = {
|
||||
_init: function(actor) {
|
||||
this.effect = new Clutter.ShaderEffect({ shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
|
||||
this.effect.set_shader_source(getDimShaderSource());
|
||||
if (Clutter.feature_available(Clutter.FeatureFlags.SHADERS_GLSL)) {
|
||||
this._effect = new Clutter.ShaderEffect({ shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
|
||||
this._effect.set_shader_source(getDimShaderSource());
|
||||
} else {
|
||||
this._effect = null;
|
||||
}
|
||||
|
||||
this.actor = actor;
|
||||
},
|
||||
|
||||
set dimFraction(fraction) {
|
||||
this._dimFraction = fraction;
|
||||
|
||||
if (this._effect == null)
|
||||
return;
|
||||
|
||||
if (!Meta.prefs_get_attach_modal_dialogs()) {
|
||||
this.effect.enabled = false;
|
||||
this._effect.enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (fraction > 0.01) {
|
||||
Shell.shader_effect_set_double_uniform(this.effect, 'height', this.actor.get_height());
|
||||
Shell.shader_effect_set_double_uniform(this.effect, 'fraction', fraction);
|
||||
Shell.shader_effect_set_double_uniform(this._effect, 'height', this.actor.get_height());
|
||||
Shell.shader_effect_set_double_uniform(this._effect, 'fraction', fraction);
|
||||
|
||||
if (!this.effect.actor)
|
||||
this.actor.add_effect(this.effect);
|
||||
if (!this._effect.actor)
|
||||
this.actor.add_effect(this._effect);
|
||||
} else {
|
||||
if (this.effect.actor)
|
||||
this.actor.remove_effect(this.effect);
|
||||
if (this._effect.actor)
|
||||
this.actor.remove_effect(this._effect);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GConf = imports.gi.GConf;
|
||||
@ -135,8 +135,11 @@ WindowClone.prototype = {
|
||||
this._realWindowDestroyId = this.realWindow.connect('destroy',
|
||||
Lang.bind(this, this._disconnectRealWindowSignals));
|
||||
|
||||
this.actor.connect('button-release-event',
|
||||
Lang.bind(this, this._onButtonRelease));
|
||||
let clickAction = new Clutter.ClickAction();
|
||||
clickAction.connect('clicked', Lang.bind(this, this._onClicked));
|
||||
clickAction.connect('long-press', Lang.bind(this, this._onLongPress));
|
||||
|
||||
this.actor.add_action(clickAction);
|
||||
|
||||
this.actor.connect('scroll-event',
|
||||
Lang.bind(this, this._onScroll));
|
||||
@ -147,6 +150,7 @@ WindowClone.prototype = {
|
||||
|
||||
this._draggable = DND.makeDraggable(this.actor,
|
||||
{ restoreOnSuccess: true,
|
||||
manualMode: true,
|
||||
dragActorMaxSize: WINDOW_DND_SIZE,
|
||||
dragActorOpacity: DRAGGING_WINDOW_OPACITY });
|
||||
this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin));
|
||||
@ -345,9 +349,27 @@ WindowClone.prototype = {
|
||||
this._zoomStep = undefined;
|
||||
},
|
||||
|
||||
_onButtonRelease : function (actor, event) {
|
||||
_onClicked: function(action, actor) {
|
||||
this._selected = true;
|
||||
this.emit('selected', event.get_time());
|
||||
this.emit('selected', global.get_current_time());
|
||||
},
|
||||
|
||||
_onLongPress: function(action, actor, state) {
|
||||
// Take advantage of the Clutter policy to consider
|
||||
// a long-press canceled when the pointer movement
|
||||
// exceeds dnd-drag-threshold to manually start the drag
|
||||
if (state == Clutter.LongPressState.CANCEL) {
|
||||
// A click cancels a long-press before any click handler is
|
||||
// run - make sure to not start a drag in that case
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
||||
function() {
|
||||
if (this._selected)
|
||||
return;
|
||||
let [x, y] = action.get_coords();
|
||||
this._draggable.startDrag(x, y, global.get_current_time());
|
||||
}));
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
_onDragBegin : function (draggable, time) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
@ -148,6 +148,8 @@ WorkspaceThumbnail.prototype = {
|
||||
this.metaWorkspace = metaWorkspace;
|
||||
this.monitorIndex = Main.layoutManager.primaryIndex;
|
||||
|
||||
this._removed = false;
|
||||
|
||||
this.actor = new St.Group({ reactive: true,
|
||||
clip_to_allocation: true,
|
||||
style_class: 'workspace-thumbnail' });
|
||||
@ -173,17 +175,21 @@ WorkspaceThumbnail.prototype = {
|
||||
let monitor = Main.layoutManager.primaryMonitor;
|
||||
this.setPorthole(monitor.x, monitor.y, monitor.width, monitor.height);
|
||||
|
||||
let windows = global.get_window_actors().filter(this._isMyWindow, this);
|
||||
let windows = global.get_window_actors().filter(this._isWorkspaceWindow, this);
|
||||
|
||||
// Create clones for windows that should be visible in the Overview
|
||||
this._windows = [];
|
||||
this._allWindows = [];
|
||||
this._minimizedChangedIds = [];
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
windows[i].meta_window._minimizedChangedId =
|
||||
let minimizedChangedId =
|
||||
windows[i].meta_window.connect('notify::minimized',
|
||||
Lang.bind(this,
|
||||
this._updateMinimized));
|
||||
this._allWindows.push(windows[i].meta_window);
|
||||
this._minimizedChangedIds.push(minimizedChangedId);
|
||||
|
||||
if (this._isOverviewWindow(windows[i])) {
|
||||
if (this._isMyWindow(windows[i]) && this._isOverviewWindow(windows[i])) {
|
||||
this._addWindowClone(windows[i]);
|
||||
}
|
||||
}
|
||||
@ -268,17 +274,11 @@ WorkspaceThumbnail.prototype = {
|
||||
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();
|
||||
},
|
||||
|
||||
_doAddWindow : function(metaWin) {
|
||||
if (this.leavingOverview)
|
||||
if (this._removed)
|
||||
return;
|
||||
|
||||
let win = metaWin.get_compositor_private();
|
||||
@ -288,7 +288,7 @@ WorkspaceThumbnail.prototype = {
|
||||
// the compositor finds out about them...
|
||||
Mainloop.idle_add(Lang.bind(this,
|
||||
function () {
|
||||
if (this.actor &&
|
||||
if (!this._removed &&
|
||||
metaWin.get_compositor_private() &&
|
||||
metaWin.get_workspace() == this.metaWorkspace)
|
||||
this._doAddWindow(metaWin);
|
||||
@ -297,16 +297,19 @@ WorkspaceThumbnail.prototype = {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._allWindows.indexOf(metaWin) == -1) {
|
||||
let minimizedChangedId = metaWin.connect('notify::minimized',
|
||||
Lang.bind(this,
|
||||
this._updateMinimized));
|
||||
this._allWindows.push(metaWin);
|
||||
this._minimizedChangedIds.push(minimizedChangedId);
|
||||
}
|
||||
|
||||
// We might have the window in our list already if it was on all workspaces and
|
||||
// now was moved to this workspace
|
||||
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;
|
||||
|
||||
@ -318,6 +321,13 @@ WorkspaceThumbnail.prototype = {
|
||||
},
|
||||
|
||||
_windowRemoved : function(metaWorkspace, metaWin) {
|
||||
let index = this._allWindows.indexOf(metaWin);
|
||||
if (index != -1) {
|
||||
metaWin.disconnect(this._minimizedChangedIds[index]);
|
||||
this._allWindows.splice(index, 1);
|
||||
this._minimizedChangedIds.splice(index, 1);
|
||||
}
|
||||
|
||||
this._doRemoveWindow(metaWin);
|
||||
},
|
||||
|
||||
@ -344,27 +354,36 @@ WorkspaceThumbnail.prototype = {
|
||||
this.actor.destroy();
|
||||
},
|
||||
|
||||
_onDestroy: function(actor) {
|
||||
workspaceRemoved : function() {
|
||||
if (this._removed)
|
||||
return;
|
||||
|
||||
this._removed = true;
|
||||
|
||||
this.metaWorkspace.disconnect(this._windowAddedId);
|
||||
this.metaWorkspace.disconnect(this._windowRemovedId);
|
||||
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;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < this._allWindows.length; i++)
|
||||
this._allWindows[i].disconnect(this._minimizedChangedIds[i]);
|
||||
},
|
||||
|
||||
_onDestroy: function(actor) {
|
||||
this.workspaceRemoved();
|
||||
|
||||
this._windows = [];
|
||||
this.actor = null;
|
||||
},
|
||||
|
||||
// Tests if @win belongs to this workspace
|
||||
_isWorkspaceWindow : function (win) {
|
||||
return Main.isWindowActorDisplayedOnWorkspace(win, this.metaWorkspace.index());
|
||||
},
|
||||
|
||||
// Tests if @win belongs to this workspace and monitor
|
||||
_isMyWindow : function (win) {
|
||||
return Main.isWindowActorDisplayedOnWorkspace(win, this.metaWorkspace.index()) &&
|
||||
return this._isWorkspaceWindow(win) &&
|
||||
(!win.get_meta_window() || win.get_meta_window().get_monitor() == this.monitorIndex);
|
||||
},
|
||||
|
||||
@ -584,8 +603,10 @@ ThumbnailsBox.prototype = {
|
||||
if (thumbnail.state > ThumbnailState.NORMAL)
|
||||
continue;
|
||||
|
||||
if (currentPos >= start && currentPos < start + count)
|
||||
if (currentPos >= start && currentPos < start + count) {
|
||||
thumbnail.workspaceRemoved();
|
||||
this._setThumbnailState(thumbnail, ThumbnailState.REMOVING);
|
||||
}
|
||||
|
||||
currentPos++;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
@ -109,8 +109,6 @@ WorkspacesView.prototype = {
|
||||
this._scrollAdjustment.connect('notify::value',
|
||||
Lang.bind(this, this._onScroll));
|
||||
|
||||
this._timeoutId = 0;
|
||||
|
||||
this._switchWorkspaceNotifyId =
|
||||
global.window_manager.connect('switch-workspace',
|
||||
Lang.bind(this, this._activeWorkspaceChanged));
|
||||
@ -321,10 +319,6 @@ WorkspacesView.prototype = {
|
||||
if (this._inDrag)
|
||||
this._dragEnd();
|
||||
|
||||
if (this._timeoutId) {
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
this._timeoutId = 0;
|
||||
}
|
||||
if (this._itemDragBeginId > 0) {
|
||||
Main.overview.disconnect(this._itemDragBeginId);
|
||||
this._itemDragBeginId = 0;
|
||||
@ -383,72 +377,10 @@ WorkspacesView.prototype = {
|
||||
this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
||||
}
|
||||
|
||||
let primary = Main.layoutManager.primaryMonitor;
|
||||
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
let topWorkspace, bottomWorkspace;
|
||||
topWorkspace = this._workspaces[activeWorkspaceIndex - 1];
|
||||
bottomWorkspace = this._workspaces[activeWorkspaceIndex + 1];
|
||||
let hoverWorkspace = null;
|
||||
|
||||
// reactive monitor edges
|
||||
let topEdge = primary.y;
|
||||
let switchTop = (dragEvent.y <= topEdge && topWorkspace);
|
||||
if (switchTop && this._dragOverLastY != topEdge) {
|
||||
topWorkspace.metaWorkspace.activate(global.get_current_time());
|
||||
this._dragOverLastY = topEdge;
|
||||
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
}
|
||||
let bottomEdge = primary.y + primary.height - 1;
|
||||
let switchBottom = (dragEvent.y >= bottomEdge && bottomWorkspace);
|
||||
if (switchBottom && this._dragOverLastY != bottomEdge) {
|
||||
bottomWorkspace.metaWorkspace.activate(global.get_current_time());
|
||||
this._dragOverLastY = bottomEdge;
|
||||
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
}
|
||||
this._dragOverLastY = dragEvent.y;
|
||||
let result = DND.DragMotionResult.CONTINUE;
|
||||
|
||||
// check hover state of new workspace area / inactive workspaces
|
||||
if (topWorkspace) {
|
||||
if (topWorkspace.actor.contains(dragEvent.targetActor)) {
|
||||
hoverWorkspace = topWorkspace;
|
||||
result = topWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
|
||||
}
|
||||
}
|
||||
|
||||
if (bottomWorkspace) {
|
||||
if (bottomWorkspace.actor.contains(dragEvent.targetActor)) {
|
||||
hoverWorkspace = bottomWorkspace;
|
||||
result = bottomWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
|
||||
}
|
||||
}
|
||||
|
||||
// handle delayed workspace switches
|
||||
if (hoverWorkspace) {
|
||||
if (!this._timeoutId)
|
||||
this._timeoutId = Mainloop.timeout_add_seconds(1,
|
||||
Lang.bind(this, function() {
|
||||
hoverWorkspace.metaWorkspace.activate(global.get_current_time());
|
||||
return false;
|
||||
}));
|
||||
} else {
|
||||
if (this._timeoutId) {
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
this._timeoutId = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
},
|
||||
|
||||
_dragEnd: function() {
|
||||
if (this._timeoutId) {
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
this._timeoutId = 0;
|
||||
}
|
||||
DND.removeDragMonitor(this._dragMonitor);
|
||||
this._inDrag = false;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
|
@ -1,6 +1,8 @@
|
||||
af
|
||||
an
|
||||
ar
|
||||
as
|
||||
ast
|
||||
be
|
||||
bg
|
||||
bn
|
||||
@ -30,6 +32,7 @@ it
|
||||
ja
|
||||
ko
|
||||
kn
|
||||
ku
|
||||
lt
|
||||
lv
|
||||
mr
|
||||
|
@ -25,6 +25,7 @@ js/ui/polkitAuthenticationAgent.js
|
||||
js/ui/popupMenu.js
|
||||
js/ui/runDialog.js
|
||||
js/ui/searchDisplay.js
|
||||
js/ui/shellEntry.js
|
||||
js/ui/shellMountOperation.js
|
||||
js/ui/status/accessibility.js
|
||||
js/ui/status/bluetooth.js
|
||||
@ -44,4 +45,3 @@ src/shell-global.c
|
||||
src/shell-mobile-providers.c
|
||||
src/shell-polkit-authentication-agent.c
|
||||
src/shell-util.c
|
||||
|
||||
|
136
po/be.po
136
po/be.po
@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-09-19 21:58+0300\n"
|
||||
"PO-Revision-Date: 2011-09-19 21:58+0300\n"
|
||||
"POT-Creation-Date: 2011-09-21 22:18+0300\n"
|
||||
"PO-Revision-Date: 2011-09-21 22:18+0300\n"
|
||||
"Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n"
|
||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||
"Language: be\n"
|
||||
@ -169,8 +169,8 @@ msgid "Not listed?"
|
||||
msgstr "Няма ў спісе?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "Скасаваць"
|
||||
|
||||
@ -183,8 +183,8 @@ msgstr "Увайсці"
|
||||
msgid "Login Window"
|
||||
msgstr "Акно ўваходу"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:525
|
||||
#: ../js/ui/userMenu.js:527 ../js/ui/userMenu.js:596
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
|
||||
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
|
||||
msgid "Suspend"
|
||||
msgstr "Прыпыніць камп'ютар"
|
||||
|
||||
@ -248,12 +248,16 @@ msgstr "%s дададзены ў ваш спіс упадабанага."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s выдалены з вашага спіса ўпадабанага."
|
||||
|
||||
#: ../js/ui/autorunManager.js:592
|
||||
#: ../js/ui/autorunManager.js:280
|
||||
msgid "Removable Devices"
|
||||
msgstr "Зменныя прыстасаванні"
|
||||
|
||||
#: ../js/ui/autorunManager.js:590
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Адкрыць у %s"
|
||||
|
||||
#: ../js/ui/autorunManager.js:618
|
||||
#: ../js/ui/autorunManager.js:616
|
||||
msgid "Eject"
|
||||
msgstr "Выняць"
|
||||
|
||||
@ -408,15 +412,15 @@ msgstr "На наступным тыдні"
|
||||
msgid "Unknown"
|
||||
msgstr "Невядома"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
|
||||
msgid "Available"
|
||||
msgstr "Даступны"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
|
||||
msgid "Away"
|
||||
msgstr "Адсутны"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Заняты"
|
||||
|
||||
@ -428,7 +432,7 @@ msgstr "Па-за сеткай"
|
||||
msgid "CONTACTS"
|
||||
msgstr "КАНТАКТЫ"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1197
|
||||
msgid "Remove"
|
||||
msgstr "Выдаліць"
|
||||
|
||||
@ -609,58 +613,58 @@ msgstr "Паглядзець выточны код"
|
||||
msgid "Web Page"
|
||||
msgstr "Сеціўная старонка"
|
||||
|
||||
#: ../js/ui/messageTray.js:1189
|
||||
#: ../js/ui/messageTray.js:1190
|
||||
msgid "Open"
|
||||
msgstr "Адкрыць"
|
||||
|
||||
#: ../js/ui/messageTray.js:2371
|
||||
#: ../js/ui/messageTray.js:2372
|
||||
msgid "System Information"
|
||||
msgstr "Сістэмная інфармацыя"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
#: ../js/ui/networkAgent.js:145
|
||||
msgid "Show password"
|
||||
msgstr "Паказваць пароль"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/networkAgent.js:160
|
||||
msgid "Connect"
|
||||
msgstr "Злучыць"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
|
||||
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
|
||||
#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
|
||||
#: ../js/ui/networkAgent.js:324
|
||||
msgid "Password: "
|
||||
msgstr "Пароль: "
|
||||
|
||||
#. static WEP
|
||||
#: ../js/ui/networkAgent.js:253
|
||||
#: ../js/ui/networkAgent.js:260
|
||||
msgid "Key: "
|
||||
msgstr "Ключ: "
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
|
||||
#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
|
||||
msgid "Username: "
|
||||
msgstr "Імя карыстальніка: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:291
|
||||
#: ../js/ui/networkAgent.js:298
|
||||
msgid "Identity: "
|
||||
msgstr "Ідэнтычнасць: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:293
|
||||
#: ../js/ui/networkAgent.js:300
|
||||
msgid "Private key password: "
|
||||
msgstr "Пароль да прыватнага ключа: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:305
|
||||
#: ../js/ui/networkAgent.js:312
|
||||
msgid "Service: "
|
||||
msgstr "Паслуга: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "Для бесправадной сеткі патрэбная ідэнтыфікацыя"
|
||||
|
||||
#: ../js/ui/networkAgent.js:335
|
||||
#: ../js/ui/networkAgent.js:342
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
@ -669,37 +673,37 @@ msgstr ""
|
||||
"Для доступу да бесправадной сеткі \"%s\" патрэбны пароль або ключы "
|
||||
"шыфравання."
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Правадная ідэнтыфікацыя 802.1X"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#: ../js/ui/networkAgent.js:348
|
||||
msgid "Network name: "
|
||||
msgstr "Назва сеткі: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
msgid "DSL authentication"
|
||||
msgstr "DSL-ідэнтыфікацыя"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
#: ../js/ui/networkAgent.js:360
|
||||
msgid "PIN code required"
|
||||
msgstr "Патрэбны PIN-код"
|
||||
|
||||
#: ../js/ui/networkAgent.js:354
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr ""
|
||||
"Для прыстасавання для доступу да шырокапалоснай мабільнай сеткі патрэбны PIN-"
|
||||
"код"
|
||||
|
||||
#: ../js/ui/networkAgent.js:355
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
msgid "PIN: "
|
||||
msgstr "PIN-код: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#: ../js/ui/networkAgent.js:368
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Пароль да шырокапалоснай мабільнай сеткі"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#: ../js/ui/networkAgent.js:369
|
||||
#, c-format
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Каб злучыцца з \"%s\", патрэбны пароль."
|
||||
@ -763,7 +767,7 @@ msgstr "Патрэбная ідэнтыфікацыя"
|
||||
msgid "Administrator"
|
||||
msgstr "Адміністратар"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175
|
||||
msgid "Authenticate"
|
||||
msgstr "Ідэнтыфікаваць"
|
||||
|
||||
@ -771,11 +775,11 @@ msgstr "Ідэнтыфікаваць"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:262
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:256
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "На жаль, ідэнтыфікацыя не адбылася. Паўтарыце спробу."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:274
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:268
|
||||
msgid "Password:"
|
||||
msgstr "Пароль:"
|
||||
|
||||
@ -784,7 +788,7 @@ msgstr "Пароль:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:709
|
||||
#: ../js/ui/popupMenu.js:727
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -974,11 +978,11 @@ msgstr "Увядзіце PIN, які паказвае прыстасаванне
|
||||
msgid "OK"
|
||||
msgstr "Добра"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:72
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Паказаць раскладку"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:77
|
||||
#: ../js/ui/status/keyboard.js:78
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "Настройкі мясцовасці і мовы"
|
||||
|
||||
@ -1023,13 +1027,13 @@ msgstr "недаступна"
|
||||
msgid "connection failed"
|
||||
msgstr "не ўдалося злучыцца"
|
||||
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
|
||||
msgid "More..."
|
||||
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:611 ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
|
||||
msgid "Connected (private)"
|
||||
msgstr "Злучана (прыватна)"
|
||||
|
||||
@ -1046,7 +1050,7 @@ msgid "Auto dial-up"
|
||||
msgstr "Аўтаматычна: мадэм"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Аўтаматычна: %s"
|
||||
@ -1055,47 +1059,47 @@ msgstr "Аўтаматычна: %s"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Аўтаматычна: Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1472
|
||||
msgid "Auto wireless"
|
||||
msgstr "Аўтаматычна: wireless"
|
||||
|
||||
#: ../js/ui/status/network.js:1558
|
||||
#: ../js/ui/status/network.js:1566
|
||||
msgid "Enable networking"
|
||||
msgstr "Уключыць сеткавыя функцыі"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1578
|
||||
msgid "Wired"
|
||||
msgstr "Правадное злучэнне"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1589
|
||||
msgid "Wireless"
|
||||
msgstr "Бесправадное злучэнне"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Мабільны broadband"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1609
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-злучэнні"
|
||||
|
||||
#: ../js/ui/status/network.js:1612
|
||||
#: ../js/ui/status/network.js:1620
|
||||
msgid "Network Settings"
|
||||
msgstr "Сеткавыя настройкі"
|
||||
|
||||
#: ../js/ui/status/network.js:1749
|
||||
#: ../js/ui/status/network.js:1757
|
||||
msgid "Connection failed"
|
||||
msgstr "Не ўдалося злучыцца"
|
||||
|
||||
#: ../js/ui/status/network.js:1750
|
||||
#: ../js/ui/status/network.js:1758
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Не ўдалося ўключыць сеткавае злучэнне"
|
||||
|
||||
#: ../js/ui/status/network.js:2000
|
||||
#: ../js/ui/status/network.js:2008
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Сеткавыя функцыі выключаныя"
|
||||
|
||||
#: ../js/ui/status/network.js:2125
|
||||
#: ../js/ui/status/network.js:2133
|
||||
msgid "Network Manager"
|
||||
msgstr "Сеткавы кіраўнік"
|
||||
|
||||
@ -1447,51 +1451,51 @@ msgstr "Рэдагаваць конт"
|
||||
msgid "Unknown reason"
|
||||
msgstr "Невядомая прычына"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
#: ../js/ui/userMenu.js:145
|
||||
msgid "Hidden"
|
||||
msgstr "Схаваны"
|
||||
|
||||
#: ../js/ui/userMenu.js:159
|
||||
#: ../js/ui/userMenu.js:151
|
||||
msgid "Idle"
|
||||
msgstr "Бяздзейны"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#: ../js/ui/userMenu.js:154
|
||||
msgid "Unavailable"
|
||||
msgstr "Недаступны"
|
||||
|
||||
#: ../js/ui/userMenu.js:523 ../js/ui/userMenu.js:527 ../js/ui/userMenu.js:597
|
||||
#: ../js/ui/userMenu.js:512 ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:586
|
||||
msgid "Power Off..."
|
||||
msgstr "Выключыць камп'ютар..."
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#: ../js/ui/userMenu.js:548
|
||||
msgid "Notifications"
|
||||
msgstr "Апавяшчэнні"
|
||||
|
||||
#: ../js/ui/userMenu.js:567
|
||||
#: ../js/ui/userMenu.js:556
|
||||
msgid "Online Accounts"
|
||||
msgstr "Сеціўныя конты"
|
||||
|
||||
#: ../js/ui/userMenu.js:571
|
||||
#: ../js/ui/userMenu.js:560
|
||||
msgid "System Settings"
|
||||
msgstr "Сістэмныя настройкі"
|
||||
|
||||
#: ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:567
|
||||
msgid "Lock Screen"
|
||||
msgstr "Замкнуць экран"
|
||||
|
||||
#: ../js/ui/userMenu.js:583
|
||||
#: ../js/ui/userMenu.js:572
|
||||
msgid "Switch User"
|
||||
msgstr "Перамяніць карыстальніка"
|
||||
|
||||
#: ../js/ui/userMenu.js:588
|
||||
#: ../js/ui/userMenu.js:577
|
||||
msgid "Log Out..."
|
||||
msgstr "Скончыць сеанс..."
|
||||
|
||||
#: ../js/ui/userMenu.js:616
|
||||
#: ../js/ui/userMenu.js:605
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Вам прызначаны стан занятасці для чату"
|
||||
|
||||
#: ../js/ui/userMenu.js:617
|
||||
#: ../js/ui/userMenu.js:606
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
|
397
po/bg.po
397
po/bg.po
@ -5,10 +5,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Project-Id-Version: gnome-shell gnome-3-2\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-09-18 11:40+0300\n"
|
||||
"PO-Revision-Date: 2011-09-18 11:40+0300\n"
|
||||
"POT-Creation-Date: 2011-10-21 23:30+0300\n"
|
||||
"PO-Revision-Date: 2011-10-21 23:30+0300\n"
|
||||
"Last-Translator: Ivaylo Valkov <ivaylo@e-valkov.org>\n"
|
||||
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
|
||||
"Language: bg\n"
|
||||
@ -70,24 +70,20 @@ msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Показване на дата в допълнение към времето, ако е истина."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display onscreen keyboard."
|
||||
msgstr "Показване на екранната клавиатура, ако е истина."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Показване на секундите в допълнение към времето, ако е истина."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Показване на деня от седмицата по ISO, ако е истина."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
"Списък на идентификаторите на файловете във формат .desktop за любими "
|
||||
"програми"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../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 "
|
||||
@ -113,23 +109,19 @@ msgstr ""
|
||||
"WEBM и използва кодера VP8. Стойността в „%T“ замества предполагаемия "
|
||||
"оптимален брой нишки за системата."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Показване на дата в часовника"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the onscreen keyboard"
|
||||
msgstr "Показване на екранната клавиатура"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Показване на деня от седмицата в календара"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Показване на секунди към времето"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -137,7 +129,7 @@ msgstr ""
|
||||
"Програмите, които отговарят на тези идентификатор, ще бъдат показани в "
|
||||
"областта „Любими“."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../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 "
|
||||
@ -147,7 +139,7 @@ msgstr ""
|
||||
"екрана, което ще бъде уникално и ще зависи от текущата дата. Трябва да го "
|
||||
"промените, когато записвате в различен формат на контейнера."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../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."
|
||||
@ -155,11 +147,11 @@ msgstr ""
|
||||
"Честота на кадрите за записа на екрана създаден от записващата програма на "
|
||||
"Обвивката на GNOME в кадри за секунда."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
#: ../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:23
|
||||
#: ../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 "
|
||||
@ -172,54 +164,75 @@ msgstr ""
|
||||
"защитите личните си данни. Забележете, че дори да го направите, това няма да "
|
||||
"премахне вече запазените данни."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Видът на клавиатурата, която да се ползва."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Идентификатори (uuid) на разширения, които да бъдат включени"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Дали да се събира статистика за използването на програми"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Коя клавиатура да бъде да се ползва"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "изключени доставчици на OpenSearch"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:608
|
||||
#: ../js/gdm/loginDialog.js:633
|
||||
msgid "Session..."
|
||||
msgstr "Сесия…"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:765
|
||||
#: ../js/gdm/loginDialog.js:804
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Регистриране"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:822
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:849
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(или се регистрирайте с пръстов отпечатък)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:867
|
||||
msgid "Not listed?"
|
||||
msgstr "Липсва в списъка?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:932 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/gdm/loginDialog.js:1035 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:148
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:173 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "Отказване"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:937
|
||||
#: ../js/gdm/loginDialog.js:1040
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Регистриране"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1257
|
||||
#: ../js/gdm/loginDialog.js:1392
|
||||
msgid "Login Window"
|
||||
msgstr "Екран за идентификация"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:554
|
||||
#: ../js/ui/userMenu.js:556 ../js/ui/userMenu.js:625
|
||||
msgid "Suspend"
|
||||
msgstr "Приспиване"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Рестартиране"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Изключване"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
msgid "Command not found"
|
||||
msgstr "Командата не беше открита"
|
||||
@ -270,12 +283,16 @@ msgstr "Програмата „%s“ беше добавена в „Любим
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "Програмата „%s“ беше премахната от „Любими“"
|
||||
|
||||
#: ../js/ui/autorunManager.js:592
|
||||
#: ../js/ui/autorunManager.js:280
|
||||
msgid "Removable Devices"
|
||||
msgstr "Външни устройства"
|
||||
|
||||
#: ../js/ui/autorunManager.js:590
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Отваряне с %s"
|
||||
|
||||
#: ../js/ui/autorunManager.js:618
|
||||
#: ../js/ui/autorunManager.js:616
|
||||
msgid "Eject"
|
||||
msgstr "Изваждане"
|
||||
|
||||
@ -425,32 +442,32 @@ msgstr "Тази седмица"
|
||||
msgid "Next week"
|
||||
msgstr "Следващата седмица"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:59 ../js/ui/notificationDaemon.js:444
|
||||
#: ../js/ui/status/power.js:223 ../src/shell-app.c:355
|
||||
#: ../js/ui/contactDisplay.js:65 ../js/ui/notificationDaemon.js:459
|
||||
#: ../js/ui/status/power.js:223 ../src/shell-app.c:353
|
||||
msgid "Unknown"
|
||||
msgstr "Неизвестно"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
|
||||
#: ../js/ui/contactDisplay.js:86 ../js/ui/userMenu.js:139
|
||||
msgid "Available"
|
||||
msgstr "На линия"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
|
||||
#: ../js/ui/contactDisplay.js:91 ../js/ui/userMenu.js:148
|
||||
msgid "Away"
|
||||
msgstr "Отсъстващ"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
|
||||
#: ../js/ui/contactDisplay.js:95 ../js/ui/userMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Зает"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:93
|
||||
#: ../js/ui/contactDisplay.js:99
|
||||
msgid "Offline"
|
||||
msgstr "Извън мрежата"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:140
|
||||
#: ../js/ui/contactDisplay.js:146
|
||||
msgid "CONTACTS"
|
||||
msgstr "КОНТАКТИ"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1206
|
||||
msgid "Remove"
|
||||
msgstr "Изтриване"
|
||||
|
||||
@ -547,10 +564,6 @@ msgstr[1] "Ще излезете от системата автоматично
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Излизане от системата."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
|
||||
msgid "Power Off"
|
||||
msgstr "Изключване"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
@ -568,11 +581,6 @@ msgstr[1] "Системата ще се изключи автоматично с
|
||||
msgid "Powering off the system."
|
||||
msgstr "Изключване на системата."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restart"
|
||||
msgstr "Рестартиране"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
@ -599,96 +607,96 @@ msgstr "Инсталиране"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "Да се изтегли и инсталира ли „%s“ от from extensions.gnome.org?"
|
||||
|
||||
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
|
||||
#: ../js/ui/keyboard.js:325
|
||||
msgid "tray"
|
||||
msgstr "област за уведомяване"
|
||||
|
||||
#: ../js/ui/keyboard.js:547 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "Клавиатура"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
#: ../js/ui/lookingGlass.js:646
|
||||
msgid "No extensions installed"
|
||||
msgstr "Няма инсталирани разширения"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:692
|
||||
msgid "Enabled"
|
||||
msgstr "Включено"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:694 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "Изключено"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:696
|
||||
msgid "Error"
|
||||
msgstr "Грешка"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
#: ../js/ui/lookingGlass.js:698
|
||||
msgid "Out of date"
|
||||
msgstr "Остаряло"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
#: ../js/ui/lookingGlass.js:700
|
||||
msgid "Downloading"
|
||||
msgstr "Изтегляне"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
#: ../js/ui/lookingGlass.js:721
|
||||
msgid "View Source"
|
||||
msgstr "Преглед на изходния код"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
#: ../js/ui/lookingGlass.js:727
|
||||
msgid "Web Page"
|
||||
msgstr "Домашна страница"
|
||||
|
||||
#: ../js/ui/messageTray.js:1189
|
||||
#: ../js/ui/messageTray.js:1199
|
||||
msgid "Open"
|
||||
msgstr "Отваряне"
|
||||
|
||||
#: ../js/ui/messageTray.js:2368
|
||||
#: ../js/ui/messageTray.js:2408
|
||||
msgid "System Information"
|
||||
msgstr "Информация за системата"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
msgid "Show password"
|
||||
msgstr "Показване на парола"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/networkAgent.js:143
|
||||
msgid "Connect"
|
||||
msgstr "Свързване"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
|
||||
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#: ../js/ui/networkAgent.js:238 ../js/ui/networkAgent.js:250
|
||||
#: ../js/ui/networkAgent.js:277 ../js/ui/networkAgent.js:297
|
||||
#: ../js/ui/networkAgent.js:307
|
||||
msgid "Password: "
|
||||
msgstr "Парола: "
|
||||
|
||||
#. static WEP
|
||||
#: ../js/ui/networkAgent.js:253
|
||||
#: ../js/ui/networkAgent.js:243
|
||||
msgid "Key: "
|
||||
msgstr "Ключ: "
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
|
||||
#: ../js/ui/networkAgent.js:275 ../js/ui/networkAgent.js:293
|
||||
msgid "Username: "
|
||||
msgstr "Потребител: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:291
|
||||
#: ../js/ui/networkAgent.js:281
|
||||
msgid "Identity: "
|
||||
msgstr "Самоличност: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:293
|
||||
#: ../js/ui/networkAgent.js:283
|
||||
msgid "Private key password: "
|
||||
msgstr "Парола за частният ключ: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:305
|
||||
#: ../js/ui/networkAgent.js:295
|
||||
msgid "Service: "
|
||||
msgstr "Услуга: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#: ../js/ui/networkAgent.js:324
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "Изисква се удостоверяване за безжична мрежа"
|
||||
|
||||
#: ../js/ui/networkAgent.js:335
|
||||
#: ../js/ui/networkAgent.js:325
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
@ -697,35 +705,35 @@ msgstr ""
|
||||
"За достъп до безжичната мрежа „%s“ са необходими пароли или криптирани "
|
||||
"ключове."
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
#: ../js/ui/networkAgent.js:329
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Жична идентификация 802.1Х"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#: ../js/ui/networkAgent.js:331
|
||||
msgid "Network name: "
|
||||
msgstr "Име на мрежата: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#: ../js/ui/networkAgent.js:336
|
||||
msgid "DSL authentication"
|
||||
msgstr "Удостоверяване за DSL"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
#: ../js/ui/networkAgent.js:343
|
||||
msgid "PIN code required"
|
||||
msgstr "Необходим е PIN"
|
||||
|
||||
#: ../js/ui/networkAgent.js:354
|
||||
#: ../js/ui/networkAgent.js:344
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Мобилното устройство изисква ПИН"
|
||||
|
||||
#: ../js/ui/networkAgent.js:355
|
||||
#: ../js/ui/networkAgent.js:345
|
||||
msgid "PIN: "
|
||||
msgstr "ПИН: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#: ../js/ui/networkAgent.js:351
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Парола за мобилна широколентова връзка"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#: ../js/ui/networkAgent.js:352
|
||||
#, c-format
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "За свързване към „%s“ се изисква парола."
|
||||
@ -781,15 +789,15 @@ msgstr "Свързване към…"
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "МЕСТА И УСТРОЙСТВА"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:72
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:73
|
||||
msgid "Authentication Required"
|
||||
msgstr "Необходимо е удостоверяване"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:106
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:107
|
||||
msgid "Administrator"
|
||||
msgstr "Администратор"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:177
|
||||
msgid "Authenticate"
|
||||
msgstr "Удостоверяване"
|
||||
|
||||
@ -797,11 +805,11 @@ msgstr "Удостоверяване"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:262
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:258
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Действието не беше успешно. Опитайте отново."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:274
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:270
|
||||
msgid "Password:"
|
||||
msgstr "Парола:"
|
||||
|
||||
@ -810,11 +818,11 @@ msgstr "Парола:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:687
|
||||
#: ../js/ui/popupMenu.js:731
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:208
|
||||
#: ../js/ui/runDialog.js:209
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Въведете команда:"
|
||||
|
||||
@ -826,6 +834,22 @@ msgstr "Търсене…"
|
||||
msgid "No matching results."
|
||||
msgstr "Няма съвпадения."
|
||||
|
||||
#: ../js/ui/shellEntry.js:30
|
||||
msgid "Copy"
|
||||
msgstr "Копиране"
|
||||
|
||||
#: ../js/ui/shellEntry.js:35
|
||||
msgid "Paste"
|
||||
msgstr "Поставяне"
|
||||
|
||||
#: ../js/ui/shellEntry.js:81
|
||||
msgid "Show Text"
|
||||
msgstr "Показване на текста"
|
||||
|
||||
#: ../js/ui/shellEntry.js:83
|
||||
msgid "Hide Text"
|
||||
msgstr "Скриване на текста"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:285
|
||||
msgid "Wrong password, please try again"
|
||||
msgstr "Грешна парола. Опитайте отново."
|
||||
@ -837,9 +861,10 @@ msgstr "Увеличаване"
|
||||
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
|
||||
#. 'screen-keyboard-enabled');
|
||||
#. this.menu.addMenuItem(screenKeyboard);
|
||||
#: ../js/ui/status/accessibility.js:71
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Екранна клавиатура"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:75
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Визуална помощ"
|
||||
@ -958,7 +983,7 @@ msgstr "Винаги позволяване на достъп"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Позволяване само този път"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1204
|
||||
msgid "Reject"
|
||||
msgstr "Отхвърляне"
|
||||
|
||||
@ -998,11 +1023,11 @@ msgstr "Въведете кода на устройството %s."
|
||||
msgid "OK"
|
||||
msgstr "Добре"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:72
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Показване на клавиатурната подредба"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:77
|
||||
#: ../js/ui/status/keyboard.js:78
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "Настройки на региона и езика"
|
||||
|
||||
@ -1047,13 +1072,13 @@ msgstr "недостъпно"
|
||||
msgid "connection failed"
|
||||
msgstr "връзката е неуспешна"
|
||||
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
|
||||
msgid "More..."
|
||||
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:611 ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
|
||||
msgid "Connected (private)"
|
||||
msgstr "Връзката е осъществена (няма налични данни)"
|
||||
|
||||
@ -1070,7 +1095,7 @@ msgid "Auto dial-up"
|
||||
msgstr "Автоматична мрежа през модем"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Автоматична мрежа към „%s“"
|
||||
@ -1079,47 +1104,47 @@ msgstr "Автоматична мрежа към „%s“"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Автоматична мрежа по Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1472
|
||||
msgid "Auto wireless"
|
||||
msgstr "Автоматична безжична мрежа"
|
||||
|
||||
#: ../js/ui/status/network.js:1558
|
||||
#: ../js/ui/status/network.js:1566
|
||||
msgid "Enable networking"
|
||||
msgstr "Включване на мрежата"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1578
|
||||
msgid "Wired"
|
||||
msgstr "Жична"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1589
|
||||
msgid "Wireless"
|
||||
msgstr "Безжична"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Мобилна широколентова"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1609
|
||||
msgid "VPN Connections"
|
||||
msgstr "Връзки към ВЧМ"
|
||||
|
||||
#: ../js/ui/status/network.js:1612
|
||||
#: ../js/ui/status/network.js:1620
|
||||
msgid "Network Settings"
|
||||
msgstr "Настройки на мрежата"
|
||||
|
||||
#: ../js/ui/status/network.js:1749
|
||||
#: ../js/ui/status/network.js:1757
|
||||
msgid "Connection failed"
|
||||
msgstr "Връзката е неуспешна"
|
||||
|
||||
#: ../js/ui/status/network.js:1750
|
||||
#: ../js/ui/status/network.js:1758
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Осъществяването на връзка към мрежата е неуспешно"
|
||||
|
||||
#: ../js/ui/status/network.js:2000
|
||||
#: ../js/ui/status/network.js:2008
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Мрежата е изключена"
|
||||
|
||||
#: ../js/ui/status/network.js:2125
|
||||
#: ../js/ui/status/network.js:2133
|
||||
msgid "Network Manager"
|
||||
msgstr "Управление на мрежата"
|
||||
|
||||
@ -1227,39 +1252,39 @@ msgid "Invitation"
|
||||
msgstr "Покана"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
#: ../js/ui/telepathyClient.js:327
|
||||
msgid "Call"
|
||||
msgstr "Разговор"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
msgid "File Transfer"
|
||||
msgstr "Обмен на файлове"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
#: ../js/ui/telepathyClient.js:438
|
||||
msgid "Subscription request"
|
||||
msgstr "Искане за записване"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
msgid "Connection error"
|
||||
msgstr "Грешка при свързване"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s е на линия."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#: ../js/ui/telepathyClient.js:746
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s не е на линия."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#: ../js/ui/telepathyClient.js:749
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s отсъства."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#: ../js/ui/telepathyClient.js:752
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s е зает."
|
||||
@ -1267,35 +1292,35 @@ 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:978
|
||||
#: ../js/ui/telepathyClient.js:986
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Изпратено в <b>%X</b> на <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#: ../js/ui/telepathyClient.js:992
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Изпратено на <b>%3$d %2$B</b>, <b>%1$A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#: ../js/ui/telepathyClient.js:997
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Изпратено на <b>%3$d %2$B %4$Y</b>, <b>%1$A</b>"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#: ../js/ui/telepathyClient.js:1039
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s в момента е познат като %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Покана за присъединяване към %s"
|
||||
@ -1303,34 +1328,35 @@ msgstr "Покана за присъединяване към %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#: ../js/ui/telepathyClient.js:1156
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s ви кани да се присъедините към %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
#: ../js/ui/telepathyClient.js:1158 ../js/ui/telepathyClient.js:1248
|
||||
#: ../js/ui/telepathyClient.js:1352
|
||||
msgid "Decline"
|
||||
msgstr "Отклоняване"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
#: ../js/ui/telepathyClient.js:1159 ../js/ui/telepathyClient.js:1249
|
||||
#: ../js/ui/telepathyClient.js:1353
|
||||
msgid "Accept"
|
||||
msgstr "Приемане"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#: ../js/ui/telepathyClient.js:1192
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Видео разговор от %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#: ../js/ui/telepathyClient.js:1195
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Повикване от %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1206
|
||||
msgid "Answer"
|
||||
msgstr "Отговор"
|
||||
|
||||
@ -1339,109 +1365,109 @@ msgstr "Отговор"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#: ../js/ui/telepathyClient.js:1242
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s ви праща „%s“"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s иска разрешение да вижда дали сте в мрежата"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
msgid "Network error"
|
||||
msgstr "Мрежова грешка"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
msgid "Authentication failed"
|
||||
msgstr "Неуспешно идентифициране"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
msgid "Encryption error"
|
||||
msgstr "Грешка в шифрирането"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Не е предоставен сертификат"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Сертификатът не е доверен"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
msgid "Certificate expired"
|
||||
msgstr "Сертификатът е изтекъл"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Сертификатът не е влязъл в сила"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Несъвпадане на името с това в сертификата"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Несъвпадане на отпечатъка на сертификата"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Сертификатът е самоподписан"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Състоянието е „Извън мрежата“."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Не е налично шифриране"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Сертификатът е неправилен"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
#: ../js/ui/telepathyClient.js:1441
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Връзката е отказана"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
#: ../js/ui/telepathyClient.js:1443
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Не може да се установи връзка"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
#: ../js/ui/telepathyClient.js:1445
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Връзката прекъсна"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
#: ../js/ui/telepathyClient.js:1447
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Ресурсът вече е свързан към сървъра"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
#: ../js/ui/telepathyClient.js:1449
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Връзката бе заместена от нова връзка, използваща същия ресурс"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
#: ../js/ui/telepathyClient.js:1451
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "На сървъра вече има регистрация с такова име."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
#: ../js/ui/telepathyClient.js:1453
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr ""
|
||||
"В момента сървърът е твърде натоварен, за да обработи заявката за свързване"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Сертификатът е анулиран"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1457
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "Сертификатът използва несигурен шифър или слаб алгоритъм за шифриране"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1451,72 +1477,68 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Връзката е към „%s“ е неуспешна"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
#: ../js/ui/telepathyClient.js:1477
|
||||
msgid "Reconnect"
|
||||
msgstr "Ново свързване"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
#: ../js/ui/telepathyClient.js:1478
|
||||
msgid "Edit account"
|
||||
msgstr "Редактиране на регистрацията"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
#: ../js/ui/telepathyClient.js:1524
|
||||
msgid "Unknown reason"
|
||||
msgstr "Неизвестна причина"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
#: ../js/ui/userMenu.js:145
|
||||
msgid "Hidden"
|
||||
msgstr "Скрит"
|
||||
|
||||
#: ../js/ui/userMenu.js:159
|
||||
#: ../js/ui/userMenu.js:151
|
||||
msgid "Idle"
|
||||
msgstr "Бездействие"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#: ../js/ui/userMenu.js:154
|
||||
msgid "Unavailable"
|
||||
msgstr "Недостъпно"
|
||||
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:592
|
||||
#: ../js/ui/userMenu.js:552 ../js/ui/userMenu.js:556 ../js/ui/userMenu.js:626
|
||||
msgid "Power Off..."
|
||||
msgstr "Изключване..."
|
||||
|
||||
#: ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:591
|
||||
msgid "Suspend"
|
||||
msgstr "Приспиване"
|
||||
|
||||
#: ../js/ui/userMenu.js:554
|
||||
#: ../js/ui/userMenu.js:588
|
||||
msgid "Notifications"
|
||||
msgstr "Известяване"
|
||||
|
||||
#: ../js/ui/userMenu.js:562
|
||||
#: ../js/ui/userMenu.js:596
|
||||
msgid "Online Accounts"
|
||||
msgstr "Мрежови регистрации"
|
||||
|
||||
#: ../js/ui/userMenu.js:566
|
||||
#: ../js/ui/userMenu.js:600
|
||||
msgid "System Settings"
|
||||
msgstr "Настройки на системата"
|
||||
|
||||
#: ../js/ui/userMenu.js:573
|
||||
#: ../js/ui/userMenu.js:607
|
||||
msgid "Lock Screen"
|
||||
msgstr "Заключване на екрана"
|
||||
|
||||
#: ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:612
|
||||
msgid "Switch User"
|
||||
msgstr "Смяна на потребител"
|
||||
|
||||
#: ../js/ui/userMenu.js:583
|
||||
#: ../js/ui/userMenu.js:617
|
||||
msgid "Log Out..."
|
||||
msgstr "Изход…"
|
||||
|
||||
#: ../js/ui/userMenu.js:611
|
||||
#: ../js/ui/userMenu.js:645
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Състоянието ви ще се зададе да е „Зает“"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
#: ../js/ui/userMenu.js:646
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1529,20 +1551,15 @@ msgstr ""
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:120
|
||||
#: ../js/ui/viewSelector.js:121
|
||||
msgid "Type to search..."
|
||||
msgstr "Търсене на написаното…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:140 ../src/shell-util.c:261
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:261
|
||||
msgid "Search"
|
||||
msgstr "Търсене"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:39
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "Програмата „%s“ стартира успешно"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:41
|
||||
#: ../js/ui/windowAttentionHandler.js:35
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "Програмата „%s“ е готова за употреба"
|
||||
@ -1577,7 +1594,7 @@ msgstr "Показване на версията"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Режим използван от GDM за екрана за влизане"
|
||||
|
||||
#: ../src/shell-app.c:581
|
||||
#: ../src/shell-app.c:579
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Неуспех при стартиране на „%s“"
|
||||
|
1096
po/ca@valencia.po
1096
po/ca@valencia.po
File diff suppressed because it is too large
Load Diff
362
po/de.po
362
po/de.po
@ -15,15 +15,16 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-09-19 20:15+0200\n"
|
||||
"PO-Revision-Date: 2011-09-19 20:16+0100\n"
|
||||
"Last-Translator: Mario Blättermann <mariobl@freenet.de>\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-10-17 20:04+0000\n"
|
||||
"PO-Revision-Date: 2011-10-17 22:05+0100\n"
|
||||
"Last-Translator: Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>\n"
|
||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-Language: German\n"
|
||||
"X-Poedit-Country: GERMANY\n"
|
||||
@ -112,11 +113,11 @@ msgstr ""
|
||||
"Auffüllung haben; die Ausgabe dieser Auffüllung wird in die Ausgabedatei "
|
||||
"geschrieben. Die Weiterleitung kann auch mit ihrer eigenen Ausgabe umgehen. "
|
||||
"Das kann zum Senden der Ausgabe über shout2send an einen Icecast-Server oder "
|
||||
"Ähnliches verwendet werden. Falls nicht (oder auf einen leeren Wert) gesetzt, "
|
||||
"so wird die vorgegebene Weiterleitung verwendet, welche derzeit »videorate ! "
|
||||
"vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux« lautet und nach WEBM "
|
||||
"mittels des VP8-Codecs aufzeichnet. %T wird als Platzhalter für die vermutete "
|
||||
"optimale Threadanzahl auf dem System verwendet."
|
||||
"Ähnliches verwendet werden. Falls nicht (oder auf einen leeren Wert) "
|
||||
"gesetzt, so wird die vorgegebene Weiterleitung verwendet, welche derzeit "
|
||||
"»videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux« lautet "
|
||||
"und nach WEBM mittels des VP8-Codecs aufzeichnet. %T wird als Platzhalter "
|
||||
"für die vermutete optimale Threadanzahl auf dem System verwendet."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -135,8 +136,8 @@ msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-Bereich "
|
||||
"angezeigt."
|
||||
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-"
|
||||
"Bereich angezeigt."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
@ -199,38 +200,38 @@ msgstr "deaktivierte OpenSearch-Provider"
|
||||
msgid "Session..."
|
||||
msgstr "Sitzung …"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
#: ../js/gdm/loginDialog.js:788
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
#: ../js/gdm/loginDialog.js:833
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(oder benutzen Sie den Fingerabdruckleser)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:848
|
||||
#: ../js/gdm/loginDialog.js:851
|
||||
msgid "Not listed?"
|
||||
msgstr "Nicht aufgeführt?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/gdm/loginDialog.js:1019 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:148
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:173 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1009
|
||||
#: ../js/gdm/loginDialog.js:1024
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1358
|
||||
#: ../js/gdm/loginDialog.js:1373
|
||||
msgid "Login Window"
|
||||
msgstr "Anmeldefenster"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:525 ../js/ui/userMenu.js:527
|
||||
#: ../js/ui/userMenu.js:596
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:549
|
||||
#: ../js/ui/userMenu.js:551 ../js/ui/userMenu.js:620
|
||||
msgid "Suspend"
|
||||
msgstr "Bereitschaft"
|
||||
|
||||
@ -294,12 +295,16 @@ msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s wurde aus Ihren Favoriten entfernt"
|
||||
|
||||
#: ../js/ui/autorunManager.js:592
|
||||
#: ../js/ui/autorunManager.js:280
|
||||
msgid "Removable Devices"
|
||||
msgstr "Wechseldatenträger"
|
||||
|
||||
#: ../js/ui/autorunManager.js:590
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Öffnen mit %s"
|
||||
|
||||
#: ../js/ui/autorunManager.js:618
|
||||
#: ../js/ui/autorunManager.js:616
|
||||
msgid "Eject"
|
||||
msgstr "Auswerfen"
|
||||
|
||||
@ -453,32 +458,32 @@ msgstr "Diese Woche"
|
||||
msgid "Next week"
|
||||
msgstr "Nächste Woche"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:59 ../js/ui/notificationDaemon.js:444
|
||||
#: ../js/ui/status/power.js:223 ../src/shell-app.c:355
|
||||
#: ../js/ui/contactDisplay.js:65 ../js/ui/notificationDaemon.js:444
|
||||
#: ../js/ui/status/power.js:223 ../src/shell-app.c:353
|
||||
msgid "Unknown"
|
||||
msgstr "Unbekannt"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
|
||||
#: ../js/ui/contactDisplay.js:86 ../js/ui/userMenu.js:139
|
||||
msgid "Available"
|
||||
msgstr "Verfügbar"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
|
||||
#: ../js/ui/contactDisplay.js:91 ../js/ui/userMenu.js:148
|
||||
msgid "Away"
|
||||
msgstr "Abwesend"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
|
||||
#: ../js/ui/contactDisplay.js:95 ../js/ui/userMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Beschäftigt"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:93
|
||||
#: ../js/ui/contactDisplay.js:99
|
||||
msgid "Offline"
|
||||
msgstr "Abgemeldet"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:140
|
||||
#: ../js/ui/contactDisplay.js:146
|
||||
msgid "CONTACTS"
|
||||
msgstr "KONTAKTE"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1205
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
@ -617,132 +622,133 @@ msgstr "Installieren"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "»%s« von extensions.gnome.org herunterladen und installieren?"
|
||||
|
||||
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
|
||||
#: ../js/ui/keyboard.js:325
|
||||
msgid "tray"
|
||||
msgstr "Benachrichtigungsfeld"
|
||||
|
||||
#: ../js/ui/keyboard.js:547 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastatur"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
#: ../js/ui/lookingGlass.js:646
|
||||
msgid "No extensions installed"
|
||||
msgstr "Keine Erweiterungen installiert"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:692
|
||||
msgid "Enabled"
|
||||
msgstr "Aktiviert"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:694 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "Deaktiviert"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:696
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
#: ../js/ui/lookingGlass.js:698
|
||||
msgid "Out of date"
|
||||
msgstr "Veraltet"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
#: ../js/ui/lookingGlass.js:700
|
||||
msgid "Downloading"
|
||||
msgstr "Herunterladen"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
#: ../js/ui/lookingGlass.js:721
|
||||
msgid "View Source"
|
||||
msgstr "Quelle zeigen"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
#: ../js/ui/lookingGlass.js:727
|
||||
msgid "Web Page"
|
||||
msgstr "Webseite"
|
||||
|
||||
#: ../js/ui/messageTray.js:1189
|
||||
#: ../js/ui/messageTray.js:1198
|
||||
msgid "Open"
|
||||
msgstr "Öffnen"
|
||||
|
||||
#: ../js/ui/messageTray.js:2371
|
||||
#: ../js/ui/messageTray.js:2407
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformationen"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
msgid "Show password"
|
||||
msgstr "Passwort anzeigen"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/networkAgent.js:143
|
||||
msgid "Connect"
|
||||
msgstr "Verbinden"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
|
||||
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#: ../js/ui/networkAgent.js:238 ../js/ui/networkAgent.js:250
|
||||
#: ../js/ui/networkAgent.js:277 ../js/ui/networkAgent.js:297
|
||||
#: ../js/ui/networkAgent.js:307
|
||||
msgid "Password: "
|
||||
msgstr "Passwort:"
|
||||
|
||||
#. static WEP
|
||||
#: ../js/ui/networkAgent.js:253
|
||||
#: ../js/ui/networkAgent.js:243
|
||||
msgid "Key: "
|
||||
msgstr "Schlüssel:"
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
|
||||
#: ../js/ui/networkAgent.js:275 ../js/ui/networkAgent.js:293
|
||||
msgid "Username: "
|
||||
msgstr "Benutzername:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:291
|
||||
#: ../js/ui/networkAgent.js:281
|
||||
msgid "Identity: "
|
||||
msgstr "Identität:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:293
|
||||
#: ../js/ui/networkAgent.js:283
|
||||
msgid "Private key password: "
|
||||
msgstr "Passwort für geheimen Schlüssel:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:305
|
||||
#: ../js/ui/networkAgent.js:295
|
||||
msgid "Service: "
|
||||
msgstr "Dienst:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#: ../js/ui/networkAgent.js:324
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "Legitimierung für Funknetzwerk wird benötigt"
|
||||
|
||||
#: ../js/ui/networkAgent.js:335
|
||||
#: ../js/ui/networkAgent.js:325
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network '%s'."
|
||||
"Passwords or encryption keys are required to access the wireless network '%"
|
||||
"s'."
|
||||
msgstr ""
|
||||
"Passwörter oder Schlüssel sind erforderlich, um auf das Funknetzwerk »%s« "
|
||||
"zuzugreifen."
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
#: ../js/ui/networkAgent.js:329
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Kabelgebundene 802.1X-Legitimierung"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#: ../js/ui/networkAgent.js:331
|
||||
msgid "Network name: "
|
||||
msgstr "Netzwerkname:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#: ../js/ui/networkAgent.js:336
|
||||
msgid "DSL authentication"
|
||||
msgstr "DSL-Legitimierung"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
#: ../js/ui/networkAgent.js:343
|
||||
msgid "PIN code required"
|
||||
msgstr "PIN-Code ist erforderlich"
|
||||
|
||||
#: ../js/ui/networkAgent.js:354
|
||||
#: ../js/ui/networkAgent.js:344
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Für das mobile Breitbandgerät wird ein PIN-Code benötigt."
|
||||
|
||||
#: ../js/ui/networkAgent.js:355
|
||||
#: ../js/ui/networkAgent.js:345
|
||||
msgid "PIN: "
|
||||
msgstr "PIN: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#: ../js/ui/networkAgent.js:351
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Passwort der mobilen Breitbandverbindung"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#: ../js/ui/networkAgent.js:352
|
||||
#, c-format
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden."
|
||||
@ -799,15 +805,15 @@ msgstr "Verbinden mit …"
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "ORTE UND GERÄTE"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:72
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:73
|
||||
msgid "Authentication Required"
|
||||
msgstr "Legitimierung erforderlich"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:106
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:107
|
||||
msgid "Administrator"
|
||||
msgstr "Systemverwalter"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:177
|
||||
msgid "Authenticate"
|
||||
msgstr "Legitimieren"
|
||||
|
||||
@ -815,11 +821,11 @@ msgstr "Legitimieren"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:262
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:258
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Entschuldigung, das hat nicht geklappt. Bitte versuchen Sie es erneut."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:274
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:270
|
||||
msgid "Password:"
|
||||
msgstr "Passwort:"
|
||||
|
||||
@ -828,11 +834,11 @@ msgstr "Passwort:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:709
|
||||
#: ../js/ui/popupMenu.js:731
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:208
|
||||
#: ../js/ui/runDialog.js:209
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Bitte geben Sie einen Befehl ein:"
|
||||
|
||||
@ -844,6 +850,22 @@ msgstr "Suche läuft …"
|
||||
msgid "No matching results."
|
||||
msgstr "Keine passenden Ergebnisse."
|
||||
|
||||
#: ../js/ui/shellEntry.js:30
|
||||
msgid "Copy"
|
||||
msgstr "Kopieren"
|
||||
|
||||
#: ../js/ui/shellEntry.js:35
|
||||
msgid "Paste"
|
||||
msgstr "Einfügen"
|
||||
|
||||
#: ../js/ui/shellEntry.js:81
|
||||
msgid "Show Text"
|
||||
msgstr "Text anzeigen"
|
||||
|
||||
#: ../js/ui/shellEntry.js:83
|
||||
msgid "Hide Text"
|
||||
msgstr "Text verbergen"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:285
|
||||
msgid "Wrong password, please try again"
|
||||
msgstr "Falsches Passwort, bitte versuchen Sie es erneut"
|
||||
@ -877,7 +899,7 @@ msgstr "Springende Tasten"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:87
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Maustasten"
|
||||
msgstr "Tastaturmaus"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Universal Access Settings"
|
||||
@ -978,7 +1000,7 @@ msgstr "Immer Zugriff gewähren"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Nur dieses Mal gewähren"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1204
|
||||
msgid "Reject"
|
||||
msgstr "Abweisen"
|
||||
|
||||
@ -1019,11 +1041,11 @@ msgstr "Bitte geben Sie die auf dem Gerät angezeigte PIN ein."
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:72
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Tastaturbelegung zeigen"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:77
|
||||
#: ../js/ui/status/keyboard.js:78
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "Einstellungen für Region und Sprache"
|
||||
|
||||
@ -1068,13 +1090,13 @@ msgstr "nicht verfügbar"
|
||||
msgid "connection failed"
|
||||
msgstr "Verbindung gescheitert"
|
||||
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
|
||||
msgid "More..."
|
||||
msgstr "Mehr ..."
|
||||
|
||||
#. 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:611 ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
|
||||
msgid "Connected (private)"
|
||||
msgstr "Verbunden (privat)"
|
||||
|
||||
@ -1091,7 +1113,7 @@ msgid "Auto dial-up"
|
||||
msgstr "Einwählverbindung (automatisch)"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s (automatisch)"
|
||||
@ -1100,47 +1122,47 @@ msgstr "%s (automatisch)"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth (automatisch)"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1472
|
||||
msgid "Auto wireless"
|
||||
msgstr "Drahtlos (automatisch)"
|
||||
|
||||
#: ../js/ui/status/network.js:1558
|
||||
#: ../js/ui/status/network.js:1566
|
||||
msgid "Enable networking"
|
||||
msgstr "Netzwerk aktivieren"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1578
|
||||
msgid "Wired"
|
||||
msgstr "Kabelgebunden"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1589
|
||||
msgid "Wireless"
|
||||
msgstr "Drahtlos"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobiles Breitband"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1609
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-Verbindungen"
|
||||
|
||||
#: ../js/ui/status/network.js:1612
|
||||
#: ../js/ui/status/network.js:1620
|
||||
msgid "Network Settings"
|
||||
msgstr "Netzwerkeinstellungen"
|
||||
|
||||
#: ../js/ui/status/network.js:1749
|
||||
#: ../js/ui/status/network.js:1757
|
||||
msgid "Connection failed"
|
||||
msgstr "Verbindung gescheitert"
|
||||
|
||||
#: ../js/ui/status/network.js:1750
|
||||
#: ../js/ui/status/network.js:1758
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivierung der Netzwerkverbindung ist gescheitert"
|
||||
|
||||
#: ../js/ui/status/network.js:2000
|
||||
#: ../js/ui/status/network.js:2008
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Netzwerk ist deaktiviert"
|
||||
|
||||
#: ../js/ui/status/network.js:2125
|
||||
#: ../js/ui/status/network.js:2133
|
||||
msgid "Network Manager"
|
||||
msgstr "Netzwerk-Verwaltung"
|
||||
|
||||
@ -1248,39 +1270,39 @@ msgid "Invitation"
|
||||
msgstr "Einladung"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
#: ../js/ui/telepathyClient.js:327
|
||||
msgid "Call"
|
||||
msgstr "Anruf"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
msgid "File Transfer"
|
||||
msgstr "Dateiübertragung"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
#: ../js/ui/telepathyClient.js:438
|
||||
msgid "Subscription request"
|
||||
msgstr "Abonnementanfrage"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
msgid "Connection error"
|
||||
msgstr "Verbindungsfehler"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s ist angemeldet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#: ../js/ui/telepathyClient.js:746
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s ist abgemeldet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#: ../js/ui/telepathyClient.js:749
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "»%s« ist abwesend."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#: ../js/ui/telepathyClient.js:752
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s ist beschäftigt."
|
||||
@ -1288,35 +1310,35 @@ msgstr "%s ist beschäftigt."
|
||||
#. 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:978
|
||||
#: ../js/ui/telepathyClient.js:986
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Gesendet am <b>%A</b> um <b>%X</b> "
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#: ../js/ui/telepathyClient.js:992
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#: ../js/ui/telepathyClient.js:997
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b> %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#: ../js/ui/telepathyClient.js:1039
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s heißt jetzt %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Einladung zum Betreten von %s"
|
||||
@ -1324,34 +1346,35 @@ msgstr "Einladung zum Betreten von %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#: ../js/ui/telepathyClient.js:1156
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s lädt Sie ein, %s beizutreten"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
#: ../js/ui/telepathyClient.js:1158 ../js/ui/telepathyClient.js:1248
|
||||
#: ../js/ui/telepathyClient.js:1352
|
||||
msgid "Decline"
|
||||
msgstr "Ablehnen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
#: ../js/ui/telepathyClient.js:1159 ../js/ui/telepathyClient.js:1249
|
||||
#: ../js/ui/telepathyClient.js:1353
|
||||
msgid "Accept"
|
||||
msgstr "Annehmen"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#: ../js/ui/telepathyClient.js:1192
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Video-Anruf von %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#: ../js/ui/telepathyClient.js:1195
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Anruf von %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1206
|
||||
msgid "Answer"
|
||||
msgstr "Antworten"
|
||||
|
||||
@ -1360,112 +1383,113 @@ msgstr "Antworten"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#: ../js/ui/telepathyClient.js:1242
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s sendet Ihnen %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s bittet um das Recht, Ihre Online-Verfügbarkeit sehen zu dürfen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
msgid "Network error"
|
||||
msgstr "Netzwerkfehler"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
msgid "Authentication failed"
|
||||
msgstr "Legitimierung fehlgeschlagen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
msgid "Encryption error"
|
||||
msgstr "Verschlüsselungsfehler"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Zertifikat wurde nicht bereitgestellt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Zertifikat nicht vertrauenswürdig"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
msgid "Certificate expired"
|
||||
msgstr "Zertifikat abgelaufen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Zertifikat nicht aktiviert"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Rechnername des Zertifikats stimmt nicht überein"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Fingerabdruck des Zertifikats stimmt nicht überein"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Selbstsigniertes Zertifikat"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Der Status ist auf »Abgemeldet« gesetzt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Verschlüsselung ist nicht verfügbar"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Zertifikat ist ungültig"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
#: ../js/ui/telepathyClient.js:1441
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Verbindungsaufbau wurde verweigert"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
#: ../js/ui/telepathyClient.js:1443
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Verbindung kann nicht hergestellt werden"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
#: ../js/ui/telepathyClient.js:1445
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Verbindung wurde unterbrochen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
#: ../js/ui/telepathyClient.js:1447
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Diese Ressource ist bereits mit dem Server verbunden"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
#: ../js/ui/telepathyClient.js:1449
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"Die Verbindung wurde durch eine neue Verbindung mit der gleichen Ressource "
|
||||
"ersetzt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
#: ../js/ui/telepathyClient.js:1451
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Dieses Konto ist bereits auf dem Server vorhanden"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
#: ../js/ui/telepathyClient.js:1453
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr ""
|
||||
"Der Server ist derzeit überlastet und kann die Verbindung nicht annehmen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Zertifikat wurde zurückgezogen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1457
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Das Zertifikat verwendet einen unsicheren Chiffrier-Algorithmus oder ist "
|
||||
"kryptografisch schwach"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1476,68 +1500,68 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Verbindung zu %s ist fehlgeschlagen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
#: ../js/ui/telepathyClient.js:1477
|
||||
msgid "Reconnect"
|
||||
msgstr "Erneut verbinden"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
#: ../js/ui/telepathyClient.js:1478
|
||||
msgid "Edit account"
|
||||
msgstr "Konto bearbeiten"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
#: ../js/ui/telepathyClient.js:1524
|
||||
msgid "Unknown reason"
|
||||
msgstr "Unbekannter Grund"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
#: ../js/ui/userMenu.js:145
|
||||
msgid "Hidden"
|
||||
msgstr "Verborgen"
|
||||
|
||||
#: ../js/ui/userMenu.js:159
|
||||
#: ../js/ui/userMenu.js:151
|
||||
msgid "Idle"
|
||||
msgstr "Untätig"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#: ../js/ui/userMenu.js:154
|
||||
msgid "Unavailable"
|
||||
msgstr "Nicht verfügbar"
|
||||
|
||||
#: ../js/ui/userMenu.js:523 ../js/ui/userMenu.js:527 ../js/ui/userMenu.js:597
|
||||
#: ../js/ui/userMenu.js:547 ../js/ui/userMenu.js:551 ../js/ui/userMenu.js:621
|
||||
msgid "Power Off..."
|
||||
msgstr "Ausschalten …"
|
||||
|
||||
#: ../js/ui/userMenu.js:559
|
||||
#: ../js/ui/userMenu.js:583
|
||||
msgid "Notifications"
|
||||
msgstr "Benachrichtigungen"
|
||||
|
||||
#: ../js/ui/userMenu.js:567
|
||||
#: ../js/ui/userMenu.js:591
|
||||
msgid "Online Accounts"
|
||||
msgstr "Online-Konten"
|
||||
|
||||
#: ../js/ui/userMenu.js:571
|
||||
#: ../js/ui/userMenu.js:595
|
||||
msgid "System Settings"
|
||||
msgstr "Systemeinstellungen"
|
||||
|
||||
#: ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:602
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bildschirm sperren"
|
||||
|
||||
#: ../js/ui/userMenu.js:583
|
||||
#: ../js/ui/userMenu.js:607
|
||||
msgid "Switch User"
|
||||
msgstr "Benutzer wechseln"
|
||||
|
||||
#: ../js/ui/userMenu.js:588
|
||||
#: ../js/ui/userMenu.js:612
|
||||
msgid "Log Out..."
|
||||
msgstr "Abmelden …"
|
||||
|
||||
#: ../js/ui/userMenu.js:616
|
||||
#: ../js/ui/userMenu.js:640
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Ihr Anwesenheitsstatus wird auf »Beschäftigt« gesetzt"
|
||||
|
||||
#: ../js/ui/userMenu.js:617
|
||||
#: ../js/ui/userMenu.js:641
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1550,20 +1574,15 @@ msgstr ""
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:120
|
||||
#: ../js/ui/viewSelector.js:121
|
||||
msgid "Type to search..."
|
||||
msgstr "Suchbegriff eingeben …"
|
||||
|
||||
#: ../js/ui/viewSelector.js:140 ../src/shell-util.c:261
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:261
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:39
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "Start von %s ist abgeschlossen"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:41
|
||||
#: ../js/ui/windowAttentionHandler.js:35
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "»%s« ist bereit"
|
||||
@ -1598,7 +1617,7 @@ msgstr "Version ausgeben"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Der durch GDM im Anmeldefenster verwendete Modus"
|
||||
|
||||
#: ../src/shell-app.c:581
|
||||
#: ../src/shell-app.c:579
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "»%s« konnte nicht gestartet werden"
|
||||
@ -1635,6 +1654,21 @@ msgstr "Dateisystem"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Show password"
|
||||
#~ msgstr "Passwort anzeigen"
|
||||
|
||||
#~ msgid "%s has not emitted any errors."
|
||||
#~ msgstr "%s hat keine Fehler ausgegeben."
|
||||
|
||||
#~ msgid "Hide Errors"
|
||||
#~ msgstr "Fehler verbergen"
|
||||
|
||||
#~ msgid "Show Errors"
|
||||
#~ msgstr "Fehler anzeigen"
|
||||
|
||||
#~ msgid "%s has finished starting"
|
||||
#~ msgstr "Start von %s ist abgeschlossen"
|
||||
|
||||
#~ msgid "If true, display onscreen keyboard."
|
||||
#~ msgstr "Legt fest, ob eine Bildschirmtastatur angezeigt wird."
|
||||
|
||||
|
512
po/en_GB.po
512
po/en_GB.po
File diff suppressed because it is too large
Load Diff
345
po/es.po
345
po/es.po
@ -10,8 +10,8 @@ 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-09-19 11:34+0000\n"
|
||||
"PO-Revision-Date: 2011-09-19 14:57+0200\n"
|
||||
"POT-Creation-Date: 2011-10-17 20:02+0000\n"
|
||||
"PO-Revision-Date: 2011-10-18 16:10+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -188,38 +188,38 @@ msgstr "proveedores OpenSearch desactivados"
|
||||
msgid "Session..."
|
||||
msgstr "Sesión…"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
#: ../js/gdm/loginDialog.js:788
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#. translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
#: ../js/gdm/loginDialog.js:833
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(o pase el dedo)"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:848
|
||||
#: ../js/gdm/loginDialog.js:851
|
||||
msgid "Not listed?"
|
||||
msgstr "¿No está listado?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
|
||||
#: ../js/gdm/loginDialog.js:1019 ../js/ui/endSessionDialog.js:426
|
||||
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:148
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:173 ../js/ui/status/bluetooth.js:480
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1009
|
||||
#: ../js/gdm/loginDialog.js:1024
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1358
|
||||
#: ../js/gdm/loginDialog.js:1373
|
||||
msgid "Login Window"
|
||||
msgstr "Ventana de inicio de sesión"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:520
|
||||
#: ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:591
|
||||
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:549
|
||||
#: ../js/ui/userMenu.js:551 ../js/ui/userMenu.js:620
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
@ -283,12 +283,16 @@ msgstr "Se ha añadido %s a sus favoritos."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "Se ha quitado %s de sus favoritos."
|
||||
|
||||
#: ../js/ui/autorunManager.js:592
|
||||
#: ../js/ui/autorunManager.js:280
|
||||
msgid "Removable Devices"
|
||||
msgstr "Dispositivos extraíbles"
|
||||
|
||||
#: ../js/ui/autorunManager.js:590
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Abrir con %s"
|
||||
|
||||
#: ../js/ui/autorunManager.js:618
|
||||
#: ../js/ui/autorunManager.js:616
|
||||
msgid "Eject"
|
||||
msgstr "Expulsar"
|
||||
|
||||
@ -438,32 +442,32 @@ msgstr "Esta semana"
|
||||
msgid "Next week"
|
||||
msgstr "La semana que viene"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:59 ../js/ui/notificationDaemon.js:444
|
||||
#: ../js/ui/status/power.js:223 ../src/shell-app.c:355
|
||||
#: ../js/ui/contactDisplay.js:65 ../js/ui/notificationDaemon.js:444
|
||||
#: ../js/ui/status/power.js:223 ../src/shell-app.c:353
|
||||
msgid "Unknown"
|
||||
msgstr "Desconocido"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
|
||||
#: ../js/ui/contactDisplay.js:86 ../js/ui/userMenu.js:139
|
||||
msgid "Available"
|
||||
msgstr "Disponible"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
|
||||
#: ../js/ui/contactDisplay.js:91 ../js/ui/userMenu.js:148
|
||||
msgid "Away"
|
||||
msgstr "Ausente"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
|
||||
#: ../js/ui/contactDisplay.js:95 ../js/ui/userMenu.js:142
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:93
|
||||
#: ../js/ui/contactDisplay.js:99
|
||||
msgid "Offline"
|
||||
msgstr "Desconectado"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:140
|
||||
#: ../js/ui/contactDisplay.js:146
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTACTOS"
|
||||
|
||||
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1205
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
@ -599,96 +603,96 @@ msgstr "Instalar"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
|
||||
|
||||
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
|
||||
#: ../js/ui/keyboard.js:325
|
||||
msgid "tray"
|
||||
msgstr "bandeja"
|
||||
|
||||
#: ../js/ui/keyboard.js:547 ../js/ui/status/power.js:211
|
||||
msgid "Keyboard"
|
||||
msgstr "Teclado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:645
|
||||
#: ../js/ui/lookingGlass.js:646
|
||||
msgid "No extensions installed"
|
||||
msgstr "No hay extensiones instaladas"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:691
|
||||
#: ../js/ui/lookingGlass.js:692
|
||||
msgid "Enabled"
|
||||
msgstr "Activado"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:694 ../src/gvc/gvc-mixer-control.c:1093
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:695
|
||||
#: ../js/ui/lookingGlass.js:696
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:697
|
||||
#: ../js/ui/lookingGlass.js:698
|
||||
msgid "Out of date"
|
||||
msgstr "Caducado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:699
|
||||
#: ../js/ui/lookingGlass.js:700
|
||||
msgid "Downloading"
|
||||
msgstr "Descargando"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:724
|
||||
#: ../js/ui/lookingGlass.js:721
|
||||
msgid "View Source"
|
||||
msgstr "Ver fuente"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:730
|
||||
#: ../js/ui/lookingGlass.js:727
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: ../js/ui/messageTray.js:1189
|
||||
#: ../js/ui/messageTray.js:1198
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:2368
|
||||
#: ../js/ui/messageTray.js:2407
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
#: ../js/ui/networkAgent.js:138
|
||||
msgid "Show password"
|
||||
msgstr "Mostrar contraseña"
|
||||
|
||||
#: ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/networkAgent.js:143
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
|
||||
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
|
||||
#: ../js/ui/networkAgent.js:317
|
||||
#: ../js/ui/networkAgent.js:238 ../js/ui/networkAgent.js:250
|
||||
#: ../js/ui/networkAgent.js:277 ../js/ui/networkAgent.js:297
|
||||
#: ../js/ui/networkAgent.js:307
|
||||
msgid "Password: "
|
||||
msgstr "Contraseña: "
|
||||
|
||||
#. static WEP
|
||||
#: ../js/ui/networkAgent.js:253
|
||||
#: ../js/ui/networkAgent.js:243
|
||||
msgid "Key: "
|
||||
msgstr "Clave:"
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
|
||||
#: ../js/ui/networkAgent.js:275 ../js/ui/networkAgent.js:293
|
||||
msgid "Username: "
|
||||
msgstr "Nombre de usuario:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:291
|
||||
#: ../js/ui/networkAgent.js:281
|
||||
msgid "Identity: "
|
||||
msgstr "Identidad:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:293
|
||||
#: ../js/ui/networkAgent.js:283
|
||||
msgid "Private key password: "
|
||||
msgstr "Contraseña de la clave privada:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:305
|
||||
#: ../js/ui/networkAgent.js:295
|
||||
msgid "Service: "
|
||||
msgstr "Servicio:"
|
||||
|
||||
#: ../js/ui/networkAgent.js:334
|
||||
#: ../js/ui/networkAgent.js:324
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "La red inalámbrica requiere autenticación"
|
||||
|
||||
#: ../js/ui/networkAgent.js:335
|
||||
#: ../js/ui/networkAgent.js:325
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network '%"
|
||||
@ -697,35 +701,35 @@ msgstr ""
|
||||
"Se necesitan contraseñas o claves de cifrado para acceder a la red "
|
||||
"inalámbrica «%s»."
|
||||
|
||||
#: ../js/ui/networkAgent.js:339
|
||||
#: ../js/ui/networkAgent.js:329
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Autenticación 802.1X cableada"
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#: ../js/ui/networkAgent.js:331
|
||||
msgid "Network name: "
|
||||
msgstr "Nombre de la red"
|
||||
|
||||
#: ../js/ui/networkAgent.js:346
|
||||
#: ../js/ui/networkAgent.js:336
|
||||
msgid "DSL authentication"
|
||||
msgstr "Autenticación DSL"
|
||||
|
||||
#: ../js/ui/networkAgent.js:353
|
||||
#: ../js/ui/networkAgent.js:343
|
||||
msgid "PIN code required"
|
||||
msgstr "Código PIN requerido"
|
||||
|
||||
#: ../js/ui/networkAgent.js:354
|
||||
#: ../js/ui/networkAgent.js:344
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Se necesita un código PIN para el dispositivo de banda ancha móvil"
|
||||
|
||||
#: ../js/ui/networkAgent.js:355
|
||||
#: ../js/ui/networkAgent.js:345
|
||||
msgid "PIN: "
|
||||
msgstr "PIN: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:361
|
||||
#: ../js/ui/networkAgent.js:351
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Contraseña de la red de banda ancha móvil"
|
||||
|
||||
#: ../js/ui/networkAgent.js:362
|
||||
#: ../js/ui/networkAgent.js:352
|
||||
#, c-format
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Se requiere una contraseña para conectar a «%s»."
|
||||
@ -781,15 +785,15 @@ msgstr "Conectar a…"
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LUGARES Y DISPOSITIVOS"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:72
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:73
|
||||
msgid "Authentication Required"
|
||||
msgstr "Se necesita autenticación"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:106
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:107
|
||||
msgid "Administrator"
|
||||
msgstr "Administrador"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:174
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:177
|
||||
msgid "Authenticate"
|
||||
msgstr "Autenticar"
|
||||
|
||||
@ -797,11 +801,11 @@ msgstr "Autenticar"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:262
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:258
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Inténtelo de nuevo,"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:274
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:270
|
||||
msgid "Password:"
|
||||
msgstr "Contraseña:"
|
||||
|
||||
@ -810,11 +814,11 @@ msgstr "Contraseña:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:687
|
||||
#: ../js/ui/popupMenu.js:731
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:208
|
||||
#: ../js/ui/runDialog.js:209
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Introduzca un comando:"
|
||||
|
||||
@ -826,6 +830,25 @@ msgstr "Buscando…"
|
||||
msgid "No matching results."
|
||||
msgstr "No se encontró ningún resultado coincidente."
|
||||
|
||||
#: ../js/ui/shellEntry.js:30
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
#: ../js/ui/shellEntry.js:35
|
||||
#| msgid "Panel"
|
||||
msgid "Paste"
|
||||
msgstr "Pegar"
|
||||
|
||||
#: ../js/ui/shellEntry.js:81
|
||||
#| msgid "Show the _date"
|
||||
msgid "Show Text"
|
||||
msgstr "Mostrar texto"
|
||||
|
||||
#: ../js/ui/shellEntry.js:83
|
||||
#| msgid "Large Text"
|
||||
msgid "Hide Text"
|
||||
msgstr "Ocultar texto"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:285
|
||||
msgid "Wrong password, please try again"
|
||||
msgstr "Contraseña incorrecta; inténtelo de nuevo"
|
||||
@ -838,7 +861,6 @@ msgstr "Ampliación"
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#: ../js/ui/status/accessibility.js:71
|
||||
#| msgid "Screen Reader"
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Teclado en pantalla"
|
||||
|
||||
@ -960,7 +982,7 @@ msgstr "Conceder acceso siempre"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder sólo esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
|
||||
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1204
|
||||
msgid "Reject"
|
||||
msgstr "Rechazar"
|
||||
|
||||
@ -1000,11 +1022,11 @@ msgstr "Introduzca el PIN mencionado en el dispositivo."
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:72
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Mostrar la distribución del teclado"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:77
|
||||
#: ../js/ui/status/keyboard.js:78
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "Configuración de región e idioma"
|
||||
|
||||
@ -1049,13 +1071,13 @@ msgstr "no disponible"
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
|
||||
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
|
||||
msgid "More..."
|
||||
msgstr "Más…"
|
||||
|
||||
#. 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:611 ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectada (privada)"
|
||||
|
||||
@ -1072,7 +1094,7 @@ msgid "Auto dial-up"
|
||||
msgstr "Marcado automático"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automática"
|
||||
@ -1081,47 +1103,47 @@ msgstr "%s automática"
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automático"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1472
|
||||
msgid "Auto wireless"
|
||||
msgstr "Inalámbrica automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1558
|
||||
#: ../js/ui/status/network.js:1566
|
||||
msgid "Enable networking"
|
||||
msgstr "Activar red"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1578
|
||||
msgid "Wired"
|
||||
msgstr "Cableada"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1589
|
||||
msgid "Wireless"
|
||||
msgstr "Inalámbrica"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda ancha móvil"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1609
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexiones VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1612
|
||||
#: ../js/ui/status/network.js:1620
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#: ../js/ui/status/network.js:1749
|
||||
#: ../js/ui/status/network.js:1757
|
||||
msgid "Connection failed"
|
||||
msgstr "Falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:1750
|
||||
#: ../js/ui/status/network.js:1758
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Falló la activación de la conexión de red"
|
||||
|
||||
#: ../js/ui/status/network.js:2000
|
||||
#: ../js/ui/status/network.js:2008
|
||||
msgid "Networking is disabled"
|
||||
msgstr "La red está desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:2125
|
||||
#: ../js/ui/status/network.js:2133
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
@ -1229,39 +1251,39 @@ msgid "Invitation"
|
||||
msgstr "Invitación"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:325
|
||||
#: ../js/ui/telepathyClient.js:327
|
||||
msgid "Call"
|
||||
msgstr "Llamar"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:353
|
||||
#: ../js/ui/telepathyClient.js:357
|
||||
msgid "File Transfer"
|
||||
msgstr "Transferencia de archivos"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:434
|
||||
#: ../js/ui/telepathyClient.js:438
|
||||
msgid "Subscription request"
|
||||
msgstr "Solicitud de suscripción"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:470
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
msgid "Connection error"
|
||||
msgstr "Error de conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:733
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:738
|
||||
#: ../js/ui/telepathyClient.js:746
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:741
|
||||
#: ../js/ui/telepathyClient.js:749
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:744
|
||||
#: ../js/ui/telepathyClient.js:752
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado/a."
|
||||
@ -1269,35 +1291,35 @@ msgstr "%s está ocupado/a."
|
||||
#. 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:978
|
||||
#: ../js/ui/telepathyClient.js:986
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Enviado el <b>%A</b> a las <b>%H:%M</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:984
|
||||
#: ../js/ui/telepathyClient.js:992
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:989
|
||||
#: ../js/ui/telepathyClient.js:997
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b> de %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1031
|
||||
#: ../js/ui/telepathyClient.js:1039
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "Ahora %s se llama %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Invitación a %s"
|
||||
@ -1305,34 +1327,35 @@ msgstr "Invitación a %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1148
|
||||
#: ../js/ui/telepathyClient.js:1156
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s le está invitando a unirse a %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
#: ../js/ui/telepathyClient.js:1158 ../js/ui/telepathyClient.js:1248
|
||||
#: ../js/ui/telepathyClient.js:1352
|
||||
msgid "Decline"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
|
||||
#: ../js/ui/telepathyClient.js:1344
|
||||
#: ../js/ui/telepathyClient.js:1159 ../js/ui/telepathyClient.js:1249
|
||||
#: ../js/ui/telepathyClient.js:1353
|
||||
msgid "Accept"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1184
|
||||
#: ../js/ui/telepathyClient.js:1192
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videollamada de %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1187
|
||||
#: ../js/ui/telepathyClient.js:1195
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Llamada de %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1197
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1206
|
||||
msgid "Answer"
|
||||
msgstr "Responder"
|
||||
|
||||
@ -1341,112 +1364,112 @@ msgstr "Responder"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1233
|
||||
#: ../js/ui/telepathyClient.js:1242
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s le está enviando %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s solicita permiso para ver cuándo está en línea"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
#: ../js/ui/telepathyClient.js:1415
|
||||
msgid "Network error"
|
||||
msgstr "Error de la red"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
#: ../js/ui/telepathyClient.js:1417
|
||||
msgid "Authentication failed"
|
||||
msgstr "Falló la autenticación"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
msgid "Encryption error"
|
||||
msgstr "Error de cifrado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
#: ../js/ui/telepathyClient.js:1421
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Certificado no proporcionado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
#: ../js/ui/telepathyClient.js:1423
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "No se confía en el certificado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
#: ../js/ui/telepathyClient.js:1425
|
||||
msgid "Certificate expired"
|
||||
msgstr "Certificado caducado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
#: ../js/ui/telepathyClient.js:1427
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Certificado no activado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "El nombre del servidor dle certificado no coincide"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
#: ../js/ui/telepathyClient.js:1431
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "La huella del certificado no coincide"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1424
|
||||
#: ../js/ui/telepathyClient.js:1433
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Certificado autofirmado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1426
|
||||
#: ../js/ui/telepathyClient.js:1435
|
||||
msgid "Status is set to offline"
|
||||
msgstr "El estado está establecido a «desconectado»"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
#: ../js/ui/telepathyClient.js:1437
|
||||
msgid "Encryption is not available"
|
||||
msgstr "El cifrado no está disponible"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1430
|
||||
#: ../js/ui/telepathyClient.js:1439
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "El certificado no es válido"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
#: ../js/ui/telepathyClient.js:1441
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Se ha rechazado la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1434
|
||||
#: ../js/ui/telepathyClient.js:1443
|
||||
msgid "Connection can't be established"
|
||||
msgstr "No se puede establecer la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1436
|
||||
#: ../js/ui/telepathyClient.js:1445
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Se ha perdido la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1438
|
||||
#: ../js/ui/telepathyClient.js:1447
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Este recurso ya está conectado al servidor"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1440
|
||||
#: ../js/ui/telepathyClient.js:1449
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
#: ../js/ui/telepathyClient.js:1451
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "La cuenta ya existe en el servidor"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1444
|
||||
#: ../js/ui/telepathyClient.js:1453
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr ""
|
||||
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1446
|
||||
#: ../js/ui/telepathyClient.js:1455
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Se ha revocado el certificado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1448
|
||||
#: ../js/ui/telepathyClient.js:1457
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
|
||||
"débil"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1450
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1457,68 +1480,68 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1459
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Falló la conexión a %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1468
|
||||
#: ../js/ui/telepathyClient.js:1477
|
||||
msgid "Reconnect"
|
||||
msgstr "Reconectar"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1469
|
||||
#: ../js/ui/telepathyClient.js:1478
|
||||
msgid "Edit account"
|
||||
msgstr "Editar cuenta"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1515
|
||||
#: ../js/ui/telepathyClient.js:1524
|
||||
msgid "Unknown reason"
|
||||
msgstr "Razón desconocida"
|
||||
|
||||
#: ../js/ui/userMenu.js:153
|
||||
#: ../js/ui/userMenu.js:145
|
||||
msgid "Hidden"
|
||||
msgstr "Oculto"
|
||||
|
||||
#: ../js/ui/userMenu.js:159
|
||||
#: ../js/ui/userMenu.js:151
|
||||
msgid "Idle"
|
||||
msgstr "Inactivo"
|
||||
|
||||
#: ../js/ui/userMenu.js:162
|
||||
#: ../js/ui/userMenu.js:154
|
||||
msgid "Unavailable"
|
||||
msgstr "No disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:592
|
||||
#: ../js/ui/userMenu.js:547 ../js/ui/userMenu.js:551 ../js/ui/userMenu.js:621
|
||||
msgid "Power Off..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/userMenu.js:554
|
||||
#: ../js/ui/userMenu.js:583
|
||||
msgid "Notifications"
|
||||
msgstr "Notificaciones"
|
||||
|
||||
#: ../js/ui/userMenu.js:562
|
||||
#: ../js/ui/userMenu.js:591
|
||||
msgid "Online Accounts"
|
||||
msgstr "Cuentas en línea"
|
||||
|
||||
#: ../js/ui/userMenu.js:566
|
||||
#: ../js/ui/userMenu.js:595
|
||||
msgid "System Settings"
|
||||
msgstr "Configuración del sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:573
|
||||
#: ../js/ui/userMenu.js:602
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear la pantalla"
|
||||
|
||||
#: ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:607
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/userMenu.js:583
|
||||
#: ../js/ui/userMenu.js:612
|
||||
msgid "Log Out..."
|
||||
msgstr "Cerrar la sesión…"
|
||||
|
||||
#: ../js/ui/userMenu.js:611
|
||||
#: ../js/ui/userMenu.js:640
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Su estado del chat se establecerá a «ocupado»"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
#: ../js/ui/userMenu.js:641
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1531,20 +1554,15 @@ msgstr ""
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:120
|
||||
#: ../js/ui/viewSelector.js:121
|
||||
msgid "Type to search..."
|
||||
msgstr "Teclear para buscar…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:140 ../src/shell-util.c:261
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:261
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:39
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s finalizó su lanzamiento"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:41
|
||||
#: ../js/ui/windowAttentionHandler.js:35
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "«%s» está preparado"
|
||||
@ -1579,7 +1597,7 @@ msgstr "Imprimir versión"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Modo usado por GDM para la pantalla de inicio"
|
||||
|
||||
#: ../src/shell-app.c:581
|
||||
#: ../src/shell-app.c:579
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Falló al lanzar «%s»"
|
||||
@ -1616,6 +1634,23 @@ msgstr "Sistema de archivos"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Show password"
|
||||
#~ msgstr "Mostrar contraseña"
|
||||
|
||||
#~ msgid "%s has not emitted any errors."
|
||||
#~ msgstr "%s no ha generado ningún error."
|
||||
|
||||
#~| msgid "Error"
|
||||
#~ msgid "Hide Errors"
|
||||
#~ msgstr "Ocultar errores"
|
||||
|
||||
#~| msgid "Error"
|
||||
#~ msgid "Show Errors"
|
||||
#~ msgstr "Mostrar errores"
|
||||
|
||||
#~ msgid "%s has finished starting"
|
||||
#~ msgstr "%s finalizó su lanzamiento"
|
||||
|
||||
#~ msgid "If true, display onscreen keyboard."
|
||||
#~ msgstr "Si es cierta, muestra el teclado en pantalla."
|
||||
|
||||
@ -1702,9 +1737,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "Confirmar"
|
||||
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "Panel"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "No existe la aplicación"
|
||||
|
||||
@ -1925,9 +1957,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "Mostrar los segu_ndos"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "Mostrar la _fecha"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "Formato _12 horas"
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user