Compare commits
77 Commits
wip/screen
...
3.5.2
Author | SHA1 | Date | |
---|---|---|---|
06febdce22 | |||
c31d9d5e3d | |||
cda8a545f1 | |||
f850e92524 | |||
cc9d53e038 | |||
7b048fc092 | |||
4ba4a501fd | |||
2b2cce6896 | |||
c1f51a7bf3 | |||
465556f0d8 | |||
db7ac5208a | |||
cfcd1bc014 | |||
e63f7e8779 | |||
7911154bad | |||
ec0730f3e5 | |||
76005f5adf | |||
94493cde35 | |||
a1f68720e5 | |||
022376dd56 | |||
934e5aacab | |||
35b142f23f | |||
41c3795a7b | |||
95d7099133 | |||
33dc9abb9b | |||
5e4edac14d | |||
cb5ae92986 | |||
ebbd295ebe | |||
65d23fb9a3 | |||
ad6d986172 | |||
985641cc2e | |||
de0a714081 | |||
3f942302d1 | |||
96396163cf | |||
0c736c4561 | |||
33ad9d1035 | |||
d57658d059 | |||
031206cf1f | |||
12c7cc278d | |||
9d3750b9b8 | |||
ba4b9f229e | |||
850fe98cbb | |||
8a9e3e0df2 | |||
a277569d31 | |||
7ed9516884 | |||
ecff2fa2b7 | |||
e49b94658c | |||
e4f1572a3a | |||
b5b13322d8 | |||
c25e7f3c41 | |||
f6a2c92bfa | |||
ed17418101 | |||
5264f39209 | |||
de69c719fb | |||
ab3173487d | |||
a3fcb8c284 | |||
ba92cfa064 | |||
6bee51ed33 | |||
122bca49ea | |||
19318a1eeb | |||
a7a46bbe1c | |||
3d26224180 | |||
940ddb104c | |||
5617f91281 | |||
a9a863aab4 | |||
ca26347dea | |||
41a14e808e | |||
6452501275 | |||
b61ada72cc | |||
ace42d845c | |||
850b6f28e5 | |||
3c81e9f0e7 | |||
e20ea19f34 | |||
ce041a3190 | |||
3a01aaf7fb | |||
ec4a2aae95 | |||
de8a66d4ce | |||
dc3d3acb3b |
71
NEWS
71
NEWS
@ -1,3 +1,74 @@
|
|||||||
|
3.5.2
|
||||||
|
=====
|
||||||
|
* main: Move 'toggle-recording' binding into the shell [Florian; #674377]
|
||||||
|
* popupMenu: make sure to break the grab when the slider is not visible
|
||||||
|
[Stefano; #672713]
|
||||||
|
* st-theme-node-drawing: Don't use GL types [Neil; #672711]
|
||||||
|
* Mirror Evolution calendar settings into our own schema [Owen; #674424]
|
||||||
|
* shell-network-agent: don't crash if a request isn't found [Dan; #674961]
|
||||||
|
* notificationDaemon: Match app based on WM_CLASS [Jasper; #673761]
|
||||||
|
* NetworkMenu: use network-offline while loading [Giovanni; #674426]
|
||||||
|
* lookingGlass: Remove the Errors tab [Jasper; #675104]
|
||||||
|
* searchDisplay: Reset keyboard focus after displaying async results
|
||||||
|
[Rui; #675078]
|
||||||
|
* gdm: don't fail if fprintd is unavailable [Ray; #675006]
|
||||||
|
* messageTray: Fix scrolling up [Jasper; #661615]
|
||||||
|
* main: Close the recorder instead of pausing it [Rui; #675128]
|
||||||
|
* Accessibility [Alejandro]
|
||||||
|
- Use the proper label_actor for date menu on top panel [#675307]
|
||||||
|
- Set the proper role/label_actor for SearchResult.content [#672242]
|
||||||
|
- do not expose a label text if 'hidden' style class is used [#675341]
|
||||||
|
* Magnifier: Add brightness and contrast functionality [Joseph; #639851]
|
||||||
|
* theme: use a smaller border-radius for top bar [Jakub; #672430]
|
||||||
|
* placeDisplay: use new bookmark file location [Matthias; #675443]
|
||||||
|
* port all synchronous search providers to the async API [Jasper, Rui; #675328]
|
||||||
|
* NetworkAgent: disallow multiple requests for the same connection/setting
|
||||||
|
[Giovanni; #674961]
|
||||||
|
* userMenu: Update to latest mockups [Florian; #675802]
|
||||||
|
* util: Don't double-fork when spawning from Alt-F2 [Colin; #675789]
|
||||||
|
* messageTray: Make Source usable without subclassing [Jasper; #661236]
|
||||||
|
* panel: Check for appMenu button's reactivity before opening [Florian; #676316]
|
||||||
|
* Fix formatting of bluetooth passkey [Florian; #651251]
|
||||||
|
* notificationDaemon: Filter out file-transfer notifications [Jasper; #676175]
|
||||||
|
* Don't use global.log() [Jasper; #675790]
|
||||||
|
* Fix broken extension loading in some distributions [Owen, Alexandre; #670477]
|
||||||
|
* shell-app: Raise windows in reverse order to preserve the stacking
|
||||||
|
[Rui; #676371]
|
||||||
|
* Generalize gdm-mode [Florian; #676156]
|
||||||
|
* Switch string formatting to the one inside gjs [Jasper; #675479]
|
||||||
|
* extensionUtils: Support subdirectories in getCurrentExtension
|
||||||
|
[Jasper; #677001]
|
||||||
|
* panel: Refuse to add (legacy) status icons not part of the session mode
|
||||||
|
[Florian; #677058]
|
||||||
|
* Add an initial-setup mode [Matthias; #676697]
|
||||||
|
* status/keyboard: Port to the new input sources settings [Rui; #641531]
|
||||||
|
* NetworkMenu: show notifications for failed VPN connections [Giovanni; #676330]
|
||||||
|
* userMenu: Indicate progress on status changes [Florian; #659067]
|
||||||
|
* recorder: Honor "disable-save-to-disk" lockdown key [Rūdolfs; #673630]
|
||||||
|
* searchDisplay: Use the rowLimit we pass to the IconGrid [Christian; #675527]
|
||||||
|
* endSessionDialog: Factor out _updateDescription from _updateContent
|
||||||
|
[Alejandro; #674210]
|
||||||
|
* Fix empathy's appMenu freezing the shell [Alban; #676447]
|
||||||
|
* Code cleanups [Florian, Giovanni, Jasper; #672807, #672413, #676837, #676850,
|
||||||
|
#672272]
|
||||||
|
* Misc bug fixes [Alban, Florian, Giovanni, Guillaume, Jasper, Piotr, Rico,
|
||||||
|
Ron, Rui, Stefano; #659968, #672192, #673177, #673198, #674323, #675301,
|
||||||
|
#675370, #676347, #676806, #677097]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Alban Browaeys, Giovanni Campagna, Matthias Clasen, Guillaume Desmottes,
|
||||||
|
Piotr Drąg, Stefano Facchini, Rui Matos, Rūdolfs Mazurs, Florian Müllner,
|
||||||
|
Alejandro Piñeiro, Neil Roberts, Alexandre Rostovtsev, Joseph Scheuhammer,
|
||||||
|
Jakub Steiner, Jasper St. Pierre, Ray Strode, Owen Taylor, Rico Tzschichholz,
|
||||||
|
Colin Walters, Dan Winship, Ron Yorston
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
OKANO Takayoshi [ja], Daniel Mustieles [es], Changwoo Ryu [ko],
|
||||||
|
Yaron Shahrabani [he], Fran Diéguez [gl], Jonh Wendell [pt_BR],
|
||||||
|
Kjartan Maraas [nb], Luca Ferretti [it], Tom Tryfonidis [el],
|
||||||
|
Sandeep Sheshrao Shedmake [mr], Takanori MATSUURA [ja], Dirgita [id],
|
||||||
|
Mantas Kriaučiūnas [lt], Matej Urbančič [sl], Jiro Matsuzawa [ja]
|
||||||
|
|
||||||
3.4.1
|
3.4.1
|
||||||
=====
|
=====
|
||||||
* Fix crash that occurred when an icon theme change caused unexpected
|
* Fix crash that occurred when an icon theme change caused unexpected
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
"It can be used only by extensions.gnome.org"
|
"It can be used only by extensions.gnome.org"
|
||||||
#define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::Gnome Shell Integration Dummy Content-Type";
|
#define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::Gnome Shell Integration Dummy Content-Type";
|
||||||
|
|
||||||
#define PLUGIN_API_VERSION 3
|
#define PLUGIN_API_VERSION 4
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GDBusProxy *proxy;
|
GDBusProxy *proxy;
|
||||||
@ -163,6 +163,7 @@ NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
|||||||
plugin->newp = NPP_New;
|
plugin->newp = NPP_New;
|
||||||
plugin->destroy = NPP_Destroy;
|
plugin->destroy = NPP_Destroy;
|
||||||
plugin->getvalue = NPP_GetValue;
|
plugin->getvalue = NPP_GetValue;
|
||||||
|
plugin->setwindow = NPP_SetWindow;
|
||||||
|
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
@ -267,6 +268,7 @@ typedef struct {
|
|||||||
NPObject parent;
|
NPObject parent;
|
||||||
NPP instance;
|
NPP instance;
|
||||||
GDBusProxy *proxy;
|
GDBusProxy *proxy;
|
||||||
|
GSettings *settings;
|
||||||
NPObject *listener;
|
NPObject *listener;
|
||||||
NPObject *restart_listener;
|
NPObject *restart_listener;
|
||||||
gint signal_id;
|
gint signal_id;
|
||||||
@ -323,6 +325,9 @@ on_shell_appeared (GDBusConnection *connection,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SHELL_SCHEMA "org.gnome.shell"
|
||||||
|
#define ENABLED_EXTENSIONS_KEY "enabled-extensions"
|
||||||
|
|
||||||
static NPObject *
|
static NPObject *
|
||||||
plugin_object_allocate (NPP instance,
|
plugin_object_allocate (NPP instance,
|
||||||
NPClass *klass)
|
NPClass *klass)
|
||||||
@ -332,6 +337,7 @@ plugin_object_allocate (NPP instance,
|
|||||||
|
|
||||||
obj->instance = instance;
|
obj->instance = instance;
|
||||||
obj->proxy = g_object_ref (data->proxy);
|
obj->proxy = g_object_ref (data->proxy);
|
||||||
|
obj->settings = g_settings_new (SHELL_SCHEMA);
|
||||||
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
|
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
|
||||||
G_CALLBACK (on_shell_signal), obj);
|
G_CALLBACK (on_shell_signal), obj);
|
||||||
|
|
||||||
@ -492,7 +498,61 @@ plugin_enable_extension (PluginObject *obj,
|
|||||||
NPString uuid,
|
NPString uuid,
|
||||||
gboolean enabled)
|
gboolean enabled)
|
||||||
{
|
{
|
||||||
|
gboolean ret;
|
||||||
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
|
gsize length;
|
||||||
|
gchar **uuids;
|
||||||
|
const gchar **new_uuids;
|
||||||
|
|
||||||
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
uuids = g_settings_get_strv (obj->settings, ENABLED_EXTENSIONS_KEY);
|
||||||
|
length = g_strv_length (uuids);
|
||||||
|
|
||||||
|
if (enabled)
|
||||||
|
{
|
||||||
|
new_uuids = g_new (const gchar *, length + 2); /* New key, NULL */
|
||||||
|
memcpy (new_uuids, uuids, length * sizeof (*new_uuids));
|
||||||
|
new_uuids[length] = uuid_str;
|
||||||
|
new_uuids[length + 1] = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gsize i = 0, j = 0;
|
||||||
|
new_uuids = g_new (const gchar *, length);
|
||||||
|
for (i = 0; i < length; i ++)
|
||||||
|
{
|
||||||
|
if (g_str_equal (uuids[i], uuid_str))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
new_uuids[j] = uuids[i];
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_uuids[j] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = g_settings_set_strv (obj->settings,
|
||||||
|
ENABLED_EXTENSIONS_KEY,
|
||||||
|
new_uuids);
|
||||||
|
|
||||||
|
g_strfreev (uuids);
|
||||||
|
g_free (new_uuids);
|
||||||
|
g_free (uuid_str);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_install_extension (PluginObject *obj,
|
||||||
|
NPString uuid)
|
||||||
|
{
|
||||||
|
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
|
|
||||||
if (!uuid_is_valid (uuid_str))
|
if (!uuid_is_valid (uuid_str))
|
||||||
{
|
{
|
||||||
g_free (uuid_str);
|
g_free (uuid_str);
|
||||||
@ -500,7 +560,7 @@ plugin_enable_extension (PluginObject *obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_dbus_proxy_call (obj->proxy,
|
g_dbus_proxy_call (obj->proxy,
|
||||||
(enabled ? "EnableExtension" : "DisableExtension"),
|
"InstallRemoteExtension",
|
||||||
g_variant_new ("(s)", uuid_str),
|
g_variant_new ("(s)", uuid_str),
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
-1, /* timeout */
|
-1, /* timeout */
|
||||||
@ -513,40 +573,6 @@ plugin_enable_extension (PluginObject *obj,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
plugin_install_extension (PluginObject *obj,
|
|
||||||
NPString uuid,
|
|
||||||
NPString version_tag)
|
|
||||||
{
|
|
||||||
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
|
||||||
gchar *version_tag_str;
|
|
||||||
|
|
||||||
if (!uuid_is_valid (uuid_str))
|
|
||||||
{
|
|
||||||
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_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;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_uninstall_extension (PluginObject *obj,
|
plugin_uninstall_extension (PluginObject *obj,
|
||||||
NPString uuid,
|
NPString uuid,
|
||||||
@ -771,11 +797,9 @@ plugin_object_invoke (NPObject *npobj,
|
|||||||
else if (name == install_extension_id)
|
else if (name == install_extension_id)
|
||||||
{
|
{
|
||||||
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||||
if (!NPVARIANT_IS_STRING(args[1])) return FALSE;
|
|
||||||
|
|
||||||
return plugin_install_extension (obj,
|
return plugin_install_extension (obj,
|
||||||
NPVARIANT_TO_STRING(args[0]),
|
NPVARIANT_TO_STRING(args[0]));
|
||||||
NPVARIANT_TO_STRING(args[1]));
|
|
||||||
}
|
}
|
||||||
else if (name == uninstall_extension_id)
|
else if (name == uninstall_extension_id)
|
||||||
{
|
{
|
||||||
@ -946,3 +970,12 @@ NPP_GetValue(NPP instance,
|
|||||||
|
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Opera tries to call NPP_SetWindow without checking the
|
||||||
|
* NULL pointer beforehand. */
|
||||||
|
NPError
|
||||||
|
NPP_SetWindow(NPP instance,
|
||||||
|
NPWindow *window)
|
||||||
|
{
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
35
configure.ac
35
configure.ac
@ -1,5 +1,5 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[3.4.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
AC_INIT([gnome-shell],[3.5.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
@ -63,7 +63,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
|||||||
CLUTTER_MIN_VERSION=1.9.16
|
CLUTTER_MIN_VERSION=1.9.16
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
GJS_MIN_VERSION=1.29.18
|
GJS_MIN_VERSION=1.29.18
|
||||||
MUTTER_MIN_VERSION=3.4.1
|
MUTTER_MIN_VERSION=3.5.2
|
||||||
FOLKS_MIN_VERSION=0.5.2
|
FOLKS_MIN_VERSION=0.5.2
|
||||||
GTK_MIN_VERSION=3.3.9
|
GTK_MIN_VERSION=3.3.9
|
||||||
GIO_MIN_VERSION=2.31.6
|
GIO_MIN_VERSION=2.31.6
|
||||||
@ -75,6 +75,7 @@ TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
|||||||
POLKIT_MIN_VERSION=0.100
|
POLKIT_MIN_VERSION=0.100
|
||||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||||
GCR_MIN_VERSION=3.3.90
|
GCR_MIN_VERSION=3.3.90
|
||||||
|
GNOME_DESKTOP_REQUIRED_VERSION=3.5.1
|
||||||
|
|
||||||
# Collect more than 20 libraries for a prize!
|
# Collect more than 20 libraries for a prize!
|
||||||
PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
||||||
@ -95,7 +96,8 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
|||||||
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
||||||
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
||||||
libnm-glib libnm-util gnome-keyring-1
|
libnm-glib libnm-util gnome-keyring-1
|
||||||
gcr-3 >= $GCR_MIN_VERSION)
|
gcr-3 >= $GCR_MIN_VERSION
|
||||||
|
gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
|
||||||
|
|
||||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||||
|
|
||||||
@ -121,7 +123,7 @@ PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
|
|||||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 x11)
|
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 x11)
|
||||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
||||||
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
||||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 0.1.7)
|
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.5.1)
|
||||||
|
|
||||||
AC_MSG_CHECKING([for bluetooth support])
|
AC_MSG_CHECKING([for bluetooth support])
|
||||||
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
|
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
|
||||||
@ -237,31 +239,6 @@ AC_ARG_ENABLE(jhbuild-wrapper-script,
|
|||||||
AS_HELP_STRING([--enable-jhbuild-wrapper-script],[Make "gnome-shell" script work for jhbuild]),,enable_jhbuild_wrapper_script=no)
|
AS_HELP_STRING([--enable-jhbuild-wrapper-script],[Make "gnome-shell" script work for jhbuild]),,enable_jhbuild_wrapper_script=no)
|
||||||
AM_CONDITIONAL(USE_JHBUILD_WRAPPER_SCRIPT, test "x$enable_jhbuild_wrapper_script" = xyes)
|
AM_CONDITIONAL(USE_JHBUILD_WRAPPER_SCRIPT, test "x$enable_jhbuild_wrapper_script" = xyes)
|
||||||
|
|
||||||
AC_MSG_CHECKING([location of system Certificate Authority list])
|
|
||||||
AC_ARG_WITH(ca-certificates,
|
|
||||||
[AC_HELP_STRING([--with-ca-certificates=@<:@path@:>@],
|
|
||||||
[path to system Certificate Authority list])])
|
|
||||||
|
|
||||||
if test "$with_ca_certificates" = "no"; then
|
|
||||||
AC_MSG_RESULT([disabled])
|
|
||||||
else
|
|
||||||
if test -z "$with_ca_certificates"; then
|
|
||||||
for f in /etc/pki/tls/certs/ca-bundle.crt \
|
|
||||||
/etc/ssl/certs/ca-certificates.crt; do
|
|
||||||
if test -f "$f"; then
|
|
||||||
with_ca_certificates="$f"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if test -z "$with_ca_certificates"; then
|
|
||||||
AC_MSG_ERROR([could not find. Use --with-ca-certificates=path to set, or --without-ca-certificates to disable])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_MSG_RESULT($with_ca_certificates)
|
|
||||||
AC_DEFINE_UNQUOTED(SHELL_SYSTEM_CA_FILE, ["$with_ca_certificates"], [The system TLS CA list])
|
|
||||||
fi
|
|
||||||
AC_SUBST(SHELL_SYSTEM_CA_FILE,["$with_ca_certificates"])
|
|
||||||
|
|
||||||
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
|
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
|
||||||
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
||||||
|
|
||||||
|
@ -1948,10 +1948,12 @@ StScrollBar StButton#vhandle:hover
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* intentionally left transparent to avoid dialog changing size */
|
.hidden {
|
||||||
|
color: rgba(0,0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
.prompt-dialog-null-label {
|
.prompt-dialog-null-label {
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
color: rgba(0,0,0,0);
|
|
||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@ nobase_dist_js_DATA = \
|
|||||||
misc/config.js \
|
misc/config.js \
|
||||||
misc/extensionUtils.js \
|
misc/extensionUtils.js \
|
||||||
misc/fileUtils.js \
|
misc/fileUtils.js \
|
||||||
misc/format.js \
|
|
||||||
misc/gnomeSession.js \
|
misc/gnomeSession.js \
|
||||||
misc/history.js \
|
misc/history.js \
|
||||||
misc/jsParse.js \
|
misc/jsParse.js \
|
||||||
@ -67,6 +66,7 @@ nobase_dist_js_DATA = \
|
|||||||
ui/messageTray.js \
|
ui/messageTray.js \
|
||||||
ui/modalDialog.js \
|
ui/modalDialog.js \
|
||||||
ui/networkAgent.js \
|
ui/networkAgent.js \
|
||||||
|
ui/sessionMode.js \
|
||||||
ui/shellEntry.js \
|
ui/shellEntry.js \
|
||||||
ui/shellMountOperation.js \
|
ui/shellMountOperation.js \
|
||||||
ui/notificationDaemon.js \
|
ui/notificationDaemon.js \
|
||||||
|
@ -6,11 +6,11 @@ const GObject = imports.gi.GObject;
|
|||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Pango = imports.gi.Pango;
|
const Pango = imports.gi.Pango;
|
||||||
|
const Format = imports.format;
|
||||||
|
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const Format = imports.misc.format;
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ const Application = new Lang.Class({
|
|||||||
try {
|
try {
|
||||||
extension = ExtensionUtils.createExtensionObject(uuid, dir, type);
|
extension = ExtensionUtils.createExtensionObject(uuid, dir, type);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
global.logError('' + e);
|
logError(e, 'Could not create extensions object');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ function initEnvironment() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
logError: function(s) {
|
logError: function(s) {
|
||||||
global.log('ERROR: ' + s);
|
log('ERROR: ' + s);
|
||||||
},
|
},
|
||||||
|
|
||||||
userdatadir: GLib.build_filenamev([GLib.get_user_data_dir(), 'gnome-shell'])
|
userdatadir: GLib.build_filenamev([GLib.get_user_data_dir(), 'gnome-shell'])
|
||||||
|
@ -8,8 +8,6 @@ const PACKAGE_VERSION = '@PACKAGE_VERSION@';
|
|||||||
const GJS_VERSION = '@GJS_VERSION@';
|
const GJS_VERSION = '@GJS_VERSION@';
|
||||||
/* 1 if gnome-bluetooth is available, 0 otherwise */
|
/* 1 if gnome-bluetooth is available, 0 otherwise */
|
||||||
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
||||||
/* The system TLS CA list */
|
|
||||||
const SHELL_SYSTEM_CA_FILE = '@SHELL_SYSTEM_CA_FILE@';
|
|
||||||
/* gettext package */
|
/* gettext package */
|
||||||
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
||||||
/* locale dir */
|
/* locale dir */
|
||||||
|
@ -40,13 +40,18 @@ function getCurrentExtension() {
|
|||||||
throw new Error('Could not find current extension');
|
throw new Error('Could not find current extension');
|
||||||
|
|
||||||
let path = match[1];
|
let path = match[1];
|
||||||
let uuid = GLib.path_get_basename(GLib.path_get_dirname(path));
|
let file = Gio.File.new_for_path(path);
|
||||||
|
|
||||||
let extension = extensions[uuid];
|
// Walk up the directory tree, looking for an extesion with
|
||||||
if (extension === undefined)
|
// the same UUID as a directory name.
|
||||||
throw new Error('Could not find current extension');
|
while (file != null) {
|
||||||
|
let extension = extensions[file.get_basename()];
|
||||||
|
if (extension !== undefined)
|
||||||
|
return extension;
|
||||||
|
file = file.get_parent();
|
||||||
|
}
|
||||||
|
|
||||||
return extension;
|
throw new Error('Could not find current extension');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,7 +125,7 @@ function createExtensionObject(uuid, dir, type) {
|
|||||||
|
|
||||||
// Encourage people to add this
|
// Encourage people to add this
|
||||||
if (!meta.url) {
|
if (!meta.url) {
|
||||||
global.log('Warning: Missing "url" property in metadata.json');
|
log('Warning: Missing "url" property in %s/metadata.json'.format(uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uuid != meta.uuid) {
|
if (uuid != meta.uuid) {
|
||||||
@ -157,7 +162,7 @@ function init() {
|
|||||||
if (!userExtensionsDir.query_exists(null))
|
if (!userExtensionsDir.query_exists(null))
|
||||||
userExtensionsDir.make_directory_with_parents(null);
|
userExtensionsDir.make_directory_with_parents(null);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
global.logError('' + e);
|
logError(e, 'Could not create extensions directory');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +172,7 @@ function scanExtensionsInDirectory(callback, dir, type) {
|
|||||||
try {
|
try {
|
||||||
fileEnum = dir.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
|
fileEnum = dir.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
global.logError('' + e);
|
logError(e, 'Could not enumerate extensions directory');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const ShellJS = imports.gi.ShellJS;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function is intended to extend the String object and provide
|
|
||||||
* an String.format API for string formatting.
|
|
||||||
* It has to be set up using String.prototype.format = Format.format;
|
|
||||||
* Usage:
|
|
||||||
* "somestring %s %d".format('hello', 5);
|
|
||||||
* It supports %s, %d, %x and %f, for %f it also support precisions like
|
|
||||||
* "%.2f".format(1.526). All specifiers can be prefixed with a minimum
|
|
||||||
* field width, e.g. "%5s".format("foo"). Unless the width is prefixed
|
|
||||||
* with '0', the formatted string will be padded with spaces.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function format() {
|
|
||||||
let str = this;
|
|
||||||
let i = 0;
|
|
||||||
let args = arguments;
|
|
||||||
|
|
||||||
return str.replace(/%(I+)?([0-9]+)?(?:\.([0-9]+))?(.)/g, function (str, flagsGroup, widthGroup, precisionGroup, genericGroup) {
|
|
||||||
|
|
||||||
if (precisionGroup != '' && genericGroup != 'f')
|
|
||||||
throw new Error("Precision can only be specified for 'f'");
|
|
||||||
|
|
||||||
let hasAlternativeIntFlag = (flagsGroup.indexOf('I') != -1);
|
|
||||||
|
|
||||||
if (hasAlternativeIntFlag && genericGroup != 'd')
|
|
||||||
throw new Error("Alternative output digits can only be specfied for 'd'");
|
|
||||||
|
|
||||||
let fillChar = (widthGroup[0] == '0') ? '0' : ' ';
|
|
||||||
let width = parseInt(widthGroup, 10) || 0;
|
|
||||||
|
|
||||||
function fillWidth(s, c, w) {
|
|
||||||
let fill = '';
|
|
||||||
for (let i = 0; i < w; i++)
|
|
||||||
fill += c;
|
|
||||||
return fill.substr(s.length) + s;
|
|
||||||
}
|
|
||||||
|
|
||||||
let s = '';
|
|
||||||
switch (genericGroup) {
|
|
||||||
case '%':
|
|
||||||
return '%';
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
s = args[i++].toString();
|
|
||||||
break;
|
|
||||||
case 'd':
|
|
||||||
let intV = parseInt(args[i++]);
|
|
||||||
if (hasAlternativeIntFlag)
|
|
||||||
s = ShellJS.format_int_alternative_output(intV);
|
|
||||||
else
|
|
||||||
s = intV.toString();
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
s = parseInt(args[i++]).toString(16);
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
if (precisionGroup == '')
|
|
||||||
s = parseFloat(args[i++]).toString();
|
|
||||||
else
|
|
||||||
s = parseFloat(args[i++]).toFixed(parseInt(precisionGroup));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Error('Unsupported conversion character %' + genericGroup);
|
|
||||||
}
|
|
||||||
return fillWidth(s, fillChar, width);
|
|
||||||
});
|
|
||||||
}
|
|
@ -63,7 +63,7 @@ const Contact = new Lang.Class({
|
|||||||
this.individual.full_name ||
|
this.individual.full_name ||
|
||||||
this.individual.nickname ||
|
this.individual.nickname ||
|
||||||
email ||
|
email ||
|
||||||
_("Unknown");
|
C_("contact", "Unknown");
|
||||||
let aliasLabel = new St.Label({ text: aliasText,
|
let aliasLabel = new St.Label({ text: aliasText,
|
||||||
style_class: 'contact-details-alias' });
|
style_class: 'contact-details-alias' });
|
||||||
details.add(aliasLabel, { x_fill: true,
|
details.add(aliasLabel, { x_fill: true,
|
||||||
|
@ -45,9 +45,7 @@ const DateMenuButton = new Lang.Class({
|
|||||||
Name: 'DateMenuButton',
|
Name: 'DateMenuButton',
|
||||||
Extends: PanelMenu.Button,
|
Extends: PanelMenu.Button,
|
||||||
|
|
||||||
_init: function(params) {
|
_init: function() {
|
||||||
params = Params.parse(params, { showEvents: true });
|
|
||||||
|
|
||||||
let item;
|
let item;
|
||||||
let hbox;
|
let hbox;
|
||||||
let vbox;
|
let vbox;
|
||||||
@ -79,7 +77,7 @@ const DateMenuButton = new Lang.Class({
|
|||||||
this._date.style_class = 'datemenu-date-label';
|
this._date.style_class = 'datemenu-date-label';
|
||||||
vbox.add(this._date);
|
vbox.add(this._date);
|
||||||
|
|
||||||
if (params.showEvents) {
|
if (Main.sessionMode.showCalendarEvents) {
|
||||||
this._eventSource = new Calendar.DBusEventSource();
|
this._eventSource = new Calendar.DBusEventSource();
|
||||||
this._eventList = new Calendar.EventsList(this._eventSource);
|
this._eventList = new Calendar.EventsList(this._eventSource);
|
||||||
} else {
|
} else {
|
||||||
@ -110,7 +108,7 @@ const DateMenuButton = new Lang.Class({
|
|||||||
item.actor.reparent(vbox);
|
item.actor.reparent(vbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.showEvents) {
|
if (Main.sessionMode.showCalendarEvents) {
|
||||||
// Add vertical separator
|
// Add vertical separator
|
||||||
|
|
||||||
item = new St.DrawingArea({ style_class: 'calendar-vertical-separator',
|
item = new St.DrawingArea({ style_class: 'calendar-vertical-separator',
|
||||||
|
@ -342,7 +342,7 @@ const EndSessionDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateContent: function() {
|
_updateDescription: function() {
|
||||||
if (this.state != ModalDialog.State.OPENING &&
|
if (this.state != ModalDialog.State.OPENING &&
|
||||||
this.state != ModalDialog.State.OPENED)
|
this.state != ModalDialog.State.OPENED)
|
||||||
return;
|
return;
|
||||||
@ -352,17 +352,6 @@ const EndSessionDialog = new Lang.Class({
|
|||||||
let subject = dialogContent.subject;
|
let subject = dialogContent.subject;
|
||||||
let description;
|
let description;
|
||||||
|
|
||||||
if (this._user.is_loaded && !dialogContent.iconName) {
|
|
||||||
let iconFile = this._user.get_icon_file();
|
|
||||||
if (GLib.file_test(iconFile, GLib.FileTest.EXISTS))
|
|
||||||
this._setIconFromFile(iconFile, dialogContent.iconStyleClass);
|
|
||||||
else
|
|
||||||
this._setIconFromName('avatar-default', dialogContent.iconStyleClass);
|
|
||||||
} else if (dialogContent.iconName) {
|
|
||||||
this._setIconFromName(dialogContent.iconName,
|
|
||||||
dialogContent.iconStyleClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._inhibitors.length > 0) {
|
if (this._inhibitors.length > 0) {
|
||||||
this._stopTimer();
|
this._stopTimer();
|
||||||
description = dialogContent.inhibitedDescription;
|
description = dialogContent.inhibitedDescription;
|
||||||
@ -395,6 +384,27 @@ const EndSessionDialog = new Lang.Class({
|
|||||||
_setLabelText(this._descriptionLabel, description);
|
_setLabelText(this._descriptionLabel, description);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_updateContent: function() {
|
||||||
|
if (this.state != ModalDialog.State.OPENING &&
|
||||||
|
this.state != ModalDialog.State.OPENED)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let dialogContent = DialogContent[this._type];
|
||||||
|
|
||||||
|
if (this._user.is_loaded && !dialogContent.iconName) {
|
||||||
|
let iconFile = this._user.get_icon_file();
|
||||||
|
if (GLib.file_test(iconFile, GLib.FileTest.EXISTS))
|
||||||
|
this._setIconFromFile(iconFile, dialogContent.iconStyleClass);
|
||||||
|
else
|
||||||
|
this._setIconFromName('avatar-default', dialogContent.iconStyleClass);
|
||||||
|
} else if (dialogContent.iconName) {
|
||||||
|
this._setIconFromName(dialogContent.iconName,
|
||||||
|
dialogContent.iconStyleClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._updateDescription();
|
||||||
|
},
|
||||||
|
|
||||||
_updateButtons: function() {
|
_updateButtons: function() {
|
||||||
let dialogContent = DialogContent[this._type];
|
let dialogContent = DialogContent[this._type];
|
||||||
let buttons = [{ action: Lang.bind(this, this.cancel),
|
let buttons = [{ action: Lang.bind(this, this.cancel),
|
||||||
@ -441,7 +451,7 @@ const EndSessionDialog = new Lang.Class({
|
|||||||
{ _secondsLeft: 0,
|
{ _secondsLeft: 0,
|
||||||
time: this._secondsLeft,
|
time: this._secondsLeft,
|
||||||
transition: 'linear',
|
transition: 'linear',
|
||||||
onUpdate: Lang.bind(this, this._updateContent),
|
onUpdate: Lang.bind(this, this._updateDescription),
|
||||||
onComplete: Lang.bind(this, function() {
|
onComplete: Lang.bind(this, function() {
|
||||||
let dialogContent = DialogContent[this._type];
|
let dialogContent = DialogContent[this._type];
|
||||||
let button = dialogContent.confirmButtons[dialogContent.confirmButtons.length - 1];
|
let button = dialogContent.confirmButtons[dialogContent.confirmButtons.length - 1];
|
||||||
|
@ -90,7 +90,7 @@ function init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OK, now things are initialized enough that we can import shell JS
|
// OK, now things are initialized enough that we can import shell JS
|
||||||
const Format = imports.misc.format;
|
const Format = imports.format;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
Tweener.init();
|
Tweener.init();
|
||||||
|
@ -34,24 +34,11 @@ const REPOSITORY_URL_BASE = 'https://extensions.gnome.org';
|
|||||||
const REPOSITORY_URL_DOWNLOAD = REPOSITORY_URL_BASE + '/download-extension/%s.shell-extension.zip';
|
const REPOSITORY_URL_DOWNLOAD = REPOSITORY_URL_BASE + '/download-extension/%s.shell-extension.zip';
|
||||||
const REPOSITORY_URL_INFO = REPOSITORY_URL_BASE + '/extension-info/';
|
const REPOSITORY_URL_INFO = REPOSITORY_URL_BASE + '/extension-info/';
|
||||||
|
|
||||||
const _httpSession = new Soup.SessionAsync();
|
const _httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true });
|
||||||
|
|
||||||
// The unfortunate state of gjs, gobject-introspection and libsoup
|
|
||||||
// means that I have to do a hack to add a feature.
|
|
||||||
// See: https://bugzilla.gnome.org/show_bug.cgi?id=655189 for context.
|
// See: https://bugzilla.gnome.org/show_bug.cgi?id=655189 for context.
|
||||||
|
// _httpSession.add_feature(new Soup.ProxyResolverDefault());
|
||||||
if (Soup.Session.prototype.add_feature != null)
|
Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());
|
||||||
Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());
|
|
||||||
|
|
||||||
function _getCertFile() {
|
|
||||||
let localCert = GLib.build_filenamev([global.userdatadir, 'extensions.gnome.org.crt']);
|
|
||||||
if (GLib.file_test(localCert, GLib.FileTest.EXISTS))
|
|
||||||
return localCert;
|
|
||||||
else
|
|
||||||
return Config.SHELL_SYSTEM_CA_FILE;
|
|
||||||
}
|
|
||||||
|
|
||||||
_httpSession.ssl_ca_file = _getCertFile();
|
|
||||||
|
|
||||||
// Arrays of uuids
|
// Arrays of uuids
|
||||||
var enabledExtensions;
|
var enabledExtensions;
|
||||||
@ -69,18 +56,16 @@ const disconnect = Lang.bind(_signals, _signals.disconnect);
|
|||||||
|
|
||||||
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
|
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
|
||||||
|
|
||||||
function installExtensionFromUUID(uuid, version_tag) {
|
function installExtensionFromUUID(uuid) {
|
||||||
let params = { uuid: uuid,
|
let params = { uuid: uuid,
|
||||||
version_tag: version_tag,
|
shell_version: Config.PACKAGE_VERSION };
|
||||||
shell_version: Config.PACKAGE_VERSION,
|
|
||||||
api_version: API_VERSION.toString() };
|
|
||||||
|
|
||||||
let message = Soup.form_request_new_from_hash('GET', REPOSITORY_URL_INFO, params);
|
let message = Soup.form_request_new_from_hash('GET', REPOSITORY_URL_INFO, params);
|
||||||
|
|
||||||
_httpSession.queue_message(message,
|
_httpSession.queue_message(message,
|
||||||
function(session, message) {
|
function(session, message) {
|
||||||
let info = JSON.parse(message.response_body.data);
|
let info = JSON.parse(message.response_body.data);
|
||||||
let dialog = new InstallExtensionDialog(uuid, version_tag, info.name);
|
let dialog = new InstallExtensionDialog(uuid, info);
|
||||||
dialog.open(global.get_current_time());
|
dialog.open(global.get_current_time());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -115,21 +100,13 @@ function gotExtensionZipFile(session, message, uuid) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: use a GFile mkstemp-type method once one exists
|
let [file, stream] = Gio.File.new_tmp('XXXXXX.shell-extension.zip');
|
||||||
let fd, tmpzip;
|
|
||||||
try {
|
|
||||||
[fd, tmpzip] = GLib.file_open_tmp('XXXXXX.shell-extension.zip');
|
|
||||||
} catch (e) {
|
|
||||||
logExtensionError(uuid, 'tempfile: ' + e.toString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let stream = new Gio.UnixOutputStream({ fd: fd });
|
|
||||||
let dir = ExtensionUtils.userExtensionsDir.get_child(uuid);
|
let dir = ExtensionUtils.userExtensionsDir.get_child(uuid);
|
||||||
Shell.write_soup_message_to_stream(stream, message);
|
let contents = message.response_body.flatten().as_bytes();
|
||||||
|
stream.output_stream.write_bytes(contents, null);
|
||||||
stream.close(null);
|
stream.close(null);
|
||||||
let [success, pid] = GLib.spawn_async(null,
|
let [success, pid] = GLib.spawn_async(null,
|
||||||
['unzip', '-uod', dir.get_path(), '--', tmpzip],
|
['unzip', '-uod', dir.get_path(), '--', file.get_path()],
|
||||||
null,
|
null,
|
||||||
GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
|
GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
|
||||||
null);
|
null);
|
||||||
@ -237,7 +214,7 @@ function logExtensionError(uuid, message, state) {
|
|||||||
extension.errors = [];
|
extension.errors = [];
|
||||||
|
|
||||||
extension.errors.push(message);
|
extension.errors.push(message);
|
||||||
global.logError('Extension "%s" had error: %s'.format(uuid, message));
|
log('Extension "%s" had error: %s'.format(uuid, message));
|
||||||
state = state || ExtensionState.ERROR;
|
state = state || ExtensionState.ERROR;
|
||||||
_signals.emit('extension-state-changed', { uuid: uuid,
|
_signals.emit('extension-state-changed', { uuid: uuid,
|
||||||
error: message,
|
error: message,
|
||||||
@ -249,7 +226,7 @@ function loadExtension(dir, type, enabled) {
|
|||||||
let extension;
|
let extension;
|
||||||
|
|
||||||
if (ExtensionUtils.extensions[uuid] != undefined) {
|
if (ExtensionUtils.extensions[uuid] != undefined) {
|
||||||
global.logError('Extension "%s" is already loaded'.format(uuid));
|
log('Extension "%s" is already loaded'.format(uuid));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,7 +255,6 @@ function loadExtension(dir, type, enabled) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_signals.emit('extension-state-changed', extension);
|
_signals.emit('extension-state-changed', extension);
|
||||||
global.log('Loaded extension ' + uuid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function initExtension(uuid) {
|
function initExtension(uuid) {
|
||||||
@ -390,12 +366,11 @@ const InstallExtensionDialog = new Lang.Class({
|
|||||||
Name: 'InstallExtensionDialog',
|
Name: 'InstallExtensionDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
_init: function(uuid, version_tag, name) {
|
_init: function(uuid, info) {
|
||||||
this.parent({ styleClass: 'extension-dialog' });
|
this.parent({ styleClass: 'extension-dialog' });
|
||||||
|
|
||||||
this._uuid = uuid;
|
this._uuid = uuid;
|
||||||
this._version_tag = version_tag;
|
this._info = info;
|
||||||
this._name = name;
|
|
||||||
|
|
||||||
this.setButtons([{ label: _("Cancel"),
|
this.setButtons([{ label: _("Cancel"),
|
||||||
action: Lang.bind(this, this._onCancelButtonPressed),
|
action: Lang.bind(this, this._onCancelButtonPressed),
|
||||||
@ -405,13 +380,17 @@ const InstallExtensionDialog = new Lang.Class({
|
|||||||
action: Lang.bind(this, this._onInstallButtonPressed)
|
action: Lang.bind(this, this._onInstallButtonPressed)
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
let message = _("Download and install '%s' from extensions.gnome.org?").format(name);
|
let message = _("Download and install '%s' from extensions.gnome.org?").format(info.name);
|
||||||
|
|
||||||
this._descriptionLabel = new St.Label({ text: message });
|
let box = new St.BoxLayout();
|
||||||
|
this.contentLayout.add(box);
|
||||||
|
|
||||||
this.contentLayout.add(this._descriptionLabel,
|
let gicon = new Gio.FileIcon({ file: Gio.File.new_for_uri(REPOSITORY_URL_BASE + info.icon) })
|
||||||
{ y_fill: true,
|
let icon = new St.Icon({ gicon: gicon });
|
||||||
y_align: St.Align.START });
|
box.add(icon);
|
||||||
|
|
||||||
|
let label = new St.Label({ text: message });
|
||||||
|
box.add(label);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onCancelButtonPressed: function(button, event) {
|
_onCancelButtonPressed: function(button, event) {
|
||||||
@ -435,9 +414,7 @@ const InstallExtensionDialog = new Lang.Class({
|
|||||||
|
|
||||||
_signals.emit('extension-state-changed', state);
|
_signals.emit('extension-state-changed', state);
|
||||||
|
|
||||||
let params = { version_tag: this._version_tag,
|
let params = { shell_version: Config.PACKAGE_VERSION };
|
||||||
shell_version: Config.PACKAGE_VERSION,
|
|
||||||
api_version: API_VERSION.toString() };
|
|
||||||
|
|
||||||
let url = REPOSITORY_URL_DOWNLOAD.format(this._uuid);
|
let url = REPOSITORY_URL_DOWNLOAD.format(this._uuid);
|
||||||
let message = Soup.form_request_new_from_hash('GET', url, params);
|
let message = Soup.form_request_new_from_hash('GET', url, params);
|
||||||
|
@ -282,6 +282,10 @@ const IconGrid = new Lang.Class({
|
|||||||
return this._computeLayout(rowWidth)[0];
|
return this._computeLayout(rowWidth)[0];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getRowLimit: function() {
|
||||||
|
return this._rowLimit;
|
||||||
|
},
|
||||||
|
|
||||||
_computeLayout: function (forWidth) {
|
_computeLayout: function (forWidth) {
|
||||||
let nColumns = 0;
|
let nColumns = 0;
|
||||||
let usedWidth = 0;
|
let usedWidth = 0;
|
||||||
|
108
js/ui/main.js
108
js/ui/main.js
@ -30,6 +30,7 @@ const NetworkAgent = imports.ui.networkAgent;
|
|||||||
const NotificationDaemon = imports.ui.notificationDaemon;
|
const NotificationDaemon = imports.ui.notificationDaemon;
|
||||||
const WindowAttentionHandler = imports.ui.windowAttentionHandler;
|
const WindowAttentionHandler = imports.ui.windowAttentionHandler;
|
||||||
const Scripting = imports.ui.scripting;
|
const Scripting = imports.ui.scripting;
|
||||||
|
const SessionMode = imports.ui.sessionMode;
|
||||||
const ShellDBus = imports.ui.shellDBus;
|
const ShellDBus = imports.ui.shellDBus;
|
||||||
const TelepathyClient = imports.ui.telepathyClient;
|
const TelepathyClient = imports.ui.telepathyClient;
|
||||||
const WindowManager = imports.ui.windowManager;
|
const WindowManager = imports.ui.windowManager;
|
||||||
@ -56,6 +57,7 @@ let windowAttentionHandler = null;
|
|||||||
let telepathyClient = null;
|
let telepathyClient = null;
|
||||||
let ctrlAltTabManager = null;
|
let ctrlAltTabManager = null;
|
||||||
let recorder = null;
|
let recorder = null;
|
||||||
|
let sessionMode = null;
|
||||||
let shellDBusService = null;
|
let shellDBusService = null;
|
||||||
let modalCount = 0;
|
let modalCount = 0;
|
||||||
let modalActorFocusStack = [];
|
let modalActorFocusStack = [];
|
||||||
@ -69,12 +71,11 @@ let networkAgent = null;
|
|||||||
let _startDate;
|
let _startDate;
|
||||||
let _defaultCssStylesheet = null;
|
let _defaultCssStylesheet = null;
|
||||||
let _cssStylesheet = null;
|
let _cssStylesheet = null;
|
||||||
let _gdmCssStylesheet = null;
|
|
||||||
let _overridesSettings = null;
|
let _overridesSettings = null;
|
||||||
|
|
||||||
let background = null;
|
let background = null;
|
||||||
|
|
||||||
function _createUserSession() {
|
function createUserSession() {
|
||||||
// Load the calendar server. Note that we are careful about
|
// Load the calendar server. Note that we are careful about
|
||||||
// not loading any events until the user presses the clock
|
// not loading any events until the user presses the clock
|
||||||
global.launch_calendar_server();
|
global.launch_calendar_server();
|
||||||
@ -83,9 +84,11 @@ function _createUserSession() {
|
|||||||
automountManager = new AutomountManager.AutomountManager();
|
automountManager = new AutomountManager.AutomountManager();
|
||||||
autorunManager = new AutorunManager.AutorunManager();
|
autorunManager = new AutorunManager.AutorunManager();
|
||||||
networkAgent = new NetworkAgent.NetworkAgent();
|
networkAgent = new NetworkAgent.NetworkAgent();
|
||||||
|
|
||||||
|
_initRecorder();
|
||||||
}
|
}
|
||||||
|
|
||||||
function _createGDMSession() {
|
function createGDMSession() {
|
||||||
// We do this this here instead of at the top to prevent GDM
|
// We do this this here instead of at the top to prevent GDM
|
||||||
// related code from getting loaded in normal user sessions
|
// related code from getting loaded in normal user sessions
|
||||||
const LoginDialog = imports.gdm.loginDialog;
|
const LoginDialog = imports.gdm.loginDialog;
|
||||||
@ -96,8 +99,13 @@ function _createGDMSession() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createInitialSetupSession() {
|
||||||
|
networkAgent = new NetworkAgent.NetworkAgent();
|
||||||
|
}
|
||||||
|
|
||||||
function _initRecorder() {
|
function _initRecorder() {
|
||||||
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
|
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
|
||||||
|
let desktopLockdownSettings = new Gio.Settings({ schema: 'org.gnome.desktop.lockdown' });
|
||||||
let bindingSettings = new Gio.Settings({ schema: 'org.gnome.shell.keybindings' });
|
let bindingSettings = new Gio.Settings({ schema: 'org.gnome.shell.keybindings' });
|
||||||
|
|
||||||
global.display.add_keybinding('toggle-recording',
|
global.display.add_keybinding('toggle-recording',
|
||||||
@ -110,7 +118,7 @@ function _initRecorder() {
|
|||||||
if (recorder.is_recording()) {
|
if (recorder.is_recording()) {
|
||||||
recorder.close();
|
recorder.close();
|
||||||
Meta.enable_unredirect_for_screen(global.screen);
|
Meta.enable_unredirect_for_screen(global.screen);
|
||||||
} else {
|
} else if (!desktopLockdownSettings.get_boolean('disable-save-to-disk')) {
|
||||||
// read the parameters from GSettings always in case they have changed
|
// read the parameters from GSettings always in case they have changed
|
||||||
recorder.set_framerate(recorderSettings.get_int('framerate'));
|
recorder.set_framerate(recorderSettings.get_int('framerate'));
|
||||||
/* Translators: this is a filename used for screencast recording */
|
/* Translators: this is a filename used for screencast recording */
|
||||||
@ -129,26 +137,6 @@ function _initRecorder() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function _initUserSession() {
|
|
||||||
_initRecorder();
|
|
||||||
|
|
||||||
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT, false, -1, 1);
|
|
||||||
|
|
||||||
ExtensionSystem.init();
|
|
||||||
ExtensionSystem.loadExtensions();
|
|
||||||
|
|
||||||
Meta.keybindings_set_custom_handler('panel-run-dialog', function() {
|
|
||||||
getRunDialog().open();
|
|
||||||
});
|
|
||||||
|
|
||||||
Meta.keybindings_set_custom_handler('panel-main-menu', function () {
|
|
||||||
overview.toggle();
|
|
||||||
});
|
|
||||||
|
|
||||||
global.display.connect('overlay-key', Lang.bind(overview, overview.toggle));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
// These are here so we don't break compatibility.
|
// These are here so we don't break compatibility.
|
||||||
global.logError = window.log;
|
global.logError = window.log;
|
||||||
@ -159,6 +147,7 @@ function start() {
|
|||||||
|
|
||||||
Gio.DesktopAppInfo.set_desktop_env('GNOME');
|
Gio.DesktopAppInfo.set_desktop_env('GNOME');
|
||||||
|
|
||||||
|
sessionMode = new SessionMode.SessionMode();
|
||||||
shellDBusService = new ShellDBus.GnomeShell();
|
shellDBusService = new ShellDBus.GnomeShell();
|
||||||
|
|
||||||
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
|
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
|
||||||
@ -181,7 +170,6 @@ function start() {
|
|||||||
global.stage.no_clear_hint = true;
|
global.stage.no_clear_hint = true;
|
||||||
|
|
||||||
_defaultCssStylesheet = global.datadir + '/theme/gnome-shell.css';
|
_defaultCssStylesheet = global.datadir + '/theme/gnome-shell.css';
|
||||||
_gdmCssStylesheet = global.datadir + '/theme/gdm.css';
|
|
||||||
loadTheme();
|
loadTheme();
|
||||||
|
|
||||||
// Set up stage hierarchy to group all UI actors under one container.
|
// Set up stage hierarchy to group all UI actors under one container.
|
||||||
@ -209,8 +197,7 @@ function start() {
|
|||||||
layoutManager = new Layout.LayoutManager();
|
layoutManager = new Layout.LayoutManager();
|
||||||
xdndHandler = new XdndHandler.XdndHandler();
|
xdndHandler = new XdndHandler.XdndHandler();
|
||||||
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
||||||
// This overview object is just a stub for non-user sessions
|
overview = new Overview.Overview();
|
||||||
overview = new Overview.Overview({ isDummy: global.session_type != Shell.SessionType.USER });
|
|
||||||
magnifier = new Magnifier.Magnifier();
|
magnifier = new Magnifier.Magnifier();
|
||||||
statusIconDispatcher = new StatusIconDispatcher.StatusIconDispatcher();
|
statusIconDispatcher = new StatusIconDispatcher.StatusIconDispatcher();
|
||||||
panel = new Panel.Panel();
|
panel = new Panel.Panel();
|
||||||
@ -220,10 +207,7 @@ function start() {
|
|||||||
notificationDaemon = new NotificationDaemon.NotificationDaemon();
|
notificationDaemon = new NotificationDaemon.NotificationDaemon();
|
||||||
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
|
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
|
||||||
|
|
||||||
if (global.session_type == Shell.SessionType.USER)
|
sessionMode.createSession();
|
||||||
_createUserSession();
|
|
||||||
else if (global.session_type == Shell.SessionType.GDM)
|
|
||||||
_createGDMSession();
|
|
||||||
|
|
||||||
panel.startStatusArea();
|
panel.startStatusArea();
|
||||||
|
|
||||||
@ -231,8 +215,30 @@ function start() {
|
|||||||
keyboard.init();
|
keyboard.init();
|
||||||
overview.init();
|
overview.init();
|
||||||
|
|
||||||
if (global.session_type == Shell.SessionType.USER)
|
if (sessionMode.hasWorkspaces)
|
||||||
_initUserSession();
|
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
|
||||||
|
false, -1, 1);
|
||||||
|
|
||||||
|
if (sessionMode.allowExtensions) {
|
||||||
|
ExtensionSystem.init();
|
||||||
|
ExtensionSystem.loadExtensions();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sessionMode.hasRunDialog) {
|
||||||
|
Meta.keybindings_set_custom_handler('panel-run-dialog', function() {
|
||||||
|
getRunDialog().open();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sessionMode.hasOverview) {
|
||||||
|
Meta.keybindings_set_custom_handler('panel-main-menu', function () {
|
||||||
|
overview.toggle();
|
||||||
|
});
|
||||||
|
|
||||||
|
global.display.connect('overlay-key',
|
||||||
|
Lang.bind(overview, overview.toggle));
|
||||||
|
}
|
||||||
|
|
||||||
statusIconDispatcher.start(messageTray.actor);
|
statusIconDispatcher.start(messageTray.actor);
|
||||||
|
|
||||||
// Provide the bus object for gnome-session to
|
// Provide the bus object for gnome-session to
|
||||||
@ -491,8 +497,8 @@ function loadTheme() {
|
|||||||
|
|
||||||
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
|
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
|
||||||
|
|
||||||
if (global.session_type == Shell.SessionType.GDM)
|
if (sessionMode.extraStylesheet)
|
||||||
theme.load_stylesheet(_gdmCssStylesheet);
|
theme.load_stylesheet(sessionMode.extraStylesheet);
|
||||||
|
|
||||||
if (previousTheme) {
|
if (previousTheme) {
|
||||||
let customStylesheets = previousTheme.get_custom_stylesheets();
|
let customStylesheets = previousTheme.get_custom_stylesheets();
|
||||||
@ -556,6 +562,11 @@ function _globalKeyPressHandler(actor, event) {
|
|||||||
if (event.type() != Clutter.EventType.KEY_PRESS)
|
if (event.type() != Clutter.EventType.KEY_PRESS)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!sessionMode.allowKeybindingsWhenModal) {
|
||||||
|
if (modalCount > (overview.visible ? 1 : 0))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
let keyCode = event.get_key_code();
|
let keyCode = event.get_key_code();
|
||||||
let ignoredModifiers = global.display.get_ignored_modifier_mask();
|
let ignoredModifiers = global.display.get_ignored_modifier_mask();
|
||||||
@ -564,11 +575,6 @@ function _globalKeyPressHandler(actor, event) {
|
|||||||
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
||||||
let action = global.display.get_keybinding_action(keyCode, modifierState);
|
let action = global.display.get_keybinding_action(keyCode, modifierState);
|
||||||
|
|
||||||
// Other bindings are only available to the user session when the overview is up and
|
|
||||||
// no modal dialog is present.
|
|
||||||
if (global.session_type == Shell.SessionType.USER && (!overview.visible || modalCount > 1))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// This isn't a Meta.KeyBindingAction yet
|
// This isn't a Meta.KeyBindingAction yet
|
||||||
if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
|
if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
|
||||||
overview.hide();
|
overview.hide();
|
||||||
@ -581,28 +587,39 @@ function _globalKeyPressHandler(actor, event) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// None of the other bindings are relevant outside of the user's session
|
|
||||||
if (global.session_type != Shell.SessionType.USER)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
// left/right would effectively act as synonyms for up/down if we enabled them;
|
// left/right would effectively act as synonyms for up/down if we enabled them;
|
||||||
// but that could be considered confusing; we also disable them in the main view.
|
// but that could be considered confusing; we also disable them in the main view.
|
||||||
//
|
//
|
||||||
// case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
// case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
||||||
|
// if (!sessionMode.hasWorkspaces)
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
// wm.actionMoveWorkspaceLeft();
|
// wm.actionMoveWorkspaceLeft();
|
||||||
// return true;
|
// return true;
|
||||||
// case Meta.KeyBindingAction.WORKSPACE_RIGHT:
|
// case Meta.KeyBindingAction.WORKSPACE_RIGHT:
|
||||||
|
// if (!sessionMode.hasWorkspaces)
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
// wm.actionMoveWorkspaceRight();
|
// wm.actionMoveWorkspaceRight();
|
||||||
// return true;
|
// return true;
|
||||||
case Meta.KeyBindingAction.WORKSPACE_UP:
|
case Meta.KeyBindingAction.WORKSPACE_UP:
|
||||||
|
if (!sessionMode.hasWorkspaces)
|
||||||
|
return false;
|
||||||
|
|
||||||
wm.actionMoveWorkspaceUp();
|
wm.actionMoveWorkspaceUp();
|
||||||
return true;
|
return true;
|
||||||
case Meta.KeyBindingAction.WORKSPACE_DOWN:
|
case Meta.KeyBindingAction.WORKSPACE_DOWN:
|
||||||
|
if (!sessionMode.hasWorkspaces)
|
||||||
|
return false;
|
||||||
|
|
||||||
wm.actionMoveWorkspaceDown();
|
wm.actionMoveWorkspaceDown();
|
||||||
return true;
|
return true;
|
||||||
case Meta.KeyBindingAction.PANEL_RUN_DIALOG:
|
case Meta.KeyBindingAction.PANEL_RUN_DIALOG:
|
||||||
case Meta.KeyBindingAction.COMMAND_2:
|
case Meta.KeyBindingAction.COMMAND_2:
|
||||||
|
if (!sessionMode.hasRunDialog)
|
||||||
|
return false;
|
||||||
|
|
||||||
getRunDialog().open();
|
getRunDialog().open();
|
||||||
return true;
|
return true;
|
||||||
case Meta.KeyBindingAction.PANEL_MAIN_MENU:
|
case Meta.KeyBindingAction.PANEL_MAIN_MENU:
|
||||||
@ -875,7 +892,8 @@ function initializeDeferredWork(actor, callback, props) {
|
|||||||
function queueDeferredWork(workId) {
|
function queueDeferredWork(workId) {
|
||||||
let data = _deferredWorkData[workId];
|
let data = _deferredWorkData[workId];
|
||||||
if (!data) {
|
if (!data) {
|
||||||
global.logError('invalid work id ', workId);
|
let message = 'Invalid work id %d'.format(workId);
|
||||||
|
logError(new Error(message), message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_deferredWorkQueue.indexOf(workId) < 0)
|
if (_deferredWorkQueue.indexOf(workId) < 0)
|
||||||
|
@ -221,12 +221,19 @@ const NotificationDaemon = new Lang.Class({
|
|||||||
let [appName, replacesId, icon, summary, body, actions, hints, timeout] = params;
|
let [appName, replacesId, icon, summary, body, actions, hints, timeout] = params;
|
||||||
let id;
|
let id;
|
||||||
|
|
||||||
|
for (let hint in hints) {
|
||||||
|
// unpack the variants
|
||||||
|
hints[hint] = hints[hint].deep_unpack();
|
||||||
|
}
|
||||||
|
|
||||||
|
hints = Params.parse(hints, { urgency: Urgency.NORMAL }, true);
|
||||||
|
|
||||||
// Filter out chat, presence, calls and invitation notifications from
|
// Filter out chat, presence, calls and invitation notifications from
|
||||||
// Empathy, since we handle that information from telepathyClient.js
|
// Empathy, since we handle that information from telepathyClient.js
|
||||||
if (appName == 'Empathy' && (hints['category'] == 'im.received' ||
|
if (appName == 'Empathy' && (hints['category'] == 'im.received' ||
|
||||||
hints['category'] == 'x-empathy.im.room-invitation' ||
|
hints['category'] == 'x-empathy.im.room-invitation' ||
|
||||||
hints['category'] == 'x-empathy.call.incoming' ||
|
hints['category'] == 'x-empathy.call.incoming' ||
|
||||||
hints['category'] == 'x-empathy.call.incoming"' ||
|
hints['category'] == 'x-empathy.transfer.incoming' ||
|
||||||
hints['category'] == 'x-empathy.im.subscription-request' ||
|
hints['category'] == 'x-empathy.im.subscription-request' ||
|
||||||
hints['category'] == 'presence.online' ||
|
hints['category'] == 'presence.online' ||
|
||||||
hints['category'] == 'presence.offline')) {
|
hints['category'] == 'presence.offline')) {
|
||||||
@ -249,13 +256,6 @@ const NotificationDaemon = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let hint in hints) {
|
|
||||||
// unpack the variants
|
|
||||||
hints[hint] = hints[hint].deep_unpack();
|
|
||||||
}
|
|
||||||
|
|
||||||
hints = Params.parse(hints, { urgency: Urgency.NORMAL }, true);
|
|
||||||
|
|
||||||
// Be compatible with the various hints for image data and image path
|
// Be compatible with the various hints for image data and image path
|
||||||
// 'image-data' and 'image-path' are the latest name of these hints, introduced in 1.2
|
// 'image-data' and 'image-path' are the latest name of these hints, introduced in 1.2
|
||||||
|
|
||||||
@ -483,7 +483,7 @@ const NotificationDaemon = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onTrayIconAdded: function(o, icon) {
|
_onTrayIconAdded: function(o, icon) {
|
||||||
let source = this._getSource(icon.title || icon.wm_class || _("Unknown"), icon.pid, null, null, icon);
|
let source = this._getSource(icon.title || icon.wm_class || C_("program", "Unknown"), icon.pid, null, null, icon);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onTrayIconRemoved: function(o, icon) {
|
_onTrayIconRemoved: function(o, icon) {
|
||||||
|
@ -99,10 +99,8 @@ const ShellInfo = new Lang.Class({
|
|||||||
const Overview = new Lang.Class({
|
const Overview = new Lang.Class({
|
||||||
Name: 'Overview',
|
Name: 'Overview',
|
||||||
|
|
||||||
_init : function(params) {
|
_init : function() {
|
||||||
params = Params.parse(params, { isDummy: false });
|
this.isDummy = !Main.sessionMode.hasOverview;
|
||||||
|
|
||||||
this.isDummy = params.isDummy;
|
|
||||||
|
|
||||||
// We only have an overview in user sessions, so
|
// We only have an overview in user sessions, so
|
||||||
// create a dummy overview in other cases
|
// create a dummy overview in other cases
|
||||||
|
@ -14,7 +14,6 @@ const St = imports.gi.St;
|
|||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const Atk = imports.gi.Atk;
|
const Atk = imports.gi.Atk;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
|
||||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
const Layout = imports.ui.layout;
|
const Layout = imports.ui.layout;
|
||||||
@ -32,33 +31,6 @@ const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
|||||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
||||||
const SPINNER_ANIMATION_TIME = 0.2;
|
const SPINNER_ANIMATION_TIME = 0.2;
|
||||||
|
|
||||||
const STANDARD_STATUS_AREA_ORDER = ['a11y', 'keyboard', 'volume', 'bluetooth', 'network', 'battery', 'userMenu'];
|
|
||||||
const STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION = {
|
|
||||||
'a11y': imports.ui.status.accessibility.ATIndicator,
|
|
||||||
'volume': imports.ui.status.volume.Indicator,
|
|
||||||
'battery': imports.ui.status.power.Indicator,
|
|
||||||
'keyboard': imports.ui.status.keyboard.XKBIndicator,
|
|
||||||
'userMenu': imports.ui.userMenu.UserMenuButton
|
|
||||||
};
|
|
||||||
|
|
||||||
if (Config.HAVE_BLUETOOTH)
|
|
||||||
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
|
|
||||||
|
|
||||||
try {
|
|
||||||
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['network'] = imports.ui.status.network.NMApplet;
|
|
||||||
} catch(e) {
|
|
||||||
log('NMApplet is not supported. It is possible that your NetworkManager version is too old');
|
|
||||||
}
|
|
||||||
|
|
||||||
const GDM_STATUS_AREA_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'battery', 'powerMenu'];
|
|
||||||
const GDM_STATUS_AREA_SHELL_IMPLEMENTATION = {
|
|
||||||
'a11y': imports.ui.status.accessibility.ATIndicator,
|
|
||||||
'volume': imports.ui.status.volume.Indicator,
|
|
||||||
'battery': imports.ui.status.power.Indicator,
|
|
||||||
'keyboard': imports.ui.status.keyboard.XKBIndicator,
|
|
||||||
'powerMenu': imports.gdm.powerMenu.PowerMenuButton
|
|
||||||
};
|
|
||||||
|
|
||||||
// To make sure the panel corners blend nicely with the panel,
|
// To make sure the panel corners blend nicely with the panel,
|
||||||
// we draw background and borders the same way, e.g. drawing
|
// we draw background and borders the same way, e.g. drawing
|
||||||
// them as filled shapes from the outside inwards instead of
|
// them as filled shapes from the outside inwards instead of
|
||||||
@ -962,7 +934,7 @@ const Panel = new Lang.Class({
|
|||||||
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||||
|
|
||||||
/* Button on the left side of the panel. */
|
/* Button on the left side of the panel. */
|
||||||
if (global.session_type == Shell.SessionType.USER) {
|
if (Main.sessionMode.hasOverview) {
|
||||||
this._activitiesButton = new ActivitiesButton();
|
this._activitiesButton = new ActivitiesButton();
|
||||||
this._activities = this._activitiesButton.actor;
|
this._activities = this._activitiesButton.actor;
|
||||||
this._leftBox.add(this._activities);
|
this._leftBox.add(this._activities);
|
||||||
@ -970,28 +942,19 @@ const Panel = new Lang.Class({
|
|||||||
// The activities button has a pretend menu, so as to integrate
|
// The activities button has a pretend menu, so as to integrate
|
||||||
// more cleanly with the rest of the panel
|
// more cleanly with the rest of the panel
|
||||||
this._menus.addMenu(this._activitiesButton.menu);
|
this._menus.addMenu(this._activitiesButton.menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Main.sessionMode.hasAppMenu) {
|
||||||
this._appMenu = new AppMenuButton(this._menus);
|
this._appMenu = new AppMenuButton(this._menus);
|
||||||
this._leftBox.add(this._appMenu.actor);
|
this._leftBox.add(this._appMenu.actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* center */
|
/* center */
|
||||||
if (global.session_type == Shell.SessionType.USER)
|
this._dateMenu = new DateMenu.DateMenuButton();
|
||||||
this._dateMenu = new DateMenu.DateMenuButton({ showEvents: true });
|
|
||||||
else
|
|
||||||
this._dateMenu = new DateMenu.DateMenuButton({ showEvents: false });
|
|
||||||
this._centerBox.add(this._dateMenu.actor, { y_fill: true });
|
this._centerBox.add(this._dateMenu.actor, { y_fill: true });
|
||||||
this._menus.addMenu(this._dateMenu.menu);
|
this._menus.addMenu(this._dateMenu.menu);
|
||||||
|
|
||||||
/* right */
|
/* right */
|
||||||
if (global.session_type == Shell.SessionType.GDM) {
|
|
||||||
this._status_area_order = GDM_STATUS_AREA_ORDER;
|
|
||||||
this._status_area_shell_implementation = GDM_STATUS_AREA_SHELL_IMPLEMENTATION;
|
|
||||||
} else {
|
|
||||||
this._status_area_order = STANDARD_STATUS_AREA_ORDER;
|
|
||||||
this._status_area_shell_implementation = STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
Main.statusIconDispatcher.connect('status-icon-added', Lang.bind(this, this._onTrayIconAdded));
|
Main.statusIconDispatcher.connect('status-icon-added', Lang.bind(this, this._onTrayIconAdded));
|
||||||
Main.statusIconDispatcher.connect('status-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
|
Main.statusIconDispatcher.connect('status-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
|
||||||
|
|
||||||
@ -1123,9 +1086,9 @@ const Panel = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
startStatusArea: function() {
|
startStatusArea: function() {
|
||||||
for (let i = 0; i < this._status_area_order.length; i++) {
|
for (let i = 0; i < Main.sessionMode.statusArea.order.length; i++) {
|
||||||
let role = this._status_area_order[i];
|
let role = Main.sessionMode.statusArea.order[i];
|
||||||
let constructor = this._status_area_shell_implementation[role];
|
let constructor = Main.sessionMode.statusArea.implementation[role];
|
||||||
if (!constructor) {
|
if (!constructor) {
|
||||||
// This icon is not implemented (this is a bug)
|
// This icon is not implemented (this is a bug)
|
||||||
continue;
|
continue;
|
||||||
@ -1175,18 +1138,21 @@ const Panel = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onTrayIconAdded: function(o, icon, role) {
|
_onTrayIconAdded: function(o, icon, role) {
|
||||||
if (this._status_area_shell_implementation[role]) {
|
if (Main.sessionMode.statusArea.implementation[role]) {
|
||||||
// This icon is legacy, and replaced by a Shell version
|
// This icon is legacy, and replaced by a Shell version
|
||||||
// Hide it
|
// Hide it
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Main.sessionMode.statusArea.order.indexOf(role) == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
icon.height = PANEL_ICON_SIZE;
|
icon.height = PANEL_ICON_SIZE;
|
||||||
let buttonBox = new PanelMenu.ButtonBox();
|
let buttonBox = new PanelMenu.ButtonBox();
|
||||||
let box = buttonBox.actor;
|
let box = buttonBox.actor;
|
||||||
box.add_actor(icon);
|
box.add_actor(icon);
|
||||||
|
|
||||||
this._insertStatusItem(box, this._status_area_order.indexOf(role));
|
this._insertStatusItem(box, Main.sessionMode.statusArea.order.indexOf(role));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onTrayIconRemoved: function(o, icon) {
|
_onTrayIconRemoved: function(o, icon) {
|
||||||
|
@ -167,6 +167,7 @@ const AuthenticationDialog = new Lang.Class({
|
|||||||
*/
|
*/
|
||||||
this._nullMessageLabel = new St.Label({ style_class: 'prompt-dialog-null-label',
|
this._nullMessageLabel = new St.Label({ style_class: 'prompt-dialog-null-label',
|
||||||
text: 'abc'});
|
text: 'abc'});
|
||||||
|
this._nullMessageLabel.add_style_class_name('hidden');
|
||||||
this._nullMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
this._nullMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
this._nullMessageLabel.clutter_text.line_wrap = true;
|
this._nullMessageLabel.clutter_text.line_wrap = true;
|
||||||
messageBox.add(this._nullMessageLabel);
|
messageBox.add(this._nullMessageLabel);
|
||||||
|
@ -888,8 +888,7 @@ const PopupMenuBase = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
addSettingsAction: function(title, desktopFile) {
|
addSettingsAction: function(title, desktopFile) {
|
||||||
// Don't allow user settings to get edited unless we're in a user session
|
if (!Main.sessionMode.allowSettings)
|
||||||
if (global.session_type != Shell.SessionType.USER)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
let menuItem = this.addAction(title, function() {
|
let menuItem = this.addAction(title, function() {
|
||||||
@ -1921,7 +1920,7 @@ const RemoteMenu = new Lang.Class({
|
|||||||
while (k0 < currentItems.length && currentItems[k0]._ignored)
|
while (k0 < currentItems.length && currentItems[k0]._ignored)
|
||||||
k0++;
|
k0++;
|
||||||
// find the right menu item matching the model item
|
// find the right menu item matching the model item
|
||||||
for (j0 = 0; j0 < position; j0++, k0++) {
|
for (j0 = 0; k0 < currentItems.length && j0 < position; j0++, k0++) {
|
||||||
if (currentItems[k0]._ignored)
|
if (currentItems[k0]._ignored)
|
||||||
k0++;
|
k0++;
|
||||||
}
|
}
|
||||||
@ -1931,7 +1930,7 @@ const RemoteMenu = new Lang.Class({
|
|||||||
for (k = k0; k < currentItems.length; k++)
|
for (k = k0; k < currentItems.length; k++)
|
||||||
currentItems[k].destroy();
|
currentItems[k].destroy();
|
||||||
} else {
|
} else {
|
||||||
for (j = j0, k = k0; j < j0 + removed; j++, k++) {
|
for (j = j0, k = k0; k < currentItems.length && j < j0 + removed; j++, k++) {
|
||||||
currentItems[k].destroy();
|
currentItems[k].destroy();
|
||||||
|
|
||||||
if (currentItems[k]._ignored)
|
if (currentItems[k]._ignored)
|
||||||
@ -1962,8 +1961,9 @@ const RemoteMenu = new Lang.Class({
|
|||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
} else if (changeSignal) {
|
} else if (changeSignal) {
|
||||||
let signalId = this.actionGroup.connect(changeSignal, Lang.bind(this, function() {
|
let signalId = this.actionGroup.connect(changeSignal, Lang.bind(this, function(actionGroup, actionName) {
|
||||||
this.actionGroup.disconnect(signalId);
|
actionGroup.disconnect(signalId);
|
||||||
|
if (this._actions[actionName]) return;
|
||||||
|
|
||||||
// force a full update
|
// force a full update
|
||||||
this._modelChanged(model, 0, -1, model.get_n_items(), target);
|
this._modelChanged(model, 0, -1, model.get_n_items(), target);
|
||||||
|
@ -354,7 +354,7 @@ const SearchSystem = new Lang.Class({
|
|||||||
results.push([provider, []]);
|
results.push([provider, []]);
|
||||||
provider.getSubsearchResultSet(previousResults, terms);
|
provider.getSubsearchResultSet(previousResults, terms);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
global.log ('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
|
log('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -364,7 +364,7 @@ const SearchSystem = new Lang.Class({
|
|||||||
results.push([provider, []]);
|
results.push([provider, []]);
|
||||||
provider.getInitialResultSet(terms);
|
provider.getInitialResultSet(terms);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
global.log ('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
|
log('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ const Lang = imports.lang;
|
|||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
const Atk = imports.gi.Atk;
|
||||||
|
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
const IconGrid = imports.ui.iconGrid;
|
const IconGrid = imports.ui.iconGrid;
|
||||||
@ -33,12 +34,13 @@ const SearchResult = new Lang.Class({
|
|||||||
content = new St.Bin({ style_class: 'search-result-content',
|
content = new St.Bin({ style_class: 'search-result-content',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
can_focus: true,
|
can_focus: true,
|
||||||
track_hover: true });
|
track_hover: true,
|
||||||
|
accessible_role: Atk.Role.PUSH_BUTTON });
|
||||||
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
|
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
|
||||||
{ createIcon: this.metaInfo['createIcon'] });
|
{ createIcon: this.metaInfo['createIcon'] });
|
||||||
content.set_child(icon.actor);
|
content.set_child(icon.actor);
|
||||||
this._dragActorSource = icon.icon;
|
this._dragActorSource = icon.icon;
|
||||||
this.actor.label_actor = icon.label;
|
content.label_actor = icon.label;
|
||||||
} else {
|
} else {
|
||||||
if (content._delegate && content._delegate.getDragActorSource)
|
if (content._delegate && content._delegate.getDragActorSource)
|
||||||
this._dragActorSource = content._delegate.getDragActorSource();
|
this._dragActorSource = content._delegate.getDragActorSource();
|
||||||
@ -129,7 +131,7 @@ const GridSearchResults = new Lang.Class({
|
|||||||
|
|
||||||
getResultsForDisplay: function() {
|
getResultsForDisplay: function() {
|
||||||
let alreadyVisible = this._pendingClear ? 0 : this._grid.visibleItemsCount();
|
let alreadyVisible = this._pendingClear ? 0 : this._grid.visibleItemsCount();
|
||||||
let canDisplay = this._grid.childrenInRow(this._width) * MAX_SEARCH_RESULTS_ROWS
|
let canDisplay = this._grid.childrenInRow(this._width) * this._grid.getRowLimit()
|
||||||
- alreadyVisible;
|
- alreadyVisible;
|
||||||
|
|
||||||
let numResults = Math.min(this._notDisplayedResult.length, canDisplay);
|
let numResults = Math.min(this._notDisplayedResult.length, canDisplay);
|
||||||
|
124
js/ui/sessionMode.js
Normal file
124
js/ui/sessionMode.js
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Lang = imports.lang;
|
||||||
|
|
||||||
|
const Config = imports.misc.config;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
|
|
||||||
|
const STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION = {
|
||||||
|
'a11y': imports.ui.status.accessibility.ATIndicator,
|
||||||
|
'volume': imports.ui.status.volume.Indicator,
|
||||||
|
'battery': imports.ui.status.power.Indicator,
|
||||||
|
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
||||||
|
'userMenu': imports.ui.userMenu.UserMenuButton
|
||||||
|
};
|
||||||
|
|
||||||
|
if (Config.HAVE_BLUETOOTH)
|
||||||
|
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['bluetooth'] =
|
||||||
|
imports.ui.status.bluetooth.Indicator;
|
||||||
|
|
||||||
|
try {
|
||||||
|
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['network'] =
|
||||||
|
imports.ui.status.network.NMApplet;
|
||||||
|
} catch(e) {
|
||||||
|
log('NMApplet is not supported. It is possible that your NetworkManager version is too old');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const DEFAULT_MODE = 'user';
|
||||||
|
|
||||||
|
const _modes = {
|
||||||
|
'gdm': { hasOverview: false,
|
||||||
|
hasAppMenu: false,
|
||||||
|
showCalendarEvents: false,
|
||||||
|
allowSettings: false,
|
||||||
|
allowExtensions: false,
|
||||||
|
allowKeybindingsWhenModal: true,
|
||||||
|
hasRunDialog: false,
|
||||||
|
hasWorkspaces: false,
|
||||||
|
createSession: Main.createGDMSession,
|
||||||
|
extraStylesheet: global.datadir + '/theme/gdm.css',
|
||||||
|
statusArea: {
|
||||||
|
order: [
|
||||||
|
'a11y', 'display', 'keyboard',
|
||||||
|
'volume', 'battery', 'powerMenu'
|
||||||
|
],
|
||||||
|
implementation: {
|
||||||
|
'a11y': imports.ui.status.accessibility.ATIndicator,
|
||||||
|
'volume': imports.ui.status.volume.Indicator,
|
||||||
|
'battery': imports.ui.status.power.Indicator,
|
||||||
|
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
||||||
|
'powerMenu': imports.gdm.powerMenu.PowerMenuButton
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'initial-setup': { hasOverview: false,
|
||||||
|
hasAppMenu: false,
|
||||||
|
showCalendarEvents: false,
|
||||||
|
allowSettings: false,
|
||||||
|
allowExtensions: false,
|
||||||
|
allowKeybindingsWhenModal: false,
|
||||||
|
hasRunDialog: false,
|
||||||
|
hasWorkspaces: false,
|
||||||
|
createSession: Main.createInitialSetupSession,
|
||||||
|
extraStylesheet: null,
|
||||||
|
statusArea: {
|
||||||
|
order: [
|
||||||
|
'a11y', 'keyboard', 'volume'
|
||||||
|
],
|
||||||
|
implementation: {
|
||||||
|
'a11y': imports.ui.status.accessibility.ATIndicator,
|
||||||
|
'keyboard': imports.ui.status.keyboard.XKBIndicator,
|
||||||
|
'volume': imports.ui.status.volume.Indicator
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'user': { hasOverview: true,
|
||||||
|
hasAppMenu: true,
|
||||||
|
showCalendarEvents: true,
|
||||||
|
allowSettings: true,
|
||||||
|
allowExtensions: true,
|
||||||
|
allowKeybindingsWhenModal: false,
|
||||||
|
hasRunDialog: true,
|
||||||
|
hasWorkspaces: true,
|
||||||
|
createSession: Main.createUserSession,
|
||||||
|
extraStylesheet: null,
|
||||||
|
statusArea: {
|
||||||
|
order: [
|
||||||
|
'input-method', 'a11y', 'keyboard', 'volume', 'bluetooth',
|
||||||
|
'network', 'battery', 'userMenu'
|
||||||
|
],
|
||||||
|
implementation: STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function listModes() {
|
||||||
|
let modes = Object.getOwnPropertyNames(_modes);
|
||||||
|
for (let i = 0; i < modes.length; i++)
|
||||||
|
print(modes[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const SessionMode = new Lang.Class({
|
||||||
|
Name: 'SessionMode',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
let params = _modes[global.session_mode];
|
||||||
|
|
||||||
|
params = Params.parse(params, _modes[DEFAULT_MODE]);
|
||||||
|
|
||||||
|
this._createSession = params.createSession;
|
||||||
|
delete params.createSession;
|
||||||
|
|
||||||
|
Lang.copyProperties(params, this);
|
||||||
|
},
|
||||||
|
|
||||||
|
createSession: function() {
|
||||||
|
if (this._createSession)
|
||||||
|
this._createSession();
|
||||||
|
}
|
||||||
|
});
|
@ -56,15 +56,8 @@ const GnomeShellIface = <interface name="org.gnome.Shell">
|
|||||||
<arg type="i" direction="in" name="width"/>
|
<arg type="i" direction="in" name="width"/>
|
||||||
<arg type="i" direction="in" name="height"/>
|
<arg type="i" direction="in" name="height"/>
|
||||||
</method>
|
</method>
|
||||||
<method name="EnableExtension">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
</method>
|
|
||||||
<method name="DisableExtension">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
</method>
|
|
||||||
<method name="InstallRemoteExtension">
|
<method name="InstallRemoteExtension">
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
<arg type="s" direction="in" name="uuid"/>
|
||||||
<arg type="s" direction="in" name="version"/>
|
|
||||||
</method>
|
</method>
|
||||||
<method name="UninstallExtension">
|
<method name="UninstallExtension">
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
<arg type="s" direction="in" name="uuid"/>
|
||||||
@ -260,22 +253,8 @@ const GnomeShell = new Lang.Class({
|
|||||||
return extension.errors;
|
return extension.errors;
|
||||||
},
|
},
|
||||||
|
|
||||||
EnableExtension: function(uuid) {
|
InstallRemoteExtension: function(uuid) {
|
||||||
let enabledExtensions = global.settings.get_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY);
|
ExtensionSystem.installExtensionFromUUID(uuid);
|
||||||
if (enabledExtensions.indexOf(uuid) == -1)
|
|
||||||
enabledExtensions.push(uuid);
|
|
||||||
global.settings.set_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY, enabledExtensions);
|
|
||||||
},
|
|
||||||
|
|
||||||
DisableExtension: function(uuid) {
|
|
||||||
let enabledExtensions = global.settings.get_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY);
|
|
||||||
while (enabledExtensions.indexOf(uuid) != -1)
|
|
||||||
enabledExtensions.splice(enabledExtensions.indexOf(uuid), 1);
|
|
||||||
global.settings.set_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY, enabledExtensions);
|
|
||||||
},
|
|
||||||
|
|
||||||
InstallRemoteExtension: function(uuid, version_tag) {
|
|
||||||
ExtensionSystem.installExtensionFromUUID(uuid, version_tag);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
UninstallExtension: function(uuid) {
|
UninstallExtension: function(uuid) {
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const GdkPixbuf = imports.gi.GdkPixbuf;
|
const GdkPixbuf = imports.gi.GdkPixbuf;
|
||||||
const Gkbd = imports.gi.Gkbd;
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
|
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
@ -14,30 +14,28 @@ const PopupMenu = imports.ui.popupMenu;
|
|||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
|
const DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
|
||||||
|
const KEY_CURRENT_INPUT_SOURCE = 'current';
|
||||||
|
const KEY_INPUT_SOURCES = 'sources';
|
||||||
|
|
||||||
|
const INPUT_SOURCE_TYPE_XKB = 'xkb';
|
||||||
|
|
||||||
const LayoutMenuItem = new Lang.Class({
|
const LayoutMenuItem = new Lang.Class({
|
||||||
Name: 'LayoutMenuItem',
|
Name: 'LayoutMenuItem',
|
||||||
Extends: PopupMenu.PopupBaseMenuItem,
|
Extends: PopupMenu.PopupBaseMenuItem,
|
||||||
|
|
||||||
_init: function(config, id, indicator, long_name) {
|
_init: function(displayName, shortName) {
|
||||||
this.parent();
|
this.parent();
|
||||||
|
|
||||||
this._config = config;
|
this.label = new St.Label({ text: displayName });
|
||||||
this._id = id;
|
this.indicator = new St.Label({ text: shortName });
|
||||||
this.label = new St.Label({ text: long_name });
|
|
||||||
this.indicator = indicator;
|
|
||||||
this.addActor(this.label);
|
this.addActor(this.label);
|
||||||
this.addActor(this.indicator);
|
this.addActor(this.indicator);
|
||||||
},
|
|
||||||
|
|
||||||
activate: function(event) {
|
|
||||||
this.parent(event);
|
|
||||||
|
|
||||||
this._config.lock_group(this._id);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const XKBIndicator = new Lang.Class({
|
const InputSourceIndicator = new Lang.Class({
|
||||||
Name: 'XKBIndicator',
|
Name: 'InputSourceIndicator',
|
||||||
Extends: PanelMenu.Button,
|
Extends: PanelMenu.Button,
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -50,122 +48,144 @@ const XKBIndicator = new Lang.Class({
|
|||||||
this.actor.add_actor(this._container);
|
this.actor.add_actor(this._container);
|
||||||
this.actor.add_style_class_name('panel-status-button');
|
this.actor.add_style_class_name('panel-status-button');
|
||||||
|
|
||||||
this._iconActor = new St.Icon({ icon_name: 'keyboard', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
|
this._labelActors = {};
|
||||||
this._container.add_actor(this._iconActor);
|
this._layoutItems = {};
|
||||||
this._labelActors = [ ];
|
|
||||||
this._layoutItems = [ ];
|
|
||||||
|
|
||||||
this._showFlags = false;
|
this._settings = new Gio.Settings({ schema: DESKTOP_INPUT_SOURCES_SCHEMA });
|
||||||
this._config = Gkbd.Configuration.get();
|
this._settings.connect('changed::' + KEY_CURRENT_INPUT_SOURCE, Lang.bind(this, this._currentInputSourceChanged));
|
||||||
this._config.connect('changed', Lang.bind(this, this._syncConfig));
|
this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
|
||||||
this._config.connect('group-changed', Lang.bind(this, this._syncGroup));
|
|
||||||
this._config.start_listen();
|
|
||||||
|
|
||||||
this._syncConfig();
|
this._currentSourceIndex = this._settings.get_uint(KEY_CURRENT_INPUT_SOURCE);
|
||||||
|
this._xkbInfo = new GnomeDesktop.XkbInfo();
|
||||||
|
|
||||||
if (global.session_type == Shell.SessionType.USER) {
|
this._inputSourcesChanged();
|
||||||
|
|
||||||
|
// re-using "allowSettings" for the keyboard layout is a bit shady,
|
||||||
|
// but at least for now it is used as "allow popping up windows
|
||||||
|
// from shell menus"; we can always add a separate sessionMode
|
||||||
|
// option if need arises.
|
||||||
|
if (Main.sessionMode.allowSettings) {
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() {
|
this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, this._showLayout));
|
||||||
Main.overview.hide();
|
|
||||||
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
this.menu.addSettingsAction(_("Region and Language Settings"), 'gnome-region-panel.desktop');
|
this.menu.addSettingsAction(_("Region and Language Settings"), 'gnome-region-panel.desktop');
|
||||||
},
|
},
|
||||||
|
|
||||||
_adjustGroupNames: function(names) {
|
_currentInputSourceChanged: function() {
|
||||||
// Disambiguate duplicate names with a subscript
|
let nVisibleSources = Object.keys(this._layoutItems).length;
|
||||||
// This is O(N^2) to avoid sorting names
|
if (nVisibleSources < 2)
|
||||||
// but N <= 4 so who cares?
|
return;
|
||||||
|
|
||||||
for (let i = 0; i < names.length; i++) {
|
let nSources = this._settings.get_value(KEY_INPUT_SOURCES).n_children();
|
||||||
let name = names[i];
|
let newCurrentSourceIndex = this._settings.get_uint(KEY_CURRENT_INPUT_SOURCE);
|
||||||
let cnt = 0;
|
if (newCurrentSourceIndex >= nSources)
|
||||||
for (let j = i + 1; j < names.length; j++) {
|
return;
|
||||||
if (names[j] == name) {
|
|
||||||
cnt++;
|
if (!this._layoutItems[newCurrentSourceIndex]) {
|
||||||
// U+2081 SUBSCRIPT ONE
|
// This source index is invalid as we weren't able to
|
||||||
names[j] = name + String.fromCharCode(0x2081 + cnt);
|
// build a menu item for it, so we hide ourselves since we
|
||||||
}
|
// can't fix it here. *shrug*
|
||||||
}
|
this.menu.close();
|
||||||
if (cnt != 0)
|
this.actor.hide();
|
||||||
names[i] = name + '\u2081';
|
return;
|
||||||
|
} else {
|
||||||
|
this.actor.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
return names;
|
if (this._layoutItems[this._currentSourceIndex]) {
|
||||||
|
this._layoutItems[this._currentSourceIndex].setShowDot(false);
|
||||||
|
this._container.set_skip_paint(this._labelActors[this._currentSourceIndex], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._layoutItems[newCurrentSourceIndex].setShowDot(true);
|
||||||
|
this._container.set_skip_paint(this._labelActors[newCurrentSourceIndex], false);
|
||||||
|
|
||||||
|
this._currentSourceIndex = newCurrentSourceIndex;
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncConfig: function() {
|
_inputSourcesChanged: function() {
|
||||||
this._showFlags = this._config.if_flags_shown();
|
let sources = this._settings.get_value(KEY_INPUT_SOURCES);
|
||||||
if (this._showFlags) {
|
let nSources = sources.n_children();
|
||||||
this._container.set_skip_paint(this._iconActor, false);
|
|
||||||
} else {
|
for (let i in this._layoutItems)
|
||||||
this._container.set_skip_paint(this._iconActor, true);
|
this._layoutItems[i].destroy();
|
||||||
|
|
||||||
|
for (let i in this._labelActors)
|
||||||
|
this._labelActors[i].destroy();
|
||||||
|
|
||||||
|
this._layoutItems = {};
|
||||||
|
this._labelActors = {};
|
||||||
|
|
||||||
|
let infos = [];
|
||||||
|
let infosByShortName = {};
|
||||||
|
|
||||||
|
for (let i = 0; i < nSources; i++) {
|
||||||
|
let [type, id] = sources.get_child_value(i).deep_unpack();
|
||||||
|
if (type != INPUT_SOURCE_TYPE_XKB)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let info = {};
|
||||||
|
[info.exists, info.displayName, info.shortName, , ] =
|
||||||
|
this._xkbInfo.get_layout_info(id);
|
||||||
|
|
||||||
|
if (!info.exists)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
info.sourceIndex = i;
|
||||||
|
|
||||||
|
if (!(info.shortName in infosByShortName))
|
||||||
|
infosByShortName[info.shortName] = [];
|
||||||
|
infosByShortName[info.shortName].push(info);
|
||||||
|
infos.push(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
let groups = this._config.get_group_names();
|
if (infos.length > 1) {
|
||||||
if (groups.length > 1) {
|
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
} else {
|
} else {
|
||||||
this.menu.close();
|
this.menu.close();
|
||||||
this.actor.hide();
|
this.actor.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < this._layoutItems.length; i++)
|
for (let i = 0; i < infos.length; i++) {
|
||||||
this._layoutItems[i].destroy();
|
let info = infos[i];
|
||||||
|
if (infosByShortName[info.shortName].length > 1) {
|
||||||
|
let sub = infosByShortName[info.shortName].indexOf(info) + 1;
|
||||||
|
info.shortName += String.fromCharCode(0x2080 + sub);
|
||||||
|
}
|
||||||
|
|
||||||
for (let i = 0; i < this._labelActors.length; i++)
|
let item = new LayoutMenuItem(info.displayName, info.shortName);
|
||||||
this._labelActors[i].destroy();
|
this._layoutItems[info.sourceIndex] = item;
|
||||||
|
|
||||||
let short_names = this._adjustGroupNames(this._config.get_short_group_names());
|
|
||||||
|
|
||||||
this._selectedLayout = null;
|
|
||||||
this._layoutItems = [ ];
|
|
||||||
this._selectedLabel = null;
|
|
||||||
this._labelActors = [ ];
|
|
||||||
for (let i = 0; i < groups.length; i++) {
|
|
||||||
let icon_name = this._config.get_group_name(i);
|
|
||||||
let actor;
|
|
||||||
if (this._showFlags)
|
|
||||||
actor = new St.Icon({ icon_name: icon_name, icon_type: St.IconType.SYMBOLIC, style_class: 'popup-menu-icon' });
|
|
||||||
else
|
|
||||||
actor = new St.Label({ text: short_names[i] });
|
|
||||||
let item = new LayoutMenuItem(this._config, i, actor, groups[i]);
|
|
||||||
item._short_group_name = short_names[i];
|
|
||||||
item._icon_name = icon_name;
|
|
||||||
this._layoutItems.push(item);
|
|
||||||
this.menu.addMenuItem(item, i);
|
this.menu.addMenuItem(item, i);
|
||||||
|
item.connect('activate', Lang.bind(this, function() {
|
||||||
|
this._settings.set_value(KEY_CURRENT_INPUT_SOURCE,
|
||||||
|
GLib.Variant.new_uint32(info.sourceIndex));
|
||||||
|
}));
|
||||||
|
|
||||||
let shortLabel = new St.Label({ text: short_names[i] });
|
let shortLabel = new St.Label({ text: info.shortName });
|
||||||
this._labelActors.push(shortLabel);
|
this._labelActors[info.sourceIndex] = shortLabel;
|
||||||
this._container.add_actor(shortLabel);
|
this._container.add_actor(shortLabel);
|
||||||
this._container.set_skip_paint(shortLabel, true);
|
this._container.set_skip_paint(shortLabel, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._syncGroup();
|
this._currentInputSourceChanged();
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncGroup: function() {
|
_showLayout: function() {
|
||||||
let selected = this._config.get_current_group();
|
Main.overview.hide();
|
||||||
|
|
||||||
if (this._selectedLayout) {
|
let sources = this._settings.get_value(KEY_INPUT_SOURCES);
|
||||||
this._selectedLayout.setShowDot(false);
|
let current = this._settings.get_uint(KEY_CURRENT_INPUT_SOURCE);
|
||||||
this._selectedLayout = null;
|
let id = sources.get_child_value(current).deep_unpack()[1];
|
||||||
}
|
let [, , , xkbLayout, xkbVariant] = this._xkbInfo.get_layout_info(id);
|
||||||
|
|
||||||
if (this._selectedLabel) {
|
if (!xkbLayout || xkbLayout.length == 0)
|
||||||
this._container.set_skip_paint(this._selectedLabel, true);
|
return;
|
||||||
this._selectedLabel = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
let item = this._layoutItems[selected];
|
let description = xkbLayout;
|
||||||
item.setShowDot(true);
|
if (xkbVariant.length > 0)
|
||||||
|
description = description + '\t' + xkbVariant;
|
||||||
|
|
||||||
this._iconActor.icon_name = item._icon_name;
|
Util.spawn(['gkbd-keyboard-display', '-l', description]);
|
||||||
this._selectedLabel = this._labelActors[selected];
|
|
||||||
this._container.set_skip_paint(this._selectedLabel, this._showFlags);
|
|
||||||
|
|
||||||
this._selectedLayout = item;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_containerGetPreferredWidth: function(container, for_height, alloc) {
|
_containerGetPreferredWidth: function(container, for_height, alloc) {
|
||||||
@ -173,15 +193,11 @@ const XKBIndicator = new Lang.Class({
|
|||||||
// for the height of all children, but we ignore the results
|
// for the height of all children, but we ignore the results
|
||||||
// for those we don't actually display.
|
// for those we don't actually display.
|
||||||
let max_min_width = 0, max_natural_width = 0;
|
let max_min_width = 0, max_natural_width = 0;
|
||||||
if (this._showFlags)
|
|
||||||
[max_min_width, max_natural_width] = this._iconActor.get_preferred_width(for_height);
|
|
||||||
|
|
||||||
for (let i = 0; i < this._labelActors.length; i++) {
|
for (let i in this._labelActors) {
|
||||||
let [min_width, natural_width] = this._labelActors[i].get_preferred_width(for_height);
|
let [min_width, natural_width] = this._labelActors[i].get_preferred_width(for_height);
|
||||||
if (!this._showFlags) {
|
max_min_width = Math.max(max_min_width, min_width);
|
||||||
max_min_width = Math.max(max_min_width, min_width);
|
max_natural_width = Math.max(max_natural_width, natural_width);
|
||||||
max_natural_width = Math.max(max_natural_width, natural_width);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alloc.min_size = max_min_width;
|
alloc.min_size = max_min_width;
|
||||||
@ -190,15 +206,11 @@ const XKBIndicator = new Lang.Class({
|
|||||||
|
|
||||||
_containerGetPreferredHeight: function(container, for_width, alloc) {
|
_containerGetPreferredHeight: function(container, for_width, alloc) {
|
||||||
let max_min_height = 0, max_natural_height = 0;
|
let max_min_height = 0, max_natural_height = 0;
|
||||||
if (this._showFlags)
|
|
||||||
[max_min_height, max_natural_height] = this._iconActor.get_preferred_height(for_width);
|
|
||||||
|
|
||||||
for (let i = 0; i < this._labelActors.length; i++) {
|
for (let i in this._labelActors) {
|
||||||
let [min_height, natural_height] = this._labelActors[i].get_preferred_height(for_width);
|
let [min_height, natural_height] = this._labelActors[i].get_preferred_height(for_width);
|
||||||
if (!this._showFlags) {
|
max_min_height = Math.max(max_min_height, min_height);
|
||||||
max_min_height = Math.max(max_min_height, min_height);
|
max_natural_height = Math.max(max_natural_height, natural_height);
|
||||||
max_natural_height = Math.max(max_natural_height, natural_height);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alloc.min_size = max_min_height;
|
alloc.min_size = max_min_height;
|
||||||
@ -212,8 +224,7 @@ const XKBIndicator = new Lang.Class({
|
|||||||
box.y2 -= box.y1;
|
box.y2 -= box.y1;
|
||||||
box.y1 = 0;
|
box.y1 = 0;
|
||||||
|
|
||||||
this._iconActor.allocate_align_fill(box, 0.5, 0, false, false, flags);
|
for (let i in this._labelActors)
|
||||||
for (let i = 0; i < this._labelActors.length; i++)
|
|
||||||
this._labelActors[i].allocate_align_fill(box, 0.5, 0, false, false, flags);
|
this._labelActors[i].allocate_align_fill(box, 0.5, 0, false, false, flags);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -304,9 +304,10 @@ const NMDevice = new Lang.Class({
|
|||||||
// record the connection
|
// record the connection
|
||||||
let obj = {
|
let obj = {
|
||||||
connection: connections[i],
|
connection: connections[i],
|
||||||
name: connections[i]._name,
|
name: connections[i].get_id(),
|
||||||
uuid: connections[i]._uuid,
|
uuid: connections[i].get_uuid(),
|
||||||
timestamp: connections[i]._timestamp,
|
timestamp: connections[i]._timestamp,
|
||||||
|
item: null,
|
||||||
};
|
};
|
||||||
this._connections.push(obj);
|
this._connections.push(obj);
|
||||||
}
|
}
|
||||||
@ -401,48 +402,46 @@ const NMDevice = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
checkConnection: function(connection) {
|
checkConnection: function(connection) {
|
||||||
let pos = this._findConnection(connection._uuid);
|
let pos = this._findConnection(connection.get_uuid());
|
||||||
let exists = pos != -1;
|
let exists = pos != -1;
|
||||||
let valid = this.connectionValid(connection);
|
let valid = this.connectionValid(connection);
|
||||||
|
let similar = false;
|
||||||
|
if (exists) {
|
||||||
|
let existing = this._connections[pos];
|
||||||
|
|
||||||
if (exists && !valid)
|
// Check if connection changed name or id
|
||||||
this.removeConnection(connection);
|
similar = existing.name == connection.get_id() &&
|
||||||
else if (!exists && valid)
|
existing.timestamp == connection._timestamp;
|
||||||
this.addConnection(connection);
|
|
||||||
else if (exists && valid) {
|
|
||||||
// propagate changes and update the UI
|
|
||||||
|
|
||||||
if (this._connections[pos].timestamp != connection._timestamp) {
|
|
||||||
this._connections[pos].timestamp = connection._timestamp;
|
|
||||||
this._connections.sort(this._connectionSortFunction);
|
|
||||||
|
|
||||||
this._clearSection();
|
|
||||||
this._queueCreateSection();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (exists && valid && similar) {
|
||||||
|
// Nothing to do
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists)
|
||||||
|
this.removeConnection(connection);
|
||||||
|
if (valid)
|
||||||
|
this.addConnection(connection);
|
||||||
},
|
},
|
||||||
|
|
||||||
addConnection: function(connection) {
|
addConnection: function(connection) {
|
||||||
// record the connection
|
// record the connection
|
||||||
let obj = {
|
let obj = {
|
||||||
connection: connection,
|
connection: connection,
|
||||||
name: connection._name,
|
name: connection.get_id(),
|
||||||
uuid: connection._uuid,
|
uuid: connection.get_uuid(),
|
||||||
timestamp: connection._timestamp,
|
timestamp: connection._timestamp,
|
||||||
|
item: null,
|
||||||
};
|
};
|
||||||
this._connections.push(obj);
|
Util.insertSorted(this._connections, obj, this._connectionSortFunction);
|
||||||
this._connections.sort(this._connectionSortFunction);
|
|
||||||
|
|
||||||
this._clearSection();
|
this._clearSection();
|
||||||
this._queueCreateSection();
|
this._queueCreateSection();
|
||||||
},
|
},
|
||||||
|
|
||||||
removeConnection: function(connection) {
|
removeConnection: function(connection) {
|
||||||
if (!connection._uuid) {
|
let pos = this._findConnection(connection.get_uuid());
|
||||||
log('Cannot remove a connection without an UUID');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let pos = this._findConnection(connection._uuid);
|
|
||||||
if (pos == -1) {
|
if (pos == -1) {
|
||||||
// this connection was never added, nothing to do here
|
// this connection was never added, nothing to do here
|
||||||
return;
|
return;
|
||||||
@ -712,10 +711,10 @@ const NMDeviceWired = new Lang.Class({
|
|||||||
|
|
||||||
_createAutomaticConnection: function() {
|
_createAutomaticConnection: function() {
|
||||||
let connection = new NetworkManager.Connection();
|
let connection = new NetworkManager.Connection();
|
||||||
connection._uuid = NetworkManager.utils_uuid_generate();
|
let uuid = NetworkManager.utils_uuid_generate();
|
||||||
connection.add_setting(new NetworkManager.SettingWired());
|
connection.add_setting(new NetworkManager.SettingWired());
|
||||||
connection.add_setting(new NetworkManager.SettingConnection({
|
connection.add_setting(new NetworkManager.SettingConnection({
|
||||||
uuid: connection._uuid,
|
uuid: uuid,
|
||||||
id: this._autoConnectionName,
|
id: this._autoConnectionName,
|
||||||
type: NetworkManager.SETTING_WIRED_SETTING_NAME,
|
type: NetworkManager.SETTING_WIRED_SETTING_NAME,
|
||||||
autoconnect: true
|
autoconnect: true
|
||||||
@ -859,10 +858,10 @@ const NMDeviceBluetooth = new Lang.Class({
|
|||||||
|
|
||||||
_createAutomaticConnection: function() {
|
_createAutomaticConnection: function() {
|
||||||
let connection = new NetworkManager.Connection;
|
let connection = new NetworkManager.Connection;
|
||||||
connection._uuid = NetworkManager.utils_uuid_generate();
|
let uuid = NetworkManager.utils_uuid_generate();
|
||||||
connection.add_setting(new NetworkManager.SettingBluetooth);
|
connection.add_setting(new NetworkManager.SettingBluetooth);
|
||||||
connection.add_setting(new NetworkManager.SettingConnection({
|
connection.add_setting(new NetworkManager.SettingConnection({
|
||||||
uuid: connection._uuid,
|
uuid: uuid,
|
||||||
id: this._autoConnectionName,
|
id: this._autoConnectionName,
|
||||||
type: NetworkManager.SETTING_BLUETOOTH_SETTING_NAME,
|
type: NetworkManager.SETTING_BLUETOOTH_SETTING_NAME,
|
||||||
autoconnect: false
|
autoconnect: false
|
||||||
@ -897,12 +896,12 @@ const NMDeviceVPN = new Lang.Class({
|
|||||||
Name: 'NMDeviceVPN',
|
Name: 'NMDeviceVPN',
|
||||||
Extends: NMDevice,
|
Extends: NMDevice,
|
||||||
|
|
||||||
_init: function(client) {
|
_init: function(client, device, connections) {
|
||||||
// Disable autoconnections
|
// Disable autoconnections
|
||||||
this._autoConnectionName = null;
|
this._autoConnectionName = null;
|
||||||
this.category = NMConnectionCategory.VPN;
|
this.category = NMConnectionCategory.VPN;
|
||||||
|
|
||||||
this.parent(client, null, [ ]);
|
this.parent(client, null, connections);
|
||||||
},
|
},
|
||||||
|
|
||||||
connectionValid: function(connection) {
|
connectionValid: function(connection) {
|
||||||
@ -914,13 +913,24 @@ const NMDeviceVPN = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
get connected() {
|
get connected() {
|
||||||
return !!this._activeConnection;
|
if (!this._activeConnection)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return this._activeConnection.vpn_state == NetworkManager.VPNConnectionState.ACTIVATED;
|
||||||
},
|
},
|
||||||
|
|
||||||
setActiveConnection: function(activeConnection) {
|
setActiveConnection: function(activeConnection) {
|
||||||
|
if (this._stateChangeId)
|
||||||
|
this._activeConnection.disconnect(this._stateChangeId);
|
||||||
|
this._stateChangeId = 0;
|
||||||
|
|
||||||
this.parent(activeConnection);
|
this.parent(activeConnection);
|
||||||
|
|
||||||
this.emit('active-connection-changed');
|
if (this._activeConnection)
|
||||||
|
this._stateChangeId = this._activeConnection.connect('vpn-state-changed',
|
||||||
|
Lang.bind(this, this._connectionStateChanged));
|
||||||
|
|
||||||
|
this.emit('state-changed');
|
||||||
},
|
},
|
||||||
|
|
||||||
_shouldShowConnectionList: function() {
|
_shouldShowConnectionList: function() {
|
||||||
@ -933,7 +943,39 @@ const NMDeviceVPN = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
getStatusLabel: function() {
|
getStatusLabel: function() {
|
||||||
return null;
|
if (!this._activeConnection) // Same as DISCONNECTED
|
||||||
|
return null;
|
||||||
|
|
||||||
|
switch(this._activeConnection.vpn_state) {
|
||||||
|
case NetworkManager.VPNConnectionState.DISCONNECTED:
|
||||||
|
case NetworkManager.VPNConnectionState.ACTIVATED:
|
||||||
|
return null;
|
||||||
|
case NetworkManager.VPNConnectionState.PREPARE:
|
||||||
|
case NetworkManager.VPNConnectionState.CONNECT:
|
||||||
|
case NetworkManager.VPNConnectionState.IP_CONFIG_GET:
|
||||||
|
return _("connecting...");
|
||||||
|
case NetworkManager.VPNConnectionState.NEED_AUTH:
|
||||||
|
/* Translators: this is for network connections that require some kind of key or password */
|
||||||
|
return _("authentication required");
|
||||||
|
case NetworkManager.VPNConnectionState.FAILED:
|
||||||
|
return _("connection failed");
|
||||||
|
default:
|
||||||
|
log('VPN connection state invalid, is %d'.format(this.device.state));
|
||||||
|
return 'invalid';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_connectionStateChanged: function(connection, newstate, reason) {
|
||||||
|
if (newstate == NetworkManager.VPNConnectionState.FAILED) {
|
||||||
|
// FIXME: if we ever want to show something based on reason,
|
||||||
|
// we need to convert from NetworkManager.VPNConnectionStateReason
|
||||||
|
// to NetworkManager.DeviceStateReason
|
||||||
|
this.emit('activation-failed', reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Differently from real NMDevices, there is no need to queue
|
||||||
|
// an update of the menu section, contents wouldn't change anyway
|
||||||
|
this.emit('state-changed');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1323,9 +1365,7 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
removeConnection: function(connection) {
|
removeConnection: function(connection) {
|
||||||
if (!connection._uuid)
|
let pos = this._findConnection(connection.get_uuid());
|
||||||
return;
|
|
||||||
let pos = this._findConnection(connection._uuid);
|
|
||||||
if (pos == -1) {
|
if (pos == -1) {
|
||||||
// removing connection that was never added
|
// removing connection that was never added
|
||||||
return;
|
return;
|
||||||
@ -1339,7 +1379,7 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
let apObj = this._networks[i];
|
let apObj = this._networks[i];
|
||||||
let connections = apObj.connections;
|
let connections = apObj.connections;
|
||||||
for (let k = 0; k < connections.length; k++) {
|
for (let k = 0; k < connections.length; k++) {
|
||||||
if (connections[k]._uuid == connection._uuid) {
|
if (connections[k].get_uuid() == connection.get_uuid()) {
|
||||||
// remove the connection from the access point group
|
// remove the connection from the access point group
|
||||||
connections.splice(k);
|
connections.splice(k);
|
||||||
forceupdate = forceupdate || connections.length == 0;
|
forceupdate = forceupdate || connections.length == 0;
|
||||||
@ -1355,7 +1395,7 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
forceupdate = true;
|
forceupdate = true;
|
||||||
} else {
|
} else {
|
||||||
for (let j = 0; j < items.length; j++) {
|
for (let j = 0; j < items.length; j++) {
|
||||||
if (items[j]._connection._uuid == connection._uuid) {
|
if (items[j]._connection.get_uuid() == connection.get_uuid()) {
|
||||||
items[j].destroy();
|
items[j].destroy();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1382,8 +1422,8 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
// record the connection
|
// record the connection
|
||||||
let obj = {
|
let obj = {
|
||||||
connection: connection,
|
connection: connection,
|
||||||
name: connection._name,
|
name: connection.get_id(),
|
||||||
uuid: connection._uuid,
|
uuid: connection.get_uuid(),
|
||||||
};
|
};
|
||||||
this._connections.push(obj);
|
this._connections.push(obj);
|
||||||
|
|
||||||
@ -1544,6 +1584,15 @@ const NMApplet = new Lang.Class({
|
|||||||
this.menu.addMenuItem(this._statusSection);
|
this.menu.addMenuItem(this._statusSection);
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
|
this._activeConnections = [ ];
|
||||||
|
this._connections = [ ];
|
||||||
|
|
||||||
|
this._mainConnection = null;
|
||||||
|
this._activeAccessPointUpdateId = 0;
|
||||||
|
this._activeAccessPoint = null;
|
||||||
|
this._mobileUpdateId = 0;
|
||||||
|
this._mobileUpdateDevice = null;
|
||||||
|
|
||||||
this._devices = { };
|
this._devices = { };
|
||||||
|
|
||||||
this._devices.wired = {
|
this._devices.wired = {
|
||||||
@ -1579,13 +1628,9 @@ const NMApplet = new Lang.Class({
|
|||||||
|
|
||||||
this._devices.vpn = {
|
this._devices.vpn = {
|
||||||
section: new PopupMenu.PopupMenuSection(),
|
section: new PopupMenu.PopupMenuSection(),
|
||||||
device: new NMDeviceVPN(this._client),
|
device: this._makeWrapperDevice(NMDeviceVPN, null),
|
||||||
item: new NMWiredSectionTitleMenuItem(_("VPN Connections"))
|
item: new NMWiredSectionTitleMenuItem(_("VPN Connections"))
|
||||||
};
|
};
|
||||||
this._devices.vpn.device.connect('active-connection-changed', Lang.bind(this, function() {
|
|
||||||
this._devices.vpn.item.updateForDevice(this._devices.vpn.device);
|
|
||||||
}));
|
|
||||||
this._devices.vpn.item.updateForDevice(this._devices.vpn.device);
|
|
||||||
this._devices.vpn.section.addMenuItem(this._devices.vpn.item);
|
this._devices.vpn.section.addMenuItem(this._devices.vpn.item);
|
||||||
this._devices.vpn.section.addMenuItem(this._devices.vpn.device.section);
|
this._devices.vpn.section.addMenuItem(this._devices.vpn.device.section);
|
||||||
this._devices.vpn.section.actor.hide();
|
this._devices.vpn.section.actor.hide();
|
||||||
@ -1593,15 +1638,6 @@ const NMApplet = new Lang.Class({
|
|||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
||||||
|
|
||||||
this._activeConnections = [ ];
|
|
||||||
this._connections = [ ];
|
|
||||||
|
|
||||||
this._mainConnection = null;
|
|
||||||
this._activeAccessPointUpdateId = 0;
|
|
||||||
this._activeAccessPoint = null;
|
|
||||||
this._mobileUpdateId = 0;
|
|
||||||
this._mobileUpdateDevice = null;
|
|
||||||
|
|
||||||
// Device types
|
// Device types
|
||||||
this._dtypes = { };
|
this._dtypes = { };
|
||||||
this._dtypes[NetworkManager.DeviceType.ETHERNET] = NMDeviceWired;
|
this._dtypes[NetworkManager.DeviceType.ETHERNET] = NMDeviceWired;
|
||||||
@ -1668,6 +1704,18 @@ const NMApplet = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_syncSectionTitle: function(category) {
|
_syncSectionTitle: function(category) {
|
||||||
|
if (category == NMConnectionCategory.VPN) {
|
||||||
|
// Special case VPN: it's only one device (and a fake one
|
||||||
|
// actually), and we don't show it if empty
|
||||||
|
let device = this._devices.vpn.device;
|
||||||
|
let section = this._devices.vpn.section;
|
||||||
|
let item = this._devices.vpn.item;
|
||||||
|
|
||||||
|
section.actor.visible = !device.empty;
|
||||||
|
item.updateForDevice(device);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let devices = this._devices[category].devices;
|
let devices = this._devices[category].devices;
|
||||||
let item = this._devices[category].item;
|
let item = this._devices[category].item;
|
||||||
let section = this._devices[category].section;
|
let section = this._devices[category].section;
|
||||||
@ -1718,6 +1766,29 @@ const NMApplet = new Lang.Class({
|
|||||||
this._source.notify(device._notification);
|
this._source.notify(device._notification);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_makeWrapperDevice: function(wrapperClass, device) {
|
||||||
|
let wrapper = new wrapperClass(this._client, device, this._connections);
|
||||||
|
|
||||||
|
wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) {
|
||||||
|
// XXX: nm-applet has no special text depending on reason
|
||||||
|
// but I'm not sure of this generic message
|
||||||
|
this._notifyForDevice(device, 'network-error',
|
||||||
|
_("Connection failed"),
|
||||||
|
_("Activation of network connection failed"),
|
||||||
|
MessageTray.Urgency.HIGH);
|
||||||
|
}));
|
||||||
|
wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) {
|
||||||
|
this._syncSectionTitle(dev.category);
|
||||||
|
}));
|
||||||
|
wrapper._destroyId = wrapper.connect('destroy', function(wrapper) {
|
||||||
|
wrapper.disconnect(wrapper._activationFailedId);
|
||||||
|
wrapper.disconnect(wrapper._deviceStateChangedId);
|
||||||
|
wrapper.disconnect(wrapper._destroyId);
|
||||||
|
});
|
||||||
|
|
||||||
|
return wrapper;
|
||||||
|
},
|
||||||
|
|
||||||
_deviceAdded: function(client, device) {
|
_deviceAdded: function(client, device) {
|
||||||
if (device._delegate) {
|
if (device._delegate) {
|
||||||
// already seen, not adding again
|
// already seen, not adding again
|
||||||
@ -1725,24 +1796,8 @@ const NMApplet = new Lang.Class({
|
|||||||
}
|
}
|
||||||
let wrapperClass = this._dtypes[device.get_device_type()];
|
let wrapperClass = this._dtypes[device.get_device_type()];
|
||||||
if (wrapperClass) {
|
if (wrapperClass) {
|
||||||
let wrapper = new wrapperClass(this._client, device, this._connections);
|
let wrapper = this._makeWrapperDevice(wrapperClass, device);
|
||||||
|
|
||||||
wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) {
|
|
||||||
// XXX: nm-applet has no special text depending on reason
|
|
||||||
// but I'm not sure of this generic message
|
|
||||||
this._notifyForDevice(device, 'network-error',
|
|
||||||
_("Connection failed"),
|
|
||||||
_("Activation of network connection failed"),
|
|
||||||
MessageTray.Urgency.HIGH);
|
|
||||||
}));
|
|
||||||
wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) {
|
|
||||||
this._syncSectionTitle(dev.category);
|
|
||||||
}));
|
|
||||||
wrapper._destroyId = wrapper.connect('destroy', function(wrapper) {
|
|
||||||
wrapper.disconnect(wrapper._activationFailedId);
|
|
||||||
wrapper.disconnect(wrapper._deviceStateChangedId);
|
|
||||||
wrapper.disconnect(wrapper._destroyId);
|
|
||||||
});
|
|
||||||
let section = this._devices[wrapper.category].section;
|
let section = this._devices[wrapper.category].section;
|
||||||
let devices = this._devices[wrapper.category].devices;
|
let devices = this._devices[wrapper.category].devices;
|
||||||
|
|
||||||
@ -1878,7 +1933,7 @@ const NMApplet = new Lang.Class({
|
|||||||
let connections = this._settings.list_connections();
|
let connections = this._settings.list_connections();
|
||||||
for (let i = 0; i < connections.length; i++) {
|
for (let i = 0; i < connections.length; i++) {
|
||||||
let connection = connections[i];
|
let connection = connections[i];
|
||||||
if (connection._uuid) {
|
if (connection._updatedId) {
|
||||||
// connection was already seen (for example because NetworkManager was restarted)
|
// connection was already seen (for example because NetworkManager was restarted)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1891,7 +1946,7 @@ const NMApplet = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_newConnection: function(settings, connection) {
|
_newConnection: function(settings, connection) {
|
||||||
if (connection._uuid) {
|
if (connection._updatedId) {
|
||||||
// connection was already seen
|
// connection was already seen
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1914,35 +1969,31 @@ const NMApplet = new Lang.Class({
|
|||||||
|
|
||||||
if (section == NMConnectionCategory.VPN) {
|
if (section == NMConnectionCategory.VPN) {
|
||||||
this._devices.vpn.device.removeConnection(connection);
|
this._devices.vpn.device.removeConnection(connection);
|
||||||
if (this._devices.vpn.device.empty)
|
this._syncSectionTitle(section);
|
||||||
this._devices.vpn.section.actor.hide();
|
|
||||||
} else if (section != NMConnectionCategory.INVALID) {
|
} else if (section != NMConnectionCategory.INVALID) {
|
||||||
let devices = this._devices[section].devices;
|
let devices = this._devices[section].devices;
|
||||||
for (let i = 0; i < devices.length; i++)
|
for (let i = 0; i < devices.length; i++)
|
||||||
devices[i].removeConnection(connection);
|
devices[i].removeConnection(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
connection._uuid = null;
|
|
||||||
connection.disconnect(connection._removedId);
|
connection.disconnect(connection._removedId);
|
||||||
connection.disconnect(connection._updatedId);
|
connection.disconnect(connection._updatedId);
|
||||||
|
connection._removedId = connection._updatedId = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateConnection: function(connection) {
|
_updateConnection: function(connection) {
|
||||||
let connectionSettings = connection.get_setting_by_name(NetworkManager.SETTING_CONNECTION_SETTING_NAME);
|
let connectionSettings = connection.get_setting_by_name(NetworkManager.SETTING_CONNECTION_SETTING_NAME);
|
||||||
connection._type = connectionSettings.type;
|
connection._type = connectionSettings.type;
|
||||||
|
|
||||||
connection._section = this._ctypes[connection._type] || NMConnectionCategory.INVALID;
|
connection._section = this._ctypes[connection._type] || NMConnectionCategory.INVALID;
|
||||||
connection._name = connectionSettings.id;
|
|
||||||
connection._uuid = connectionSettings.uuid;
|
|
||||||
connection._timestamp = connectionSettings.timestamp;
|
connection._timestamp = connectionSettings.timestamp;
|
||||||
|
|
||||||
let section = connection._section;
|
let section = connection._section;
|
||||||
|
|
||||||
if (connection._section == NMConnectionCategory.INVALID)
|
if (section == NMConnectionCategory.INVALID)
|
||||||
return;
|
return;
|
||||||
if (section == NMConnectionCategory.VPN) {
|
if (section == NMConnectionCategory.VPN) {
|
||||||
this._devices.vpn.device.checkConnection(connection);
|
this._devices.vpn.device.checkConnection(connection);
|
||||||
this._devices.vpn.section.actor.show();
|
this._syncSectionTitle(section);
|
||||||
} else {
|
} else {
|
||||||
let devices = this._devices[section].devices;
|
let devices = this._devices[section].devices;
|
||||||
for (let i = 0; i < devices.length; i++) {
|
for (let i = 0; i < devices.length; i++) {
|
||||||
@ -1965,12 +2016,10 @@ const NMApplet = new Lang.Class({
|
|||||||
|
|
||||||
this._statusSection.actor.hide();
|
this._statusSection.actor.hide();
|
||||||
|
|
||||||
this._syncSectionTitle('wired');
|
this._syncSectionTitle(NMConnectionCategory.WIRED);
|
||||||
this._syncSectionTitle('wireless');
|
this._syncSectionTitle(NMConnectionCategory.WIRELESS);
|
||||||
this._syncSectionTitle('wwan');
|
this._syncSectionTitle(NMConnectionCategory.WWAN);
|
||||||
|
this._syncSectionTitle(NMConnectionCategory.VPN);
|
||||||
if (!this._devices.vpn.device.empty)
|
|
||||||
this._devices.vpn.section.actor.show();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncNMState: function() {
|
_syncNMState: function() {
|
||||||
|
@ -212,7 +212,7 @@ const DeviceItem = new Lang.Class({
|
|||||||
case UPDeviceType.COMPUTER:
|
case UPDeviceType.COMPUTER:
|
||||||
return _("Computer");
|
return _("Computer");
|
||||||
default:
|
default:
|
||||||
return _("Unknown");
|
return C_("device", "Unknown");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -420,14 +420,13 @@ const ChatSource = new Lang.Class({
|
|||||||
Extends: MessageTray.Source,
|
Extends: MessageTray.Source,
|
||||||
|
|
||||||
_init: function(account, conn, channel, contact, client) {
|
_init: function(account, conn, channel, contact, client) {
|
||||||
this.isChat = true;
|
|
||||||
|
|
||||||
this._account = account;
|
this._account = account;
|
||||||
this._contact = contact;
|
this._contact = contact;
|
||||||
this._client = client;
|
this._client = client;
|
||||||
|
|
||||||
this.parent(contact.get_alias());
|
this.parent(contact.get_alias());
|
||||||
|
|
||||||
|
this.isChat = true;
|
||||||
this._pendingMessages = [];
|
this._pendingMessages = [];
|
||||||
|
|
||||||
this._conn = conn;
|
this._conn = conn;
|
||||||
@ -510,10 +509,10 @@ const ChatSource = new Lang.Class({
|
|||||||
_getLogMessages: function() {
|
_getLogMessages: function() {
|
||||||
let logManager = Tpl.LogManager.dup_singleton();
|
let logManager = Tpl.LogManager.dup_singleton();
|
||||||
let entity = Tpl.Entity.new_from_tp_contact(this._contact, Tpl.EntityType.CONTACT);
|
let entity = Tpl.Entity.new_from_tp_contact(this._contact, Tpl.EntityType.CONTACT);
|
||||||
Shell.get_contact_events(logManager,
|
|
||||||
this._account, entity,
|
logManager.get_filtered_events_async(this._account, entity,
|
||||||
SCROLLBACK_HISTORY_LINES,
|
Tpl.EventTypeMask.TEXT, SCROLLBACK_HISTORY_LINES,
|
||||||
Lang.bind(this, this._displayPendingMessages));
|
null, Lang.bind(this, this._displayPendingMessages));
|
||||||
},
|
},
|
||||||
|
|
||||||
_displayPendingMessages: function(logManager, result) {
|
_displayPendingMessages: function(logManager, result) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const AccountsService = imports.gi.AccountsService;
|
const AccountsService = imports.gi.AccountsService;
|
||||||
|
const GdmGreeter = imports.gi.GdmGreeter;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
@ -473,13 +474,22 @@ const UserMenuButton = new Lang.Class({
|
|||||||
style_class: 'popup-menu-icon' });
|
style_class: 'popup-menu-icon' });
|
||||||
this._idleIcon = new St.Icon({ icon_name: 'user-idle',
|
this._idleIcon = new St.Icon({ icon_name: 'user-idle',
|
||||||
style_class: 'popup-menu-icon' });
|
style_class: 'popup-menu-icon' });
|
||||||
|
this._pendingIcon = new St.Icon({ icon_name: 'user-status-pending',
|
||||||
|
style_class: 'popup-menu-icon' });
|
||||||
|
|
||||||
this._accountMgr.connect('most-available-presence-changed',
|
this._accountMgr.connect('most-available-presence-changed',
|
||||||
Lang.bind(this, this._updatePresenceIcon));
|
Lang.bind(this, this._updatePresenceIcon));
|
||||||
|
this._accountMgr.connect('account-enabled',
|
||||||
|
Lang.bind(this, this._onAccountEnabled));
|
||||||
|
this._accountMgr.connect('account-disabled',
|
||||||
|
Lang.bind(this, this._onAccountDisabled));
|
||||||
|
this._accountMgr.connect('account-removed',
|
||||||
|
Lang.bind(this, this._onAccountDisabled));
|
||||||
this._accountMgr.prepare_async(null, Lang.bind(this,
|
this._accountMgr.prepare_async(null, Lang.bind(this,
|
||||||
function(mgr) {
|
function(mgr) {
|
||||||
let [presence, s, msg] = mgr.get_most_available_presence();
|
let [presence, s, msg] = mgr.get_most_available_presence();
|
||||||
this._updatePresenceIcon(mgr, presence, s, msg);
|
this._updatePresenceIcon(mgr, presence, s, msg);
|
||||||
|
this._setupAccounts();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._name = new St.Label();
|
this._name = new St.Label();
|
||||||
@ -549,14 +559,20 @@ const UserMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
_updateSwitchUser: function() {
|
_updateSwitchUser: function() {
|
||||||
let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
|
let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
|
||||||
this._loginScreenItem.actor.visible = allowSwitch &&
|
let multiUser = this._userManager.can_switch() && this._userManager.has_multiple_users;
|
||||||
this._userManager.can_switch() &&
|
let multiSession = GdmGreeter.get_session_ids().length > 1;
|
||||||
this._userManager.has_multiple_users;
|
|
||||||
|
this._loginScreenItem.label.set_text(multiUser ? _("Switch User")
|
||||||
|
: _("Switch Session"));
|
||||||
|
this._loginScreenItem.actor.visible = allowSwitch && (multiUser || multiSession);
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateLogout: function() {
|
_updateLogout: function() {
|
||||||
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
|
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
|
||||||
this._logoutItem.actor.visible = allowLogout && this._userManager.has_multiple_users;
|
let multiUser = this._userManager.has_multiple_users;
|
||||||
|
let multiSession = GdmGreeter.get_session_ids().length > 1;
|
||||||
|
|
||||||
|
this._logoutItem.actor.visible = allowLogout && (multiUser || multiSession);
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateLockScreen: function() {
|
_updateLockScreen: function() {
|
||||||
@ -613,11 +629,52 @@ const UserMenuButton = new Lang.Class({
|
|||||||
this._iconBox.child = this._offlineIcon;
|
this._iconBox.child = this._offlineIcon;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_setupAccounts: function() {
|
||||||
|
let accounts = this._accountMgr.get_valid_accounts();
|
||||||
|
for (let i = 0; i < accounts.length; i++) {
|
||||||
|
accounts[i]._changingId = accounts[i].connect('notify::connection-status',
|
||||||
|
Lang.bind(this, this._updateChangingPresence));
|
||||||
|
}
|
||||||
|
this._updateChangingPresence();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onAccountEnabled: function(accountMgr, account) {
|
||||||
|
if (!account._changingId)
|
||||||
|
account._changingId = account.connect('notify::connection-status',
|
||||||
|
Lang.bind(this, this._updateChangingPresence));
|
||||||
|
this._updateChangingPresence();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onAccountDisabled: function(accountMgr, account) {
|
||||||
|
account.disconnect(account._changingId);
|
||||||
|
account._changingId = 0;
|
||||||
|
this._updateChangingPresence();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateChangingPresence: function() {
|
||||||
|
let accounts = this._accountMgr.get_valid_accounts();
|
||||||
|
let changing = false;
|
||||||
|
for (let i = 0; i < accounts.length; i++) {
|
||||||
|
if (accounts[i].connection_status == Tp.ConnectionStatus.CONNECTING) {
|
||||||
|
changing = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changing) {
|
||||||
|
this._iconBox.child = this._pendingIcon;
|
||||||
|
} else {
|
||||||
|
let [presence, s, msg] = this._accountMgr.get_most_available_presence();
|
||||||
|
this._updatePresenceIcon(this._accountMgr, presence, s, msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_createSubMenu: function() {
|
_createSubMenu: function() {
|
||||||
let item;
|
let item;
|
||||||
|
|
||||||
item = new IMStatusChooserItem();
|
item = new IMStatusChooserItem();
|
||||||
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
|
if (Main.sessionMode.allowSettings)
|
||||||
|
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
this._statusChooser = item;
|
this._statusChooser = item;
|
||||||
|
|
||||||
@ -629,9 +686,11 @@ const UserMenuButton = new Lang.Class({
|
|||||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
|
|
||||||
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
if (Main.sessionMode.allowSettings) {
|
||||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
||||||
this.menu.addMenuItem(item);
|
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||||
|
this.menu.addMenuItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
item = new PopupMenu.PopupAlternatingMenuItem(_("Power Off"),
|
item = new PopupMenu.PopupAlternatingMenuItem(_("Power Off"),
|
||||||
_("Suspend"));
|
_("Suspend"));
|
||||||
|
@ -529,9 +529,11 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
this._updateAlwaysZoom();
|
this._updateAlwaysZoom();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
global.screen.connect('notify::n-workspaces',
|
||||||
|
Lang.bind(this, this._workspacesChanged));
|
||||||
|
|
||||||
this._switchWorkspaceNotifyId = 0;
|
this._switchWorkspaceNotifyId = 0;
|
||||||
|
|
||||||
this._nWorkspacesChangedId = 0;
|
|
||||||
this._itemDragBeginId = 0;
|
this._itemDragBeginId = 0;
|
||||||
this._itemDragCancelledId = 0;
|
this._itemDragCancelledId = 0;
|
||||||
this._itemDragEndId = 0;
|
this._itemDragEndId = 0;
|
||||||
@ -570,9 +572,6 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
global.screen.connect('restacked',
|
global.screen.connect('restacked',
|
||||||
Lang.bind(this, this._onRestacked));
|
Lang.bind(this, this._onRestacked));
|
||||||
|
|
||||||
if (this._nWorkspacesChangedId == 0)
|
|
||||||
this._nWorkspacesChangedId = global.screen.connect('notify::n-workspaces',
|
|
||||||
Lang.bind(this, this._workspacesChanged));
|
|
||||||
if (this._itemDragBeginId == 0)
|
if (this._itemDragBeginId == 0)
|
||||||
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
|
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
|
||||||
Lang.bind(this, this._dragBegin));
|
Lang.bind(this, this._dragBegin));
|
||||||
@ -925,19 +924,16 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_workspacesChanged: function() {
|
_workspacesChanged: function() {
|
||||||
let oldNumWorkspaces = this._workspaces[0].length;
|
|
||||||
let newNumWorkspaces = global.screen.n_workspaces;
|
|
||||||
let active = global.screen.get_active_workspace_index();
|
|
||||||
|
|
||||||
if (oldNumWorkspaces == newNumWorkspaces)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._updateAlwaysZoom();
|
this._updateAlwaysZoom();
|
||||||
this._updateZoom();
|
this._updateZoom();
|
||||||
|
|
||||||
if (this._workspacesViews == null)
|
if (this._workspacesViews == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
let oldNumWorkspaces = this._workspaces[0].length;
|
||||||
|
let newNumWorkspaces = global.screen.n_workspaces;
|
||||||
|
let active = global.screen.get_active_workspace_index();
|
||||||
|
|
||||||
let lostWorkspaces = [];
|
let lostWorkspaces = [];
|
||||||
if (newNumWorkspaces > oldNumWorkspaces) {
|
if (newNumWorkspaces > oldNumWorkspaces) {
|
||||||
let monitors = Main.layoutManager.monitors;
|
let monitors = Main.layoutManager.monitors;
|
||||||
|
351
po/gl.po
351
po/gl.po
@ -12,8 +12,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-05-11 11:31+0200\n"
|
"POT-Creation-Date: 2012-06-03 15:02+0200\n"
|
||||||
"PO-Revision-Date: 2012-05-11 11:31+0200\n"
|
"PO-Revision-Date: 2012-06-03 15:02+0200\n"
|
||||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||||
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
|
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
|
||||||
"Language: gl\n"
|
"Language: gl\n"
|
||||||
@ -21,7 +21,7 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||||
"X-Generator: Lokalize 1.2\n"
|
"X-Generator: Gtranslator 2.91.4\n"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
@ -269,8 +269,8 @@ msgid "Not listed?"
|
|||||||
msgstr "Non está na lista?"
|
msgstr "Non está na lista?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
||||||
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
|
#: ../js/ui/extensionSystem.js:375 ../js/ui/networkAgent.js:153
|
||||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:459
|
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:431
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
@ -283,8 +283,8 @@ msgstr "Iniciar sesión"
|
|||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Xanela de inicio de sesión"
|
msgstr "Xanela de inicio de sesión"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:130 ../js/ui/userMenu.js:588
|
#: ../js/gdm/powerMenu.js:130 ../js/ui/userMenu.js:604
|
||||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:637
|
#: ../js/ui/userMenu.js:608 ../js/ui/userMenu.js:696
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspender"
|
msgstr "Suspender"
|
||||||
|
|
||||||
@ -292,8 +292,8 @@ msgstr "Suspender"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Reiniciar"
|
msgstr "Reiniciar"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:140 ../js/ui/userMenu.js:590
|
#: ../js/gdm/powerMenu.js:140 ../js/ui/userMenu.js:606
|
||||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:636
|
#: ../js/ui/userMenu.js:608 ../js/ui/userMenu.js:695
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Apagar"
|
msgstr "Apagar"
|
||||||
|
|
||||||
@ -351,12 +351,12 @@ msgstr "%s foi eliminado dos seus favoritos."
|
|||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Dispositivos extraíbeis"
|
msgstr "Dispositivos extraíbeis"
|
||||||
|
|
||||||
#: ../js/ui/autorunManager.js:560
|
#: ../js/ui/autorunManager.js:553
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Abrir con %s"
|
msgstr "Abrir con %s"
|
||||||
|
|
||||||
#: ../js/ui/autorunManager.js:586
|
#: ../js/ui/autorunManager.js:579
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Expulsar"
|
msgstr "Expulsar"
|
||||||
|
|
||||||
@ -506,20 +506,20 @@ msgstr "Esta semana"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "A vindeira semana"
|
msgstr "A vindeira semana"
|
||||||
|
|
||||||
#: ../js/ui/contactDisplay.js:66 ../js/ui/notificationDaemon.js:486
|
#: ../js/ui/contactDisplay.js:66
|
||||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:374
|
msgctxt "contact"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Descoñecido"
|
msgstr "Descoñecido"
|
||||||
|
|
||||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:129
|
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:130
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Dispoñíbel"
|
msgstr "Dispoñíbel"
|
||||||
|
|
||||||
#: ../js/ui/contactDisplay.js:94 ../js/ui/userMenu.js:138
|
#: ../js/ui/contactDisplay.js:94 ../js/ui/userMenu.js:139
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Ausente"
|
msgstr "Ausente"
|
||||||
|
|
||||||
#: ../js/ui/contactDisplay.js:98 ../js/ui/userMenu.js:132
|
#: ../js/ui/contactDisplay.js:98 ../js/ui/userMenu.js:133
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Ocupado"
|
msgstr "Ocupado"
|
||||||
|
|
||||||
@ -531,62 +531,62 @@ msgstr "Desconectado"
|
|||||||
msgid "CONTACTS"
|
msgid "CONTACTS"
|
||||||
msgstr "CONTACTOS"
|
msgstr "CONTACTOS"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1209
|
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1239
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Quitar"
|
msgstr "Quitar"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:103
|
#: ../js/ui/dateMenu.js:101
|
||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Preferencias de data e hora"
|
msgstr "Preferencias de data e hora"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:129
|
#: ../js/ui/dateMenu.js:127
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Abrir o calendario"
|
msgstr "Abrir o calendario"
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/dateMenu.js:187
|
#: ../js/ui/dateMenu.js:185
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a %e de %b, %R:%S"
|
msgstr "%a %e de %b, %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:188
|
#: ../js/ui/dateMenu.js:186
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a %e de %b, %R"
|
msgstr "%a %e de %b, %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/dateMenu.js:192
|
#: ../js/ui/dateMenu.js:190
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R:%S"
|
msgstr "%a %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:193
|
#: ../js/ui/dateMenu.js:191
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %R"
|
msgstr "%a %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/dateMenu.js:200
|
#: ../js/ui/dateMenu.js:198
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%a %e de %b, %l:%M:%S"
|
msgstr "%a %e de %b, %l:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:201
|
#: ../js/ui/dateMenu.js:199
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%a %e de %b, %l:%M %p"
|
msgstr "%a %e de %b, %l:%M %p"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/dateMenu.js:205
|
#: ../js/ui/dateMenu.js:203
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %l:%M:%S %p"
|
msgstr "%a %l:%M:%S %p"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:206
|
#: ../js/ui/dateMenu.js:204
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l:%M %p"
|
msgstr "%a %l:%M %p"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:217
|
#: ../js/ui/dateMenu.js:215
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%a, %e de %B, %Y"
|
msgstr "%a, %e de %B, %Y"
|
||||||
|
|
||||||
@ -680,11 +680,11 @@ msgstr[1] "O seu computador reiniciarase automaticamente en %d segundos."
|
|||||||
msgid "Restarting the system."
|
msgid "Restarting the system."
|
||||||
msgstr "Reiniciando o sistema."
|
msgstr "Reiniciando o sistema."
|
||||||
|
|
||||||
#: ../js/ui/extensionSystem.js:404
|
#: ../js/ui/extensionSystem.js:379
|
||||||
msgid "Install"
|
msgid "Install"
|
||||||
msgstr "Instalar"
|
msgstr "Instalar"
|
||||||
|
|
||||||
#: ../js/ui/extensionSystem.js:408
|
#: ../js/ui/extensionSystem.js:383
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?"
|
msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?"
|
||||||
@ -693,7 +693,7 @@ msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?"
|
|||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "área de notificación"
|
msgstr "área de notificación"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
|
#: ../js/ui/keyboard.js:545 ../js/ui/status/keyboard.js:42
|
||||||
#: ../js/ui/status/power.js:203
|
#: ../js/ui/status/power.js:203
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Teclado"
|
msgstr "Teclado"
|
||||||
@ -755,24 +755,24 @@ msgid "Web Page"
|
|||||||
msgstr "Páxina web"
|
msgstr "Páxina web"
|
||||||
|
|
||||||
#. Translators: this is a filename used for screencast recording
|
#. Translators: this is a filename used for screencast recording
|
||||||
#: ../js/ui/main.js:118
|
#: ../js/ui/main.js:126
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Screencast from %d %t"
|
msgid "Screencast from %d %t"
|
||||||
msgstr "Screencast desde %d %t"
|
msgstr "Screencast desde %d %t"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1202
|
#: ../js/ui/messageTray.js:1232
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Abrir"
|
msgstr "Abrir"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1219
|
#: ../js/ui/messageTray.js:1249
|
||||||
msgid "Unmute"
|
msgid "Unmute"
|
||||||
msgstr "Desactivar silencio"
|
msgstr "Desactivar silencio"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1219
|
#: ../js/ui/messageTray.js:1249
|
||||||
msgid "Mute"
|
msgid "Mute"
|
||||||
msgstr "Silenciar"
|
msgstr "Silenciar"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2492
|
#: ../js/ui/messageTray.js:2522
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Información do sistema"
|
msgstr "Información do sistema"
|
||||||
|
|
||||||
@ -857,39 +857,44 @@ msgstr "Contrasinal da rede de banda larga móbil"
|
|||||||
msgid "A password is required to connect to '%s'."
|
msgid "A password is required to connect to '%s'."
|
||||||
msgstr "Requírese un contrasinal para conectarse a «%s»."
|
msgstr "Requírese un contrasinal para conectarse a «%s»."
|
||||||
|
|
||||||
|
#: ../js/ui/notificationDaemon.js:486 ../src/shell-app.c:374
|
||||||
|
msgctxt "program"
|
||||||
|
msgid "Unknown"
|
||||||
|
msgstr "Descoñecido"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:90
|
#: ../js/ui/overview.js:90
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Desfacer"
|
msgstr "Desfacer"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:132
|
#: ../js/ui/overview.js:130
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Vista xeral"
|
msgstr "Vista xeral"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:202
|
#: ../js/ui/overview.js:200
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Xanelas"
|
msgstr "Xanelas"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:205
|
#: ../js/ui/overview.js:203
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicativos"
|
msgstr "Aplicativos"
|
||||||
|
|
||||||
#. Translators: this is the name of the dock/favorites area on
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
#. the left of the overview
|
#. the left of the overview
|
||||||
#: ../js/ui/overview.js:231
|
#: ../js/ui/overview.js:229
|
||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Taboleiro"
|
msgstr "Taboleiro"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:592
|
#: ../js/ui/panel.js:564
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Saír"
|
msgstr "Saír"
|
||||||
|
|
||||||
#. Translators: If there is no suitable word for "Activities"
|
#. Translators: If there is no suitable word for "Activities"
|
||||||
#. in your language, you can use the word for "Overview".
|
#. in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:624
|
#: ../js/ui/panel.js:596
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Actividades"
|
msgstr "Actividades"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:999
|
#: ../js/ui/panel.js:962
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Barra superior"
|
msgstr "Barra superior"
|
||||||
|
|
||||||
@ -943,11 +948,11 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Escriba unha orde:"
|
msgstr "Escriba unha orde:"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:321
|
#: ../js/ui/searchDisplay.js:323
|
||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "Buscando…"
|
msgstr "Buscando…"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:374
|
#: ../js/ui/searchDisplay.js:376
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr "Non hai resultados que coincidan."
|
msgstr "Non hai resultados que coincidan."
|
||||||
|
|
||||||
@ -967,7 +972,7 @@ msgstr "Mostrar texto"
|
|||||||
msgid "Hide Text"
|
msgid "Hide Text"
|
||||||
msgstr "Ocultar texto"
|
msgstr "Ocultar texto"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:271
|
#: ../js/ui/shellMountOperation.js:272
|
||||||
msgid "Wrong password, please try again"
|
msgid "Wrong password, please try again"
|
||||||
msgstr "Contrasinal incorrecto, ténteo de novo"
|
msgstr "Contrasinal incorrecto, ténteo de novo"
|
||||||
|
|
||||||
@ -1019,9 +1024,9 @@ msgid "Large Text"
|
|||||||
msgstr "Texto grande"
|
msgstr "Texto grande"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:31 ../js/ui/status/bluetooth.js:35
|
#: ../js/ui/status/bluetooth.js:31 ../js/ui/status/bluetooth.js:35
|
||||||
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/bluetooth.js:338
|
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/bluetooth.js:308
|
||||||
#: ../js/ui/status/bluetooth.js:368 ../js/ui/status/bluetooth.js:404
|
#: ../js/ui/status/bluetooth.js:339 ../js/ui/status/bluetooth.js:375
|
||||||
#: ../js/ui/status/bluetooth.js:433 ../js/ui/status/network.js:890
|
#: ../js/ui/status/bluetooth.js:404 ../js/ui/status/network.js:889
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bluetooth"
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
@ -1050,11 +1055,12 @@ msgstr "hardware desactivado"
|
|||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr "Conexión"
|
msgstr "Conexión"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:211 ../js/ui/status/network.js:491
|
#: ../js/ui/status/bluetooth.js:211 ../js/ui/status/network.js:490
|
||||||
msgid "disconnecting..."
|
msgid "disconnecting..."
|
||||||
msgstr "desconectando…"
|
msgstr "desconectando…"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:224 ../js/ui/status/network.js:497
|
#: ../js/ui/status/bluetooth.js:224 ../js/ui/status/network.js:496
|
||||||
|
#: ../js/ui/status/network.js:956
|
||||||
msgid "connecting..."
|
msgid "connecting..."
|
||||||
msgstr "conectando…"
|
msgstr "conectando…"
|
||||||
|
|
||||||
@ -1087,69 +1093,69 @@ msgstr "Preferencias do rato"
|
|||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Preferencias do son"
|
msgstr "Preferencias do son"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:369
|
#: ../js/ui/status/bluetooth.js:340
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Authorization request from %s"
|
msgid "Authorization request from %s"
|
||||||
msgstr "Solicitude de autorización de %s"
|
msgstr "Solicitude de autorización de %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:375
|
#: ../js/ui/status/bluetooth.js:346
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants access to the service '%s'"
|
msgid "Device %s wants access to the service '%s'"
|
||||||
msgstr "O dispositivo %s quere acceder ao servizo «%s»"
|
msgstr "O dispositivo %s quere acceder ao servizo «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:377
|
#: ../js/ui/status/bluetooth.js:348
|
||||||
msgid "Always grant access"
|
msgid "Always grant access"
|
||||||
msgstr "Conceder acceso sempre"
|
msgstr "Conceder acceso sempre"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:378
|
#: ../js/ui/status/bluetooth.js:349
|
||||||
msgid "Grant this time only"
|
msgid "Grant this time only"
|
||||||
msgstr "Conceder só esta vez"
|
msgstr "Conceder só esta vez"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:379 ../js/ui/telepathyClient.js:1093
|
#: ../js/ui/status/bluetooth.js:350 ../js/ui/telepathyClient.js:1090
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Rexeitar"
|
msgstr "Rexeitar"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:405
|
#: ../js/ui/status/bluetooth.js:376
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing confirmation for %s"
|
msgid "Pairing confirmation for %s"
|
||||||
msgstr "Confirmación de emparellado para «%s»"
|
msgstr "Confirmación de emparellado para «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:441
|
#: ../js/ui/status/bluetooth.js:382 ../js/ui/status/bluetooth.js:412
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants to pair with this computer"
|
msgid "Device %s wants to pair with this computer"
|
||||||
msgstr "O dispositivo «%s» quere emparellarse con este equipo"
|
msgstr "O dispositivo «%s» quere emparellarse con este equipo"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:412
|
#: ../js/ui/status/bluetooth.js:383
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
|
||||||
msgstr "Confirme que o PIN mostrado en «%s» coincide co do dispositivo."
|
msgstr "Confirme que o PIN «%06d» coincide co mostrado no dispositivo."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:414
|
#: ../js/ui/status/bluetooth.js:385
|
||||||
msgid "Matches"
|
msgid "Matches"
|
||||||
msgstr "Coincide"
|
msgstr "Coincide"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:415
|
#: ../js/ui/status/bluetooth.js:386
|
||||||
msgid "Does not match"
|
msgid "Does not match"
|
||||||
msgstr "Non coincide"
|
msgstr "Non coincide"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:434
|
#: ../js/ui/status/bluetooth.js:405
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing request for %s"
|
msgid "Pairing request for %s"
|
||||||
msgstr "Solicitude de emparellamento para «%s»"
|
msgstr "Solicitude de emparellamento para «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:442
|
#: ../js/ui/status/bluetooth.js:413
|
||||||
msgid "Please enter the PIN mentioned on the device."
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
msgstr "Escriba o PIN mencionado no dispositivo."
|
msgstr "Escriba o PIN mencionado no dispositivo."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:458
|
#: ../js/ui/status/bluetooth.js:430
|
||||||
msgid "OK"
|
msgid "OK"
|
||||||
msgstr "Aceptar"
|
msgstr "Aceptar"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:68
|
#: ../js/ui/status/keyboard.js:69
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Mostrar a distribución do teclado"
|
msgstr "Mostrar a distribución do teclado"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:73
|
#: ../js/ui/status/keyboard.js:71
|
||||||
msgid "Region and Language Settings"
|
msgid "Region and Language Settings"
|
||||||
msgstr "Configuración rexional e de idioma"
|
msgstr "Configuración rexional e de idioma"
|
||||||
|
|
||||||
@ -1164,116 +1170,116 @@ msgstr "desactivada"
|
|||||||
|
|
||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||||
#: ../js/ui/status/network.js:489
|
#: ../js/ui/status/network.js:488
|
||||||
msgid "unmanaged"
|
msgid "unmanaged"
|
||||||
msgstr "non xestionada"
|
msgstr "non xestionada"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password
|
#. Translators: this is for network connections that require some kind of key or password
|
||||||
#: ../js/ui/status/network.js:500
|
#: ../js/ui/status/network.js:499 ../js/ui/status/network.js:959
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "requírese autenticación"
|
msgstr "requírese autenticación"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing
|
#. module, which is missing
|
||||||
#: ../js/ui/status/network.js:510
|
#: ../js/ui/status/network.js:509
|
||||||
msgid "firmware missing"
|
msgid "firmware missing"
|
||||||
msgstr "falta o «firmware»"
|
msgstr "falta o «firmware»"
|
||||||
|
|
||||||
#. Translators: this is for wired network devices that are physically disconnected
|
#. Translators: this is for wired network devices that are physically disconnected
|
||||||
#: ../js/ui/status/network.js:517
|
#: ../js/ui/status/network.js:516
|
||||||
msgid "cable unplugged"
|
msgid "cable unplugged"
|
||||||
msgstr "cable desconectado"
|
msgstr "cable desconectado"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage
|
#. is disabled by rfkill, or it has no coverage
|
||||||
#: ../js/ui/status/network.js:522
|
#: ../js/ui/status/network.js:521
|
||||||
msgid "unavailable"
|
msgid "unavailable"
|
||||||
msgstr "non dispoñíbel"
|
msgstr "non dispoñíbel"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:524
|
#: ../js/ui/status/network.js:523 ../js/ui/status/network.js:961
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "conexión fallida"
|
msgstr "conexión fallida"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1497
|
#: ../js/ui/status/network.js:584 ../js/ui/status/network.js:1537
|
||||||
msgid "More..."
|
msgid "More..."
|
||||||
msgstr "Máis…"
|
msgstr "Máis…"
|
||||||
|
|
||||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||||
#. and we cannot access its settings (including the name)
|
#. and we cannot access its settings (including the name)
|
||||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1432
|
#: ../js/ui/status/network.js:620 ../js/ui/status/network.js:1472
|
||||||
msgid "Connected (private)"
|
msgid "Connected (private)"
|
||||||
msgstr "Conectada (privada)"
|
msgstr "Conectada (privada)"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:696
|
#: ../js/ui/status/network.js:695
|
||||||
msgid "Auto Ethernet"
|
msgid "Auto Ethernet"
|
||||||
msgstr "Ethernet automática"
|
msgstr "Ethernet automática"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:754
|
#: ../js/ui/status/network.js:753
|
||||||
msgid "Auto broadband"
|
msgid "Auto broadband"
|
||||||
msgstr "Banda larga automática"
|
msgstr "Banda larga automática"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:757
|
#: ../js/ui/status/network.js:756
|
||||||
msgid "Auto dial-up"
|
msgid "Auto dial-up"
|
||||||
msgstr "Marcado automático"
|
msgstr "Marcado automático"
|
||||||
|
|
||||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||||
#: ../js/ui/status/network.js:876 ../js/ui/status/network.js:1444
|
#: ../js/ui/status/network.js:875 ../js/ui/status/network.js:1484
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Auto %s"
|
msgid "Auto %s"
|
||||||
msgstr "%s automática"
|
msgstr "%s automática"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:878
|
#: ../js/ui/status/network.js:877
|
||||||
msgid "Auto bluetooth"
|
msgid "Auto bluetooth"
|
||||||
msgstr "Bluetooth automática"
|
msgstr "Bluetooth automática"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1446
|
#: ../js/ui/status/network.js:1486
|
||||||
msgid "Auto wireless"
|
msgid "Auto wireless"
|
||||||
msgstr "Sen fíos automática"
|
msgstr "Sen fíos automática"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1533
|
#: ../js/ui/status/network.js:1573
|
||||||
msgid "Network"
|
msgid "Network"
|
||||||
msgstr "Rede"
|
msgstr "Rede"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1540
|
#: ../js/ui/status/network.js:1580
|
||||||
msgid "Enable networking"
|
msgid "Enable networking"
|
||||||
msgstr "Activar rede"
|
msgstr "Activar rede"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1552
|
#: ../js/ui/status/network.js:1601
|
||||||
msgid "Wired"
|
msgid "Wired"
|
||||||
msgstr "Con fíos"
|
msgstr "Con fíos"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1563
|
#: ../js/ui/status/network.js:1612
|
||||||
msgid "Wireless"
|
msgid "Wireless"
|
||||||
msgstr "Sen fíos"
|
msgstr "Sen fíos"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1573
|
#: ../js/ui/status/network.js:1622
|
||||||
msgid "Mobile broadband"
|
msgid "Mobile broadband"
|
||||||
msgstr "Banda larga móbil"
|
msgstr "Banda larga móbil"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1583
|
#: ../js/ui/status/network.js:1632
|
||||||
msgid "VPN Connections"
|
msgid "VPN Connections"
|
||||||
msgstr "Conexións VPN"
|
msgstr "Conexións VPN"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1594
|
#: ../js/ui/status/network.js:1639
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Preferencias da rede"
|
msgstr "Preferencias da rede"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1731
|
#: ../js/ui/status/network.js:1683
|
||||||
|
msgid "Network Manager"
|
||||||
|
msgstr "Xestor da rede"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:1776
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Produciuse un fallo na conexión"
|
msgstr "Produciuse un fallo na conexión"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1732
|
#: ../js/ui/status/network.js:1777
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Produciuse un fallo na activación da conexión de rede"
|
msgstr "Produciuse un fallo na activación da conexión de rede"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1985
|
#: ../js/ui/status/network.js:2037
|
||||||
msgid "Networking is disabled"
|
msgid "Networking is disabled"
|
||||||
msgstr "A rede está desactivada"
|
msgstr "A rede está desactivada"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:2109
|
|
||||||
msgid "Network Manager"
|
|
||||||
msgstr "Xestor da rede"
|
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:59
|
#: ../js/ui/status/power.js:59
|
||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Batería"
|
msgstr "Batería"
|
||||||
@ -1366,6 +1372,11 @@ msgstr "Tablet"
|
|||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Equipo"
|
msgstr "Equipo"
|
||||||
|
|
||||||
|
#: ../js/ui/status/power.js:215
|
||||||
|
msgctxt "device"
|
||||||
|
msgid "Unknown"
|
||||||
|
msgstr "Descoñecido"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:25 ../js/ui/status/volume.js:39
|
#: ../js/ui/status/volume.js:25 ../js/ui/status/volume.js:39
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
@ -1391,7 +1402,7 @@ msgstr "Chamar"
|
|||||||
msgid "File Transfer"
|
msgid "File Transfer"
|
||||||
msgstr "Transferencia de ficheiro"
|
msgstr "Transferencia de ficheiro"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:369
|
#: ../js/ui/telepathyClient.js:368
|
||||||
msgid "Subscription request"
|
msgid "Subscription request"
|
||||||
msgstr "Solicitude de autorización"
|
msgstr "Solicitude de autorización"
|
||||||
|
|
||||||
@ -1399,22 +1410,22 @@ msgstr "Solicitude de autorización"
|
|||||||
msgid "Connection error"
|
msgid "Connection error"
|
||||||
msgstr "Erro de conexión"
|
msgstr "Erro de conexión"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:663
|
#: ../js/ui/telepathyClient.js:662
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s está conectado/a."
|
msgstr "%s está conectado/a."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:667
|
#: ../js/ui/telepathyClient.js:666
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr "%s está desconectado/a."
|
msgstr "%s está desconectado/a."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:671
|
#: ../js/ui/telepathyClient.js:670
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr "%s está ausente."
|
msgstr "%s está ausente."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:674
|
#: ../js/ui/telepathyClient.js:673
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr "%s está ocupado/a."
|
msgstr "%s está ocupado/a."
|
||||||
@ -1422,35 +1433,35 @@ msgstr "%s está ocupado/a."
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/telepathyClient.js:889
|
#: ../js/ui/telepathyClient.js:888
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||||
msgstr "Enviado ás <b>%X</b> o <b>%A</b>"
|
msgstr "Enviado ás <b>%X</b> o <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||||
#. shown when you get a chat message in the same year.
|
#. shown when you get a chat message in the same year.
|
||||||
#: ../js/ui/telepathyClient.js:895
|
#: ../js/ui/telepathyClient.js:894
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||||
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>"
|
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
#. 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.
|
#. shown when you get a chat message in a different year.
|
||||||
#: ../js/ui/telepathyClient.js:900
|
#: ../js/ui/telepathyClient.js:899
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>, %Y"
|
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>, %Y"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/telepathyClient.js:942
|
#: ../js/ui/telepathyClient.js:941
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "Agora %s chámase %s"
|
msgstr "Agora %s chámase %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/telepathyClient.js:1044
|
#: ../js/ui/telepathyClient.js:1041
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Convite a %s"
|
msgstr "Convite a %s"
|
||||||
@ -1458,35 +1469,35 @@ msgstr "Convite a %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. 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
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/telepathyClient.js:1052
|
#: ../js/ui/telepathyClient.js:1049
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s estalle convidando a unirse a %s"
|
msgstr "%s estalle convidando a unirse a %s"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
|
#: ../js/ui/telepathyClient.js:1051 ../js/ui/telepathyClient.js:1130
|
||||||
#: ../js/ui/telepathyClient.js:1231
|
#: ../js/ui/telepathyClient.js:1194
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Rexeitar"
|
msgstr "Rexeitar"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
|
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
|
||||||
#: ../js/ui/telepathyClient.js:1232
|
#: ../js/ui/telepathyClient.js:1195
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Aceptar"
|
msgstr "Aceptar"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/telepathyClient.js:1085
|
#: ../js/ui/telepathyClient.js:1082
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Videochamada de %s"
|
msgstr "Videochamada de %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/telepathyClient.js:1088
|
#: ../js/ui/telepathyClient.js:1085
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Chamada de %s"
|
msgstr "Chamada de %s"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/telepathyClient.js:1095
|
#: ../js/ui/telepathyClient.js:1092
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Responder"
|
msgstr "Responder"
|
||||||
|
|
||||||
@ -1495,112 +1506,112 @@ msgstr "Responder"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/telepathyClient.js:1127
|
#: ../js/ui/telepathyClient.js:1124
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s esta enviándolle %s"
|
msgstr "%s esta enviándolle %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/telepathyClient.js:1196
|
#: ../js/ui/telepathyClient.js:1159
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s solicítalle permiso para ver cando está en liña"
|
msgstr "%s solicítalle permiso para ver cando está en liña"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1289
|
#: ../js/ui/telepathyClient.js:1252
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Erro da rede"
|
msgstr "Erro da rede"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1291
|
#: ../js/ui/telepathyClient.js:1254
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Fallou a autenticación"
|
msgstr "Fallou a autenticación"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1293
|
#: ../js/ui/telepathyClient.js:1256
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Erro de cifrado"
|
msgstr "Erro de cifrado"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1295
|
#: ../js/ui/telepathyClient.js:1258
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Certificado non fornecido"
|
msgstr "Certificado non fornecido"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1297
|
#: ../js/ui/telepathyClient.js:1260
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Non se confía no certificado"
|
msgstr "Non se confía no certificado"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1299
|
#: ../js/ui/telepathyClient.js:1262
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Certificado caducado"
|
msgstr "Certificado caducado"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1301
|
#: ../js/ui/telepathyClient.js:1264
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Certificado non activado"
|
msgstr "Certificado non activado"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1303
|
#: ../js/ui/telepathyClient.js:1266
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "O nome do servidor do certificado non coincide"
|
msgstr "O nome do servidor do certificado non coincide"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1305
|
#: ../js/ui/telepathyClient.js:1268
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "A pegada do certificado non coincide"
|
msgstr "A pegada do certificado non coincide"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1307
|
#: ../js/ui/telepathyClient.js:1270
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Certificado autoasinado"
|
msgstr "Certificado autoasinado"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1309
|
#: ../js/ui/telepathyClient.js:1272
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "O estado está definido a «desconectado»"
|
msgstr "O estado está definido a «desconectado»"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1311
|
#: ../js/ui/telepathyClient.js:1274
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "O cifrado non está dispoñíbel"
|
msgstr "O cifrado non está dispoñíbel"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1313
|
#: ../js/ui/telepathyClient.js:1276
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "O certificado non é válido"
|
msgstr "O certificado non é válido"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1315
|
#: ../js/ui/telepathyClient.js:1278
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Rexeitouse a conexión"
|
msgstr "Rexeitouse a conexión"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1317
|
#: ../js/ui/telepathyClient.js:1280
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Non é posíbel estabelecer a conexión"
|
msgstr "Non é posíbel estabelecer a conexión"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1319
|
#: ../js/ui/telepathyClient.js:1282
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Perdeuse a conexión"
|
msgstr "Perdeuse a conexión"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1321
|
#: ../js/ui/telepathyClient.js:1284
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Esta cuenta xa está conectada ao servidor"
|
msgstr "Esta cuenta xa está conectada ao servidor"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1323
|
#: ../js/ui/telepathyClient.js:1286
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Substituíuse a conexión por unha nova conexión empregando o mesmo recurso"
|
"Substituíuse a conexión por unha nova conexión empregando o mesmo recurso"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1325
|
#: ../js/ui/telepathyClient.js:1288
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Esta conta xa existe no servidor"
|
msgstr "Esta conta xa existe no servidor"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1327
|
#: ../js/ui/telepathyClient.js:1290
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nestes intres o servidor está moi ocupado tentando xestionar a conexión"
|
"Nestes intres o servidor está moi ocupado tentando xestionar a conexión"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1329
|
#: ../js/ui/telepathyClient.js:1292
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Revogouse o certificado"
|
msgstr "Revogouse o certificado"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1331
|
#: ../js/ui/telepathyClient.js:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"O certificado usa un algoritmo de cifrado inseguro ou é criptográficamente "
|
"O certificado usa un algoritmo de cifrado inseguro ou é criptográficamente "
|
||||||
"débil"
|
"débil"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1333
|
#: ../js/ui/telepathyClient.js:1296
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -1609,66 +1620,70 @@ msgstr ""
|
|||||||
"certificado do servidor excede os límites impostos pola biblioteca de "
|
"certificado do servidor excede os límites impostos pola biblioteca de "
|
||||||
"criptografía."
|
"criptografía."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1335
|
#: ../js/ui/telepathyClient.js:1298
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Erro interno"
|
msgstr "Erro interno"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/telepathyClient.js:1345
|
#: ../js/ui/telepathyClient.js:1308
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "Fallou a conexión a %s"
|
msgstr "Fallou a conexión a %s"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1354
|
#: ../js/ui/telepathyClient.js:1317
|
||||||
msgid "Reconnect"
|
msgid "Reconnect"
|
||||||
msgstr "Reconectar"
|
msgstr "Reconectar"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1355
|
#: ../js/ui/telepathyClient.js:1318
|
||||||
msgid "Edit account"
|
msgid "Edit account"
|
||||||
msgstr "Editar conta"
|
msgstr "Editar conta"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1401
|
#: ../js/ui/telepathyClient.js:1364
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Razón descoñecida"
|
msgstr "Razón descoñecida"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:135
|
#: ../js/ui/userMenu.js:136
|
||||||
msgid "Hidden"
|
msgid "Hidden"
|
||||||
msgstr "Oculto"
|
msgstr "Oculto"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:141
|
#: ../js/ui/userMenu.js:142
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Inactivo"
|
msgstr "Inactivo"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:144
|
#: ../js/ui/userMenu.js:145
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Non dispoñíbel"
|
msgstr "Non dispoñíbel"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:624
|
#: ../js/ui/userMenu.js:565 ../js/ui/userMenu.js:705
|
||||||
msgid "Notifications"
|
|
||||||
msgstr "Notificacións"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:632
|
|
||||||
msgid "System Settings"
|
|
||||||
msgstr "Preferencias do sistema"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:646
|
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Cambiar de usuario"
|
msgstr "Cambiar de usuario"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:651
|
#: ../js/ui/userMenu.js:566
|
||||||
|
msgid "Switch Session"
|
||||||
|
msgstr "Cambiar de sesión"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:681
|
||||||
|
msgid "Notifications"
|
||||||
|
msgstr "Notificacións"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:690
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "Preferencias do sistema"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:710
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Saír da sesión"
|
msgstr "Saír da sesión"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:659
|
#: ../js/ui/userMenu.js:718
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Bloquear"
|
msgstr "Bloquear"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:677
|
#: ../js/ui/userMenu.js:736
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "O seu estado do chat estabelecerase a «ocupado»"
|
msgstr "O seu estado do chat estabelecerase a «ocupado»"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:678
|
#: ../js/ui/userMenu.js:737
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1734,15 +1749,25 @@ msgstr[1] "%u entradas"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sons do sistema"
|
msgstr "Sons do sistema"
|
||||||
|
|
||||||
#: ../src/main.c:255
|
#: ../src/main.c:313
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Imprimir versión"
|
msgstr "Imprimir versión"
|
||||||
|
|
||||||
#: ../src/main.c:261
|
#: ../src/main.c:319
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Modo usado por GDM para a pantalla de inicio"
|
msgstr "Modo usado por GDM para a pantalla de inicio"
|
||||||
|
|
||||||
#: ../src/shell-app.c:619
|
#: ../src/main.c:325
|
||||||
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
|
msgstr ""
|
||||||
|
"Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de "
|
||||||
|
"sesión"
|
||||||
|
|
||||||
|
#: ../src/main.c:331
|
||||||
|
msgid "List possible modes"
|
||||||
|
msgstr "Listar os modos posíbeis"
|
||||||
|
|
||||||
|
#: ../src/shell-app.c:622
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "Produciuse un fallo ao iniciar «%s»"
|
msgstr "Produciuse un fallo ao iniciar «%s»"
|
||||||
|
44
po/ko.po
44
po/ko.po
@ -13,7 +13,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-04-19 21:14+0000\n"
|
"POT-Creation-Date: 2012-04-19 21:14+0000\n"
|
||||||
"PO-Revision-Date: 2012-04-26 01:05+0900\n"
|
"PO-Revision-Date: 2012-05-19 22:57+0900\n"
|
||||||
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
|
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
|
||||||
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
|
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -51,7 +51,7 @@ msgstr "Alt-F2 대화 상자에서 내부 디버깅 및 감시 기능에 접근
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||||
msgid "Uuids of extensions to enable"
|
msgid "Uuids of extensions to enable"
|
||||||
msgstr "사용할 확장 기능의 UUID 목록"
|
msgstr "사용할 확장의 UUID 목록"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -71,11 +71,7 @@ msgid ""
|
|||||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||||
"remove already saved data."
|
"remove already saved data."
|
||||||
msgstr ""
|
msgstr "셸에서는 최근에 사용한 프로그램을(실행 메뉴 등에서) 표시하는 목적으로, 현재 사용 중인 프로그램을 감시합니다. 이 데이터는 비공개 데이터이지만 사생활 문제가 걱정된다면 이 기능을 끌 수도 있습니다. 단 이 기능을 사용하지 않더라도 이미 저장된 데이터를 제거하지는 않습니다."
|
||||||
"셸에서는 최근에 사용한 프로그램을 (실행 메뉴 등에서) 표시하는 목적으로, 현재 "
|
|
||||||
"사용 중인 프로그램을 감시합니다. 이 데이터는 비공개 데이터이지만 사생활 문제"
|
|
||||||
"가 걱정된다면 이 기능을 끌 수도 있습니다. 단 이 기능을 사용하지 않더라도 이"
|
|
||||||
"미 저장된 데이터를 제거하지는 않습니다."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
@ -93,7 +89,7 @@ msgstr "사용하지 않는 OpenSearch 서비스"
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "명령어 대화 상자에 (Alt-F2) 기록 기능"
|
msgstr "명령어 대화 상자에(Alt-F2) 기록 기능"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
@ -166,7 +162,7 @@ msgid "The gstreamer pipeline used to encode the screencast"
|
|||||||
msgstr "스크린 방송 인코딩에 사용할 gstreamer 파이프라인"
|
msgstr "스크린 방송 인코딩에 사용할 gstreamer 파이프라인"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||||
#, no-c-format, fuzzy
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -178,45 +174,31 @@ msgid ""
|
|||||||
"'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux' and records to WEBM "
|
"'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux' and records to WEBM "
|
||||||
"using the VP8 codec. %T is used as a placeholder for a guess at the optimal "
|
"using the VP8 codec. %T is used as a placeholder for a guess at the optimal "
|
||||||
"thread count on the system."
|
"thread count on the system."
|
||||||
msgstr ""
|
msgstr "녹화 인코딩에 사용할 GStreamer 파이프라인을 지정합니다. gst-launch 프로그램에 사용하는 문법을 따릅니다. 녹화한 영상이 입력되는 싱크 패드는 이 파이프라인에 연결하지 않은 상태여야 합니다. 보통은 소스 패드도 연결하지 않고, 소스 패드의 출력을 출력 파일에 기록합니다. 하지만 파이프라인에서 이 출력을 처리할 수도 있습니다. shout2send 같은 프로그램을 이용해 아이스캐스트 서버로 출력을 보내거나 하는 용도로 사용할 수 있습니다. 설정을 취소하거나 빈 값으로 설정하면, 기본 파이프라인을 사용합니다. 기본 파이프라인은 'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux'이고 VP8 코덱을 사용해 WEBM 형식으로 녹화합니다. '%T' 기호는 시스템에서 최적으로 생각되는 스레드 수로 대체됩니다."
|
||||||
"녹화 인코딩에 사용할 GStreamer 파이프라인을 지정합니다. gst-launch에 사용하"
|
|
||||||
"는 문법을 따릅니다. 파이프라인은 녹화한 영상이 있는 싱크 패드를 연결하지 않"
|
|
||||||
"은 상태여야 합니다. 보통 소스 패드와 연결하지 않았을 것입니다. 이 패드의 출력"
|
|
||||||
"은 출력 파일에 기록할 것입니다. 그러나 파이프라인은 이 출력을 다룰 수 있기도 "
|
|
||||||
"합니다 - 아마 shout2send와 같은 것을 통해 icecast 서버로 출력을 보내는데 사용"
|
|
||||||
"할지도 모릅니다. 만약 설정을 취소하거나 빈 값으로 설정한다면, 기본 파이프라인"
|
|
||||||
"을 사용할 것입니다. 이것은 현재 'vp8enc quality=8 speed=6 threads=%T ! "
|
|
||||||
"queue ! webmmux' 이며 VP8 코덱을 사용하여 WEBM으로 녹화합니다. %T는 시스템 상"
|
|
||||||
"의 최적의 스레드 수를 추측하기 위해 대체기호로 사용합니다."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.h:29
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "스크린 방송을 저장할 때 사용할 파일 확장자"
|
msgstr "스크린 방송을 저장할 때 사용할 파일 확장자"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:30
|
#: ../data/org.gnome.shell.gschema.xml.in.h:30
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"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 "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
"a different container format."
|
"a different container format."
|
||||||
msgstr ""
|
msgstr "녹화한 스크린 방송 영상 파일은, 현재 날짜와 여기서 설정하는 확장자를 붙여 파일 이름을 만듭니다. 다른 컨테이너 형식으로 녹화하려면 이 값을 바꿔야 합니다."
|
||||||
"스크린 방송 녹화 파일 이름은 현재 날짜와 이 확장자를 사용해서 결정됩니다. 녹"
|
|
||||||
"화할 때 다른 형식으로 바꿀 수도 있습니다."
|
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:125
|
#: ../js/extensionPrefs/main.js:125
|
||||||
#, c-format, fuzzy
|
#, c-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
msgstr "%s에 대한 기본 설정 대화상자를 불러오는데 오류가 발생했습니다:"
|
msgstr "%s에 대한 기본 설정 대화상자를 불러오는데 오류가 발생했습니다:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:165
|
#: ../js/extensionPrefs/main.js:165
|
||||||
#, fuzzy
|
|
||||||
msgid "<b>Extension</b>"
|
msgid "<b>Extension</b>"
|
||||||
msgstr "<b>확장</b>"
|
msgstr "<b>확장</b>"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:189
|
#: ../js/extensionPrefs/main.js:189
|
||||||
#, fuzzy
|
|
||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "위의 콤보상자를 사용하여 설정할 확장을 선택하십시오."
|
msgstr "위의 콤보상자를 사용해 설정할 확장을 선택하십시오."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:627
|
#: ../js/gdm/loginDialog.js:627
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
@ -674,13 +656,13 @@ msgstr "다시 입력하십시오:"
|
|||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:732
|
#: ../js/ui/lookingGlass.js:732
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "확장 기능을 설치하지 않았습니다"
|
msgstr "확장을 설치하지 않았습니다"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID.
|
#. Translators: argument is an extension UUID.
|
||||||
#: ../js/ui/lookingGlass.js:786
|
#: ../js/ui/lookingGlass.js:786
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "%s이(가) 발생한 에러가 없습니다."
|
msgstr "%s에서 발생한 에러가 없습니다."
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:792
|
#: ../js/ui/lookingGlass.js:792
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
@ -1167,7 +1149,7 @@ msgstr "더 보기..."
|
|||||||
#. and we cannot access its settings (including the name)
|
#. and we cannot access its settings (including the name)
|
||||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
||||||
msgid "Connected (private)"
|
msgid "Connected (private)"
|
||||||
msgstr "연결됨 (개인)"
|
msgstr "연결됨(개인)"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:696
|
#: ../js/ui/status/network.js:696
|
||||||
msgid "Auto Ethernet"
|
msgid "Auto Ethernet"
|
||||||
@ -1573,7 +1555,7 @@ msgstr "내부 오류"
|
|||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/telepathyClient.js:1345
|
#: ../js/ui/telepathyClient.js:1345
|
||||||
#, c-format, fuzzy
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "%s에 연결이 실패했습니다"
|
msgstr "%s에 연결이 실패했습니다"
|
||||||
|
|
||||||
|
159
po/lt.po
159
po/lt.po
@ -3,19 +3,20 @@
|
|||||||
# This file is distributed under the same license as the gnome-shell package.
|
# This file is distributed under the same license as the gnome-shell package.
|
||||||
# Žygimantas Beručka <zygis@gnome.org>, 2010, 2011, 2012.
|
# Žygimantas Beručka <zygis@gnome.org>, 2010, 2011, 2012.
|
||||||
# Algimantas Margevičius <gymka@mail.ru>, 2011.
|
# Algimantas Margevičius <gymka@mail.ru>, 2011.
|
||||||
|
# Mantas Kriaučiūnas <mantas@akl.lt>, 2012.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-03-30 17:59+0000\n"
|
"POT-Creation-Date: 2012-05-19 13:58+0000\n"
|
||||||
"PO-Revision-Date: 2012-04-05 15:14+0300\n"
|
"PO-Revision-Date: 2012-04-05 15:14+0300\n"
|
||||||
"Last-Translator: Žygimantas Beručka <zygis@gnome.org>\n"
|
"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
|
||||||
"Language-Team: Lithuanian\n"
|
"Language-Team: Lithuanian\n"
|
||||||
"Language: lt\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: lt\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
|
||||||
"100<10 || n%100>=20) ? 1 : 2);\n"
|
"100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
"X-Generator: Virtaal 0.7.0\n"
|
"X-Generator: Virtaal 0.7.0\n"
|
||||||
@ -23,7 +24,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "GNOME Shell"
|
msgstr "GNOME Shell aplinka"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:2
|
#: ../data/gnome-shell.desktop.in.in.h:2
|
||||||
msgid "Window management and application launching"
|
msgid "Window management and application launching"
|
||||||
@ -79,10 +80,11 @@ msgid ""
|
|||||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||||
"remove already saved data."
|
"remove already saved data."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Apvalkalas paprastai stebi aktyvias programas siekiant pateikti dažniausiai "
|
"Įprastai GNOME aplinka stebi aktyvias programas siekiant pateikti "
|
||||||
"naudojamas (pvz., leistukuose). Nors šie duomenys konfidencialiai saugomi, "
|
"dažniausiai naudojamas (pvz., leistukuose). Nors šie duomenys "
|
||||||
"jei norite, saugumo sumetimais galite šią funkciją išjungti. Atminkite, kad "
|
"konfidencialiai saugomi, jei norite, saugumo sumetimais galite šią funkciją "
|
||||||
"tai padarius jau įrašyti duomenys jau nebus įrašyti."
|
"išjungti. Atminkite, kad išjungus šią funkciją anksčiau įrašyti duomenys "
|
||||||
|
"nebus pašalinti."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
@ -222,7 +224,7 @@ msgstr ""
|
|||||||
#: ../js/extensionPrefs/main.js:125
|
#: ../js/extensionPrefs/main.js:125
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
msgstr "Kilo klaida įkeliant %s nustatymų dialogą:"
|
msgstr "Įvyko klaida įkeliant %s nustatymų dialogą:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:165
|
#: ../js/extensionPrefs/main.js:165
|
||||||
msgid "<b>Extension</b>"
|
msgid "<b>Extension</b>"
|
||||||
@ -232,40 +234,40 @@ msgstr "<b>Plėtinys</b>"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "Išskleidžiamajame sąraše pasirinkite konfigūruotiną plėtinį."
|
msgstr "Išskleidžiamajame sąraše pasirinkite konfigūruotiną plėtinį."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:624
|
#: ../js/gdm/loginDialog.js:627
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Seansas..."
|
msgstr "Seansas..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:786
|
#: ../js/gdm/loginDialog.js:789
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Prisijungti"
|
msgstr "Prisijungti"
|
||||||
|
|
||||||
#. Translators: this message is shown below the password entry field
|
#. Translators: this message is shown below the password entry field
|
||||||
#. to indicate the user can swipe their finger instead
|
#. to indicate the user can swipe their finger instead
|
||||||
#: ../js/gdm/loginDialog.js:831
|
#: ../js/gdm/loginDialog.js:834
|
||||||
msgid "(or swipe finger)"
|
msgid "(or swipe finger)"
|
||||||
msgstr "(arba perbraukite pirštu)"
|
msgstr "(arba perbraukite pirštu)"
|
||||||
|
|
||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:852
|
#: ../js/gdm/loginDialog.js:855
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Nėra sąraše?"
|
msgstr "Nėra sąraše?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:401
|
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
||||||
#: ../js/ui/extensionSystem.js:399 ../js/ui/networkAgent.js:153
|
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
|
||||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Atšaukti"
|
msgstr "Atsisakyti"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1025
|
#: ../js/gdm/loginDialog.js:1028
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Prisijungti"
|
msgstr "Prisijungti"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1377
|
#: ../js/gdm/loginDialog.js:1380
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Prisijungimo langas"
|
msgstr "Prisijungimo langas"
|
||||||
|
|
||||||
@ -673,11 +675,11 @@ msgstr[2] "Sistema bus paleista iš naujo po %d sekundžių."
|
|||||||
msgid "Restarting the system."
|
msgid "Restarting the system."
|
||||||
msgstr "Sistema paleidžiama iš naujo."
|
msgstr "Sistema paleidžiama iš naujo."
|
||||||
|
|
||||||
#: ../js/ui/extensionSystem.js:403
|
#: ../js/ui/extensionSystem.js:404
|
||||||
msgid "Install"
|
msgid "Install"
|
||||||
msgstr "Įdiegti"
|
msgstr "Įdiegti"
|
||||||
|
|
||||||
#: ../js/ui/extensionSystem.js:407
|
#: ../js/ui/extensionSystem.js:408
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Atsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
|
msgstr "Atsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
|
||||||
@ -686,7 +688,8 @@ msgstr "Atsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
|
|||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "dėklas"
|
msgstr "dėklas"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:544 ../js/ui/status/power.js:203
|
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
|
||||||
|
#: ../js/ui/status/power.js:203
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Klaviatūra"
|
msgstr "Klaviatūra"
|
||||||
|
|
||||||
@ -722,7 +725,7 @@ msgstr "Įjungta"
|
|||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1093
|
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Išjungta"
|
msgstr "Išjungta"
|
||||||
|
|
||||||
@ -939,7 +942,7 @@ msgstr "Įveskite komandą:"
|
|||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "Ieškoma..."
|
msgstr "Ieškoma..."
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:414
|
#: ../js/ui/searchDisplay.js:415
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr "Nerasta atitikmenų."
|
msgstr "Nerasta atitikmenų."
|
||||||
|
|
||||||
@ -1097,7 +1100,7 @@ msgstr "Visada leisti prieigą"
|
|||||||
msgid "Grant this time only"
|
msgid "Grant this time only"
|
||||||
msgstr "Leisti tik šį kartą"
|
msgstr "Leisti tik šį kartą"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1091
|
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Atmesti"
|
msgstr "Atmesti"
|
||||||
|
|
||||||
@ -1174,7 +1177,7 @@ msgstr "Trūksta integruotos programinės įrangos (firmware)"
|
|||||||
#. Translators: this is for wired network devices that are physically disconnected
|
#. Translators: this is for wired network devices that are physically disconnected
|
||||||
#: ../js/ui/status/network.js:517
|
#: ../js/ui/status/network.js:517
|
||||||
msgid "cable unplugged"
|
msgid "cable unplugged"
|
||||||
msgstr "kabelis neįjungtas"
|
msgstr "atjungtas laidas"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage
|
#. is disabled by rfkill, or it has no coverage
|
||||||
@ -1188,7 +1191,7 @@ msgstr "nepavyko prisijungti"
|
|||||||
|
|
||||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
||||||
msgid "More..."
|
msgid "More..."
|
||||||
msgstr "Daugiau..."
|
msgstr "Rodyti daugiau tinklų..."
|
||||||
|
|
||||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||||
#. and we cannot access its settings (including the name)
|
#. and we cannot access its settings (including the name)
|
||||||
@ -1385,7 +1388,7 @@ msgstr "Skambutis"
|
|||||||
#. We got the TpContact
|
#. We got the TpContact
|
||||||
#: ../js/ui/telepathyClient.js:287
|
#: ../js/ui/telepathyClient.js:287
|
||||||
msgid "File Transfer"
|
msgid "File Transfer"
|
||||||
msgstr "Failo perdavimas"
|
msgstr "Failo persiuntimas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:369
|
#: ../js/ui/telepathyClient.js:369
|
||||||
msgid "Subscription request"
|
msgid "Subscription request"
|
||||||
@ -1418,35 +1421,35 @@ msgstr "%s yra užsiėmęs (-usi)."
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/telepathyClient.js:887
|
#: ../js/ui/telepathyClient.js:889
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||||
msgstr "Išsiųsta <b>%X</b> <b>%A</b>"
|
msgstr "Išsiųsta <b>%X</b> <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||||
#. shown when you get a chat message in the same year.
|
#. shown when you get a chat message in the same year.
|
||||||
#: ../js/ui/telepathyClient.js:893
|
#: ../js/ui/telepathyClient.js:895
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||||
msgstr "Išsiųsta <b>%B %d</b>, <b>%A</b>"
|
msgstr "Išsiųsta <b>%B %d</b>, <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
#. 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.
|
#. shown when you get a chat message in a different year.
|
||||||
#: ../js/ui/telepathyClient.js:898
|
#: ../js/ui/telepathyClient.js:900
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
msgstr "Išsiųsta %Y <b>%B %d</b>, <b>%A</b>"
|
msgstr "Išsiųsta %Y <b>%B %d</b>, <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/telepathyClient.js:940
|
#: ../js/ui/telepathyClient.js:942
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s nuo šiol vadinasi %s"
|
msgstr "%s nuo šiol vadinasi %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/telepathyClient.js:1042
|
#: ../js/ui/telepathyClient.js:1044
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Kvietimas į %s"
|
msgstr "Kvietimas į %s"
|
||||||
@ -1454,35 +1457,35 @@ msgstr "Kvietimas į %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. 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
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/telepathyClient.js:1050
|
#: ../js/ui/telepathyClient.js:1052
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s jus kviečia prisijungti prie %s"
|
msgstr "%s jus kviečia prisijungti prie %s"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
|
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
|
||||||
#: ../js/ui/telepathyClient.js:1229
|
#: ../js/ui/telepathyClient.js:1231
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Atmesti"
|
msgstr "Atmesti"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1053 ../js/ui/telepathyClient.js:1132
|
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
|
||||||
#: ../js/ui/telepathyClient.js:1230
|
#: ../js/ui/telepathyClient.js:1232
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Priimti"
|
msgstr "Priimti"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/telepathyClient.js:1083
|
#: ../js/ui/telepathyClient.js:1085
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Vaizdo skambutis nuo %s"
|
msgstr "Vaizdo skambutis nuo %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/telepathyClient.js:1086
|
#: ../js/ui/telepathyClient.js:1088
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Skambutis nuo %s"
|
msgstr "Skambutis nuo %s"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/telepathyClient.js:1093
|
#: ../js/ui/telepathyClient.js:1095
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Atsiliepti"
|
msgstr "Atsiliepti"
|
||||||
|
|
||||||
@ -1491,110 +1494,110 @@ msgstr "Atsiliepti"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/telepathyClient.js:1125
|
#: ../js/ui/telepathyClient.js:1127
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s jums siunčia %s"
|
msgstr "%s jums siunčia %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/telepathyClient.js:1194
|
#: ../js/ui/telepathyClient.js:1196
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s pageidauja matyti, kai esate prisijungę prie interneto"
|
msgstr "%s pageidauja matyti, kai esate prisijungę prie interneto"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1287
|
#: ../js/ui/telepathyClient.js:1289
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Tinklo klaida"
|
msgstr "Tinklo klaida"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1289
|
#: ../js/ui/telepathyClient.js:1291
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Nepavyko patvirtinti tapatybės"
|
msgstr "Nepavyko patvirtinti tapatybės"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1291
|
#: ../js/ui/telepathyClient.js:1293
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Šifravimo klaida"
|
msgstr "Šifravimo klaida"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1293
|
#: ../js/ui/telepathyClient.js:1295
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Liudijimas nepateiktas"
|
msgstr "Liudijimas nepateiktas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1295
|
#: ../js/ui/telepathyClient.js:1297
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Liudijimas nepatikimas"
|
msgstr "Liudijimas nepatikimas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1297
|
#: ../js/ui/telepathyClient.js:1299
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Liudijimo galiojimas pasibaigęs"
|
msgstr "Liudijimo galiojimas pasibaigęs"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1299
|
#: ../js/ui/telepathyClient.js:1301
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Liudijimas neaktyvuotas"
|
msgstr "Liudijimas neaktyvuotas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1301
|
#: ../js/ui/telepathyClient.js:1303
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Liudijimo serverio vardo nesutapimas"
|
msgstr "Liudijimo serverio vardo nesutapimas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1303
|
#: ../js/ui/telepathyClient.js:1305
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Liudijimo piršto atspaudo nesutapimas"
|
msgstr "Liudijimo piršto atspaudo nesutapimas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1305
|
#: ../js/ui/telepathyClient.js:1307
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Liudijimas pačių pasirašytas"
|
msgstr "Liudijimas pačių pasirašytas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1307
|
#: ../js/ui/telepathyClient.js:1309
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Nustatyta atsijungimo būsena"
|
msgstr "Nustatyta atsijungimo būsena"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1309
|
#: ../js/ui/telepathyClient.js:1311
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Šifravimas negalimas"
|
msgstr "Šifravimas negalimas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1311
|
#: ../js/ui/telepathyClient.js:1313
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Liudijimas netinkamas"
|
msgstr "Liudijimas netinkamas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1313
|
#: ../js/ui/telepathyClient.js:1315
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Ryšys atmestas"
|
msgstr "Ryšys atmestas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1315
|
#: ../js/ui/telepathyClient.js:1317
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Nepavyko užmegzti ryšio"
|
msgstr "Nepavyko užmegzti ryšio"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1317
|
#: ../js/ui/telepathyClient.js:1319
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Ryšys nutrūko"
|
msgstr "Ryšys nutrūko"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1319
|
#: ../js/ui/telepathyClient.js:1321
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Ši paskyra jau prijungta prie serverio"
|
msgstr "Ši paskyra jau prijungta prie serverio"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1321
|
#: ../js/ui/telepathyClient.js:1323
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr "Ryšys pakeistas nauju ryšiu naudojant tą patį išteklių"
|
msgstr "Ryšys pakeistas nauju ryšiu naudojant tą patį išteklių"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1323
|
#: ../js/ui/telepathyClient.js:1325
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Tokia paskyra serveryje jau yra"
|
msgstr "Tokia paskyra serveryje jau yra"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1325
|
#: ../js/ui/telepathyClient.js:1327
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Šiuo metu serveris per daug užimtas šiai užklausai apdoroti"
|
msgstr "Šiuo metu serveris per daug užimtas šiai užklausai apdoroti"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1327
|
#: ../js/ui/telepathyClient.js:1329
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Liudijimas atšauktas"
|
msgstr "Liudijimas atšauktas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1329
|
#: ../js/ui/telepathyClient.js:1331
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Liudijimui naudojamas nesaugus šifravimo algoritmas arba jis kriptografiškai "
|
"Liudijimui naudojamas nesaugus šifravimo algoritmas arba jis kriptografiškai "
|
||||||
"silpnas"
|
"silpnas"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1331
|
#: ../js/ui/telepathyClient.js:1333
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -1602,26 +1605,26 @@ msgstr ""
|
|||||||
"Serverio liudijimo ilgis arba liudijimų eilės dydis viršija kriptografijos "
|
"Serverio liudijimo ilgis arba liudijimų eilės dydis viršija kriptografijos "
|
||||||
"bibliotekos apribojimus"
|
"bibliotekos apribojimus"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1333
|
#: ../js/ui/telepathyClient.js:1335
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Vidinė klaida"
|
msgstr "Vidinė klaida"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/telepathyClient.js:1343
|
#: ../js/ui/telepathyClient.js:1345
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "Nepavyko prisijungti prie %s"
|
msgstr "Nepavyko prisijungti prie %s"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1352
|
#: ../js/ui/telepathyClient.js:1354
|
||||||
msgid "Reconnect"
|
msgid "Reconnect"
|
||||||
msgstr "Prisijungti iš naujo"
|
msgstr "Prisijungti iš naujo"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1353
|
#: ../js/ui/telepathyClient.js:1355
|
||||||
msgid "Edit account"
|
msgid "Edit account"
|
||||||
msgstr "Taisyti paskyrą"
|
msgstr "Taisyti paskyrą"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1399
|
#: ../js/ui/telepathyClient.js:1401
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Nežinoma priežastis"
|
msgstr "Nežinoma priežastis"
|
||||||
|
|
||||||
@ -1647,7 +1650,7 @@ msgstr "Pranešimai"
|
|||||||
|
|
||||||
#: ../js/ui/userMenu.js:639
|
#: ../js/ui/userMenu.js:639
|
||||||
msgid "Online Accounts"
|
msgid "Online Accounts"
|
||||||
msgstr "Tinklo paskyros"
|
msgstr "Interneto paskyros"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:643
|
#: ../js/ui/userMenu.js:643
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
@ -1706,7 +1709,7 @@ msgstr "Orakulė sako %s"
|
|||||||
|
|
||||||
#: ../js/ui/wanda.js:168
|
#: ../js/ui/wanda.js:168
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Jūsų mėgstamiausias vėlykinis kiaušinis"
|
msgstr "Jūsų mėgstamiausias Velykinis kiaušinis"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:19
|
#: ../js/ui/windowAttentionHandler.js:19
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -1715,7 +1718,7 @@ msgstr "„%s“ yra pasirengusi"
|
|||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The number of sound outputs on a particular device
|
#. * The number of sound outputs on a particular device
|
||||||
#: ../src/gvc/gvc-mixer-control.c:1100
|
#: ../src/gvc/gvc-mixer-control.c:1089
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Output"
|
msgid "%u Output"
|
||||||
msgid_plural "%u Outputs"
|
msgid_plural "%u Outputs"
|
||||||
@ -1725,7 +1728,7 @@ msgstr[2] "%u išvestys"
|
|||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The number of sound inputs on a particular device
|
#. * The number of sound inputs on a particular device
|
||||||
#: ../src/gvc/gvc-mixer-control.c:1110
|
#: ../src/gvc/gvc-mixer-control.c:1099
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Input"
|
msgid "%u Input"
|
||||||
msgid_plural "%u Inputs"
|
msgid_plural "%u Inputs"
|
||||||
@ -1733,15 +1736,15 @@ msgstr[0] "%u įvestis"
|
|||||||
msgstr[1] "%u įvestys"
|
msgstr[1] "%u įvestys"
|
||||||
msgstr[2] "%u įvestys"
|
msgstr[2] "%u įvestys"
|
||||||
|
|
||||||
#: ../src/gvc/gvc-mixer-control.c:1408
|
#: ../src/gvc/gvc-mixer-control.c:1397
|
||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sistemos garsai"
|
msgstr "Sistemos garsai"
|
||||||
|
|
||||||
#: ../src/main.c:255
|
#: ../src/main.c:256
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Išvesti versijos numerį"
|
msgstr "Išvesti versijos numerį"
|
||||||
|
|
||||||
#: ../src/main.c:261
|
#: ../src/main.c:262
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Veiksena, naudojama GDM prisijungimo ekrane"
|
msgstr "Veiksena, naudojama GDM prisijungimo ekrane"
|
||||||
|
|
||||||
@ -1774,7 +1777,7 @@ msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą"
|
|||||||
#. * nautilus
|
#. * nautilus
|
||||||
#: ../src/shell-util.c:97
|
#: ../src/shell-util.c:97
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Namai"
|
msgstr "Namų aplankas"
|
||||||
|
|
||||||
#. Translators: this is the same string as the one found in
|
#. Translators: this is the same string as the one found in
|
||||||
#. * nautilus
|
#. * nautilus
|
||||||
|
367
po/nb.po
367
po/nb.po
@ -8,8 +8,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell 3.5.x\n"
|
"Project-Id-Version: gnome-shell 3.5.x\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-04-30 11:12+0200\n"
|
"POT-Creation-Date: 2012-05-30 14:16+0200\n"
|
||||||
"PO-Revision-Date: 2012-04-30 11:13+0200\n"
|
"PO-Revision-Date: 2012-05-30 14:19+0200\n"
|
||||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
@ -246,8 +246,8 @@ msgid "Not listed?"
|
|||||||
msgstr "Ikke listet?"
|
msgstr "Ikke listet?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
||||||
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
|
#: ../js/ui/extensionSystem.js:375 ../js/ui/networkAgent.js:153
|
||||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:431
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Avbryt"
|
msgstr "Avbryt"
|
||||||
|
|
||||||
@ -260,30 +260,31 @@ msgstr "Logg inn"
|
|||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Innloggingsvindu"
|
msgstr "Innloggingsvindu"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:155 ../js/ui/userMenu.js:597
|
#: ../js/gdm/powerMenu.js:130 ../js/ui/userMenu.js:595
|
||||||
#: ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:668
|
#: ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:647
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Hvilemodus"
|
msgstr "Hvilemodus"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:160
|
#: ../js/gdm/powerMenu.js:135
|
||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Start på nytt"
|
msgstr "Start på nytt"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:165
|
#: ../js/gdm/powerMenu.js:140 ../js/ui/userMenu.js:597
|
||||||
|
#: ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:646
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Slå av"
|
msgstr "Slå av"
|
||||||
|
|
||||||
#: ../js/misc/util.js:92
|
#: ../js/misc/util.js:93
|
||||||
msgid "Command not found"
|
msgid "Command not found"
|
||||||
msgstr "Kommando ikke funnet"
|
msgstr "Kommando ikke funnet"
|
||||||
|
|
||||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
#. something nicer
|
#. something nicer
|
||||||
#: ../js/misc/util.js:119
|
#: ../js/misc/util.js:124
|
||||||
msgid "Could not parse command:"
|
msgid "Could not parse command:"
|
||||||
msgstr "Klarte ikke å lese kommando:"
|
msgstr "Klarte ikke å lese kommando:"
|
||||||
|
|
||||||
#: ../js/misc/util.js:127
|
#: ../js/misc/util.js:132
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "Kjøring av «%s» feilet:"
|
msgstr "Kjøring av «%s» feilet:"
|
||||||
@ -297,19 +298,19 @@ msgstr "Alle"
|
|||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "PROGRAMMER"
|
msgstr "PROGRAMMER"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:375
|
#: ../js/ui/appDisplay.js:374
|
||||||
msgid "SETTINGS"
|
msgid "SETTINGS"
|
||||||
msgstr "INNSTILLINGER"
|
msgstr "INNSTILLINGER"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:680
|
#: ../js/ui/appDisplay.js:679
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nytt vindu"
|
msgstr "Nytt vindu"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:683
|
#: ../js/ui/appDisplay.js:682
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Fjern fra favoritter"
|
msgstr "Fjern fra favoritter"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:684
|
#: ../js/ui/appDisplay.js:683
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Legg til i favoritter"
|
msgstr "Legg til i favoritter"
|
||||||
|
|
||||||
@ -327,12 +328,12 @@ msgstr "%s ble fjernet fra dine favoritter."
|
|||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Avtagbare enheter"
|
msgstr "Avtagbare enheter"
|
||||||
|
|
||||||
#: ../js/ui/autorunManager.js:560
|
#: ../js/ui/autorunManager.js:553
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Åpne med %s"
|
msgstr "Åpne med %s"
|
||||||
|
|
||||||
#: ../js/ui/autorunManager.js:586
|
#: ../js/ui/autorunManager.js:579
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Løs ut"
|
msgstr "Løs ut"
|
||||||
|
|
||||||
@ -487,15 +488,15 @@ msgstr "Neste uke"
|
|||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Ukjent"
|
msgstr "Ukjent"
|
||||||
|
|
||||||
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:129
|
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:130
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Tilgjengelig"
|
msgstr "Tilgjengelig"
|
||||||
|
|
||||||
#: ../js/ui/contactDisplay.js:94 ../js/ui/userMenu.js:138
|
#: ../js/ui/contactDisplay.js:94 ../js/ui/userMenu.js:139
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Borte"
|
msgstr "Borte"
|
||||||
|
|
||||||
#: ../js/ui/contactDisplay.js:98 ../js/ui/userMenu.js:132
|
#: ../js/ui/contactDisplay.js:98 ../js/ui/userMenu.js:133
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Opptatt"
|
msgstr "Opptatt"
|
||||||
|
|
||||||
@ -507,62 +508,62 @@ msgstr "Frakoblet"
|
|||||||
msgid "CONTACTS"
|
msgid "CONTACTS"
|
||||||
msgstr "KONTAKTER"
|
msgstr "KONTAKTER"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1207
|
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1239
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Fjern"
|
msgstr "Fjern"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:103
|
#: ../js/ui/dateMenu.js:101
|
||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Innstillinger for dato og klokkeslett"
|
msgstr "Innstillinger for dato og klokkeslett"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:129
|
#: ../js/ui/dateMenu.js:127
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Åpne kalender"
|
msgstr "Åpne kalender"
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/dateMenu.js:187
|
#: ../js/ui/dateMenu.js:185
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a %e %b, %R.%S"
|
msgstr "%a %e %b, %R.%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:188
|
#: ../js/ui/dateMenu.js:186
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a %e %b, %R"
|
msgstr "%a %e %b, %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/dateMenu.js:192
|
#: ../js/ui/dateMenu.js:190
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R.%S"
|
msgstr "%a %R.%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:193
|
#: ../js/ui/dateMenu.js:191
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %R"
|
msgstr "%a %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/dateMenu.js:200
|
#: ../js/ui/dateMenu.js:198
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%a %e %b, %l.%M.%S %p"
|
msgstr "%a %e %b, %l.%M.%S %p"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:201
|
#: ../js/ui/dateMenu.js:199
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%a %e %b, %l.%M %p"
|
msgstr "%a %e %b, %l.%M %p"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/dateMenu.js:205
|
#: ../js/ui/dateMenu.js:203
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %l.%M.%S %p"
|
msgstr "%a %l.%M.%S %p"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:206
|
#: ../js/ui/dateMenu.js:204
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l.%M %p"
|
msgstr "%a %l.%M %p"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:217
|
#: ../js/ui/dateMenu.js:215
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%a %e %B, %Y"
|
msgstr "%a %e %B, %Y"
|
||||||
|
|
||||||
@ -658,11 +659,11 @@ msgstr[1] "Systemet vil starte på nytt automatisk om %d sekunder."
|
|||||||
msgid "Restarting the system."
|
msgid "Restarting the system."
|
||||||
msgstr "Starter systemet på nytt."
|
msgstr "Starter systemet på nytt."
|
||||||
|
|
||||||
#: ../js/ui/extensionSystem.js:404
|
#: ../js/ui/extensionSystem.js:379
|
||||||
msgid "Install"
|
msgid "Install"
|
||||||
msgstr "Installer"
|
msgstr "Installer"
|
||||||
|
|
||||||
#: ../js/ui/extensionSystem.js:408
|
#: ../js/ui/extensionSystem.js:383
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
|
msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
|
||||||
@ -671,7 +672,7 @@ msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
|
|||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "varslingsområde"
|
msgstr "varslingsområde"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
|
#: ../js/ui/keyboard.js:545 ../js/ui/status/keyboard.js:44
|
||||||
#: ../js/ui/status/power.js:203
|
#: ../js/ui/status/power.js:203
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastatur"
|
msgstr "Tastatur"
|
||||||
@ -733,24 +734,24 @@ msgid "Web Page"
|
|||||||
msgstr "Nettside"
|
msgstr "Nettside"
|
||||||
|
|
||||||
#. Translators: this is a filename used for screencast recording
|
#. Translators: this is a filename used for screencast recording
|
||||||
#: ../js/ui/main.js:120
|
#: ../js/ui/main.js:121
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Screencast from %d %t"
|
msgid "Screencast from %d %t"
|
||||||
msgstr "Skjermvideo fra %d %t"
|
msgstr "Skjermvideo fra %d %t"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1200
|
#: ../js/ui/messageTray.js:1232
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Åpne"
|
msgstr "Åpne"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1217
|
#: ../js/ui/messageTray.js:1249
|
||||||
msgid "Unmute"
|
msgid "Unmute"
|
||||||
msgstr "Fjern demping"
|
msgstr "Fjern demping"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1217
|
#: ../js/ui/messageTray.js:1249
|
||||||
msgid "Mute"
|
msgid "Mute"
|
||||||
msgstr "Demp"
|
msgstr "Demp"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2490
|
#: ../js/ui/messageTray.js:2522
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Systeminformasjon"
|
msgstr "Systeminformasjon"
|
||||||
|
|
||||||
@ -839,35 +840,35 @@ msgstr "Et passord kreves for å koble til «%s»."
|
|||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Angre"
|
msgstr "Angre"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:132
|
#: ../js/ui/overview.js:130
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Oversikt"
|
msgstr "Oversikt"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:202
|
#: ../js/ui/overview.js:200
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Vinduer"
|
msgstr "Vinduer"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:205
|
#: ../js/ui/overview.js:203
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Programmer"
|
msgstr "Programmer"
|
||||||
|
|
||||||
#. Translators: this is the name of the dock/favorites area on
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
#. the left of the overview
|
#. the left of the overview
|
||||||
#: ../js/ui/overview.js:231
|
#: ../js/ui/overview.js:229
|
||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Favoritter"
|
msgstr "Favoritter"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:592
|
#: ../js/ui/panel.js:564
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Avslutt"
|
msgstr "Avslutt"
|
||||||
|
|
||||||
#. Translators: If there is no suitable word for "Activities"
|
#. Translators: If there is no suitable word for "Activities"
|
||||||
#. in your language, you can use the word for "Overview".
|
#. in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:624
|
#: ../js/ui/panel.js:596
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktiviteter"
|
msgstr "Aktiviteter"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:999
|
#: ../js/ui/panel.js:962
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Topp-panel"
|
msgstr "Topp-panel"
|
||||||
|
|
||||||
@ -921,11 +922,11 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Oppgi en kommando:"
|
msgstr "Oppgi en kommando:"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:332
|
#: ../js/ui/searchDisplay.js:321
|
||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "Søker …"
|
msgstr "Søker …"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:422
|
#: ../js/ui/searchDisplay.js:374
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr "Ingen treff."
|
msgstr "Ingen treff."
|
||||||
|
|
||||||
@ -945,7 +946,7 @@ msgstr "Vis tekst"
|
|||||||
msgid "Hide Text"
|
msgid "Hide Text"
|
||||||
msgstr "Skjul tekst"
|
msgstr "Skjul tekst"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:271
|
#: ../js/ui/shellMountOperation.js:272
|
||||||
msgid "Wrong password, please try again"
|
msgid "Wrong password, please try again"
|
||||||
msgstr "Feil passord. Prøv igjen"
|
msgstr "Feil passord. Prøv igjen"
|
||||||
|
|
||||||
@ -997,9 +998,9 @@ msgid "Large Text"
|
|||||||
msgstr "Stor tekst"
|
msgstr "Stor tekst"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:31 ../js/ui/status/bluetooth.js:35
|
#: ../js/ui/status/bluetooth.js:31 ../js/ui/status/bluetooth.js:35
|
||||||
#: ../js/ui/status/bluetooth.js:258 ../js/ui/status/bluetooth.js:341
|
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/bluetooth.js:308
|
||||||
#: ../js/ui/status/bluetooth.js:371 ../js/ui/status/bluetooth.js:407
|
#: ../js/ui/status/bluetooth.js:339 ../js/ui/status/bluetooth.js:375
|
||||||
#: ../js/ui/status/bluetooth.js:436 ../js/ui/status/network.js:893
|
#: ../js/ui/status/bluetooth.js:404 ../js/ui/status/network.js:890
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bluetooth"
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
@ -1024,110 +1025,110 @@ msgstr "Innstillinger for Bluetooth"
|
|||||||
msgid "hardware disabled"
|
msgid "hardware disabled"
|
||||||
msgstr "maskinvare slått av"
|
msgstr "maskinvare slått av"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:203
|
#: ../js/ui/status/bluetooth.js:200
|
||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr "Tilkobling"
|
msgstr "Tilkobling"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:491
|
#: ../js/ui/status/bluetooth.js:211 ../js/ui/status/network.js:491
|
||||||
msgid "disconnecting..."
|
msgid "disconnecting..."
|
||||||
msgstr "kobler fra …"
|
msgstr "kobler fra …"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:497
|
#: ../js/ui/status/bluetooth.js:224 ../js/ui/status/network.js:497
|
||||||
msgid "connecting..."
|
msgid "connecting..."
|
||||||
msgstr "kobler til …"
|
msgstr "kobler til …"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:245
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
msgid "Send Files..."
|
msgid "Send Files..."
|
||||||
msgstr "Send filer …"
|
msgstr "Send filer …"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:250
|
#: ../js/ui/status/bluetooth.js:247
|
||||||
msgid "Browse Files..."
|
msgid "Browse Files..."
|
||||||
msgstr "Bla gjennom filer …"
|
msgstr "Bla gjennom filer …"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:259
|
#: ../js/ui/status/bluetooth.js:256
|
||||||
msgid "Error browsing device"
|
msgid "Error browsing device"
|
||||||
msgstr "Feil under lesing av enhet"
|
msgstr "Feil under lesing av enhet"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:260
|
#: ../js/ui/status/bluetooth.js:257
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The requested device cannot be browsed, error is '%s'"
|
msgid "The requested device cannot be browsed, error is '%s'"
|
||||||
msgstr "Kan ikke bla gjennom forespurt enhet. Feilen er «%s»"
|
msgstr "Kan ikke bla gjennom forespurt enhet. Feilen er «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:268
|
#: ../js/ui/status/bluetooth.js:265
|
||||||
msgid "Keyboard Settings"
|
msgid "Keyboard Settings"
|
||||||
msgstr "Innstillinger for tastatur"
|
msgstr "Innstillinger for tastatur"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:271
|
#: ../js/ui/status/bluetooth.js:268
|
||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Innstillinger for mus"
|
msgstr "Innstillinger for mus"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:276 ../js/ui/status/volume.js:59
|
#: ../js/ui/status/bluetooth.js:273 ../js/ui/status/volume.js:59
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Innstillinger for lyd"
|
msgstr "Innstillinger for lyd"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:372
|
#: ../js/ui/status/bluetooth.js:340
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Authorization request from %s"
|
msgid "Authorization request from %s"
|
||||||
msgstr "Forespørsel om autorisering fra %s"
|
msgstr "Forespørsel om autorisering fra %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:378
|
#: ../js/ui/status/bluetooth.js:346
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants access to the service '%s'"
|
msgid "Device %s wants access to the service '%s'"
|
||||||
msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
|
msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:380
|
#: ../js/ui/status/bluetooth.js:348
|
||||||
msgid "Always grant access"
|
msgid "Always grant access"
|
||||||
msgstr "Alltid gi tilgang"
|
msgstr "Alltid gi tilgang"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:381
|
#: ../js/ui/status/bluetooth.js:349
|
||||||
msgid "Grant this time only"
|
msgid "Grant this time only"
|
||||||
msgstr "Gi tilgang kun denne ene gangen"
|
msgstr "Gi tilgang kun denne ene gangen"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
|
#: ../js/ui/status/bluetooth.js:350 ../js/ui/telepathyClient.js:1090
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Avvis"
|
msgstr "Avvis"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:408
|
#: ../js/ui/status/bluetooth.js:376
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing confirmation for %s"
|
msgid "Pairing confirmation for %s"
|
||||||
msgstr "Bekreftelse for tilkobling for %s"
|
msgstr "Bekreftelse for tilkobling for %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:444
|
#: ../js/ui/status/bluetooth.js:382 ../js/ui/status/bluetooth.js:412
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants to pair with this computer"
|
msgid "Device %s wants to pair with this computer"
|
||||||
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
|
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:415
|
#: ../js/ui/status/bluetooth.js:383
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
|
||||||
msgstr "Vennligst bekreft om PIN «%s» er lik den som brukes på enheten."
|
msgstr "Vennligst bekreft om PIN «%06d» er lik den som brukes på enheten."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:417
|
#: ../js/ui/status/bluetooth.js:385
|
||||||
msgid "Matches"
|
msgid "Matches"
|
||||||
msgstr "Stemmer overens"
|
msgstr "Stemmer overens"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:418
|
#: ../js/ui/status/bluetooth.js:386
|
||||||
msgid "Does not match"
|
msgid "Does not match"
|
||||||
msgstr "Stemmer ikke overens"
|
msgstr "Stemmer ikke overens"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:437
|
#: ../js/ui/status/bluetooth.js:405
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing request for %s"
|
msgid "Pairing request for %s"
|
||||||
msgstr "Forespørsel om tilkobling for %s"
|
msgstr "Forespørsel om tilkobling for %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:445
|
#: ../js/ui/status/bluetooth.js:413
|
||||||
msgid "Please enter the PIN mentioned on the device."
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
|
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:461
|
#: ../js/ui/status/bluetooth.js:430
|
||||||
msgid "OK"
|
msgid "OK"
|
||||||
msgstr "OK"
|
msgstr "OK"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:68
|
#: ../js/ui/status/keyboard.js:72
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Vis tastaturutforming"
|
msgstr "Vis tastaturutforming"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:73
|
#: ../js/ui/status/keyboard.js:77
|
||||||
msgid "Region and Language Settings"
|
msgid "Region and Language Settings"
|
||||||
msgstr "Innstillinger for region og språk"
|
msgstr "Innstillinger for region og språk"
|
||||||
|
|
||||||
@ -1172,13 +1173,13 @@ msgstr "ikke tilgjengelig"
|
|||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "tilkobling feilet"
|
msgstr "tilkobling feilet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1497
|
||||||
msgid "More..."
|
msgid "More..."
|
||||||
msgstr "Mer …"
|
msgstr "Mer …"
|
||||||
|
|
||||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||||
#. and we cannot access its settings (including the name)
|
#. and we cannot access its settings (including the name)
|
||||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1432
|
||||||
msgid "Connected (private)"
|
msgid "Connected (private)"
|
||||||
msgstr "Tilkoblet (privat)"
|
msgstr "Tilkoblet (privat)"
|
||||||
|
|
||||||
@ -1186,72 +1187,72 @@ msgstr "Tilkoblet (privat)"
|
|||||||
msgid "Auto Ethernet"
|
msgid "Auto Ethernet"
|
||||||
msgstr "Automatisk Ethernet"
|
msgstr "Automatisk Ethernet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:757
|
#: ../js/ui/status/network.js:754
|
||||||
msgid "Auto broadband"
|
msgid "Auto broadband"
|
||||||
msgstr "Automatisk bredbånd"
|
msgstr "Automatisk bredbånd"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:760
|
#: ../js/ui/status/network.js:757
|
||||||
msgid "Auto dial-up"
|
msgid "Auto dial-up"
|
||||||
msgstr "Automatisk oppringt"
|
msgstr "Automatisk oppringt"
|
||||||
|
|
||||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||||
#: ../js/ui/status/network.js:879 ../js/ui/status/network.js:1452
|
#: ../js/ui/status/network.js:876 ../js/ui/status/network.js:1444
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Auto %s"
|
msgid "Auto %s"
|
||||||
msgstr "Automatisk %s"
|
msgstr "Automatisk %s"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:881
|
#: ../js/ui/status/network.js:878
|
||||||
msgid "Auto bluetooth"
|
msgid "Auto bluetooth"
|
||||||
msgstr "Automatisk Bluetooth"
|
msgstr "Automatisk Bluetooth"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1454
|
#: ../js/ui/status/network.js:1446
|
||||||
msgid "Auto wireless"
|
msgid "Auto wireless"
|
||||||
msgstr "Automatisk trådløst"
|
msgstr "Automatisk trådløst"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1541
|
#: ../js/ui/status/network.js:1533
|
||||||
msgid "Network"
|
msgid "Network"
|
||||||
msgstr "Nettverk"
|
msgstr "Nettverk"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1548
|
#: ../js/ui/status/network.js:1540
|
||||||
msgid "Enable networking"
|
msgid "Enable networking"
|
||||||
msgstr "Slå på nettverk"
|
msgstr "Slå på nettverk"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1560
|
#: ../js/ui/status/network.js:1552
|
||||||
msgid "Wired"
|
msgid "Wired"
|
||||||
msgstr "Kablet"
|
msgstr "Kablet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1571
|
#: ../js/ui/status/network.js:1563
|
||||||
msgid "Wireless"
|
msgid "Wireless"
|
||||||
msgstr "Trådløst"
|
msgstr "Trådløst"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1581
|
#: ../js/ui/status/network.js:1573
|
||||||
msgid "Mobile broadband"
|
msgid "Mobile broadband"
|
||||||
msgstr "Mobilt bredbånd"
|
msgstr "Mobilt bredbånd"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1591
|
#: ../js/ui/status/network.js:1583
|
||||||
msgid "VPN Connections"
|
msgid "VPN Connections"
|
||||||
msgstr "VPN-tilkoblinger"
|
msgstr "VPN-tilkoblinger"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1602
|
#: ../js/ui/status/network.js:1594
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Innstillinger for nettverk"
|
msgstr "Innstillinger for nettverk"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1739
|
#: ../js/ui/status/network.js:1647
|
||||||
|
msgid "Network Manager"
|
||||||
|
msgstr "Nettverkshåndtering"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:1734
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Tilkobling feilet"
|
msgstr "Tilkobling feilet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1740
|
#: ../js/ui/status/network.js:1735
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Aktivering av nettverkstilkobling feilet"
|
msgstr "Aktivering av nettverkstilkobling feilet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1993
|
#: ../js/ui/status/network.js:1988
|
||||||
msgid "Networking is disabled"
|
msgid "Networking is disabled"
|
||||||
msgstr "Nettverk er slått av"
|
msgstr "Nettverk er slått av"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:2117
|
|
||||||
msgid "Network Manager"
|
|
||||||
msgstr "Nettverkshåndtering"
|
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:59
|
#: ../js/ui/status/power.js:59
|
||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Batteri"
|
msgstr "Batteri"
|
||||||
@ -1369,7 +1370,7 @@ msgstr "Ring"
|
|||||||
msgid "File Transfer"
|
msgid "File Transfer"
|
||||||
msgstr "Filoverføring"
|
msgstr "Filoverføring"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:369
|
#: ../js/ui/telepathyClient.js:368
|
||||||
msgid "Subscription request"
|
msgid "Subscription request"
|
||||||
msgstr "Forespørsel om abbonering"
|
msgstr "Forespørsel om abbonering"
|
||||||
|
|
||||||
@ -1377,22 +1378,22 @@ msgstr "Forespørsel om abbonering"
|
|||||||
msgid "Connection error"
|
msgid "Connection error"
|
||||||
msgstr "Feil ved tilkobling"
|
msgstr "Feil ved tilkobling"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:663
|
#: ../js/ui/telepathyClient.js:662
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s er tilkoblet."
|
msgstr "%s er tilkoblet."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:667
|
#: ../js/ui/telepathyClient.js:666
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr "%s er frakoblet."
|
msgstr "%s er frakoblet."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:671
|
#: ../js/ui/telepathyClient.js:670
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr "«%s» er borte."
|
msgstr "«%s» er borte."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:674
|
#: ../js/ui/telepathyClient.js:673
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr "%s er opptatt."
|
msgstr "%s er opptatt."
|
||||||
@ -1400,35 +1401,35 @@ msgstr "%s er opptatt."
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/telepathyClient.js:889
|
#: ../js/ui/telepathyClient.js:888
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||||
msgstr "Sendt <b>%X</b> på <b>%A</b>"
|
msgstr "Sendt <b>%X</b> på <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||||
#. shown when you get a chat message in the same year.
|
#. shown when you get a chat message in the same year.
|
||||||
#: ../js/ui/telepathyClient.js:895
|
#: ../js/ui/telepathyClient.js:894
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>"
|
msgstr "Sendt <b>%A</b>, <b>%B %d</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
#. 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.
|
#. shown when you get a chat message in a different year.
|
||||||
#: ../js/ui/telepathyClient.js:900
|
#: ../js/ui/telepathyClient.js:899
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>, %Y"
|
msgstr "Sendt <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/telepathyClient.js:942
|
#: ../js/ui/telepathyClient.js:941
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s er nå kjent som %s"
|
msgstr "%s er nå kjent som %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/telepathyClient.js:1044
|
#: ../js/ui/telepathyClient.js:1041
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Invitasjon til %s"
|
msgstr "Invitasjon til %s"
|
||||||
@ -1436,35 +1437,35 @@ msgstr "Invitasjon til %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. 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
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/telepathyClient.js:1052
|
#: ../js/ui/telepathyClient.js:1049
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s inviterer deg til å bli med i %s"
|
msgstr "%s inviterer deg til å bli med i %s"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
|
#: ../js/ui/telepathyClient.js:1051 ../js/ui/telepathyClient.js:1130
|
||||||
#: ../js/ui/telepathyClient.js:1231
|
#: ../js/ui/telepathyClient.js:1194
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Avslå"
|
msgstr "Avslå"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
|
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
|
||||||
#: ../js/ui/telepathyClient.js:1232
|
#: ../js/ui/telepathyClient.js:1195
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Godta"
|
msgstr "Godta"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/telepathyClient.js:1085
|
#: ../js/ui/telepathyClient.js:1082
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Videosamtale fra %s"
|
msgstr "Videosamtale fra %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/telepathyClient.js:1088
|
#: ../js/ui/telepathyClient.js:1085
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Samtale fra %s"
|
msgstr "Samtale fra %s"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/telepathyClient.js:1095
|
#: ../js/ui/telepathyClient.js:1092
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Svar"
|
msgstr "Svar"
|
||||||
|
|
||||||
@ -1473,110 +1474,110 @@ msgstr "Svar"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/telepathyClient.js:1127
|
#: ../js/ui/telepathyClient.js:1124
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s sender deg %s"
|
msgstr "%s sender deg %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/telepathyClient.js:1196
|
#: ../js/ui/telepathyClient.js:1159
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
|
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1289
|
#: ../js/ui/telepathyClient.js:1252
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Nettverksfeil"
|
msgstr "Nettverksfeil"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1291
|
#: ../js/ui/telepathyClient.js:1254
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Autentisering feilet"
|
msgstr "Autentisering feilet"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1293
|
#: ../js/ui/telepathyClient.js:1256
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Feil ved kryptering"
|
msgstr "Feil ved kryptering"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1295
|
#: ../js/ui/telepathyClient.js:1258
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Sertifikat ikke oppgitt"
|
msgstr "Sertifikat ikke oppgitt"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1297
|
#: ../js/ui/telepathyClient.js:1260
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Stoler ikke på sertifikatet"
|
msgstr "Stoler ikke på sertifikatet"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1299
|
#: ../js/ui/telepathyClient.js:1262
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Sertifikatet er utløpt"
|
msgstr "Sertifikatet er utløpt"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1301
|
#: ../js/ui/telepathyClient.js:1264
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Sertifikatet er ikke aktivert"
|
msgstr "Sertifikatet er ikke aktivert"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1303
|
#: ../js/ui/telepathyClient.js:1266
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Feil vertsnavn for sertifikat"
|
msgstr "Feil vertsnavn for sertifikat"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1305
|
#: ../js/ui/telepathyClient.js:1268
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Feil fingeravtrykk for sertifikat"
|
msgstr "Feil fingeravtrykk for sertifikat"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1307
|
#: ../js/ui/telepathyClient.js:1270
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Sertifikatet er selvsignert"
|
msgstr "Sertifikatet er selvsignert"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1309
|
#: ../js/ui/telepathyClient.js:1272
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Status er satt til frakoblet"
|
msgstr "Status er satt til frakoblet"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1311
|
#: ../js/ui/telepathyClient.js:1274
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Kryptering er ikke tilgjengelig"
|
msgstr "Kryptering er ikke tilgjengelig"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1313
|
#: ../js/ui/telepathyClient.js:1276
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Sertifikatet er ugyldig"
|
msgstr "Sertifikatet er ugyldig"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1315
|
#: ../js/ui/telepathyClient.js:1278
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Tilkobling ble nektet"
|
msgstr "Tilkobling ble nektet"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1317
|
#: ../js/ui/telepathyClient.js:1280
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Tilkobling kan ikke etableres"
|
msgstr "Tilkobling kan ikke etableres"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1319
|
#: ../js/ui/telepathyClient.js:1282
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Tilkobling tapt"
|
msgstr "Tilkobling tapt"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1321
|
#: ../js/ui/telepathyClient.js:1284
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Denne kontoen er allerede koblet til tjeneren"
|
msgstr "Denne kontoen er allerede koblet til tjeneren"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1323
|
#: ../js/ui/telepathyClient.js:1286
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
|
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1325
|
#: ../js/ui/telepathyClient.js:1288
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Kontoen eksisterer allerede på tjeneren"
|
msgstr "Kontoen eksisterer allerede på tjeneren"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1327
|
#: ../js/ui/telepathyClient.js:1290
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
|
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1329
|
#: ../js/ui/telepathyClient.js:1292
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Sertifikatet er tilbaketrukket"
|
msgstr "Sertifikatet er tilbaketrukket"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1331
|
#: ../js/ui/telepathyClient.js:1294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
|
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1333
|
#: ../js/ui/telepathyClient.js:1296
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -1584,74 +1585,70 @@ msgstr ""
|
|||||||
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
|
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
|
||||||
"kryptografibiblioteket"
|
"kryptografibiblioteket"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1335
|
#: ../js/ui/telepathyClient.js:1298
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Intern feil"
|
msgstr "Intern feil"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/telepathyClient.js:1345
|
#: ../js/ui/telepathyClient.js:1308
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "Tilkobling til %s feilet"
|
msgstr "Tilkobling til %s feilet"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1354
|
#: ../js/ui/telepathyClient.js:1317
|
||||||
msgid "Reconnect"
|
msgid "Reconnect"
|
||||||
msgstr "Koble til på nytt"
|
msgstr "Koble til på nytt"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1355
|
#: ../js/ui/telepathyClient.js:1318
|
||||||
msgid "Edit account"
|
msgid "Edit account"
|
||||||
msgstr "Rediger konto"
|
msgstr "Rediger konto"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:1401
|
#: ../js/ui/telepathyClient.js:1364
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Ukjent årsak"
|
msgstr "Ukjent årsak"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:135
|
#: ../js/ui/userMenu.js:136
|
||||||
msgid "Hidden"
|
msgid "Hidden"
|
||||||
msgstr "Skjult"
|
msgstr "Skjult"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:141
|
#: ../js/ui/userMenu.js:142
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Ledig"
|
msgstr "Ledig"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:144
|
#: ../js/ui/userMenu.js:145
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Ikke tilgjengelig"
|
msgstr "Ikke tilgjengelig"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:595 ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:669
|
#: ../js/ui/userMenu.js:556 ../js/ui/userMenu.js:656
|
||||||
msgid "Power Off..."
|
|
||||||
msgstr "Slå av …"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:631
|
|
||||||
msgid "Notifications"
|
|
||||||
msgstr "Varslinger"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:639
|
|
||||||
msgid "Online Accounts"
|
|
||||||
msgstr "Kontoer på nettet"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:643
|
|
||||||
msgid "System Settings"
|
|
||||||
msgstr "Systeminnstillinger"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:650
|
|
||||||
msgid "Lock Screen"
|
|
||||||
msgstr "Lås skjerm"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:655
|
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Bytt bruker"
|
msgstr "Bytt bruker"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:660
|
#: ../js/ui/userMenu.js:557
|
||||||
msgid "Log Out..."
|
msgid "Switch Session"
|
||||||
msgstr "Logg ut …"
|
msgstr "Bytt økt"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:688
|
#: ../js/ui/userMenu.js:632
|
||||||
|
msgid "Notifications"
|
||||||
|
msgstr "Varslinger"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:641
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "Systeminnstillinger"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:661
|
||||||
|
msgid "Log Out"
|
||||||
|
msgstr "Logg ut"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:669
|
||||||
|
msgid "Lock"
|
||||||
|
msgstr "Lås"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:687
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Din pratestatus vil bli satt til opptatt"
|
msgstr "Din pratestatus vil bli satt til opptatt"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:689
|
#: ../js/ui/userMenu.js:688
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1717,15 +1714,23 @@ msgstr[1] "%u innganger"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Systemlyder"
|
msgstr "Systemlyder"
|
||||||
|
|
||||||
#: ../src/main.c:255
|
#: ../src/main.c:313
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Skriv ut versjon"
|
msgstr "Skriv ut versjon"
|
||||||
|
|
||||||
#: ../src/main.c:261
|
#: ../src/main.c:319
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Modus som brukes av GDM for innloggingsskjermen"
|
msgstr "Modus som brukes av GDM for innloggingsskjermen"
|
||||||
|
|
||||||
#: ../src/shell-app.c:619
|
#: ../src/main.c:325
|
||||||
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
|
msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm"
|
||||||
|
|
||||||
|
#: ../src/main.c:331
|
||||||
|
msgid "List possible modes"
|
||||||
|
msgstr "Vis mulige modi"
|
||||||
|
|
||||||
|
#: ../src/shell-app.c:622
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "Klarte ikke å starte «%s»"
|
msgstr "Klarte ikke å starte «%s»"
|
||||||
|
@ -93,7 +93,8 @@ gnome_shell_cflags = \
|
|||||||
-DGNOME_SHELL_LIBEXECDIR=\"$(libexecdir)\" \
|
-DGNOME_SHELL_LIBEXECDIR=\"$(libexecdir)\" \
|
||||||
-DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \
|
-DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \
|
||||||
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" \
|
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" \
|
||||||
-DJSDIR=\"$(pkgdatadir)/js\"
|
-DJSDIR=\"$(pkgdatadir)/js\" \
|
||||||
|
-DMUTTER_TYPELIB_DIR=\"$(MUTTER_TYPELIB_DIR)\"
|
||||||
|
|
||||||
privlibdir = $(pkglibdir)
|
privlibdir = $(pkglibdir)
|
||||||
privlib_LTLIBRARIES = libgnome-shell.la libgnome-shell-js.la
|
privlib_LTLIBRARIES = libgnome-shell.la libgnome-shell-js.la
|
||||||
@ -193,7 +194,7 @@ libgnome_shell_la_gir_sources = \
|
|||||||
gnome_shell_real_SOURCES = \
|
gnome_shell_real_SOURCES = \
|
||||||
main.c
|
main.c
|
||||||
gnome_shell_real_CPPFLAGS = $(gnome_shell_cflags)
|
gnome_shell_real_CPPFLAGS = $(gnome_shell_cflags)
|
||||||
gnome_shell_real_LDADD = libgnome-shell.la $(libgnome_shell_la_LIBADD)
|
gnome_shell_real_LDADD = libgnome-shell.la libgnome-shell-js.la $(libgnome_shell_la_LIBADD)
|
||||||
gnome_shell_real_DEPENDENCIES = libgnome-shell.la
|
gnome_shell_real_DEPENDENCIES = libgnome-shell.la
|
||||||
|
|
||||||
EXTRA_DIST += test-gapplication.js
|
EXTRA_DIST += test-gapplication.js
|
||||||
|
101
src/main.c
101
src/main.c
@ -24,9 +24,12 @@
|
|||||||
#include "shell-a11y.h"
|
#include "shell-a11y.h"
|
||||||
#include "shell-global.h"
|
#include "shell-global.h"
|
||||||
#include "shell-global-private.h"
|
#include "shell-global-private.h"
|
||||||
|
#include "shell-js.h"
|
||||||
#include "shell-perf-log.h"
|
#include "shell-perf-log.h"
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
|
|
||||||
|
#include <jsapi.h>
|
||||||
|
|
||||||
extern GType gnome_shell_plugin_get_type (void);
|
extern GType gnome_shell_plugin_get_type (void);
|
||||||
|
|
||||||
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
||||||
@ -35,6 +38,7 @@ extern GType gnome_shell_plugin_get_type (void);
|
|||||||
#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
|
#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
|
||||||
|
|
||||||
static gboolean is_gdm_mode = FALSE;
|
static gboolean is_gdm_mode = FALSE;
|
||||||
|
static char *session_mode = NULL;
|
||||||
|
|
||||||
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
|
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
|
||||||
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
|
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
|
||||||
@ -173,6 +177,18 @@ shell_prefs_init (void)
|
|||||||
OVERRIDES_SCHEMA);
|
OVERRIDES_SCHEMA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_introspection_init (void)
|
||||||
|
{
|
||||||
|
|
||||||
|
g_irepository_prepend_search_path (MUTTER_TYPELIB_DIR);
|
||||||
|
g_irepository_prepend_search_path (GNOME_SHELL_PKGLIBDIR);
|
||||||
|
#if HAVE_BLUETOOTH
|
||||||
|
g_irepository_prepend_search_path (BLUETOOTH_DIR);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
malloc_statistics_callback (ShellPerfLog *perf_log,
|
malloc_statistics_callback (ShellPerfLog *perf_log,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
@ -238,6 +254,48 @@ default_log_handler (const char *log_domain,
|
|||||||
g_log_default_handler (log_domain, log_level, message, data);
|
g_log_default_handler (log_domain, log_level, message, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shut_up (const char *domain,
|
||||||
|
GLogLevelFlags level,
|
||||||
|
const char *message,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
list_modes (const char *option_name,
|
||||||
|
const char *value,
|
||||||
|
gpointer data,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
ShellGlobal *global;
|
||||||
|
GjsContext *context;
|
||||||
|
const char *script;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
/* Many of our imports require global to be set, so rather than
|
||||||
|
* tayloring our imports carefully here to avoid that dependency,
|
||||||
|
* we just set it.
|
||||||
|
* ShellGlobal has some GTK+ dependencies, so initialize GTK+; we
|
||||||
|
* don't really care if it fails though (e.g. when running from a tty),
|
||||||
|
* so we mute all warnings */
|
||||||
|
g_log_set_default_handler (shut_up, NULL);
|
||||||
|
gtk_init_check (NULL, NULL);
|
||||||
|
|
||||||
|
_shell_global_init (NULL);
|
||||||
|
global = shell_global_get ();
|
||||||
|
context = _shell_global_get_gjs_context (global);
|
||||||
|
|
||||||
|
shell_introspection_init ();
|
||||||
|
|
||||||
|
script = "imports.ui.environment.init();"
|
||||||
|
"imports.ui.sessionMode.listModes();";
|
||||||
|
if (!gjs_context_eval (context, script, -1, "<main>", &status, NULL))
|
||||||
|
g_message ("Retrieving list of available modes failed.");
|
||||||
|
|
||||||
|
exit (status);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
print_version (const gchar *option_name,
|
print_version (const gchar *option_name,
|
||||||
const gchar *value,
|
const gchar *value,
|
||||||
@ -256,11 +314,23 @@ GOptionEntry gnome_shell_options[] = {
|
|||||||
NULL
|
NULL
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"gdm-mode", 0, 0, G_OPTION_ARG_NONE,
|
"gdm-mode", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE,
|
||||||
&is_gdm_mode,
|
&is_gdm_mode,
|
||||||
N_("Mode used by GDM for login screen"),
|
N_("Mode used by GDM for login screen"),
|
||||||
NULL
|
NULL
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"mode", 0, 0, G_OPTION_ARG_STRING,
|
||||||
|
&session_mode,
|
||||||
|
N_("Use a specific mode, e.g. \"gdm\" for login screen"),
|
||||||
|
"MODE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"list-modes", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
||||||
|
list_modes,
|
||||||
|
N_("List possible modes"),
|
||||||
|
NULL
|
||||||
|
},
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -269,7 +339,6 @@ main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
GOptionContext *ctx;
|
GOptionContext *ctx;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
ShellSessionType session_type;
|
|
||||||
int ecode;
|
int ecode;
|
||||||
TpDebugSender *sender;
|
TpDebugSender *sender;
|
||||||
|
|
||||||
@ -308,11 +377,7 @@ main (int argc, char **argv)
|
|||||||
shell_a11y_init ();
|
shell_a11y_init ();
|
||||||
shell_perf_log_init ();
|
shell_perf_log_init ();
|
||||||
shell_prefs_init ();
|
shell_prefs_init ();
|
||||||
|
shell_introspection_init ();
|
||||||
g_irepository_prepend_search_path (GNOME_SHELL_PKGLIBDIR);
|
|
||||||
#if HAVE_BLUETOOTH
|
|
||||||
g_irepository_prepend_search_path (BLUETOOTH_DIR);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Turn on telepathy-glib debugging but filter it out in
|
/* Turn on telepathy-glib debugging but filter it out in
|
||||||
* default_log_handler. This handler also exposes all the logs over D-Bus
|
* default_log_handler. This handler also exposes all the logs over D-Bus
|
||||||
@ -323,12 +388,10 @@ main (int argc, char **argv)
|
|||||||
g_log_set_default_handler (default_log_handler, sender);
|
g_log_set_default_handler (default_log_handler, sender);
|
||||||
|
|
||||||
/* Initialize the global object */
|
/* Initialize the global object */
|
||||||
if (is_gdm_mode)
|
if (session_mode == NULL)
|
||||||
session_type = SHELL_SESSION_GDM;
|
session_mode = is_gdm_mode ? "gdm" : "user";
|
||||||
else
|
|
||||||
session_type = SHELL_SESSION_USER;
|
|
||||||
|
|
||||||
_shell_global_init ("session-type", session_type, NULL);
|
_shell_global_init ("session-mode", session_mode, NULL);
|
||||||
|
|
||||||
ecode = meta_run ();
|
ecode = meta_run ();
|
||||||
|
|
||||||
@ -342,3 +405,17 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
return ecode;
|
return ecode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* HACK:
|
||||||
|
Add a dummy function that calls into libgnome-shell-js.so to ensure it's
|
||||||
|
linked to /usr/bin/gnome-shell even when linking with --as-needed.
|
||||||
|
This function is never actually called.
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=670477
|
||||||
|
*/
|
||||||
|
void _shell_link_to_shell_js (void);
|
||||||
|
|
||||||
|
void
|
||||||
|
_shell_link_to_shell_js (void)
|
||||||
|
{
|
||||||
|
shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
@ -371,7 +371,7 @@ shell_app_get_name (ShellApp *app)
|
|||||||
|
|
||||||
name = meta_window_get_wm_class (window);
|
name = meta_window_get_wm_class (window);
|
||||||
if (!name)
|
if (!name)
|
||||||
name = _("Unknown");
|
name = C_("program", "Unknown");
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -493,7 +493,7 @@ shell_app_activate_window (ShellApp *app,
|
|||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GSList *iter;
|
GSList *windows_reversed, *iter;
|
||||||
ShellGlobal *global = shell_global_get ();
|
ShellGlobal *global = shell_global_get ();
|
||||||
MetaScreen *screen = shell_global_get_screen (global);
|
MetaScreen *screen = shell_global_get_screen (global);
|
||||||
MetaDisplay *display = meta_screen_get_display (screen);
|
MetaDisplay *display = meta_screen_get_display (screen);
|
||||||
@ -511,13 +511,16 @@ shell_app_activate_window (ShellApp *app,
|
|||||||
/* Now raise all the other windows for the app that are on
|
/* Now raise all the other windows for the app that are on
|
||||||
* the same workspace, in reverse order to preserve the stacking.
|
* the same workspace, in reverse order to preserve the stacking.
|
||||||
*/
|
*/
|
||||||
for (iter = windows; iter; iter = iter->next)
|
windows_reversed = g_slist_copy (windows);
|
||||||
|
windows_reversed = g_slist_reverse (windows_reversed);
|
||||||
|
for (iter = windows_reversed; iter; iter = iter->next)
|
||||||
{
|
{
|
||||||
MetaWindow *other_window = iter->data;
|
MetaWindow *other_window = iter->data;
|
||||||
|
|
||||||
if (other_window != window)
|
if (other_window != window)
|
||||||
meta_window_raise (other_window);
|
meta_window_raise (other_window);
|
||||||
}
|
}
|
||||||
|
g_slist_free (windows_reversed);
|
||||||
|
|
||||||
/* If we have a transient that the user's interacted with more recently than
|
/* If we have a transient that the user's interacted with more recently than
|
||||||
* the window, pick that.
|
* the window, pick that.
|
||||||
|
@ -16,7 +16,4 @@ GjsContext *_shell_global_get_gjs_context (ShellGlobal *global);
|
|||||||
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
||||||
XEvent *xev);
|
XEvent *xev);
|
||||||
|
|
||||||
void _shell_global_set_session_type (ShellGlobal *global,
|
|
||||||
ShellSessionType session_type);
|
|
||||||
|
|
||||||
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */
|
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */
|
||||||
|
@ -59,7 +59,7 @@ struct _ShellGlobal {
|
|||||||
MetaScreen *meta_screen;
|
MetaScreen *meta_screen;
|
||||||
GdkScreen *gdk_screen;
|
GdkScreen *gdk_screen;
|
||||||
|
|
||||||
ShellSessionType session_type;
|
char *session_mode;
|
||||||
|
|
||||||
/* We use this window to get a notification from GTK+ when
|
/* We use this window to get a notification from GTK+ when
|
||||||
* a widget in our process does a GTK+ grab. See
|
* a widget in our process does a GTK+ grab. See
|
||||||
@ -97,7 +97,7 @@ struct _ShellGlobal {
|
|||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
|
||||||
PROP_SESSION_TYPE,
|
PROP_SESSION_MODE,
|
||||||
PROP_OVERLAY_GROUP,
|
PROP_OVERLAY_GROUP,
|
||||||
PROP_SCREEN,
|
PROP_SCREEN,
|
||||||
PROP_GDK_SCREEN,
|
PROP_GDK_SCREEN,
|
||||||
@ -143,8 +143,9 @@ shell_global_set_property(GObject *object,
|
|||||||
case PROP_STAGE_INPUT_MODE:
|
case PROP_STAGE_INPUT_MODE:
|
||||||
shell_global_set_stage_input_mode (global, g_value_get_enum (value));
|
shell_global_set_stage_input_mode (global, g_value_get_enum (value));
|
||||||
break;
|
break;
|
||||||
case PROP_SESSION_TYPE:
|
case PROP_SESSION_MODE:
|
||||||
global->session_type = g_value_get_enum (value);
|
g_clear_pointer (&global->session_mode, g_free);
|
||||||
|
global->session_mode = g_ascii_strdown (g_value_get_string (value), -1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -162,8 +163,8 @@ shell_global_get_property(GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_SESSION_TYPE:
|
case PROP_SESSION_MODE:
|
||||||
g_value_set_enum (value, shell_global_get_session_type (global));
|
g_value_set_string (value, shell_global_get_session_mode (global));
|
||||||
break;
|
break;
|
||||||
case PROP_OVERLAY_GROUP:
|
case PROP_OVERLAY_GROUP:
|
||||||
g_value_set_object (value, meta_get_overlay_group_for_screen (global->meta_screen));
|
g_value_set_object (value, meta_get_overlay_group_for_screen (global->meta_screen));
|
||||||
@ -343,13 +344,12 @@ shell_global_class_init (ShellGlobalClass *klass)
|
|||||||
G_TYPE_STRING);
|
G_TYPE_STRING);
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class,
|
||||||
PROP_SESSION_TYPE,
|
PROP_SESSION_MODE,
|
||||||
g_param_spec_enum ("session-type",
|
g_param_spec_string ("session-mode",
|
||||||
"Session Type",
|
"Session Mode",
|
||||||
"The type of session",
|
"The session mode to use",
|
||||||
SHELL_TYPE_SESSION_TYPE,
|
"user",
|
||||||
SHELL_SESSION_USER,
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class,
|
||||||
PROP_OVERLAY_GROUP,
|
PROP_OVERLAY_GROUP,
|
||||||
g_param_spec_object ("overlay-group",
|
g_param_spec_object ("overlay-group",
|
||||||
@ -805,90 +805,9 @@ global_stage_after_paint (ClutterStage *stage,
|
|||||||
"clutter.stagePaintDone");
|
"clutter.stagePaintDone");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
update_font_options (GtkSettings *settings,
|
|
||||||
ClutterStage *stage)
|
|
||||||
{
|
|
||||||
StThemeContext *context;
|
|
||||||
ClutterBackend *backend;
|
|
||||||
gint dpi;
|
|
||||||
gint hinting;
|
|
||||||
gchar *hint_style_str;
|
|
||||||
cairo_hint_style_t hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
gint antialias;
|
|
||||||
cairo_antialias_t antialias_mode = CAIRO_ANTIALIAS_NONE;
|
|
||||||
cairo_font_options_t *options;
|
|
||||||
|
|
||||||
g_object_get (settings,
|
|
||||||
"gtk-xft-dpi", &dpi,
|
|
||||||
"gtk-xft-antialias", &antialias,
|
|
||||||
"gtk-xft-hinting", &hinting,
|
|
||||||
"gtk-xft-hintstyle", &hint_style_str,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
context = st_theme_context_get_for_stage (stage);
|
|
||||||
|
|
||||||
if (dpi != -1)
|
|
||||||
/* GTK stores resolution as 1024 * dots/inch */
|
|
||||||
st_theme_context_set_resolution (context, dpi / 1024);
|
|
||||||
else
|
|
||||||
st_theme_context_set_default_resolution (context);
|
|
||||||
|
|
||||||
/* Clutter (as of 0.9) passes comprehensively wrong font options
|
|
||||||
* override whatever set_font_flags() did above.
|
|
||||||
*
|
|
||||||
* http://bugzilla.openedhand.com/show_bug.cgi?id=1456
|
|
||||||
*/
|
|
||||||
backend = clutter_get_default_backend ();
|
|
||||||
options = cairo_font_options_create ();
|
|
||||||
|
|
||||||
cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_ON);
|
|
||||||
|
|
||||||
if (hinting >= 0 && !hinting)
|
|
||||||
{
|
|
||||||
hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
}
|
|
||||||
else if (hint_style_str)
|
|
||||||
{
|
|
||||||
if (strcmp (hint_style_str, "hintnone") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
else if (strcmp (hint_style_str, "hintslight") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_SLIGHT;
|
|
||||||
else if (strcmp (hint_style_str, "hintmedium") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_MEDIUM;
|
|
||||||
else if (strcmp (hint_style_str, "hintfull") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_FULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (hint_style_str);
|
|
||||||
|
|
||||||
cairo_font_options_set_hint_style (options, hint_style);
|
|
||||||
|
|
||||||
/* We don't want to turn on subpixel anti-aliasing; since Clutter
|
|
||||||
* doesn't currently have the code to support ARGB masks,
|
|
||||||
* generating them then squashing them back to A8 is pointless.
|
|
||||||
*/
|
|
||||||
antialias_mode = (antialias < 0 || antialias) ? CAIRO_ANTIALIAS_GRAY
|
|
||||||
: CAIRO_ANTIALIAS_NONE;
|
|
||||||
|
|
||||||
cairo_font_options_set_antialias (options, antialias_mode);
|
|
||||||
|
|
||||||
clutter_backend_set_font_options (backend, options);
|
|
||||||
cairo_font_options_destroy (options);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
settings_notify_cb (GtkSettings *settings,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
update_font_options (settings, CLUTTER_STAGE (data));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
shell_fonts_init (ClutterStage *stage)
|
shell_fonts_init (ClutterStage *stage)
|
||||||
{
|
{
|
||||||
GtkSettings *settings;
|
|
||||||
CoglPangoFontMap *fontmap;
|
CoglPangoFontMap *fontmap;
|
||||||
|
|
||||||
/* Disable text mipmapping; it causes problems on pre-GEM Intel
|
/* Disable text mipmapping; it causes problems on pre-GEM Intel
|
||||||
@ -898,19 +817,6 @@ shell_fonts_init (ClutterStage *stage)
|
|||||||
*/
|
*/
|
||||||
fontmap = COGL_PANGO_FONT_MAP (clutter_get_font_map ());
|
fontmap = COGL_PANGO_FONT_MAP (clutter_get_font_map ());
|
||||||
cogl_pango_font_map_set_use_mipmapping (fontmap, FALSE);
|
cogl_pango_font_map_set_use_mipmapping (fontmap, FALSE);
|
||||||
|
|
||||||
settings = gtk_settings_get_default ();
|
|
||||||
g_object_connect (settings,
|
|
||||||
"signal::notify::gtk-xft-dpi",
|
|
||||||
G_CALLBACK (settings_notify_cb), stage,
|
|
||||||
"signal::notify::gtk-xft-antialias",
|
|
||||||
G_CALLBACK (settings_notify_cb), stage,
|
|
||||||
"signal::notify::gtk-xft-hinting",
|
|
||||||
G_CALLBACK (settings_notify_cb), stage,
|
|
||||||
"signal::notify::gtk-xft-hintstyle",
|
|
||||||
G_CALLBACK (settings_notify_cb), stage,
|
|
||||||
NULL);
|
|
||||||
update_font_options (settings, stage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is an IBus workaround. The flow of events with IBus is that every time
|
/* This is an IBus workaround. The flow of events with IBus is that every time
|
||||||
@ -1870,31 +1776,10 @@ shell_global_launch_calendar_server (ShellGlobal *global)
|
|||||||
g_free (calendar_server_exe);
|
g_free (calendar_server_exe);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
const char *
|
||||||
* shell_global_get_session_type:
|
shell_global_get_session_mode (ShellGlobal *global)
|
||||||
* @global: The #ShellGlobal.
|
|
||||||
*
|
|
||||||
* Gets the type of session gnome-shell provides.
|
|
||||||
*
|
|
||||||
* The type determines what UI elements are displayed,
|
|
||||||
* what keybindings work, and generally how the shell
|
|
||||||
* behaves.
|
|
||||||
*
|
|
||||||
* A session type of #SHELL_SESSION_USER means gnome-shell
|
|
||||||
* will enable the activities overview, status menu, run dialog,
|
|
||||||
* etc. This is the default.
|
|
||||||
*
|
|
||||||
* A session type of #SHELL_SESSION_GDM means gnome-shell
|
|
||||||
* will enable a login dialog and run in a more confined
|
|
||||||
* way. This type is suitable for the display manager.
|
|
||||||
*
|
|
||||||
* Returns: the type of session gnome-shell is providing.
|
|
||||||
*/
|
|
||||||
ShellSessionType
|
|
||||||
shell_global_get_session_type (ShellGlobal *global)
|
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (SHELL_IS_GLOBAL (global),
|
g_return_val_if_fail (SHELL_IS_GLOBAL (global), "user");
|
||||||
SHELL_SESSION_USER);
|
|
||||||
|
|
||||||
return global->session_type;
|
return global->session_mode;
|
||||||
}
|
}
|
||||||
|
@ -141,12 +141,7 @@ void shell_global_reexec_self (ShellGlobal *global);
|
|||||||
|
|
||||||
void shell_global_launch_calendar_server (ShellGlobal *global);
|
void shell_global_launch_calendar_server (ShellGlobal *global);
|
||||||
|
|
||||||
typedef enum {
|
const char * shell_global_get_session_mode (ShellGlobal *global);
|
||||||
SHELL_SESSION_USER,
|
|
||||||
SHELL_SESSION_GDM
|
|
||||||
} ShellSessionType;
|
|
||||||
|
|
||||||
ShellSessionType shell_global_get_session_type (ShellGlobal *global);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -79,15 +79,3 @@ shell_js_add_extension_importer (const char *target_object_script,
|
|||||||
JS_EndRequest (context);
|
JS_EndRequest (context);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* shell_js_format_int_alternative_output:
|
|
||||||
* @intval:
|
|
||||||
*
|
|
||||||
* Returns: (transfer full):
|
|
||||||
*/
|
|
||||||
gchar *
|
|
||||||
shell_js_format_int_alternative_output (gint intval)
|
|
||||||
{
|
|
||||||
return g_strdup_printf ("%Id", intval);
|
|
||||||
}
|
|
||||||
|
@ -11,8 +11,6 @@ gboolean shell_js_add_extension_importer (const char *target_object_script,
|
|||||||
const char *directory,
|
const char *directory,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
gchar *shell_js_format_int_alternative_output (gint intval);
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_JS_H__ */
|
#endif /* __SHELL_JS_H__ */
|
||||||
|
@ -330,34 +330,6 @@ shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
|
|||||||
|
|
||||||
/* Telepathy utility functions */
|
/* Telepathy utility functions */
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* shell_get_contact_events:
|
|
||||||
* @log_manager: A #TplLogManager
|
|
||||||
* @account: A #TpAccount
|
|
||||||
* @entity: A #TplEntity
|
|
||||||
* @num_events: The number of events to retrieve
|
|
||||||
* @callback: (scope async): User callback to run when the contact is ready
|
|
||||||
*
|
|
||||||
* Wrap tpl_log_manager_get_filtered_events_async because gjs cannot support
|
|
||||||
* multiple callbacks in the same function call.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
shell_get_contact_events (TplLogManager *log_manager,
|
|
||||||
TpAccount *account,
|
|
||||||
TplEntity *entity,
|
|
||||||
guint num_events,
|
|
||||||
GAsyncReadyCallback callback)
|
|
||||||
{
|
|
||||||
tpl_log_manager_get_filtered_events_async (log_manager,
|
|
||||||
account,
|
|
||||||
entity,
|
|
||||||
TPL_EVENT_MASK_TEXT,
|
|
||||||
num_events,
|
|
||||||
NULL, NULL,
|
|
||||||
callback, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* gjs doesn't allow us to craft a GError so we need a C wrapper */
|
/* gjs doesn't allow us to craft a GError so we need a C wrapper */
|
||||||
void
|
void
|
||||||
shell_decline_dispatch_op (TpAddDispatchOperationContext *context,
|
shell_decline_dispatch_op (TpAddDispatchOperationContext *context,
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
|
||||||
#include <telepathy-glib/telepathy-glib.h>
|
#include <telepathy-glib/telepathy-glib.h>
|
||||||
#include <telepathy-logger/telepathy-logger.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
@ -103,12 +102,6 @@ void shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
|
|||||||
|
|
||||||
/* Telepathy utility functions */
|
/* Telepathy utility functions */
|
||||||
|
|
||||||
void shell_get_contact_events (TplLogManager *log_manager,
|
|
||||||
TpAccount *account,
|
|
||||||
TplEntity *entity,
|
|
||||||
guint num_events,
|
|
||||||
GAsyncReadyCallback callback);
|
|
||||||
|
|
||||||
void shell_decline_dispatch_op (TpAddDispatchOperationContext *context,
|
void shell_decline_dispatch_op (TpAddDispatchOperationContext *context,
|
||||||
const gchar *message);
|
const gchar *message);
|
||||||
|
|
||||||
|
@ -592,29 +592,6 @@ shell_util_get_week_start ()
|
|||||||
return week_start;
|
return week_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* shell_write_soup_message_to_stream:
|
|
||||||
* @stream: a #GOutputStream
|
|
||||||
* @message: a #SoupMessage
|
|
||||||
* @error: location to store GError
|
|
||||||
*
|
|
||||||
* Write a string to a GOutputStream as binary data. This is a
|
|
||||||
* workaround for the lack of proper binary strings in GJS.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
shell_write_soup_message_to_stream (GOutputStream *stream,
|
|
||||||
SoupMessage *message,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
SoupMessageBody *body;
|
|
||||||
|
|
||||||
body = message->response_body;
|
|
||||||
|
|
||||||
g_output_stream_write_all (stream,
|
|
||||||
body->data, body->length,
|
|
||||||
NULL, NULL, error);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shell_write_string_to_stream:
|
* shell_write_string_to_stream:
|
||||||
* @stream: a #GOutputStream
|
* @stream: a #GOutputStream
|
||||||
|
@ -25,10 +25,6 @@ char *shell_util_normalize_and_casefold (const char *str);
|
|||||||
char *shell_util_format_date (const char *format,
|
char *shell_util_format_date (const char *format,
|
||||||
gint64 time_ms);
|
gint64 time_ms);
|
||||||
|
|
||||||
void shell_write_soup_message_to_stream (GOutputStream *stream,
|
|
||||||
SoupMessage *message,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
gboolean shell_write_string_to_stream (GOutputStream *stream,
|
gboolean shell_write_string_to_stream (GOutputStream *stream,
|
||||||
const char *str,
|
const char *str,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
@ -490,7 +490,7 @@ st_label_accessible_get_name (AtkObject *obj)
|
|||||||
|
|
||||||
actor = CLUTTER_ACTOR (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (obj)));
|
actor = CLUTTER_ACTOR (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (obj)));
|
||||||
|
|
||||||
if (actor == NULL) /* State is defunct */
|
if (actor == NULL || st_widget_has_style_class_name (ST_WIDGET (actor), "hidden"))
|
||||||
name = NULL;
|
name = NULL;
|
||||||
else
|
else
|
||||||
name = st_label_get_text (ST_LABEL (actor));
|
name = st_label_get_text (ST_LABEL (actor));
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
struct _StThemeContext {
|
struct _StThemeContext {
|
||||||
GObject parent;
|
GObject parent;
|
||||||
|
|
||||||
double resolution;
|
|
||||||
PangoFontDescription *font;
|
PangoFontDescription *font;
|
||||||
StThemeNode *root_node;
|
StThemeNode *root_node;
|
||||||
StTheme *theme;
|
StTheme *theme;
|
||||||
@ -38,7 +37,6 @@ struct _StThemeContextClass {
|
|||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_RESOLUTION 96.
|
|
||||||
#define DEFAULT_FONT "sans-serif 10"
|
#define DEFAULT_FONT "sans-serif 10"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -93,7 +91,6 @@ st_theme_context_class_init (StThemeContextClass *klass)
|
|||||||
static void
|
static void
|
||||||
st_theme_context_init (StThemeContext *context)
|
st_theme_context_init (StThemeContext *context)
|
||||||
{
|
{
|
||||||
context->resolution = DEFAULT_RESOLUTION;
|
|
||||||
context->font = pango_font_description_from_string (DEFAULT_FONT);
|
context->font = pango_font_description_from_string (DEFAULT_FONT);
|
||||||
|
|
||||||
g_signal_connect (st_texture_cache_get_default (),
|
g_signal_connect (st_texture_cache_get_default (),
|
||||||
@ -232,66 +229,6 @@ st_theme_context_get_theme (StThemeContext *context)
|
|||||||
return context->theme;
|
return context->theme;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* st_theme_context_set_resolution:
|
|
||||||
* @context: a #StThemeContext
|
|
||||||
* @resolution: resolution of the context (number of pixels in an "inch")
|
|
||||||
*
|
|
||||||
* Sets the resolution of the theme context. This is the scale factor
|
|
||||||
* used to convert between points and the length units pt, in, and cm.
|
|
||||||
* This does not necessarily need to correspond to the actual number
|
|
||||||
* resolution of the device. A value of 72. means that points and
|
|
||||||
* pixels are identical. The default value is 96.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
st_theme_context_set_resolution (StThemeContext *context,
|
|
||||||
double resolution)
|
|
||||||
{
|
|
||||||
g_return_if_fail (ST_IS_THEME_CONTEXT (context));
|
|
||||||
|
|
||||||
if (resolution == context->resolution)
|
|
||||||
return;
|
|
||||||
|
|
||||||
context->resolution = resolution;
|
|
||||||
st_theme_context_changed (context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* st_theme_context_set_default_resolution:
|
|
||||||
* @context: a #StThemeContext
|
|
||||||
*
|
|
||||||
* Sets the resolution of the theme context to the default value of 96.
|
|
||||||
* See st_theme_context_set_resolution().
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
st_theme_context_set_default_resolution (StThemeContext *context)
|
|
||||||
{
|
|
||||||
g_return_if_fail (ST_IS_THEME_CONTEXT (context));
|
|
||||||
|
|
||||||
if (context->resolution == DEFAULT_RESOLUTION)
|
|
||||||
return;
|
|
||||||
|
|
||||||
context->resolution = DEFAULT_RESOLUTION;
|
|
||||||
st_theme_context_changed (context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* st_theme_context_get_resolution:
|
|
||||||
* @context: a #StThemeContext
|
|
||||||
*
|
|
||||||
* Gets the current resolution of the theme context.
|
|
||||||
* See st_theme_context_set_resolution().
|
|
||||||
*
|
|
||||||
* Return value: the resolution (in dots-per-"inch")
|
|
||||||
*/
|
|
||||||
double
|
|
||||||
st_theme_context_get_resolution (StThemeContext *context)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (ST_IS_THEME_CONTEXT (context), DEFAULT_RESOLUTION);
|
|
||||||
|
|
||||||
return context->resolution;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_theme_context_set_font:
|
* st_theme_context_set_font:
|
||||||
* @context: a #StThemeContext
|
* @context: a #StThemeContext
|
||||||
|
@ -56,10 +56,6 @@ void st_theme_context_set_theme (StThemeContext
|
|||||||
StTheme *theme);
|
StTheme *theme);
|
||||||
StTheme * st_theme_context_get_theme (StThemeContext *context);
|
StTheme * st_theme_context_get_theme (StThemeContext *context);
|
||||||
|
|
||||||
void st_theme_context_set_resolution (StThemeContext *context,
|
|
||||||
gdouble resolution);
|
|
||||||
void st_theme_context_set_default_resolution (StThemeContext *context);
|
|
||||||
double st_theme_context_get_resolution (StThemeContext *context);
|
|
||||||
void st_theme_context_set_font (StThemeContext *context,
|
void st_theme_context_set_font (StThemeContext *context,
|
||||||
const PangoFontDescription *font);
|
const PangoFontDescription *font);
|
||||||
const PangoFontDescription *st_theme_context_get_font (StThemeContext *context);
|
const PangoFontDescription *st_theme_context_get_font (StThemeContext *context);
|
||||||
|
@ -820,7 +820,7 @@ get_length_from_term (StThemeNode *node,
|
|||||||
break;
|
break;
|
||||||
case POINTS:
|
case POINTS:
|
||||||
{
|
{
|
||||||
double resolution = st_theme_context_get_resolution (node->context);
|
double resolution = clutter_backend_get_resolution (clutter_get_default_backend ());
|
||||||
*length = num->val * multiplier * (resolution / 72.);
|
*length = num->val * multiplier * (resolution / 72.);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -842,7 +842,7 @@ get_length_from_term (StThemeNode *node,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double resolution = st_theme_context_get_resolution (node->context);
|
double resolution = clutter_backend_get_resolution (clutter_get_default_backend ());
|
||||||
*length = num->val * multiplier * (resolution / 72.) * font_size;
|
*length = num->val * multiplier * (resolution / 72.) * font_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2139,7 +2139,7 @@ font_size_from_term (StThemeNode *node,
|
|||||||
{
|
{
|
||||||
if (term->type == TERM_IDENT)
|
if (term->type == TERM_IDENT)
|
||||||
{
|
{
|
||||||
double resolution = st_theme_context_get_resolution (node->context);
|
double resolution = clutter_backend_get_resolution (clutter_get_default_backend ());
|
||||||
/* We work in integers to avoid double comparisons when converting back
|
/* We work in integers to avoid double comparisons when converting back
|
||||||
* from a size in pixels to a logical size.
|
* from a size in pixels to a logical size.
|
||||||
*/
|
*/
|
||||||
@ -2346,7 +2346,7 @@ st_theme_node_get_font (StThemeNode *node)
|
|||||||
parent_size = pango_font_description_get_size (node->font_desc);
|
parent_size = pango_font_description_get_size (node->font_desc);
|
||||||
if (!pango_font_description_get_size_is_absolute (node->font_desc))
|
if (!pango_font_description_get_size_is_absolute (node->font_desc))
|
||||||
{
|
{
|
||||||
double resolution = st_theme_context_get_resolution (node->context);
|
double resolution = clutter_backend_get_resolution (clutter_get_default_backend ());
|
||||||
parent_size *= (resolution / 72.);
|
parent_size *= (resolution / 72.);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,7 +435,6 @@ main (int argc, char **argv)
|
|||||||
stage = clutter_stage_new ();
|
stage = clutter_stage_new ();
|
||||||
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
|
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
|
||||||
st_theme_context_set_theme (context, theme);
|
st_theme_context_set_theme (context, theme);
|
||||||
st_theme_context_set_resolution (context, 96.);
|
|
||||||
st_theme_context_set_font (context,
|
st_theme_context_set_font (context,
|
||||||
pango_font_description_from_string ("sans-serif 12"));
|
pango_font_description_from_string ("sans-serif 12"));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user