Compare commits
81 Commits
Author | SHA1 | Date | |
---|---|---|---|
ab29ce872a | |||
57beb0ade1 | |||
e3d0b6f90f | |||
e2aa954cb5 | |||
05c285a945 | |||
27b34992c6 | |||
4886238761 | |||
42d46aed90 | |||
a622aba7eb | |||
831099cca5 | |||
b8a54faf94 | |||
80ff6ff797 | |||
2f27b94757 | |||
b2f33e2895 | |||
d1d4142052 | |||
46caf6d673 | |||
2864c360bc | |||
e5dfc6323a | |||
5bc042ba6f | |||
c63fe5ee24 | |||
ee6bc33cea | |||
5c730dc53d | |||
5a3de8d663 | |||
fad88dd517 | |||
39dd24310d | |||
b13809d0c7 | |||
87559414a3 | |||
b5b5759829 | |||
d254e2e1f2 | |||
458b0b22fc | |||
cd30128af8 | |||
d61cdd8cea | |||
0d0e545979 | |||
6c5e96c33a | |||
bae2359b54 | |||
8cbbb456f0 | |||
dfd39461cf | |||
60d8683ae7 | |||
f2cc5cf152 | |||
d4a26fbf4b | |||
025784fd83 | |||
4e89a5edde | |||
b3936ecadf | |||
2c9e6bb589 | |||
73261a4a66 | |||
3d0dd38045 | |||
8bcbf3030f | |||
1bc7edc5d8 | |||
0673720db9 | |||
730a0d4c5a | |||
9147dee0de | |||
12746a1949 | |||
bdd65fe755 | |||
21e2280825 | |||
e9d2a429eb | |||
b67dfb9edf | |||
55308917f9 | |||
1b64b09532 | |||
74dd298891 | |||
5a85fc0e55 | |||
26991988cb | |||
15563444cf | |||
3bcdba6e1d | |||
ef56a78544 | |||
049a561466 | |||
b40b19997a | |||
46505a8314 | |||
78fb102002 | |||
c6e924f788 | |||
f6508b51a2 | |||
b0ae596de8 | |||
1d311e7916 | |||
0c19f71c96 | |||
8d6ab32b9a | |||
6c1a2d531f | |||
c6e9f9742b | |||
d23aaf3cea | |||
017fde91ad | |||
31ffc5a85d | |||
62b65a25d8 | |||
882fe48d80 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -18,6 +18,8 @@ config
|
||||
configure
|
||||
data/gnome-shell.desktop
|
||||
data/gnome-shell.desktop.in
|
||||
data/gnome-shell-extension-prefs.desktop
|
||||
data/gnome-shell-extension-prefs.desktop.in
|
||||
data/gschemas.compiled
|
||||
data/org.gnome.shell.gschema.xml
|
||||
data/org.gnome.shell.gschema.valid
|
||||
@ -62,6 +64,7 @@ src/calendar-server/org.gnome.Shell.CalendarServer.service
|
||||
src/gnome-shell
|
||||
src/gnome-shell-calendar-server
|
||||
src/gnome-shell-extension-tool
|
||||
src/gnome-shell-extension-prefs
|
||||
src/gnome-shell-hotplug-sniffer
|
||||
src/gnome-shell-jhbuild
|
||||
src/gnome-shell-perf-helper
|
||||
|
49
NEWS
49
NEWS
@ -1,3 +1,52 @@
|
||||
3.3.5
|
||||
=====
|
||||
|
||||
* Extension system: [Jasper; #668429]
|
||||
http://blog.mecheye.net/2012/02/more-extension-api-breaks/
|
||||
- Add a 'gnome-shell-extension-prefs' application for displaying extension
|
||||
preferences as provided by the extension in a prefs.js file.
|
||||
- Allow launching gnome-shell-extension-prefs from extensions.gnome.org
|
||||
throuhg the browser plugin.
|
||||
- Add ExtensionUtils.getCurrentExtension() for an extension to get a
|
||||
handle to an extension object, to get local imports or paths.
|
||||
- Add an onshellrestart callback to the browser plugin [Jasper; #668517]
|
||||
* Screenshots:
|
||||
- Move the screenshot "flash" to the shell [Cosimo; #668618]
|
||||
- Move saving screenshots to a thread [Adel Gadllah; #652952]
|
||||
- Correctly screenshot rounded decorations [Jasper; #662486]
|
||||
* Screen recorder:
|
||||
- Change the default pipeline to favor speed over quality [Owen; #669066]
|
||||
- Drop frames to keep from running the user out of memory [Owen; #669066]
|
||||
* Work around a slow implementation of glReadPixels() in the Intel drivers,
|
||||
improving performance for screenshots and the screen recorder.
|
||||
[Owen; #669065]
|
||||
* Use Keywords: field in desktop files when search for applications
|
||||
[Florian; #609702]
|
||||
* Strip debian- when matching desktop file names [Jasper; #665647]
|
||||
* Fix up various problems from CSS background size-addition
|
||||
[Florian, Jasper; #668430, #633462]
|
||||
* UI tweaks and behavior fixes
|
||||
[Florian, Giovanni, Stefano; #643867, #666197, #664622]
|
||||
* Some improvements to exported accessibility information [Alejando; #667376]
|
||||
* Don't show contacts without IM information as offline [Florian; #662685]
|
||||
* Don't change status from hidden to extended_away when going idle
|
||||
[Florian; #642408]
|
||||
* Cleanups [Emmanuele, Jasper; #662152, #669239]
|
||||
* Misc bug fixes [Cosimo, Dan, Florian, Jasper, Rui, Stefano;
|
||||
#633462, #643867, #662213, #662386, #662747, #665000, #665017, #665322,
|
||||
#667371, #667860, #668020, #668517, #668541, #669236]
|
||||
|
||||
Contributors:
|
||||
Emmanuele Bassi, Giovanni Campagna, Cosimo Cecchi, Stefano Facchini,
|
||||
Rui Matos, Florian Müllner, Alejandro Piñeiro, Jasper St. Pierre,
|
||||
Owen Taylor, Dan Winship
|
||||
|
||||
Translations:
|
||||
Daniel Mustieles [es], Timo Jyrinki [fi], Seán de Búrca [ga],
|
||||
Fran Diéguez [gl], Kjartan Maraas [nb], Wouter Bolsterlee [nl],
|
||||
Danishka Navin [si], Yaron Shahrabani [he], Matej Urbančič [sl],
|
||||
Chao-Hsiung Liao [zh_HK, zh_TW]
|
||||
|
||||
3.3.4
|
||||
=====
|
||||
* https://live.gnome.org/EveryDetailMatters
|
||||
|
@ -41,7 +41,7 @@
|
||||
"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_API_VERSION 1
|
||||
#define PLUGIN_API_VERSION 3
|
||||
|
||||
typedef struct {
|
||||
GDBusProxy *proxy;
|
||||
@ -262,11 +262,13 @@ NPP_Destroy(NPP instance,
|
||||
/* =================== scripting interface =================== */
|
||||
|
||||
typedef struct {
|
||||
NPObject parent;
|
||||
NPP instance;
|
||||
GDBusProxy *proxy;
|
||||
NPObject *listener;
|
||||
gint signal_id;
|
||||
NPObject parent;
|
||||
NPP instance;
|
||||
GDBusProxy *proxy;
|
||||
NPObject *listener;
|
||||
NPObject *restart_listener;
|
||||
gint signal_id;
|
||||
guint watch_name_id;
|
||||
} PluginObject;
|
||||
|
||||
static void
|
||||
@ -284,7 +286,7 @@ on_shell_signal (GDBusProxy *proxy,
|
||||
gint32 status;
|
||||
gchar *error;
|
||||
NPVariant args[3];
|
||||
NPVariant result;
|
||||
NPVariant result = { NPVariantType_Void };
|
||||
|
||||
g_variant_get (parameters, "(sis)", &uuid, &status, &error);
|
||||
STRINGZ_TO_NPVARIANT (uuid, args[0]);
|
||||
@ -300,6 +302,25 @@ on_shell_signal (GDBusProxy *proxy,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_shell_appeared (GDBusConnection *connection,
|
||||
const gchar *name,
|
||||
const gchar *name_owner,
|
||||
gpointer user_data)
|
||||
{
|
||||
PluginObject *obj = (PluginObject*) user_data;
|
||||
|
||||
if (obj->restart_listener)
|
||||
{
|
||||
NPVariant result = { NPVariantType_Void };
|
||||
|
||||
funcs.invokeDefault (obj->instance, obj->restart_listener,
|
||||
NULL, 0, &result);
|
||||
|
||||
funcs.releasevariantvalue (&result);
|
||||
}
|
||||
}
|
||||
|
||||
static NPObject *
|
||||
plugin_object_allocate (NPP instance,
|
||||
NPClass *klass)
|
||||
@ -312,6 +333,14 @@ plugin_object_allocate (NPP instance,
|
||||
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
|
||||
G_CALLBACK (on_shell_signal), obj);
|
||||
|
||||
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
||||
"org.gnome.Shell",
|
||||
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
||||
on_shell_appeared,
|
||||
NULL,
|
||||
obj,
|
||||
NULL);
|
||||
|
||||
g_debug ("plugin object created");
|
||||
|
||||
return (NPObject*)obj;
|
||||
@ -328,6 +357,9 @@ plugin_object_deallocate (NPObject *npobj)
|
||||
if (obj->listener)
|
||||
funcs.releaseobject (obj->listener);
|
||||
|
||||
if (obj->watch_name_id)
|
||||
g_bus_unwatch_name (obj->watch_name_id);
|
||||
|
||||
g_debug ("plugin object destroyed");
|
||||
|
||||
g_slice_free (PluginObject, obj);
|
||||
@ -341,7 +373,9 @@ static NPIdentifier enable_extension_id;
|
||||
static NPIdentifier install_extension_id;
|
||||
static NPIdentifier uninstall_extension_id;
|
||||
static NPIdentifier onextension_changed_id;
|
||||
static NPIdentifier onrestart_id;
|
||||
static NPIdentifier get_errors_id;
|
||||
static NPIdentifier launch_extension_prefs_id;
|
||||
|
||||
static bool
|
||||
plugin_object_has_method (NPObject *npobj,
|
||||
@ -352,7 +386,8 @@ plugin_object_has_method (NPObject *npobj,
|
||||
name == enable_extension_id ||
|
||||
name == install_extension_id ||
|
||||
name == uninstall_extension_id ||
|
||||
name == get_errors_id);
|
||||
name == get_errors_id ||
|
||||
name == launch_extension_prefs_id);
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
@ -457,7 +492,10 @@ plugin_enable_extension (PluginObject *obj,
|
||||
{
|
||||
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||
if (!uuid_is_valid (uuid_str))
|
||||
return FALSE;
|
||||
{
|
||||
g_free (uuid_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_dbus_proxy_call (obj->proxy,
|
||||
(enabled ? "EnableExtension" : "DisableExtension"),
|
||||
@ -616,6 +654,33 @@ plugin_get_errors (PluginObject *obj,
|
||||
return jsonify_variant (res, result);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
plugin_launch_extension_prefs (PluginObject *obj,
|
||||
NPString uuid,
|
||||
NPVariant *result)
|
||||
{
|
||||
gchar *uuid_str;
|
||||
|
||||
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||
if (!uuid_is_valid (uuid_str))
|
||||
{
|
||||
g_free (uuid_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_dbus_proxy_call (obj->proxy,
|
||||
"LaunchExtensionPrefs",
|
||||
g_variant_new ("(s)", uuid_str),
|
||||
G_DBUS_CALL_FLAGS_NONE,
|
||||
-1, /* timeout */
|
||||
NULL, /* cancellable */
|
||||
NULL, /* callback */
|
||||
NULL /* user_data */);
|
||||
|
||||
g_free (uuid_str);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int
|
||||
plugin_get_api_version (PluginObject *obj,
|
||||
NPVariant *result)
|
||||
@ -726,6 +791,14 @@ plugin_object_invoke (NPObject *npobj,
|
||||
NPVARIANT_TO_STRING(args[0]),
|
||||
result);
|
||||
}
|
||||
else if (name == launch_extension_prefs_id)
|
||||
{
|
||||
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||
|
||||
return plugin_launch_extension_prefs (obj,
|
||||
NPVARIANT_TO_STRING(args[0]),
|
||||
result);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -735,6 +808,7 @@ plugin_object_has_property (NPObject *npobj,
|
||||
NPIdentifier name)
|
||||
{
|
||||
return (name == onextension_changed_id ||
|
||||
name == onrestart_id ||
|
||||
name == api_version_id ||
|
||||
name == shell_version_id);
|
||||
}
|
||||
@ -761,6 +835,33 @@ plugin_object_get_property (NPObject *npobj,
|
||||
else
|
||||
NULL_TO_NPVARIANT (*result);
|
||||
}
|
||||
else if (name == onrestart_id)
|
||||
{
|
||||
if (obj->restart_listener)
|
||||
OBJECT_TO_NPVARIANT (obj->restart_listener, *result);
|
||||
else
|
||||
NULL_TO_NPVARIANT (*result);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool
|
||||
plugin_object_set_callback (NPObject **listener,
|
||||
const NPVariant *value)
|
||||
{
|
||||
if (!NPVARIANT_IS_OBJECT (*value) && !NPVARIANT_IS_NULL (*value))
|
||||
return FALSE;
|
||||
|
||||
if (*listener)
|
||||
funcs.releaseobject (*listener);
|
||||
*listener = NULL;
|
||||
|
||||
if (NPVARIANT_IS_OBJECT (*value))
|
||||
{
|
||||
*listener = NPVARIANT_TO_OBJECT (*value);
|
||||
funcs.retainobject (*listener);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -772,25 +873,13 @@ plugin_object_set_property (NPObject *npobj,
|
||||
{
|
||||
PluginObject *obj;
|
||||
|
||||
if (!plugin_object_has_property (npobj, name))
|
||||
return FALSE;
|
||||
obj = (PluginObject *)npobj;
|
||||
|
||||
if (name == onextension_changed_id)
|
||||
{
|
||||
obj = (PluginObject*) npobj;
|
||||
if (obj->listener)
|
||||
funcs.releaseobject (obj->listener);
|
||||
return plugin_object_set_callback (&obj->listener, value);
|
||||
|
||||
obj->listener = NULL;
|
||||
if (NPVARIANT_IS_OBJECT (*value))
|
||||
{
|
||||
obj->listener = NPVARIANT_TO_OBJECT (*value);
|
||||
funcs.retainobject (obj->listener);
|
||||
return TRUE;
|
||||
}
|
||||
else if (NPVARIANT_IS_NULL (*value))
|
||||
return TRUE;
|
||||
}
|
||||
if (name == onrestart_id)
|
||||
return plugin_object_set_callback (&obj->restart_listener, value);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -824,7 +913,9 @@ init_methods_and_properties (void)
|
||||
install_extension_id = funcs.getstringidentifier ("installExtension");
|
||||
uninstall_extension_id = funcs.getstringidentifier ("uninstallExtension");
|
||||
get_errors_id = funcs.getstringidentifier ("getExtensionErrors");
|
||||
launch_extension_prefs_id = funcs.getstringidentifier ("launchExtensionPrefs");
|
||||
|
||||
onrestart_id = funcs.getstringidentifier ("onshellrestart");
|
||||
onextension_changed_id = funcs.getstringidentifier ("onchange");
|
||||
}
|
||||
|
||||
|
11
configure.ac
11
configure.ac
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.3.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.3.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -53,7 +53,7 @@ if $PKG_CONFIG --exists gstreamer-0.10 '>=' $GSTREAMER_MIN_VERSION ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
build_recorder=true
|
||||
recorder_modules="gstreamer-0.10 gstreamer-base-0.10 x11"
|
||||
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0 xfixes)
|
||||
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0 xfixes gl)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
@ -63,7 +63,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||
CLUTTER_MIN_VERSION=1.7.5
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||
GJS_MIN_VERSION=1.29.18
|
||||
MUTTER_MIN_VERSION=3.3.3
|
||||
MUTTER_MIN_VERSION=3.3.5
|
||||
FOLKS_MIN_VERSION=0.5.2
|
||||
GTK_MIN_VERSION=3.3.9
|
||||
GIO_MIN_VERSION=2.31.6
|
||||
@ -117,6 +117,7 @@ AC_CHECK_FUNCS(JS_NewGlobalObject XFixesCreatePointerBarrier)
|
||||
CFLAGS=$saved_CFLAGS
|
||||
LIBS=$saved_LIBS
|
||||
|
||||
PKG_CHECK_MODULES(GNOME_SHELL_JS, glib-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 gnome-desktop-3.0 >= 2.90.0 x11)
|
||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
||||
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
||||
@ -198,7 +199,7 @@ if test "$enable_compile_warnings" != no ; then
|
||||
if test "$enable_compile_warnings" = error ; then
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-Werror[\ \ ]*) ;;
|
||||
*) CFLAGS="$CFLAGS -Werror" ;;
|
||||
*) CFLAGS="$CFLAGS -Werror -Wno-error=deprecated-declarations" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
@ -206,7 +207,7 @@ fi
|
||||
changequote([,])dnl
|
||||
|
||||
AC_ARG_ENABLE(jhbuild-wrapper-script,
|
||||
AS_HELP_STRING([--jhbuild-wrapper-script=yes],[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)
|
||||
|
||||
AC_MSG_CHECKING([location of system Certificate Authority list])
|
||||
|
@ -1,5 +1,5 @@
|
||||
desktopdir=$(datadir)/applications
|
||||
desktop_DATA = gnome-shell.desktop
|
||||
desktop_DATA = gnome-shell.desktop gnome-shell-extension-prefs.desktop
|
||||
|
||||
# We substitute in bindir so it works as an autostart
|
||||
# file when built in a non-system prefix
|
||||
@ -69,6 +69,7 @@ shaders_DATA = \
|
||||
|
||||
EXTRA_DIST = \
|
||||
gnome-shell.desktop.in.in \
|
||||
gnome-shell-extension-prefs.desktop.in.in \
|
||||
$(menu_DATA) \
|
||||
$(shaders_DATA) \
|
||||
$(convert_DATA) \
|
||||
@ -76,6 +77,7 @@ EXTRA_DIST = \
|
||||
|
||||
CLEANFILES = \
|
||||
gnome-shell.desktop.in \
|
||||
gnome-shell-extension-prefs.in \
|
||||
$(desktop_DATA) \
|
||||
$(gsettings_SCHEMAS) \
|
||||
gschemas.compiled
|
||||
|
12
data/gnome-shell-extension-prefs.desktop.in.in
Normal file
12
data/gnome-shell-extension-prefs.desktop.in.in
Normal file
@ -0,0 +1,12 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
_Name=GNOME Shell Extension Preferences
|
||||
_Comment=Configure GNOME Shell Extensions
|
||||
Exec=@bindir@/gnome-shell-extension-prefs %u
|
||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||
X-GNOME-Bugzilla-Product=gnome-shell
|
||||
X-GNOME-Bugzilla-Component=extensions
|
||||
X-GNOME-Bugzilla-Version=@VERSION@
|
||||
Categories=GNOME;GTK;
|
||||
OnlyShowIn=GNOME;
|
||||
NoDisplay=true
|
@ -108,7 +108,7 @@
|
||||
<schema id="org.gnome.shell.recorder" path="/org/gnome/shell/recorder/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="framerate" type="i">
|
||||
<default>15</default>
|
||||
<default>30</default>
|
||||
<_summary>Framerate used for recording screencasts.</_summary>
|
||||
<_description>
|
||||
The framerate of the resulting screencast recordered
|
||||
@ -127,7 +127,7 @@
|
||||
take care of its own output - this might be used to send the output
|
||||
to an icecast server via shout2send or similar. When unset or set
|
||||
to an empty value, the default pipeline will be used. This is currently
|
||||
'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux'
|
||||
'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 thread count on the system.
|
||||
</_description>
|
||||
|
@ -60,7 +60,6 @@ StScrollBar StBin#trough {
|
||||
StScrollBar StButton#vhandle
|
||||
{
|
||||
background-image: url("scroll-vhandle.svg");
|
||||
background-size: contain;
|
||||
background-color: #252525;
|
||||
border: 1px solid #080808;
|
||||
border-radius: 8px;
|
||||
@ -69,7 +68,6 @@ StScrollBar StButton#vhandle
|
||||
StScrollBar StButton#hhandle
|
||||
{
|
||||
background-image: url("scroll-hhandle.svg");
|
||||
background-size: contain;
|
||||
background-color: #252525;
|
||||
border: 1px solid #080808;
|
||||
border-radius: 8px;
|
||||
@ -362,7 +360,6 @@ StTooltip StLabel {
|
||||
.panel-button:focus {
|
||||
border-image: url("panel-button-border.svg") 10 10 0 2;
|
||||
background-image: url("panel-button-highlight-wide.svg");
|
||||
background-size: contain;
|
||||
color: white;
|
||||
text-shadow: black 0px 2px 2px;
|
||||
}
|
||||
@ -371,7 +368,6 @@ StTooltip StLabel {
|
||||
.panel-status-button:checked,
|
||||
.panel-status-button:focus {
|
||||
background-image: url("panel-button-highlight-narrow.svg");
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
.panel-button:active > .system-status-icon,
|
||||
@ -707,13 +703,11 @@ StTooltip StLabel {
|
||||
.app-filter:selected {
|
||||
color: #ffffff;
|
||||
background-image: url("filter-selected-ltr.svg");
|
||||
background-size: contain;
|
||||
background-position: 190px 10px;
|
||||
}
|
||||
|
||||
.app-filter:selected:rtl {
|
||||
background-image: url("filter-selected-rtl.svg");
|
||||
background-size: contain;
|
||||
background-position: 10px 10px;
|
||||
}
|
||||
|
||||
@ -1624,7 +1618,6 @@ StTooltip StLabel {
|
||||
border: 0px;
|
||||
background: rgba(255,255,255,0.5);
|
||||
background-image: url("ws-switch-arrow-up.svg");
|
||||
background-size: contain;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
@ -1633,7 +1626,6 @@ StTooltip StLabel {
|
||||
border: 0px;
|
||||
background: rgba(255,255,255,0.5);
|
||||
background-image: url("ws-switch-arrow-down.svg");
|
||||
background-size: contain;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
@ -1718,6 +1710,10 @@ StTooltip StLabel {
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.flashspot {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
/* End Session Dialog */
|
||||
.end-session-dialog {
|
||||
spacing: 42px;
|
||||
@ -1830,6 +1826,10 @@ StTooltip StLabel {
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.mount-question-dialog-subject {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
.show-processes-dialog-subject:rtl,
|
||||
.mount-question-dialog-subject:rtl {
|
||||
padding-left: 0px;
|
||||
|
@ -7,8 +7,10 @@ nobase_dist_js_DATA = \
|
||||
gdm/fingerprint.js \
|
||||
gdm/loginDialog.js \
|
||||
gdm/powerMenu.js \
|
||||
extensionPrefs/main.js \
|
||||
misc/config.js \
|
||||
misc/docInfo.js \
|
||||
misc/extensionUtils.js \
|
||||
misc/fileUtils.js \
|
||||
misc/format.js \
|
||||
misc/gnomeSession.js \
|
||||
@ -35,6 +37,7 @@ nobase_dist_js_DATA = \
|
||||
ui/endSessionDialog.js \
|
||||
ui/environment.js \
|
||||
ui/extensionSystem.js \
|
||||
ui/flashspot.js \
|
||||
ui/iconGrid.js \
|
||||
ui/keyboard.js \
|
||||
ui/layout.js \
|
||||
|
279
js/extensionPrefs/main.js
Normal file
279
js/extensionPrefs/main.js
Normal file
@ -0,0 +1,279 @@
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Gettext = imports.gettext;
|
||||
const GLib = imports.gi.GLib;
|
||||
const GObject = imports.gi.GObject;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Pango = imports.gi.Pango;
|
||||
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const Format = imports.misc.format;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
|
||||
|
||||
const GnomeShellIface = <interface name="org.gnome.Shell">
|
||||
<signal name="ExtensionStatusChanged">
|
||||
<arg type="s" name="uuid"/>
|
||||
<arg type="i" name="state"/>
|
||||
<arg type="s" name="error"/>
|
||||
</signal>
|
||||
</interface>;
|
||||
|
||||
const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
|
||||
|
||||
function stripPrefix(string, prefix) {
|
||||
if (string.slice(0, prefix.length) == prefix)
|
||||
return string.slice(prefix.length);
|
||||
return string;
|
||||
}
|
||||
|
||||
const Application = new Lang.Class({
|
||||
Name: 'Application',
|
||||
_init: function() {
|
||||
GLib.set_prgname('gnome-shell-extension-prefs');
|
||||
this.application = new Gtk.Application({
|
||||
application_id: 'org.gnome.shell.ExtensionPrefs',
|
||||
flags: Gio.ApplicationFlags.HANDLES_COMMAND_LINE
|
||||
});
|
||||
|
||||
this.application.connect('activate', Lang.bind(this, this._onActivate));
|
||||
this.application.connect('command-line', Lang.bind(this, this._onCommandLine));
|
||||
this.application.connect('startup', Lang.bind(this, this._onStartup));
|
||||
|
||||
this._extensionPrefsModules = {};
|
||||
|
||||
this._extensionIters = {};
|
||||
},
|
||||
|
||||
_buildModel: function() {
|
||||
this._model = new Gtk.ListStore();
|
||||
this._model.set_column_types([GObject.TYPE_STRING, GObject.TYPE_STRING]);
|
||||
},
|
||||
|
||||
_extensionAvailable: function(uuid) {
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
|
||||
if (!extension)
|
||||
return false;
|
||||
|
||||
if (ExtensionUtils.isOutOfDate(extension))
|
||||
return false;
|
||||
|
||||
if (!extension.dir.get_child('prefs.js').query_exists(null))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
_setExtensionInsensitive: function(layout, cell, model, iter, data) {
|
||||
let uuid = model.get_value(iter, 0);
|
||||
if (!this._extensionAvailable(uuid))
|
||||
cell.set_sensitive(false);
|
||||
},
|
||||
|
||||
_getExtensionPrefsModule: function(extension) {
|
||||
let uuid = extension.metadata.uuid;
|
||||
|
||||
if (this._extensionPrefsModules.hasOwnProperty(uuid))
|
||||
return this._extensionPrefsModules[uuid];
|
||||
|
||||
ExtensionUtils.installImporter(extension);
|
||||
|
||||
let prefsModule = extension.imports.prefs;
|
||||
prefsModule.init(extension.metadata);
|
||||
|
||||
this._extensionPrefsModules[uuid] = prefsModule;
|
||||
return prefsModule;
|
||||
},
|
||||
|
||||
_selectExtension: function(uuid) {
|
||||
if (!this._extensionAvailable(uuid))
|
||||
return;
|
||||
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
let widget;
|
||||
|
||||
try {
|
||||
let prefsModule = this._getExtensionPrefsModule(extension);
|
||||
widget = prefsModule.buildPrefsWidget();
|
||||
} catch (e) {
|
||||
widget = this._buildErrorUI(extension, e);
|
||||
}
|
||||
|
||||
// Destroy the current prefs widget, if it exists
|
||||
if (this._extensionPrefsBin.get_child())
|
||||
this._extensionPrefsBin.get_child().destroy();
|
||||
|
||||
this._extensionPrefsBin.add(widget);
|
||||
this._extensionSelector.set_active_iter(this._extensionIters[uuid]);
|
||||
},
|
||||
|
||||
_extensionSelected: function() {
|
||||
let [success, iter] = this._extensionSelector.get_active_iter();
|
||||
if (!success)
|
||||
return;
|
||||
|
||||
let uuid = this._model.get_value(iter, 0);
|
||||
this._selectExtension(uuid);
|
||||
},
|
||||
|
||||
_buildErrorUI: function(extension, exc) {
|
||||
let box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
|
||||
let label = new Gtk.Label({
|
||||
label: _("There was an error loading the preferences dialog for %s:").format(extension.metadata.name)
|
||||
});
|
||||
box.add(label);
|
||||
|
||||
let errortext = '';
|
||||
errortext += exc;
|
||||
errortext += '\n\n';
|
||||
errortext += 'Stack trace:\n';
|
||||
|
||||
// Indent stack trace.
|
||||
errortext += exc.stack.split('\n').map(function(line) {
|
||||
return ' ' + line;
|
||||
}).join('\n');
|
||||
|
||||
let scroll = new Gtk.ScrolledWindow({ vexpand: true });
|
||||
let buffer = new Gtk.TextBuffer({ text: errortext });
|
||||
let textview = new Gtk.TextView({ buffer: buffer });
|
||||
textview.override_font(Pango.font_description_from_string('monospace'));
|
||||
scroll.add(textview);
|
||||
box.add(scroll);
|
||||
|
||||
box.show_all();
|
||||
return box;
|
||||
},
|
||||
|
||||
_buildUI: function(app) {
|
||||
this._window = new Gtk.ApplicationWindow({ application: app,
|
||||
window_position: Gtk.WindowPosition.CENTER,
|
||||
title: _("GNOME Shell Extension Preferences") });
|
||||
|
||||
this._window.set_size_request(600, 400);
|
||||
|
||||
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
|
||||
this._window.add(vbox);
|
||||
|
||||
let toolbar = new Gtk.Toolbar();
|
||||
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);
|
||||
vbox.add(toolbar);
|
||||
let toolitem;
|
||||
|
||||
let label = new Gtk.Label({ label: _("<b>Extension</b>"),
|
||||
use_markup: true });
|
||||
toolitem = new Gtk.ToolItem({ child: label });
|
||||
toolbar.add(toolitem);
|
||||
|
||||
this._extensionSelector = new Gtk.ComboBox({ model: this._model,
|
||||
margin_left: 8,
|
||||
hexpand: true });
|
||||
this._extensionSelector.get_style_context().add_class(Gtk.STYLE_CLASS_RAISED);
|
||||
|
||||
let renderer = new Gtk.CellRendererText();
|
||||
this._extensionSelector.pack_start(renderer, true);
|
||||
this._extensionSelector.add_attribute(renderer, 'text', 1);
|
||||
this._extensionSelector.set_cell_data_func(renderer, Lang.bind(this, this._setExtensionInsensitive), null);
|
||||
this._extensionSelector.connect('changed', Lang.bind(this, this._extensionSelected));
|
||||
|
||||
toolitem = new Gtk.ToolItem({ child: this._extensionSelector });
|
||||
toolitem.set_expand(true);
|
||||
toolbar.add(toolitem);
|
||||
|
||||
this._extensionPrefsBin = new Gtk.Frame();
|
||||
vbox.add(this._extensionPrefsBin);
|
||||
|
||||
let label = new Gtk.Label({
|
||||
label: _("Select an extension to configure using the combobox above."),
|
||||
vexpand: true
|
||||
});
|
||||
|
||||
this._extensionPrefsBin.add(label);
|
||||
|
||||
this._shellProxy = new GnomeShellProxy(Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell');
|
||||
this._shellProxy.connectSignal('ExtensionStatusChanged', Lang.bind(this, function(proxy, senderName, [uuid, state, error]) {
|
||||
if (ExtensionUtils.extensions[uuid] !== undefined)
|
||||
this._scanExtensions();
|
||||
}));
|
||||
|
||||
this._window.show_all();
|
||||
},
|
||||
|
||||
_scanExtensions: function() {
|
||||
ExtensionUtils.scanExtensions(Lang.bind(this, function(uuid, dir, type) {
|
||||
if (ExtensionUtils.extensions[uuid] !== undefined)
|
||||
return;
|
||||
|
||||
let extension;
|
||||
try {
|
||||
extension = ExtensionUtils.createExtensionObject(uuid, dir, type);
|
||||
} catch(e) {
|
||||
global.logError('' + e);
|
||||
return;
|
||||
}
|
||||
|
||||
let iter = this._model.append();
|
||||
this._model.set(iter, [0, 1], [uuid, extension.metadata.name]);
|
||||
this._extensionIters[uuid] = iter;
|
||||
}));
|
||||
},
|
||||
|
||||
_onActivate: function() {
|
||||
this._window.present();
|
||||
},
|
||||
|
||||
_onStartup: function(app) {
|
||||
this._buildModel();
|
||||
this._buildUI(app);
|
||||
this._scanExtensions();
|
||||
},
|
||||
|
||||
_onCommandLine: function(app, commandLine) {
|
||||
app.activate();
|
||||
let args = commandLine.get_arguments();
|
||||
if (args.length) {
|
||||
let uuid = args[0];
|
||||
|
||||
// Strip off "extension:///" prefix which fakes a URI, if it exists
|
||||
uuid = stripPrefix(uuid, "extension:///");
|
||||
|
||||
if (!this._extensionAvailable(uuid))
|
||||
return 1;
|
||||
|
||||
this._selectExtension(uuid);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
function initEnvironment() {
|
||||
// Monkey-patch in a "global" object that fakes some Shell utilities
|
||||
// that ExtensionUtils depends on.
|
||||
window.global = {
|
||||
log: function() {
|
||||
print([].join.call(arguments, ', '));
|
||||
},
|
||||
|
||||
logError: function(s) {
|
||||
global.log('ERROR: ' + s);
|
||||
},
|
||||
|
||||
userdatadir: GLib.build_filenamev([GLib.get_user_data_dir(), 'gnome-shell'])
|
||||
};
|
||||
|
||||
String.prototype.format = Format.format;
|
||||
}
|
||||
|
||||
function main(argv) {
|
||||
initEnvironment();
|
||||
ExtensionUtils.init();
|
||||
|
||||
Gettext.bindtextdomain(Config.GETTEXT_PACKAGE, Config.LOCALEDIR);
|
||||
Gettext.textdomain(Config.GETTEXT_PACKAGE);
|
||||
|
||||
let app = new Application();
|
||||
app.application.run(argv);
|
||||
}
|
@ -10,3 +10,7 @@ const GJS_VERSION = '@GJS_VERSION@';
|
||||
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
||||
/* The system TLS CA list */
|
||||
const SHELL_SYSTEM_CA_FILE = '@SHELL_SYSTEM_CA_FILE@';
|
||||
/* gettext package */
|
||||
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
||||
/* locale dir */
|
||||
const LOCALEDIR = '@datadir@/locale';
|
||||
|
194
js/misc/extensionUtils.js
Normal file
194
js/misc/extensionUtils.js
Normal file
@ -0,0 +1,194 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
// Common utils for the extension system and the extension
|
||||
// preferences tool
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const ShellJS = imports.gi.ShellJS;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
|
||||
const ExtensionType = {
|
||||
SYSTEM: 1,
|
||||
PER_USER: 2
|
||||
};
|
||||
|
||||
// GFile for user extensions
|
||||
var userExtensionsDir = null;
|
||||
|
||||
// Maps uuid -> metadata object
|
||||
const extensions = {};
|
||||
|
||||
function getCurrentExtension() {
|
||||
let stack = (new Error()).stack;
|
||||
|
||||
// Assuming we're importing this directly from an extension (and we shouldn't
|
||||
// ever not be), its UUID should be directly in the path here.
|
||||
let extensionStackLine = stack.split('\n')[1];
|
||||
if (!extensionStackLine)
|
||||
throw new Error('Could not find current extension');
|
||||
|
||||
// The stack line is like:
|
||||
// init([object Object])@/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
||||
//
|
||||
// In the case that we're importing from
|
||||
// module scope, the first field is blank:
|
||||
// @/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
||||
let match = new RegExp('@(.+):\\d+').exec(extensionStackLine);
|
||||
if (!match)
|
||||
throw new Error('Could not find current extension');
|
||||
|
||||
let path = match[1];
|
||||
let uuid = GLib.path_get_basename(GLib.path_get_dirname(path));
|
||||
|
||||
let extension = extensions[uuid];
|
||||
if (extension === undefined)
|
||||
throw new Error('Could not find current extension');
|
||||
|
||||
return extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* versionCheck:
|
||||
* @required: an array of versions we're compatible with
|
||||
* @current: the version we have
|
||||
*
|
||||
* Check if a component is compatible for an extension.
|
||||
* @required is an array, and at least one version must match.
|
||||
* @current must be in the format <major>.<minor>.<point>.<micro>
|
||||
* <micro> is always ignored
|
||||
* <point> is ignored if <minor> is even (so you can target the
|
||||
* whole stable release)
|
||||
* <minor> and <major> must match
|
||||
* Each target version must be at least <major> and <minor>
|
||||
*/
|
||||
function versionCheck(required, current) {
|
||||
let currentArray = current.split('.');
|
||||
let major = currentArray[0];
|
||||
let minor = currentArray[1];
|
||||
let point = currentArray[2];
|
||||
for (let i = 0; i < required.length; i++) {
|
||||
let requiredArray = required[i].split('.');
|
||||
if (requiredArray[0] == major &&
|
||||
requiredArray[1] == minor &&
|
||||
(requiredArray[2] == point ||
|
||||
(requiredArray[2] == undefined && parseInt(minor) % 2 == 0)))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function isOutOfDate(extension) {
|
||||
if (!versionCheck(extension.metadata['shell-version'], Config.PACKAGE_VERSION))
|
||||
return true;
|
||||
|
||||
if (extension.metadata['js-version'] && !versionCheck(extension.metadata['js-version'], Config.GJS_VERSION))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function createExtensionObject(uuid, dir, type) {
|
||||
let info;
|
||||
|
||||
let metadataFile = dir.get_child('metadata.json');
|
||||
if (!metadataFile.query_exists(null)) {
|
||||
throw new Error('Missing metadata.json');
|
||||
}
|
||||
|
||||
let metadataContents, success, tag;
|
||||
try {
|
||||
[success, metadataContents, tag] = metadataFile.load_contents(null);
|
||||
} catch (e) {
|
||||
throw new Error('Failed to load metadata.json: ' + e);
|
||||
}
|
||||
let meta;
|
||||
try {
|
||||
meta = JSON.parse(metadataContents);
|
||||
} catch (e) {
|
||||
throw new Error('Failed to parse metadata.json: ' + e);
|
||||
}
|
||||
|
||||
let requiredProperties = ['uuid', 'name', 'description', 'shell-version'];
|
||||
for (let i = 0; i < requiredProperties.length; i++) {
|
||||
let prop = requiredProperties[i];
|
||||
if (!meta[prop]) {
|
||||
throw new Error('missing "' + prop + '" property in metadata.json');
|
||||
}
|
||||
}
|
||||
|
||||
// Encourage people to add this
|
||||
if (!meta.url) {
|
||||
global.log('Warning: Missing "url" property in metadata.json');
|
||||
}
|
||||
|
||||
if (uuid != meta.uuid) {
|
||||
throw new Error('uuid "' + meta.uuid + '" from metadata.json does not match directory name "' + uuid + '"');
|
||||
}
|
||||
|
||||
let extension = {};
|
||||
|
||||
extension.metadata = meta;
|
||||
extension.uuid = meta.uuid;
|
||||
extension.type = type;
|
||||
extension.dir = dir;
|
||||
extension.path = dir.get_path();
|
||||
extension.error = '';
|
||||
extension.hasPrefs = dir.get_child('prefs.js').query_exists(null);
|
||||
|
||||
extensions[uuid] = extension;
|
||||
|
||||
return extension;
|
||||
}
|
||||
|
||||
var _extension = null;
|
||||
|
||||
function installImporter(extension) {
|
||||
_extension = extension;
|
||||
ShellJS.add_extension_importer('imports.misc.extensionUtils._extension', 'imports', extension.path);
|
||||
_extension = null;
|
||||
}
|
||||
|
||||
function init() {
|
||||
let userExtensionsPath = GLib.build_filenamev([global.userdatadir, 'extensions']);
|
||||
userExtensionsDir = Gio.file_new_for_path(userExtensionsPath);
|
||||
try {
|
||||
if (!userExtensionsDir.query_exists(null))
|
||||
userExtensionsDir.make_directory_with_parents(null);
|
||||
} catch (e) {
|
||||
global.logError('' + e);
|
||||
}
|
||||
}
|
||||
|
||||
function scanExtensionsInDirectory(callback, dir, type) {
|
||||
let fileEnum;
|
||||
let file, info;
|
||||
try {
|
||||
fileEnum = dir.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
|
||||
} catch(e) {
|
||||
global.logError('' + e);
|
||||
return;
|
||||
}
|
||||
|
||||
while ((info = fileEnum.next_file(null)) != null) {
|
||||
let fileType = info.get_file_type();
|
||||
if (fileType != Gio.FileType.DIRECTORY)
|
||||
continue;
|
||||
let uuid = info.get_name();
|
||||
let extensionDir = dir.get_child(uuid);
|
||||
callback(uuid, extensionDir, type);
|
||||
}
|
||||
fileEnum.close(null);
|
||||
}
|
||||
|
||||
function scanExtensions(callback) {
|
||||
let systemDataDirs = GLib.get_system_data_dirs();
|
||||
for (let i = 0; i < systemDataDirs.length; i++) {
|
||||
let dirPath = GLib.build_filenamev([systemDataDirs[i], 'gnome-shell', 'extensions']);
|
||||
let dir = Gio.file_new_for_path(dirPath);
|
||||
if (dir.query_exists(null))
|
||||
scanExtensionsInDirectory(callback, dir, ExtensionType.SYSTEM);
|
||||
}
|
||||
scanExtensionsInDirectory(callback, userExtensionsDir, ExtensionType.PER_USER);
|
||||
}
|
@ -165,7 +165,7 @@ const ModemCdma = new Lang.Class({
|
||||
|
||||
this.signal_quality = 0;
|
||||
this.operator_name = null;
|
||||
this._proxy.connect('SignalQuality', Lang.bind(this, function(proxy, sender, params) {
|
||||
this._proxy.connectSignal('SignalQuality', Lang.bind(this, function(proxy, sender, params) {
|
||||
this.signal_quality = params[0];
|
||||
this.emit('notify::signal-quality');
|
||||
|
||||
|
@ -43,7 +43,7 @@ function ConsoleKitManager() {
|
||||
g_flags: (Gio.DBusProxyFlags.DO_NOT_AUTO_START |
|
||||
Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
|
||||
|
||||
self.connect('notify::g-name-owner', function() {
|
||||
self._updateSessionActive = function() {
|
||||
if (self.g_name_owner) {
|
||||
self.GetCurrentSessionRemote(function([session]) {
|
||||
self._ckSession = new ConsoleKitSessionProxy(Gio.DBus.system, 'org.freedesktop.ConsoleKit', session);
|
||||
@ -58,8 +58,11 @@ function ConsoleKitManager() {
|
||||
} else {
|
||||
self.sessionActive = true;
|
||||
}
|
||||
});
|
||||
};
|
||||
self.connect('notify::g-name-owner',
|
||||
Lang.bind(self, self._updateSessionActive));
|
||||
|
||||
self._updateSessionActive();
|
||||
self.init(null);
|
||||
return self;
|
||||
}
|
||||
|
@ -93,23 +93,30 @@ const Contact = new Lang.Class({
|
||||
text = _("Busy");
|
||||
iconName = 'user-busy';
|
||||
break;
|
||||
default:
|
||||
case Folks.PresenceType.OFFLINE:
|
||||
text = _("Offline");
|
||||
iconName = 'user-offline';
|
||||
break;
|
||||
default:
|
||||
text = '';
|
||||
iconName = null;
|
||||
}
|
||||
|
||||
let icon = new St.Icon({ icon_name: iconName,
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: 16,
|
||||
style_class: 'contact-details-status-icon' });
|
||||
let label = new St.Label({ text: text });
|
||||
|
||||
let box = new St.BoxLayout({ vertical: false,
|
||||
style_class: 'contact-details-status' });
|
||||
box.add(icon, { x_fill: true,
|
||||
y_fill: false,
|
||||
x_align: St.Align.START,
|
||||
y_align: St.Align.START });
|
||||
|
||||
if (iconName) {
|
||||
let icon = new St.Icon({ icon_name: iconName,
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: 16,
|
||||
style_class: 'contact-details-status-icon' });
|
||||
box.add(icon, { x_fill: true,
|
||||
y_fill: false,
|
||||
x_align: St.Align.START,
|
||||
y_align: St.Align.START });
|
||||
}
|
||||
|
||||
let label = new St.Label({ text: text });
|
||||
|
||||
box.add(label, { x_fill: true,
|
||||
y_fill: false,
|
||||
|
@ -501,7 +501,7 @@ const Dash = new Lang.Class({
|
||||
return;
|
||||
|
||||
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let themeNode = this._box.get_theme_node();
|
||||
let maxAllocation = new Clutter.ActorBox({ x1: 0, y1: 0,
|
||||
x2: 42 /* whatever */,
|
||||
y2: this._maxHeight });
|
||||
|
@ -69,6 +69,7 @@ const DateMenuButton = new Lang.Class({
|
||||
|
||||
// Date
|
||||
this._date = new St.Label();
|
||||
this.actor.label_actor = this._date;
|
||||
this._date.style_class = 'datemenu-date-label';
|
||||
vbox.add(this._date);
|
||||
|
||||
|
@ -11,6 +11,7 @@ const Shell = imports.gi.Shell;
|
||||
const Soup = imports.gi.Soup;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
|
||||
@ -29,11 +30,6 @@ const ExtensionState = {
|
||||
UNINSTALLED: 99
|
||||
};
|
||||
|
||||
const ExtensionType = {
|
||||
SYSTEM: 1,
|
||||
PER_USER: 2
|
||||
};
|
||||
|
||||
const REPOSITORY_URL_BASE = 'https://extensions.gnome.org';
|
||||
const REPOSITORY_URL_DOWNLOAD = REPOSITORY_URL_BASE + '/download-extension/%s.shell-extension.zip';
|
||||
const REPOSITORY_URL_INFO = REPOSITORY_URL_BASE + '/extension-info/';
|
||||
@ -57,19 +53,10 @@ function _getCertFile() {
|
||||
|
||||
_httpSession.ssl_ca_file = _getCertFile();
|
||||
|
||||
// Maps uuid -> metadata object
|
||||
const extensionMeta = {};
|
||||
// Maps uuid -> importer object (extension directory tree)
|
||||
const extensions = {};
|
||||
// Maps uuid -> extension state object (returned from init())
|
||||
const extensionStateObjs = {};
|
||||
// Contains the order that extensions were enabled in.
|
||||
const extensionOrder = [];
|
||||
|
||||
// Arrays of uuids
|
||||
var enabledExtensions;
|
||||
// GFile for user extensions
|
||||
var userExtensionsDir = null;
|
||||
// Contains the order that extensions were enabled in.
|
||||
const extensionOrder = [];
|
||||
|
||||
// We don't really have a class to add signals on. So, create
|
||||
// a simple dummy object, add the signal methods, and export those
|
||||
@ -80,41 +67,8 @@ Signals.addSignalMethods(_signals);
|
||||
const connect = Lang.bind(_signals, _signals.connect);
|
||||
const disconnect = Lang.bind(_signals, _signals.disconnect);
|
||||
|
||||
// UUID => Array of error messages
|
||||
var errors = {};
|
||||
|
||||
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
|
||||
|
||||
/**
|
||||
* versionCheck:
|
||||
* @required: an array of versions we're compatible with
|
||||
* @current: the version we have
|
||||
*
|
||||
* Check if a component is compatible for an extension.
|
||||
* @required is an array, and at least one version must match.
|
||||
* @current must be in the format <major>.<minor>.<point>.<micro>
|
||||
* <micro> is always ignored
|
||||
* <point> is ignored if <minor> is even (so you can target the
|
||||
* whole stable release)
|
||||
* <minor> and <major> must match
|
||||
* Each target version must be at least <major> and <minor>
|
||||
*/
|
||||
function versionCheck(required, current) {
|
||||
let currentArray = current.split('.');
|
||||
let major = currentArray[0];
|
||||
let minor = currentArray[1];
|
||||
let point = currentArray[2];
|
||||
for (let i = 0; i < required.length; i++) {
|
||||
let requiredArray = required[i].split('.');
|
||||
if (requiredArray[0] == major &&
|
||||
requiredArray[1] == minor &&
|
||||
(requiredArray[2] == point ||
|
||||
(requiredArray[2] == undefined && parseInt(minor) % 2 == 0)))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function installExtensionFromUUID(uuid, version_tag) {
|
||||
let params = { uuid: uuid,
|
||||
version_tag: version_tag,
|
||||
@ -132,8 +86,8 @@ function installExtensionFromUUID(uuid, version_tag) {
|
||||
}
|
||||
|
||||
function uninstallExtensionFromUUID(uuid) {
|
||||
let meta = extensionMeta[uuid];
|
||||
if (!meta)
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
if (!extension)
|
||||
return false;
|
||||
|
||||
// Try to disable it -- if it's ERROR'd, we can't guarantee that,
|
||||
@ -142,22 +96,17 @@ function uninstallExtensionFromUUID(uuid) {
|
||||
disableExtension(uuid);
|
||||
|
||||
// Don't try to uninstall system extensions
|
||||
if (meta.type != ExtensionType.PER_USER)
|
||||
if (extension.type != ExtensionUtils.ExtensionType.PER_USER)
|
||||
return false;
|
||||
|
||||
meta.state = ExtensionState.UNINSTALLED;
|
||||
_signals.emit('extension-state-changed', meta);
|
||||
|
||||
delete extensionMeta[uuid];
|
||||
|
||||
// Importers are marked as PERMANENT, so we can't do this.
|
||||
// delete extensions[uuid];
|
||||
extensions[uuid] = undefined;
|
||||
extension.state = ExtensionState.UNINSTALLED;
|
||||
_signals.emit('extension-state-changed', extension);
|
||||
|
||||
delete ExtensionUtils.extensions[uuid];
|
||||
delete extensionStateObjs[uuid];
|
||||
delete errors[uuid];
|
||||
|
||||
FileUtils.recursivelyDeleteDir(Gio.file_new_for_path(meta.path));
|
||||
FileUtils.recursivelyDeleteDir(Gio.file_new_for_path(extension.path));
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -178,7 +127,7 @@ function gotExtensionZipFile(session, message, uuid) {
|
||||
}
|
||||
|
||||
let stream = new Gio.UnixOutputStream({ fd: fd });
|
||||
let dir = userExtensionsDir.get_child(uuid);
|
||||
let dir = ExtensionUtils.userExtensionsDir.get_child(uuid);
|
||||
Shell.write_soup_message_to_stream(stream, message);
|
||||
stream.close(null);
|
||||
let [success, pid] = GLib.spawn_async(null,
|
||||
@ -202,16 +151,16 @@ function gotExtensionZipFile(session, message, uuid) {
|
||||
global.settings.set_strv(ENABLED_EXTENSIONS_KEY, enabledExtensions);
|
||||
}
|
||||
|
||||
loadExtension(dir, ExtensionType.PER_USER, true);
|
||||
loadExtension(dir, ExtensionUtils.ExtensionType.PER_USER, true);
|
||||
});
|
||||
}
|
||||
|
||||
function disableExtension(uuid) {
|
||||
let meta = extensionMeta[uuid];
|
||||
if (!meta)
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
if (!extension)
|
||||
return;
|
||||
|
||||
if (meta.state != ExtensionState.ENABLED)
|
||||
if (extension.state != ExtensionState.ENABLED)
|
||||
return;
|
||||
|
||||
let extensionState = extensionStateObjs[uuid];
|
||||
@ -255,41 +204,45 @@ function disableExtension(uuid) {
|
||||
|
||||
extensionOrder.splice(orderIdx, 1);
|
||||
|
||||
meta.state = ExtensionState.DISABLED;
|
||||
_signals.emit('extension-state-changed', meta);
|
||||
extension.state = ExtensionState.DISABLED;
|
||||
_signals.emit('extension-state-changed', extension);
|
||||
}
|
||||
|
||||
function enableExtension(uuid) {
|
||||
let meta = extensionMeta[uuid];
|
||||
if (!meta)
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
if (!extension)
|
||||
return;
|
||||
|
||||
if (meta.state == ExtensionState.INITIALIZED) {
|
||||
loadExtension(meta.dir, meta.type, true);
|
||||
if (extension.state == ExtensionState.INITIALIZED) {
|
||||
loadExtension(extension.dir, extension.type, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (meta.state != ExtensionState.DISABLED)
|
||||
if (extension.state != ExtensionState.DISABLED)
|
||||
return;
|
||||
|
||||
let extensionState = extensionStateObjs[uuid];
|
||||
|
||||
extensionOrder.push(uuid);
|
||||
|
||||
try {
|
||||
extensionState.enable();
|
||||
extension.stateObj.enable();
|
||||
} catch(e) {
|
||||
logExtensionError(uuid, e.toString());
|
||||
return;
|
||||
}
|
||||
|
||||
meta.state = ExtensionState.ENABLED;
|
||||
_signals.emit('extension-state-changed', meta);
|
||||
extension.state = ExtensionState.ENABLED;
|
||||
_signals.emit('extension-state-changed', extension);
|
||||
}
|
||||
|
||||
function logExtensionError(uuid, message, state) {
|
||||
if (!errors[uuid]) errors[uuid] = [];
|
||||
errors[uuid].push(message);
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
if (!extension)
|
||||
return;
|
||||
|
||||
if (!extension.errors)
|
||||
extension.errors = [];
|
||||
|
||||
extension.errors.push(message);
|
||||
global.logError('Extension "%s" had error: %s'.format(uuid, message));
|
||||
state = state || ExtensionState.ERROR;
|
||||
_signals.emit('extension-state-changed', { uuid: uuid,
|
||||
@ -298,72 +251,31 @@ function logExtensionError(uuid, message, state) {
|
||||
}
|
||||
|
||||
function loadExtension(dir, type, enabled) {
|
||||
let info;
|
||||
let uuid = dir.get_basename();
|
||||
let extension;
|
||||
|
||||
let metadataFile = dir.get_child('metadata.json');
|
||||
if (!metadataFile.query_exists(null)) {
|
||||
logExtensionError(uuid, 'Missing metadata.json');
|
||||
return;
|
||||
if (ExtensionUtils.extensions[uuid] != undefined) {
|
||||
throw new Error('extension already loaded');
|
||||
}
|
||||
|
||||
let metadataContents;
|
||||
try {
|
||||
metadataContents = Shell.get_file_contents_utf8_sync(metadataFile.get_path());
|
||||
} catch (e) {
|
||||
logExtensionError(uuid, 'Failed to load metadata.json: ' + e);
|
||||
extension = ExtensionUtils.createExtensionObject(uuid, dir, type);
|
||||
} catch(e) {
|
||||
logExtensionError(uuid, e.message);
|
||||
return;
|
||||
}
|
||||
let meta;
|
||||
try {
|
||||
meta = JSON.parse(metadataContents);
|
||||
} catch (e) {
|
||||
logExtensionError(uuid, 'Failed to parse metadata.json: ' + e);
|
||||
return;
|
||||
}
|
||||
|
||||
let requiredProperties = ['uuid', 'name', 'description', 'shell-version'];
|
||||
for (let i = 0; i < requiredProperties.length; i++) {
|
||||
let prop = requiredProperties[i];
|
||||
if (!meta[prop]) {
|
||||
logExtensionError(uuid, 'missing "' + prop + '" property in metadata.json');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (extensions[uuid] != undefined) {
|
||||
logExtensionError(uuid, 'extension already loaded');
|
||||
return;
|
||||
}
|
||||
|
||||
// Encourage people to add this
|
||||
if (!meta['url']) {
|
||||
global.log('Warning: Missing "url" property in metadata.json');
|
||||
}
|
||||
|
||||
if (uuid != meta.uuid) {
|
||||
logExtensionError(uuid, 'uuid "' + meta.uuid + '" from metadata.json does not match directory name "' + uuid + '"');
|
||||
return;
|
||||
}
|
||||
|
||||
extensionMeta[uuid] = meta;
|
||||
meta.type = type;
|
||||
meta.dir = dir;
|
||||
meta.path = dir.get_path();
|
||||
meta.error = '';
|
||||
|
||||
// Default to error, we set success as the last step
|
||||
meta.state = ExtensionState.ERROR;
|
||||
extension.state = ExtensionState.ERROR;
|
||||
|
||||
if (!versionCheck(meta['shell-version'], Config.PACKAGE_VERSION) ||
|
||||
(meta['js-version'] && !versionCheck(meta['js-version'], Config.GJS_VERSION))) {
|
||||
if (ExtensionUtils.isOutOfDate(extension)) {
|
||||
logExtensionError(uuid, 'extension is not compatible with current GNOME Shell and/or GJS version', ExtensionState.OUT_OF_DATE);
|
||||
meta.state = ExtensionState.OUT_OF_DATE;
|
||||
extension.state = ExtensionState.OUT_OF_DATE;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!enabled) {
|
||||
meta.state = ExtensionState.INITIALIZED;
|
||||
extension.state = ExtensionState.INITIALIZED;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -388,12 +300,12 @@ function loadExtension(dir, type, enabled) {
|
||||
let extensionModule;
|
||||
let extensionState = null;
|
||||
try {
|
||||
global.add_extension_importer('imports.ui.extensionSystem.extensions', meta.uuid, dir.get_path());
|
||||
extensionModule = extensions[meta.uuid].extension;
|
||||
ExtensionUtils.installImporter(extension);
|
||||
extensionModule = extension.imports.extension;
|
||||
} catch (e) {
|
||||
if (stylesheetPath != null)
|
||||
theme.unload_stylesheet(stylesheetPath);
|
||||
logExtensionError(uuid, e);
|
||||
logExtensionError(uuid, '' + e);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -403,7 +315,7 @@ function loadExtension(dir, type, enabled) {
|
||||
}
|
||||
|
||||
try {
|
||||
extensionState = extensionModule.init(meta);
|
||||
extensionState = extensionModule.init(extension);
|
||||
} catch (e) {
|
||||
if (stylesheetPath != null)
|
||||
theme.unload_stylesheet(stylesheetPath);
|
||||
@ -413,7 +325,7 @@ function loadExtension(dir, type, enabled) {
|
||||
|
||||
if (!extensionState)
|
||||
extensionState = extensionModule;
|
||||
extensionStateObjs[uuid] = extensionState;
|
||||
extension.stateObj = extensionState;
|
||||
|
||||
if (!extensionState.enable) {
|
||||
logExtensionError(uuid, 'missing \'enable\' function');
|
||||
@ -424,13 +336,13 @@ function loadExtension(dir, type, enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
meta.state = ExtensionState.DISABLED;
|
||||
extension.state = ExtensionState.DISABLED;
|
||||
|
||||
enableExtension(uuid);
|
||||
|
||||
_signals.emit('extension-loaded', meta.uuid);
|
||||
_signals.emit('extension-state-changed', meta);
|
||||
global.log('Loaded extension ' + meta.uuid);
|
||||
_signals.emit('extension-loaded', uuid);
|
||||
_signals.emit('extension-state-changed', extension);
|
||||
global.log('Loaded extension ' + uuid);
|
||||
}
|
||||
|
||||
function onEnabledExtensionsChanged() {
|
||||
@ -456,50 +368,17 @@ function onEnabledExtensionsChanged() {
|
||||
}
|
||||
|
||||
function init() {
|
||||
let userExtensionsPath = GLib.build_filenamev([global.userdatadir, 'extensions']);
|
||||
userExtensionsDir = Gio.file_new_for_path(userExtensionsPath);
|
||||
try {
|
||||
if (!userExtensionsDir.query_exists(null))
|
||||
userExtensionsDir.make_directory_with_parents(null);
|
||||
} catch (e) {
|
||||
global.logError('' + e);
|
||||
}
|
||||
ExtensionUtils.init();
|
||||
|
||||
global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged);
|
||||
enabledExtensions = global.settings.get_strv(ENABLED_EXTENSIONS_KEY);
|
||||
}
|
||||
|
||||
function _loadExtensionsIn(dir, type) {
|
||||
let fileEnum;
|
||||
let file, info;
|
||||
try {
|
||||
fileEnum = dir.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
|
||||
} catch (e) {
|
||||
global.logError('' + e);
|
||||
return;
|
||||
}
|
||||
|
||||
while ((info = fileEnum.next_file(null)) != null) {
|
||||
let fileType = info.get_file_type();
|
||||
if (fileType != Gio.FileType.DIRECTORY)
|
||||
continue;
|
||||
let name = info.get_name();
|
||||
let child = dir.get_child(name);
|
||||
let enabled = enabledExtensions.indexOf(name) != -1;
|
||||
loadExtension(child, type, enabled);
|
||||
}
|
||||
fileEnum.close(null);
|
||||
}
|
||||
|
||||
function loadExtensions() {
|
||||
let systemDataDirs = GLib.get_system_data_dirs();
|
||||
for (let i = 0; i < systemDataDirs.length; i++) {
|
||||
let dirPath = systemDataDirs[i] + '/gnome-shell/extensions';
|
||||
let dir = Gio.file_new_for_path(dirPath);
|
||||
if (dir.query_exists(null))
|
||||
_loadExtensionsIn(dir, ExtensionType.SYSTEM);
|
||||
}
|
||||
_loadExtensionsIn(userExtensionsDir, ExtensionType.PER_USER);
|
||||
ExtensionUtils.scanExtensions(function(uuid, dir, type) {
|
||||
let enabled = enabledExtensions.indexOf(uuid) != -1;
|
||||
loadExtension(dir, type, enabled);
|
||||
});
|
||||
}
|
||||
|
||||
const InstallExtensionDialog = new Lang.Class({
|
||||
@ -545,13 +424,13 @@ const InstallExtensionDialog = new Lang.Class({
|
||||
},
|
||||
|
||||
_onInstallButtonPressed: function(button, event) {
|
||||
let meta = { uuid: this._uuid,
|
||||
state: ExtensionState.DOWNLOADING,
|
||||
error: '' };
|
||||
let extension = { uuid: this._uuid,
|
||||
state: ExtensionState.DOWNLOADING,
|
||||
error: '' };
|
||||
|
||||
extensionMeta[this._uuid] = meta;
|
||||
ExtensionUtils.extensions[this._uuid] = extension;
|
||||
|
||||
_signals.emit('extension-state-changed', meta);
|
||||
_signals.emit('extension-state-changed', extension);
|
||||
|
||||
let params = { version_tag: this._version_tag,
|
||||
shell_version: Config.PACKAGE_VERSION,
|
||||
|
45
js/ui/flashspot.js
Normal file
45
js/ui/flashspot.js
Normal file
@ -0,0 +1,45 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
|
||||
const Lightbox = imports.ui.lightbox;
|
||||
const Main = imports.ui.main;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const FLASHSPOT_ANIMATION_TIME = 0.25; // seconds
|
||||
|
||||
const Flashspot = new Lang.Class({
|
||||
Name: 'Flashspot',
|
||||
Extends: Lightbox.Lightbox,
|
||||
|
||||
_init: function(area) {
|
||||
this.parent(Main.uiGroup, { inhibitEvents: true,
|
||||
width: area.width,
|
||||
height: area.height });
|
||||
|
||||
this.actor.style_class = 'flashspot';
|
||||
this.actor.set_position(area.x, area.y);
|
||||
},
|
||||
|
||||
fire: function() {
|
||||
this.actor.opacity = 0;
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
time: FLASHSPOT_ANIMATION_TIME,
|
||||
transition: 'linear',
|
||||
onComplete: Lang.bind(this, this._onFireShowComplete)
|
||||
});
|
||||
this.actor.show();
|
||||
},
|
||||
|
||||
_onFireShowComplete: function() {
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
time: FLASHSPOT_ANIMATION_TIME,
|
||||
transition: 'linear',
|
||||
onComplete: Lang.bind(this, function() {
|
||||
this.destroy();
|
||||
})
|
||||
});
|
||||
}
|
||||
});
|
@ -305,7 +305,7 @@ const IconGrid = new Lang.Class({
|
||||
_onStyleChanged: function() {
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
this._spacing = themeNode.get_length('spacing');
|
||||
this._item_size = themeNode.get_length('-shell-grid-item-size');
|
||||
this._item_size = themeNode.get_length('-shell-grid-item-size') || ICON_SIZE;
|
||||
this._grid.queue_relayout();
|
||||
},
|
||||
|
||||
|
@ -15,6 +15,7 @@ const Mainloop = imports.mainloop;
|
||||
|
||||
const History = imports.misc.history;
|
||||
const ExtensionSystem = imports.ui.extensionSystem;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Link = imports.ui.link;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
const Tweener = imports.ui.tweener;
|
||||
@ -728,7 +729,7 @@ const Extensions = new Lang.Class({
|
||||
this._extensionsList.add(this._noExtensions);
|
||||
this.actor.add(this._extensionsList);
|
||||
|
||||
for (let uuid in ExtensionSystem.extensionMeta)
|
||||
for (let uuid in ExtensionUtils.extensions)
|
||||
this._loadExtension(null, uuid);
|
||||
|
||||
ExtensionSystem.connect('extension-loaded',
|
||||
@ -736,10 +737,10 @@ const Extensions = new Lang.Class({
|
||||
},
|
||||
|
||||
_loadExtension: function(o, uuid) {
|
||||
let extension = ExtensionSystem.extensionMeta[uuid];
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
// There can be cases where we create dummy extension metadata
|
||||
// that's not really a proper extension. Don't bother with these.
|
||||
if (!extension.name)
|
||||
if (!extension.metadata.name)
|
||||
return;
|
||||
|
||||
let extensionDisplay = this._createExtensionDisplay(extension);
|
||||
@ -751,25 +752,24 @@ const Extensions = new Lang.Class({
|
||||
},
|
||||
|
||||
_onViewSource: function (actor) {
|
||||
let meta = actor._extensionMeta;
|
||||
let file = Gio.file_new_for_path(meta.path);
|
||||
let uri = file.get_uri();
|
||||
let extension = actor._extension;
|
||||
let uri = extension.dir.get_uri();
|
||||
Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context());
|
||||
Main.lookingGlass.close();
|
||||
},
|
||||
|
||||
_onWebPage: function (actor) {
|
||||
let meta = actor._extensionMeta;
|
||||
Gio.app_info_launch_default_for_uri(meta.url, global.create_app_launch_context());
|
||||
let extension = actor._extension;
|
||||
Gio.app_info_launch_default_for_uri(extension.metadata.url, global.create_app_launch_context());
|
||||
Main.lookingGlass.close();
|
||||
},
|
||||
|
||||
_onViewErrors: function (actor) {
|
||||
let meta = actor._extensionMeta;
|
||||
let extension = actor._extension;
|
||||
let shouldShow = !actor._isShowing;
|
||||
|
||||
if (shouldShow) {
|
||||
let errors = ExtensionSystem.errors[meta.uuid];
|
||||
let errors = extension.errors;
|
||||
let errorDisplay = new St.BoxLayout({ vertical: true });
|
||||
if (errors && errors.length) {
|
||||
for (let i = 0; i < errors.length; i ++)
|
||||
@ -809,36 +809,36 @@ const Extensions = new Lang.Class({
|
||||
return 'Unknown'; // Not translated, shouldn't appear
|
||||
},
|
||||
|
||||
_createExtensionDisplay: function(meta) {
|
||||
_createExtensionDisplay: function(extension) {
|
||||
let box = new St.BoxLayout({ style_class: 'lg-extension', vertical: true });
|
||||
let name = new St.Label({ style_class: 'lg-extension-name',
|
||||
text: meta.name });
|
||||
text: extension.metadata.name });
|
||||
box.add(name, { expand: true });
|
||||
let description = new St.Label({ style_class: 'lg-extension-description',
|
||||
text: meta.description || 'No description' });
|
||||
text: extension.metadata.description || 'No description' });
|
||||
box.add(description, { expand: true });
|
||||
|
||||
let metaBox = new St.BoxLayout({ style_class: 'lg-extension-meta' });
|
||||
box.add(metaBox);
|
||||
let stateString = this._stateToString(meta.state);
|
||||
let stateString = this._stateToString(extension.state);
|
||||
let state = new St.Label({ style_class: 'lg-extension-state',
|
||||
text: this._stateToString(meta.state) });
|
||||
text: this._stateToString(extension.state) });
|
||||
metaBox.add(state);
|
||||
|
||||
let viewsource = new Link.Link({ label: _("View Source") });
|
||||
viewsource.actor._extensionMeta = meta;
|
||||
viewsource.actor._extension = extension;
|
||||
viewsource.actor.connect('clicked', Lang.bind(this, this._onViewSource));
|
||||
metaBox.add(viewsource.actor);
|
||||
|
||||
if (meta.url) {
|
||||
if (extension.metadata.url) {
|
||||
let webpage = new Link.Link({ label: _("Web Page") });
|
||||
webpage.actor._extensionMeta = meta;
|
||||
webpage.actor._extension = extension;
|
||||
webpage.actor.connect('clicked', Lang.bind(this, this._onWebPage));
|
||||
metaBox.add(webpage.actor);
|
||||
}
|
||||
|
||||
let viewerrors = new Link.Link({ label: _("Show Errors") });
|
||||
viewerrors.actor._extensionMeta = meta;
|
||||
viewerrors.actor._extension = extension;
|
||||
viewerrors.actor._parentBox = box;
|
||||
viewerrors.actor._isShowing = false;
|
||||
viewerrors.actor.connect('clicked', Lang.bind(this, this._onViewErrors));
|
||||
|
@ -556,6 +556,7 @@ const ZoomRegion = new Lang.Class({
|
||||
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN;
|
||||
|
||||
this._magView = null;
|
||||
this._background = null;
|
||||
this._uiGroupClone = null;
|
||||
this._mouseSourceActor = mouseSourceActor;
|
||||
this._mouseActor = null;
|
||||
@ -565,12 +566,15 @@ const ZoomRegion = new Lang.Class({
|
||||
this._viewPortX = 0;
|
||||
this._viewPortY = 0;
|
||||
this._viewPortWidth = global.screen_width;
|
||||
this._viewPortWidth = global.screen_height;
|
||||
this._viewPortHeight = global.screen_height;
|
||||
this._xCenter = this._viewPortWidth / 2;
|
||||
this._yCenter = this._viewPortHeight / 2;
|
||||
this._xMagFactor = 1;
|
||||
this._yMagFactor = 1;
|
||||
this._followingCursor = false;
|
||||
|
||||
Main.layoutManager.connect('monitors-changed',
|
||||
Lang.bind(this, this._monitorsChanged));
|
||||
},
|
||||
|
||||
/**
|
||||
@ -891,15 +895,15 @@ const ZoomRegion = new Lang.Class({
|
||||
|
||||
// Add a background for when the magnified uiGroup is scrolled
|
||||
// out of view (don't want to see desktop showing through).
|
||||
let background = new Clutter.Rectangle({ color: Main.DEFAULT_BACKGROUND_COLOR });
|
||||
mainGroup.add_actor(background);
|
||||
this._background = new Clutter.Rectangle({ color: Main.DEFAULT_BACKGROUND_COLOR });
|
||||
mainGroup.add_actor(this._background);
|
||||
|
||||
// Clone the group that contains all of UI on the screen. This is the
|
||||
// chrome, the windows, etc.
|
||||
this._uiGroupClone = new Clutter.Clone({ source: Main.uiGroup });
|
||||
mainGroup.add_actor(this._uiGroupClone);
|
||||
Main.uiGroup.set_size(global.screen_width, global.screen_height);
|
||||
background.set_size(global.screen_width, global.screen_height);
|
||||
this._background.set_size(global.screen_width, global.screen_height);
|
||||
|
||||
// Add either the given mouseSourceActor to the ZoomRegion, or a clone of
|
||||
// it.
|
||||
@ -923,6 +927,7 @@ const ZoomRegion = new Lang.Class({
|
||||
|
||||
this._magView.destroy();
|
||||
this._magView = null;
|
||||
this._background = null;
|
||||
this._uiGroupClone = null;
|
||||
this._mouseActor = null;
|
||||
this._crossHairsActor = null;
|
||||
@ -1145,6 +1150,22 @@ const ZoomRegion = new Lang.Class({
|
||||
this._crossHairsActor.set_position(xMagMouse - groupWidth / 2,
|
||||
yMagMouse - groupHeight / 2);
|
||||
}
|
||||
},
|
||||
|
||||
_monitorsChanged: function() {
|
||||
if (!this.isActive())
|
||||
return;
|
||||
|
||||
Main.uiGroup.set_size(global.screen_width, global.screen_height);
|
||||
this._background.set_size(global.screen_width, global.screen_height);
|
||||
|
||||
if (this._screenPosition == GDesktopEnums.MagnifierScreenPosition.NONE)
|
||||
this._setViewPort({ x: this._viewPortX,
|
||||
y: this._viewPortY,
|
||||
width: this._viewPortWidth,
|
||||
height: this._viewPortHeight });
|
||||
else
|
||||
this.setScreenPosition(this._screenPosition);
|
||||
}
|
||||
});
|
||||
|
||||
@ -1175,6 +1196,14 @@ const Crosshairs = new Lang.Class({
|
||||
this._clipSize = [0, 0];
|
||||
this._clones = [];
|
||||
this.reCenter();
|
||||
|
||||
Main.layoutManager.connect('monitors-changed',
|
||||
Lang.bind(this, this._monitorsChanged));
|
||||
},
|
||||
|
||||
_monitorsChanged: function() {
|
||||
this._actor.set_size(global.screen_width * 3, global.screen_height * 3);
|
||||
this.reCenter();
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -2048,8 +2048,11 @@ const MessageTray = new Lang.Class({
|
||||
if (haveClickedSummaryItem && !summarySourceIsMainNotificationSource && canShowSummaryBoxPointer && !requestedNotificationStackIsEmpty)
|
||||
this._showSummaryBoxPointer();
|
||||
} else if (this._summaryBoxPointerState == State.SHOWN) {
|
||||
if (!haveClickedSummaryItem || !canShowSummaryBoxPointer || wrongSummaryBoxPointer || mustHideSummary)
|
||||
if (!haveClickedSummaryItem || !canShowSummaryBoxPointer || wrongSummaryBoxPointer || mustHideSummary) {
|
||||
this._hideSummaryBoxPointer();
|
||||
if (wrongSummaryBoxPointer)
|
||||
this._showSummaryBoxPointer();
|
||||
}
|
||||
}
|
||||
|
||||
// Tray itself
|
||||
@ -2390,9 +2393,8 @@ const MessageTray = new Lang.Class({
|
||||
}
|
||||
|
||||
this._summaryBoxPointerState = State.HIDING;
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary or if
|
||||
// this._clickedSummaryItem is still the item associated with the currently showing box pointer
|
||||
if (this._summaryState != State.SHOWN || this._summaryBoxPointerItem == this._clickedSummaryItem)
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary
|
||||
if (this._summaryState != State.SHOWN)
|
||||
this._unsetClickedSummaryItem();
|
||||
|
||||
this._focusGrabber.ungrabFocus();
|
||||
|
@ -237,7 +237,7 @@ const AppMenuButton = new Lang.Class({
|
||||
Extends: PanelMenu.Button,
|
||||
|
||||
_init: function(menuManager) {
|
||||
this.parent(0.0, true);
|
||||
this.parent(0.0, null, true);
|
||||
|
||||
this._startingApps = [];
|
||||
|
||||
@ -249,6 +249,7 @@ const AppMenuButton = new Lang.Class({
|
||||
let bin = new St.Bin({ name: 'appMenu' });
|
||||
this.actor.add_actor(bin);
|
||||
|
||||
this.actor.bind_property("reactive", this.actor, "can-focus", 0);
|
||||
this.actor.reactive = false;
|
||||
this._targetIsCurrent = false;
|
||||
|
||||
@ -497,6 +498,9 @@ const AppMenuButton = new Lang.Class({
|
||||
return;
|
||||
}
|
||||
|
||||
if (!targetApp.is_on_workspace(workspace))
|
||||
return;
|
||||
|
||||
if (!this._targetIsCurrent) {
|
||||
this.actor.reactive = true;
|
||||
this._targetIsCurrent = true;
|
||||
@ -537,6 +541,7 @@ const AppMenuButton = new Lang.Class({
|
||||
let icon = targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
|
||||
|
||||
this._label.setText(targetApp.get_name());
|
||||
this.setName(targetApp.get_name());
|
||||
|
||||
this._iconBox.set_child(icon);
|
||||
this._iconBox.show();
|
||||
|
@ -96,7 +96,7 @@ const Button = new Lang.Class({
|
||||
Name: 'PanelMenuButton',
|
||||
Extends: ButtonBox,
|
||||
|
||||
_init: function(menuAlignment, dontCreateMenu) {
|
||||
_init: function(menuAlignment, nameText, dontCreateMenu) {
|
||||
this.parent({ reactive: true,
|
||||
can_focus: true,
|
||||
track_hover: true });
|
||||
@ -108,6 +108,24 @@ const Button = new Lang.Class({
|
||||
this.menu = null;
|
||||
else
|
||||
this.setMenu(new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0));
|
||||
|
||||
this.setName(nameText);
|
||||
},
|
||||
|
||||
setName: function(text) {
|
||||
if (text != null) {
|
||||
// This is the easiest way to provide a accessible name to
|
||||
// this widget. The label could be also used for other
|
||||
// purposes in the future.
|
||||
if (!this.label) {
|
||||
this.label = new St.Label({ text: text });
|
||||
this.actor.label_actor = this.label;
|
||||
} else
|
||||
this.label.text = text;
|
||||
} else {
|
||||
this.label = null;
|
||||
this.actor.label_actor = null;
|
||||
}
|
||||
},
|
||||
|
||||
setMenu: function(menu) {
|
||||
@ -203,8 +221,8 @@ const SystemStatusButton = new Lang.Class({
|
||||
Name: 'SystemStatusButton',
|
||||
Extends: Button,
|
||||
|
||||
_init: function(iconName,tooltipText) {
|
||||
this.parent(0.0);
|
||||
_init: function(iconName, tooltipText, nameText) {
|
||||
this.parent(0.0, nameText);
|
||||
|
||||
this._iconActor = new St.Icon({ icon_name: iconName,
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
|
@ -157,8 +157,8 @@ const PlacesManager = new Lang.Class({
|
||||
function (size) {
|
||||
// do NOT use St.Icon here, it crashes the shell
|
||||
// see wanda.js for details
|
||||
return St.TextureCache.get_default().load_icon_name('applications-internet',
|
||||
null,
|
||||
return St.TextureCache.get_default().load_icon_name(null,
|
||||
'applications-internet',
|
||||
St.IconType.FULLCOLOR,
|
||||
size);
|
||||
},
|
||||
|
@ -389,6 +389,7 @@ const PopupMenuItem = new Lang.Class({
|
||||
|
||||
this.label = new St.Label({ text: text });
|
||||
this.addActor(this.label);
|
||||
this.actor.label_actor = this.label
|
||||
}
|
||||
});
|
||||
|
||||
@ -773,6 +774,12 @@ const PopupSwitchMenuItem = new Lang.Class({
|
||||
this.toggle();
|
||||
}
|
||||
|
||||
// we allow pressing space to toggle the switch
|
||||
// without closing the menu
|
||||
if (event.type() == Clutter.EventType.KEY_PRESS &&
|
||||
event.get_key_symbol() == Clutter.KEY_space)
|
||||
return;
|
||||
|
||||
this.parent(event);
|
||||
},
|
||||
|
||||
@ -869,6 +876,10 @@ const PopupMenuBase = new Lang.Class({
|
||||
return menuItem;
|
||||
},
|
||||
|
||||
isEmpty: function() {
|
||||
return this.box.get_children().length == 0;
|
||||
},
|
||||
|
||||
isChildMenu: function(menu) {
|
||||
return this._childMenus.indexOf(menu) != -1;
|
||||
},
|
||||
@ -1194,6 +1205,9 @@ const PopupMenu = new Lang.Class({
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
if (this.isEmpty())
|
||||
return;
|
||||
|
||||
this.isOpen = true;
|
||||
|
||||
this._boxPointer.setPosition(this.sourceActor, this._arrowAlignment);
|
||||
@ -1285,6 +1299,9 @@ const PopupSubMenu = new Lang.Class({
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
if (this.isEmpty())
|
||||
return;
|
||||
|
||||
this.isOpen = true;
|
||||
|
||||
this.actor.show();
|
||||
@ -1428,6 +1445,7 @@ const PopupSubMenuMenuItem = new Lang.Class({
|
||||
|
||||
this.label = new St.Label({ text: text });
|
||||
this.addActor(this.label);
|
||||
this.actor.label_actor = this.label;
|
||||
this._triangle = new St.Label({ text: '\u25B8' });
|
||||
this.addActor(this._triangle, { align: St.Align.END });
|
||||
|
||||
@ -1528,6 +1546,9 @@ const PopupComboMenu = new Lang.Class({
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
if (this.isEmpty())
|
||||
return;
|
||||
|
||||
this.isOpen = true;
|
||||
|
||||
let [sourceX, sourceY] = this.sourceActor.get_transformed_position();
|
||||
|
@ -3,9 +3,12 @@
|
||||
const Lang = imports.lang;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const ExtensionSystem = imports.ui.extensionSystem;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Flashspot = imports.ui.flashspot;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const GnomeShellIface = <interface name="org.gnome.Shell">
|
||||
@ -30,15 +33,18 @@ const GnomeShellIface = <interface name="org.gnome.Shell">
|
||||
<arg type="i" direction="in" name="y"/>
|
||||
<arg type="i" direction="in" name="width"/>
|
||||
<arg type="i" direction="in" name="height"/>
|
||||
<arg type="b" direction="in" name="flash"/>
|
||||
<arg type="s" direction="in" name="filename"/>
|
||||
<arg type="b" direction="out" name="success"/>
|
||||
</method>
|
||||
<method name="ScreenshotWindow">
|
||||
<arg type="b" direction="in" name="include_frame"/>
|
||||
<arg type="b" direction="in" name="flash"/>
|
||||
<arg type="s" direction="in" name="filename"/>
|
||||
<arg type="b" direction="out" name="success"/>
|
||||
</method>
|
||||
<method name="Screenshot">
|
||||
<arg type="b" direction="in" name="flash"/>
|
||||
<arg type="s" direction="in" name="filename"/>
|
||||
<arg type="b" direction="out" name="success"/>
|
||||
</method>
|
||||
@ -56,6 +62,9 @@ const GnomeShellIface = <interface name="org.gnome.Shell">
|
||||
<arg type="s" direction="in" name="uuid"/>
|
||||
<arg type="b" direction="out" name="success"/>
|
||||
</method>
|
||||
<method name="LaunchExtensionPrefs">
|
||||
<arg type="s" direction="in" name="uuid"/>
|
||||
</method>
|
||||
<property name="OverviewActive" type="b" access="readwrite" />
|
||||
<property name="ApiVersion" type="i" access="read" />
|
||||
<property name="ShellVersion" type="s" access="read" />
|
||||
@ -109,6 +118,16 @@ const GnomeShell = new Lang.Class({
|
||||
return [success, returnValue];
|
||||
},
|
||||
|
||||
_onScreenshotComplete: function(obj, result, area, flash, invocation) {
|
||||
if (flash) {
|
||||
let flashspot = new Flashspot.Flashspot(area);
|
||||
flashspot.fire();
|
||||
}
|
||||
|
||||
let retval = GLib.Variant.new('(b)', [result]);
|
||||
invocation.return_value(retval);
|
||||
},
|
||||
|
||||
/**
|
||||
* ScreenshotArea:
|
||||
* @x: The X coordinate of the area
|
||||
@ -123,12 +142,10 @@ const GnomeShell = new Lang.Class({
|
||||
*
|
||||
*/
|
||||
ScreenshotAreaAsync : function (params, invocation) {
|
||||
let [x, y, width, height, filename, callback] = params;
|
||||
global.screenshot_area (x, y, width, height, filename,
|
||||
function (obj, result) {
|
||||
let retval = GLib.Variant.new('(b)', [result]);
|
||||
invocation.return_value(retval);
|
||||
});
|
||||
let [x, y, width, height, flash, filename, callback] = params;
|
||||
global.screenshot_area (x, y, width, height, filename,
|
||||
Lang.bind(this, this._onScreenshotComplete,
|
||||
flash, invocation));
|
||||
},
|
||||
|
||||
/**
|
||||
@ -141,8 +158,11 @@ const GnomeShell = new Lang.Class({
|
||||
* indicating whether the operation was successful or not.
|
||||
*
|
||||
*/
|
||||
ScreenshotWindow : function (include_frame, filename) {
|
||||
return global.screenshot_window (include_frame, filename);
|
||||
ScreenshotWindowAsync : function (params, invocation) {
|
||||
let [include_frame, flash, filename] = params;
|
||||
global.screenshot_window (include_frame, filename,
|
||||
Lang.bind(this, this._onScreenshotComplete,
|
||||
flash, invocation));
|
||||
},
|
||||
|
||||
/**
|
||||
@ -155,17 +175,15 @@ const GnomeShell = new Lang.Class({
|
||||
*
|
||||
*/
|
||||
ScreenshotAsync : function (params, invocation) {
|
||||
let [filename] = params;
|
||||
global.screenshot(filename,
|
||||
function (obj, result) {
|
||||
let retval = GLib.Variant.new('(b)', [result]);
|
||||
invocation.return_value(retval);
|
||||
});
|
||||
let [flash, filename] = params;
|
||||
global.screenshot(filename,
|
||||
Lang.bind(this, this._onScreenshotComplete,
|
||||
flash, invocation));
|
||||
},
|
||||
|
||||
ListExtensions: function() {
|
||||
let out = {};
|
||||
for (let uuid in ExtensionSystem.extensionMeta) {
|
||||
for (let uuid in ExtensionUtils.extensions) {
|
||||
let dbusObj = this.GetExtensionInfo(uuid);
|
||||
out[uuid] = dbusObj;
|
||||
}
|
||||
@ -173,10 +191,23 @@ const GnomeShell = new Lang.Class({
|
||||
},
|
||||
|
||||
GetExtensionInfo: function(uuid) {
|
||||
let meta = ExtensionSystem.extensionMeta[uuid] || {};
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
if (!extension)
|
||||
return {};
|
||||
|
||||
let obj = {};
|
||||
Lang.copyProperties(extension.metadata, obj);
|
||||
|
||||
// Only serialize the properties that we actually need.
|
||||
const serializedProperties = ["type", "state", "path", "error", "hasPrefs"];
|
||||
|
||||
serializedProperties.forEach(function(prop) {
|
||||
obj[prop] = extension[prop];
|
||||
});
|
||||
|
||||
let out = {};
|
||||
for (let key in meta) {
|
||||
let val = meta[key];
|
||||
for (let key in obj) {
|
||||
let val = obj[key];
|
||||
let type;
|
||||
switch (typeof val) {
|
||||
case 'string':
|
||||
@ -185,16 +216,27 @@ const GnomeShell = new Lang.Class({
|
||||
case 'number':
|
||||
type = 'd';
|
||||
break;
|
||||
case 'boolean':
|
||||
type = 'b';
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
out[key] = GLib.Variant.new(type, val);
|
||||
}
|
||||
|
||||
return out;
|
||||
},
|
||||
|
||||
GetExtensionErrors: function(uuid) {
|
||||
return ExtensionSystem.errors[uuid] || [];
|
||||
let extension = ExtensionUtils.extensions[uuid];
|
||||
if (!extension)
|
||||
return [];
|
||||
|
||||
if (!extension.errors)
|
||||
return [];
|
||||
|
||||
return extension.errors;
|
||||
},
|
||||
|
||||
EnableExtension: function(uuid) {
|
||||
@ -219,6 +261,13 @@ const GnomeShell = new Lang.Class({
|
||||
return ExtensionSystem.uninstallExtensionFromUUID(uuid);
|
||||
},
|
||||
|
||||
LaunchExtensionPrefs: function(uuid) {
|
||||
let appSys = Shell.AppSystem.get_default();
|
||||
let app = appSys.lookup_app('gnome-shell-extension-prefs.desktop');
|
||||
app.launch(global.display.get_current_time_roundtrip(),
|
||||
['extension:///' + uuid], -1, null);
|
||||
},
|
||||
|
||||
get OverviewActive() {
|
||||
return Main.overview.visible;
|
||||
},
|
||||
|
@ -211,6 +211,8 @@ const ShellMountQuestionDialog = new Lang.Class({
|
||||
{ y_align: St.Align.START });
|
||||
|
||||
this.subjectLabel = new St.Label({ style_class: 'mount-question-dialog-subject' });
|
||||
this.subjectLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
this.subjectLabel.clutter_text.line_wrap = true;
|
||||
|
||||
messageLayout.add(this.subjectLabel,
|
||||
{ y_fill: false,
|
||||
|
@ -44,7 +44,7 @@ const ATIndicator = new Lang.Class({
|
||||
Extends: PanelMenu.SystemStatusButton,
|
||||
|
||||
_init: function() {
|
||||
this.parent('preferences-desktop-accessibility', null);
|
||||
this.parent('preferences-desktop-accessibility', null, _("Accessibility"));
|
||||
|
||||
let highContrast = this._buildHCItem();
|
||||
this.menu.addMenuItem(highContrast);
|
||||
|
@ -28,7 +28,7 @@ const Indicator = new Lang.Class({
|
||||
Extends: PanelMenu.SystemStatusButton,
|
||||
|
||||
_init: function() {
|
||||
this.parent('bluetooth-disabled', null);
|
||||
this.parent('bluetooth-disabled', null, _("Bluetooth"));
|
||||
|
||||
this._applet = new GnomeBluetoothApplet.Applet();
|
||||
|
||||
|
@ -113,6 +113,7 @@ const NMNetworkMenuItem = new Lang.Class({
|
||||
}
|
||||
|
||||
this._label = new St.Label({ text: title });
|
||||
this.actor.label_actor = this._label;
|
||||
this.addActor(this._label);
|
||||
this._icons = new St.BoxLayout({ style_class: 'nm-menu-item-icons' });
|
||||
this.addActor(this._icons, { align: St.Align.END });
|
||||
@ -1537,7 +1538,7 @@ const NMApplet = new Lang.Class({
|
||||
Extends: PanelMenu.SystemStatusButton,
|
||||
|
||||
_init: function() {
|
||||
this.parent('network-error', null);
|
||||
this.parent('network-error', null, _("Network"));
|
||||
|
||||
this._client = NMClient.Client.new();
|
||||
|
||||
|
@ -46,7 +46,6 @@ const PowerManagerInterface = <interface name="org.gnome.SettingsDaemon.Power">
|
||||
<method name="GetPrimaryDevice">
|
||||
<arg type="(susdut)" direction="out" />
|
||||
</method>
|
||||
<signal name="Changed" />
|
||||
<property name="Icon" type="s" access="read" />
|
||||
</interface>;
|
||||
|
||||
@ -57,7 +56,7 @@ const Indicator = new Lang.Class({
|
||||
Extends: PanelMenu.SystemStatusButton,
|
||||
|
||||
_init: function() {
|
||||
this.parent('battery-missing', null);
|
||||
this.parent('battery-missing', null, _("Battery"));
|
||||
|
||||
this._proxy = new PowerManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH);
|
||||
|
||||
@ -76,7 +75,8 @@ const Indicator = new Lang.Class({
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addSettingsAction(_("Power Settings"), 'gnome-power-panel.desktop');
|
||||
|
||||
this._proxy.connectSignal('Changed', Lang.bind(this, this._devicesChanged));
|
||||
this._proxy.connect('g-properties-changed',
|
||||
Lang.bind(this, this._devicesChanged));
|
||||
this._devicesChanged();
|
||||
},
|
||||
|
||||
|
@ -22,7 +22,7 @@ const Indicator = new Lang.Class({
|
||||
Extends: PanelMenu.SystemStatusButton,
|
||||
|
||||
_init: function() {
|
||||
this.parent('audio-volume-muted', null);
|
||||
this.parent('audio-volume-muted', null, _("Volume"));
|
||||
|
||||
this._control = new Gvc.MixerControl({ name: 'GNOME Shell Volume Control' });
|
||||
this._control.connect('state-changed', Lang.bind(this, this._onControlStateChanged));
|
||||
|
@ -1092,7 +1092,7 @@ const AudioVideoNotification = new Lang.Class({
|
||||
/* translators: argument is a contact name like Alice for example. */
|
||||
title = _("Call from %s").format(contact.get_alias());
|
||||
|
||||
this.parent(this, source, title, null, { customContent: true });
|
||||
this.parent(source, title, null, { customContent: true });
|
||||
this.setResident(true);
|
||||
|
||||
this.addButton('reject', _("Reject"));
|
||||
@ -1123,8 +1123,7 @@ const FileTransferNotification = new Lang.Class({
|
||||
Extends: MessageTray.Notification,
|
||||
|
||||
_init: function(source, dispatchOp, channel, contact) {
|
||||
this.parent(this,
|
||||
source,
|
||||
this.parent(source,
|
||||
/* To translators: The first parameter is
|
||||
* the contact's alias and the second one is the
|
||||
* file name. The string will be something
|
||||
@ -1197,7 +1196,7 @@ const SubscriptionRequestNotification = new Lang.Class({
|
||||
Extends: MessageTray.Notification,
|
||||
|
||||
_init: function(source, contact) {
|
||||
this.parent(this, source,
|
||||
this.parent(source,
|
||||
/* To translators: The parameter is the contact's alias */
|
||||
_("%s would like permission to see when you are online").format(contact.get_alias()),
|
||||
null, { customContent: true });
|
||||
|
@ -376,7 +376,8 @@ const IMStatusChooserItem = new Lang.Class({
|
||||
if (sessionStatus == GnomeSession.PresenceStatus.IDLE) {
|
||||
// Only change presence if the current one is "more present" than
|
||||
// idle
|
||||
if (this._currentPresence != Tp.ConnectionPresenceType.OFFLINE)
|
||||
if (this._currentPresence != Tp.ConnectionPresenceType.OFFLINE &&
|
||||
this._currentPresence != Tp.ConnectionPresenceType.HIDDEN)
|
||||
return Tp.ConnectionPresenceType.EXTENDED_AWAY;
|
||||
}
|
||||
|
||||
@ -466,6 +467,7 @@ const UserMenuButton = new Lang.Class({
|
||||
}));
|
||||
|
||||
this._name = new St.Label();
|
||||
this.actor.label_actor = this._name;
|
||||
box.add(this._name, { y_align: St.Align.MIDDLE, y_fill: false });
|
||||
this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUserName));
|
||||
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUserName));
|
||||
@ -611,7 +613,7 @@ const UserMenuButton = new Lang.Class({
|
||||
this._statusChooser = item;
|
||||
|
||||
item = new PopupMenu.PopupSwitchMenuItem(_("Notifications"));
|
||||
item.connect('activate', Lang.bind(this, this._updatePresenceStatus));
|
||||
item.connect('toggled', Lang.bind(this, this._updatePresenceStatus));
|
||||
this.menu.addMenuItem(item);
|
||||
this._notificationsSwitch = item;
|
||||
|
||||
|
@ -370,6 +370,7 @@ const WindowClone = new Lang.Class({
|
||||
if (this._selected)
|
||||
return;
|
||||
let [x, y] = action.get_coords();
|
||||
action.release();
|
||||
this._draggable.startDrag(x, y, global.get_current_time());
|
||||
}));
|
||||
}
|
||||
|
@ -611,7 +611,11 @@ const ThumbnailsBox = new Lang.Class({
|
||||
let thumbHeight = this._porthole.height * this._scale;
|
||||
|
||||
let workspace = -1;
|
||||
let firstThumbY = this._thumbnails[0].actor.y;
|
||||
let firstThumbY;
|
||||
if (this._dropPlaceholderPos == 0)
|
||||
firstThumbY = this._dropPlaceholder.y;
|
||||
else
|
||||
firstThumbY = this._thumbnails[0].actor.y;
|
||||
for (let i = 0; i < this._thumbnails.length; i ++) {
|
||||
let targetBase = firstThumbY + (thumbHeight + spacing) * i;
|
||||
|
||||
|
@ -48,6 +48,7 @@ pt
|
||||
pt_BR
|
||||
ro
|
||||
ru
|
||||
si
|
||||
sk
|
||||
sl
|
||||
sr
|
||||
|
@ -1,5 +1,7 @@
|
||||
data/gnome-shell.desktop.in.in
|
||||
data/gnome-shell-extension-prefs.desktop.in.in
|
||||
data/org.gnome.shell.gschema.xml.in
|
||||
js/extensionPrefs/main.js
|
||||
js/gdm/loginDialog.js
|
||||
js/gdm/powerMenu.js
|
||||
js/misc/util.js
|
||||
|
@ -1,2 +1,2 @@
|
||||
data/gnome-shell.desktop.in
|
||||
data/gnome-shell-clock-preferences.desktop.in
|
||||
data/gnome-shell-extension-prefs.desktop.in
|
||||
|
338
po/es.po
338
po/es.po
@ -3,15 +3,15 @@
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
|
||||
# Benjamín Valero Espinosa <benjavalero@gmail.com>, 2011.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-12-26 13:34+0000\n"
|
||||
"PO-Revision-Date: 2011-12-31 18:57+0100\n"
|
||||
"POT-Creation-Date: 2012-01-31 15:48+0000\n"
|
||||
"PO-Revision-Date: 2012-01-31 17:14+0100\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -87,6 +87,18 @@ msgstr "Lista de ID de archivos de escritorio para las aplicaciones favoritas"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
#| msgid ""
|
||||
#| "Sets the GStreamer pipeline used to encode recordings. It follows the "
|
||||
#| "syntax used for gst-launch. The pipeline should have an unconnected sink "
|
||||
#| "pad where the recorded video is recorded. It will normally have a "
|
||||
#| "unconnected source pad; output from that pad will be written into the "
|
||||
#| "output file. However the pipeline can also take care of its own output - "
|
||||
#| "this might be used to send the output to an icecast server via shout2send "
|
||||
#| "or similar. When unset or set to an empty value, the default pipeline "
|
||||
#| "will be used. This is currently 'videorate ! vp8enc quality=10 speed=2 "
|
||||
#| "threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T "
|
||||
#| "is used as a placeholder for a guess at the optimal thread count on the "
|
||||
#| "system."
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||
@ -95,21 +107,21 @@ msgid ""
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
|
||||
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
|
||||
"at the optimal thread count on the system."
|
||||
"'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 "
|
||||
"thread count on the system."
|
||||
msgstr ""
|
||||
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
|
||||
"(«sink») de ensamblaje/sesensamblaje donde el vídeo que se está grabando se "
|
||||
"graba. Generalmente tendrá un origen de ensamblado/desensamblado; la salida "
|
||||
"de ese punto se escibirá en el archivo de salida. No obstante la tubería "
|
||||
"también puede tomar parte en su propia salida; esto se puede usar para "
|
||||
"enviar la salida a un servidor «icecast» a través de shout2send o similar. "
|
||||
"Cuando no está establecido o lo está a un valor vacío, se usará la tubería "
|
||||
"predeterminada. Actualmente es «videorate ! vp8enc quality=10 speed=2 "
|
||||
"threads=%T ! queue ! webmmux» y greba en WEBM usando el códec VP8. Se usa %T "
|
||||
"como suposición para el número de hilos óptimos en el sistema."
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
|
||||
"desconectado donde grabar el vídeo que se está grabando. Generalmente tendrá "
|
||||
"un punto de origen desconectado; la salida de ese punto se escribirá en el "
|
||||
"archivo de salida. Sin embargo, la tubería también puede tomar parte en su "
|
||||
"propia salida; esto se puede usar para enviar la salida a un servidor "
|
||||
"«icecast» a través de shout2send o similar. Cuando no está establecido o lo "
|
||||
"está a un valor vacío, se usará la tubería predeterminada. Actualmente es "
|
||||
"«'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux» y graba en WEBM "
|
||||
"usando el códec VP8. Se usa %T como marcador de posición para el número de "
|
||||
"hilos óptimos en el sistema."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -186,45 +198,45 @@ msgstr "Qué teclado usar"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "proveedores OpenSearch desactivados"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:623
|
||||
#: ../js/gdm/loginDialog.js:624
|
||||
msgid "Session..."
|
||||
msgstr "Sesión…"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
#: ../js/gdm/loginDialog.js:786
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
#: ../js/gdm/loginDialog.js:831
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(o pase el dedo)"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:851
|
||||
#: ../js/gdm/loginDialog.js:852
|
||||
msgid "Not listed?"
|
||||
msgstr "¿No está en la lista?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1019 ../js/ui/endSessionDialog.js:418
|
||||
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:419
|
||||
#: ../js/ui/extensionSystem.js:516 ../js/ui/networkAgent.js:145
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1024
|
||||
#: ../js/gdm/loginDialog.js:1025
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1376
|
||||
#: ../js/gdm/loginDialog.js:1377
|
||||
msgid "Login Window"
|
||||
msgstr "Ventana de inicio de sesión"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:113 ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:580 ../js/ui/userMenu.js:649
|
||||
#: ../js/gdm/powerMenu.js:113 ../js/ui/userMenu.js:581
|
||||
#: ../js/ui/userMenu.js:583 ../js/ui/userMenu.js:652
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
@ -445,8 +457,8 @@ msgstr "Esta semana"
|
||||
msgid "Next week"
|
||||
msgstr "La semana que viene"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:63 ../js/ui/notificationDaemon.js:466
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:394
|
||||
#: ../js/ui/contactDisplay.js:63 ../js/ui/notificationDaemon.js:486
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:372
|
||||
msgid "Unknown"
|
||||
msgstr "Desconocido"
|
||||
|
||||
@ -466,7 +478,7 @@ msgstr "Ocupado"
|
||||
msgid "Offline"
|
||||
msgstr "Desconectado"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:141
|
||||
#: ../js/ui/contactDisplay.js:148
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTACTOS"
|
||||
|
||||
@ -474,58 +486,58 @@ msgstr "CONTACTOS"
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
#: ../js/ui/dateMenu.js:96
|
||||
#: ../js/ui/dateMenu.js:97
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "Ajustes de hora y fecha"
|
||||
|
||||
#: ../js/ui/dateMenu.js:122
|
||||
#: ../js/ui/dateMenu.js:123
|
||||
msgid "Open Calendar"
|
||||
msgstr "Abrir calendario"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:180
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e de %b, %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e de %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:185
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
#: ../js/ui/dateMenu.js:187
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:193
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e de %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
#: ../js/ui/dateMenu.js:195
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e de %b, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:198
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
#: ../js/ui/dateMenu.js:200
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:210
|
||||
#: ../js/ui/dateMenu.js:211
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A, %e de %B de %Y"
|
||||
|
||||
@ -701,7 +713,7 @@ msgstr "Dar voz"
|
||||
msgid "Mute"
|
||||
msgstr "Silenciar"
|
||||
|
||||
#: ../js/ui/messageTray.js:2444
|
||||
#: ../js/ui/messageTray.js:2446
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
@ -747,8 +759,8 @@ msgstr "La red inalámbrica requiere autenticación"
|
||||
#: ../js/ui/networkAgent.js:322
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
"'%s'."
|
||||
"Passwords or encryption keys are required to access the wireless network '%"
|
||||
"s'."
|
||||
msgstr ""
|
||||
"Se necesitan contraseñas o claves de cifrado para acceder a la red "
|
||||
"inalámbrica «%s»."
|
||||
@ -804,17 +816,17 @@ msgstr "Aplicaciones"
|
||||
msgid "Dash"
|
||||
msgstr "Tablero"
|
||||
|
||||
#: ../js/ui/panel.js:564
|
||||
#: ../js/ui/panel.js:572
|
||||
msgid "Quit"
|
||||
msgstr "Salir"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:595
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#: ../js/ui/panel.js:982
|
||||
#: ../js/ui/panel.js:990
|
||||
msgid "Top Bar"
|
||||
msgstr "Barra superior"
|
||||
|
||||
@ -831,7 +843,7 @@ msgstr "Reintentar"
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectar a…"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:364
|
||||
#: ../js/ui/placeDisplay.js:367
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LUGARES Y DISPOSITIVOS"
|
||||
|
||||
@ -864,7 +876,7 @@ msgstr "Contraseña:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:719
|
||||
#: ../js/ui/popupMenu.js:720
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -900,6 +912,10 @@ msgstr "Ocultar texto"
|
||||
msgid "Wrong password, please try again"
|
||||
msgstr "Contraseña incorrecta; inténtelo de nuevo"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:47
|
||||
msgid "Accessibility"
|
||||
msgstr "Accesibilidad"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:52
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
@ -943,10 +959,10 @@ msgstr "Contraste alto"
|
||||
msgid "Large Text"
|
||||
msgstr "Texto grande"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:35 ../js/ui/status/bluetooth.js:258
|
||||
#: ../js/ui/status/bluetooth.js:341 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:436
|
||||
#: ../js/ui/status/network.js:892
|
||||
#: ../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:371 ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436 ../js/ui/status/network.js:893
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -967,7 +983,7 @@ msgid "Bluetooth Settings"
|
||||
msgstr "Configuración de Bluetooth"
|
||||
|
||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||
#: ../js/ui/status/bluetooth.js:107 ../js/ui/status/network.js:255
|
||||
#: ../js/ui/status/bluetooth.js:107 ../js/ui/status/network.js:256
|
||||
msgid "hardware disabled"
|
||||
msgstr "hardware desactivado"
|
||||
|
||||
@ -975,11 +991,11 @@ msgstr "hardware desactivado"
|
||||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:490
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:491
|
||||
msgid "disconnecting..."
|
||||
msgstr "deconectando…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:496
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:497
|
||||
msgid "connecting..."
|
||||
msgstr "conectando…"
|
||||
|
||||
@ -1030,7 +1046,7 @@ msgstr "Conceder acceso siempre"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder sólo esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1168
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1098
|
||||
msgid "Reject"
|
||||
msgstr "Rechazar"
|
||||
|
||||
@ -1083,119 +1099,127 @@ msgid "<unknown>"
|
||||
msgstr "<desconocido>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:277
|
||||
#: ../js/ui/status/network.js:278
|
||||
msgid "disabled"
|
||||
msgstr "desactivada"
|
||||
|
||||
#. 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)
|
||||
#: ../js/ui/status/network.js:488
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unmanaged"
|
||||
msgstr "no gestionada"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:499
|
||||
#: ../js/ui/status/network.js:500
|
||||
msgid "authentication required"
|
||||
msgstr "se necesita autenticación"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:509
|
||||
#: ../js/ui/status/network.js:510
|
||||
msgid "firmware missing"
|
||||
msgstr "falta el «firmware»"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:516
|
||||
#: ../js/ui/status/network.js:517
|
||||
msgid "cable unplugged"
|
||||
msgstr "cable desconectado"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:522
|
||||
msgid "unavailable"
|
||||
msgstr "no disponible"
|
||||
|
||||
#: ../js/ui/status/network.js:523
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:584 ../js/ui/status/network.js:1504
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
||||
msgid "More..."
|
||||
msgstr "Más…"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:620 ../js/ui/status/network.js:1439
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectada (privada)"
|
||||
|
||||
#: ../js/ui/status/network.js:695
|
||||
#: ../js/ui/status/network.js:696
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet automática"
|
||||
|
||||
#: ../js/ui/status/network.js:756
|
||||
#: ../js/ui/status/network.js:757
|
||||
msgid "Auto broadband"
|
||||
msgstr "Banda ancha automática"
|
||||
|
||||
#: ../js/ui/status/network.js:759
|
||||
#: ../js/ui/status/network.js:760
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Marcado automático"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1451
|
||||
#: ../js/ui/status/network.js:879 ../js/ui/status/network.js:1452
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automática"
|
||||
|
||||
#: ../js/ui/status/network.js:880
|
||||
#: ../js/ui/status/network.js:881
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automático"
|
||||
|
||||
#: ../js/ui/status/network.js:1453
|
||||
#: ../js/ui/status/network.js:1454
|
||||
msgid "Auto wireless"
|
||||
msgstr "Inalámbrica automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1547
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Network"
|
||||
msgstr "Red"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
msgid "Enable networking"
|
||||
msgstr "Activar red"
|
||||
|
||||
#: ../js/ui/status/network.js:1559
|
||||
#: ../js/ui/status/network.js:1560
|
||||
msgid "Wired"
|
||||
msgstr "Cableada"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1571
|
||||
msgid "Wireless"
|
||||
msgstr "Inalámbrica"
|
||||
|
||||
#: ../js/ui/status/network.js:1580
|
||||
#: ../js/ui/status/network.js:1581
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda ancha móvil"
|
||||
|
||||
#: ../js/ui/status/network.js:1590
|
||||
#: ../js/ui/status/network.js:1591
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexiones VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1602
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#: ../js/ui/status/network.js:1738
|
||||
#: ../js/ui/status/network.js:1739
|
||||
msgid "Connection failed"
|
||||
msgstr "Falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#: ../js/ui/status/network.js:1740
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Falló la activación de la conexión de red"
|
||||
|
||||
#: ../js/ui/status/network.js:1989
|
||||
#: ../js/ui/status/network.js:1993
|
||||
msgid "Networking is disabled"
|
||||
msgstr "La red está desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:2113
|
||||
#: ../js/ui/status/network.js:2117
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
#: ../js/ui/status/power.js:77
|
||||
#: ../js/ui/status/power.js:59
|
||||
msgid "Battery"
|
||||
msgstr "Batería"
|
||||
|
||||
#: ../js/ui/status/power.js:76
|
||||
msgid "Power Settings"
|
||||
msgstr "Configuración de energía"
|
||||
|
||||
@ -1283,7 +1307,7 @@ msgstr "Tableta"
|
||||
msgid "Computer"
|
||||
msgstr "Equipo"
|
||||
|
||||
#: ../js/ui/status/volume.js:38
|
||||
#: ../js/ui/status/volume.js:25 ../js/ui/status/volume.js:38
|
||||
msgid "Volume"
|
||||
msgstr "Volumen"
|
||||
|
||||
@ -1291,47 +1315,46 @@ msgstr "Volumen"
|
||||
msgid "Microphone"
|
||||
msgstr "Micrófono"
|
||||
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:267
|
||||
#: ../js/ui/telepathyClient.js:225
|
||||
msgid "Invitation"
|
||||
msgstr "Invitación"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#: ../js/ui/telepathyClient.js:278
|
||||
msgid "Call"
|
||||
msgstr "Llamar"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:365
|
||||
#: ../js/ui/telepathyClient.js:294
|
||||
msgid "File Transfer"
|
||||
msgstr "Transferencia de archivos"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:446
|
||||
#: ../js/ui/telepathyClient.js:376
|
||||
msgid "Subscription request"
|
||||
msgstr "Solicitud de suscripción"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:412
|
||||
msgid "Connection error"
|
||||
msgstr "Error de conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:740
|
||||
#: ../js/ui/telepathyClient.js:670
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:745
|
||||
#: ../js/ui/telepathyClient.js:674
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:748
|
||||
#: ../js/ui/telepathyClient.js:678
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:751
|
||||
#: ../js/ui/telepathyClient.js:681
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado/a."
|
||||
@ -1339,35 +1362,35 @@ msgstr "%s está ocupado/a."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:964
|
||||
#: ../js/ui/telepathyClient.js:894
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Enviado el <b>%A</b> a las <b>%H:%M</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:970
|
||||
#: ../js/ui/telepathyClient.js:900
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:975
|
||||
#: ../js/ui/telepathyClient.js:905
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b> de %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1017
|
||||
#: ../js/ui/telepathyClient.js:947
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "Ahora %s se llama %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1119
|
||||
#: ../js/ui/telepathyClient.js:1049
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Invitación a %s"
|
||||
@ -1375,35 +1398,35 @@ msgstr "Invitación a %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1127
|
||||
#: ../js/ui/telepathyClient.js:1057
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s le está invitando a unirse a %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1129 ../js/ui/telepathyClient.js:1209
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
#: ../js/ui/telepathyClient.js:1059 ../js/ui/telepathyClient.js:1138
|
||||
#: ../js/ui/telepathyClient.js:1236
|
||||
msgid "Decline"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1130 ../js/ui/telepathyClient.js:1210
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#: ../js/ui/telepathyClient.js:1060 ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1237
|
||||
msgid "Accept"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1160
|
||||
#: ../js/ui/telepathyClient.js:1090
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videollamada de %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1163
|
||||
#: ../js/ui/telepathyClient.js:1093
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Llamada de %s"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1170
|
||||
#: ../js/ui/telepathyClient.js:1100
|
||||
msgid "Answer"
|
||||
msgstr "Responder"
|
||||
|
||||
@ -1412,112 +1435,112 @@ msgstr "Responder"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1203
|
||||
#: ../js/ui/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s le está enviando %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1272
|
||||
#: ../js/ui/telepathyClient.js:1201
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s solicita permiso para ver cuándo está en línea"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1365
|
||||
#: ../js/ui/telepathyClient.js:1294
|
||||
msgid "Network error"
|
||||
msgstr "Error de la red"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1367
|
||||
#: ../js/ui/telepathyClient.js:1296
|
||||
msgid "Authentication failed"
|
||||
msgstr "Falló la autenticación"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1369
|
||||
#: ../js/ui/telepathyClient.js:1298
|
||||
msgid "Encryption error"
|
||||
msgstr "Error de cifrado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1371
|
||||
#: ../js/ui/telepathyClient.js:1300
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Certificado no proporcionado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1373
|
||||
#: ../js/ui/telepathyClient.js:1302
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "No se confía en el certificado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1375
|
||||
#: ../js/ui/telepathyClient.js:1304
|
||||
msgid "Certificate expired"
|
||||
msgstr "Certificado caducado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1377
|
||||
#: ../js/ui/telepathyClient.js:1306
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Certificado no activado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1379
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "El nombre del servidor dle certificado no coincide"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1381
|
||||
#: ../js/ui/telepathyClient.js:1310
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "La huella del certificado no coincide"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1383
|
||||
#: ../js/ui/telepathyClient.js:1312
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Certificado autofirmado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1385
|
||||
#: ../js/ui/telepathyClient.js:1314
|
||||
msgid "Status is set to offline"
|
||||
msgstr "El estado está establecido a «desconectado»"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1387
|
||||
#: ../js/ui/telepathyClient.js:1316
|
||||
msgid "Encryption is not available"
|
||||
msgstr "El cifrado no está disponible"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1389
|
||||
#: ../js/ui/telepathyClient.js:1318
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "El certificado no es válido"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1391
|
||||
#: ../js/ui/telepathyClient.js:1320
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Se ha rechazado la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1393
|
||||
#: ../js/ui/telepathyClient.js:1322
|
||||
msgid "Connection can't be established"
|
||||
msgstr "No se puede establecer la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1324
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Se ha perdido la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1326
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Este recurso ya está conectado al servidor"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1328
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1330
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "La cuenta ya existe en el servidor"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr ""
|
||||
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1334
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Se ha revocado el certificado"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1336
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
|
||||
"débil"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1338
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1528,20 +1551,20 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1348
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Falló la conexión a %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
#: ../js/ui/telepathyClient.js:1357
|
||||
msgid "Reconnect"
|
||||
msgstr "Reconectar"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1358
|
||||
msgid "Edit account"
|
||||
msgstr "Editar cuenta"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1475
|
||||
#: ../js/ui/telepathyClient.js:1404
|
||||
msgid "Unknown reason"
|
||||
msgstr "Razón desconocida"
|
||||
|
||||
@ -1557,39 +1580,39 @@ msgstr "Inactivo"
|
||||
msgid "Unavailable"
|
||||
msgstr "No disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:576 ../js/ui/userMenu.js:580 ../js/ui/userMenu.js:650
|
||||
#: ../js/ui/userMenu.js:579 ../js/ui/userMenu.js:583 ../js/ui/userMenu.js:653
|
||||
msgid "Power Off..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
#: ../js/ui/userMenu.js:615
|
||||
msgid "Notifications"
|
||||
msgstr "Notificaciones"
|
||||
|
||||
#: ../js/ui/userMenu.js:620
|
||||
#: ../js/ui/userMenu.js:623
|
||||
msgid "Online Accounts"
|
||||
msgstr "Cuentas en línea"
|
||||
|
||||
#: ../js/ui/userMenu.js:624
|
||||
#: ../js/ui/userMenu.js:627
|
||||
msgid "System Settings"
|
||||
msgstr "Configuración del sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:634
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear la pantalla"
|
||||
|
||||
#: ../js/ui/userMenu.js:636
|
||||
#: ../js/ui/userMenu.js:639
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/userMenu.js:641
|
||||
#: ../js/ui/userMenu.js:644
|
||||
msgid "Log Out..."
|
||||
msgstr "Cerrar la sesión…"
|
||||
|
||||
#: ../js/ui/userMenu.js:669
|
||||
#: ../js/ui/userMenu.js:672
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Su estado del chat se establecerá a «ocupado»"
|
||||
|
||||
#: ../js/ui/userMenu.js:670
|
||||
#: ../js/ui/userMenu.js:673
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1663,7 +1686,7 @@ msgstr "Imprimir versión"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Modo usado por GDM para la pantalla de inicio"
|
||||
|
||||
#: ../src/shell-app.c:639
|
||||
#: ../src/shell-app.c:617
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Falló al lanzar «%s»"
|
||||
@ -1676,7 +1699,7 @@ msgstr "Reino Unido"
|
||||
msgid "Default"
|
||||
msgstr "Predeterminada"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
#: ../src/shell-polkit-authentication-agent.c:332
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "El usuario rechazó el diálogo de autenticación"
|
||||
|
||||
@ -1974,8 +1997,8 @@ msgstr "%1$s: %2$s"
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr ""
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
|
||||
#~ "segundos en la hora."
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
|
||||
#~ "en la hora."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the format used by the panel clock when the format key "
|
||||
@ -1992,19 +2015,18 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
||||
#~ "ignored."
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||
#~ "format specified in the custom_format key. Note that if set to either "
|
||||
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||
#~ msgstr ""
|
||||
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
|
||||
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
|
||||
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
|
||||
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
|
||||
#~ "especificado en la clave «custom_format». Note que si se establece a "
|
||||
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
|
||||
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
|
||||
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
|
||||
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
|
||||
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
|
||||
#~ "ignoran las claves «show_date» y «show_seconds»."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Formato del reloj"
|
||||
|
335
po/fi.po
335
po/fi.po
@ -21,8 +21,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-01-10 09:26+0100\n"
|
||||
"PO-Revision-Date: 2012-01-09 16:54+0200\n"
|
||||
"POT-Creation-Date: 2012-01-24 15:37+0200\n"
|
||||
"PO-Revision-Date: 2012-01-22 14:10+0200\n"
|
||||
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
|
||||
"Language-Team: Finnish <>\n"
|
||||
"Language: fi\n"
|
||||
@ -43,11 +43,6 @@ msgid "Window management and application launching"
|
||||
msgstr "Ikkunanhallinta ja sovelluksien käynnistäminen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Ota käyttöön sisäiset kehittäjiä ja testaajia hyödyttävät työkalut Alt-F2:sta"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
@ -55,11 +50,20 @@ msgstr ""
|
||||
"Salli pääsy sisäiseen vianselvitys- ja monitorointityökaluun Alt-F2-ikkunan "
|
||||
"kautta."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Ota käyttöön sisäiset kehittäjiä ja testaajia hyödyttävät työkalut Alt-F2:sta"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Käyttöön otettavien laajennosten UUID:t"
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Tiedostopääte ruutunauhoitusten tallentamiseen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Ruutunauhoitusten kuvataajuus."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should be loaded. Any extension that wants to be loaded needs to be in this "
|
||||
@ -71,94 +75,31 @@ msgstr ""
|
||||
"halutaan ladata, on oltava tässä luettelossa. Tätä luetteloa voi muokata "
|
||||
"myös org.gnome.Shell-DBus-metodeilla EnableExtension ja DisableExtension."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Kerätäänkö sovellusten käytöstä tilastoja"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"Ikkunanhallinta seuraa normaalisti aktiivisia sovelluksia, jotta eniten "
|
||||
"käytetyt voidaan esittää (esim. käynnistimissä). Vaikka nämä tiedot pysyvät "
|
||||
"yksityisinä, voit silti haluta ottaa ominaisuuden pois käytöstä "
|
||||
"yksityisyyden vuoksi. Huomaa että pois kytkeminen ei poista aiemmin "
|
||||
"tallennettuja tietoja."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Luettelo työpöytätiedostojen tunnisteista lempisovelluksille"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "Näitä tunnisteita vastaavat sovellukset näytetään suosikkien alueella."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "käytöstä poistetut OpenSearch-tarjoajat"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Historia komentoikkunalle (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "Historia näyttölasi-ikkunalle"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Näytä viikonpäivä kalenterissa"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Jos tosi, näytä ISO-viikonpäivät kalenterissa."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Mitä näppäimistöä käytetään"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Käytettävän näppäimistön tyyppi."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Näytä aika sekuntien kera"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Jos tosi, näytä sekunnit ajassa."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid "Show date in clock"
|
||||
msgstr "Näytä päivämäärä kellossa"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Jos tosi, näytä päivämäärä kellossa ajan lisäksi."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Ruutunauhoitusten kuvataajuus."
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Jos tosi, näytä sekunnit ajassa."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"Nauhoituksesta tuloksena saatavan ruutunauhoituksen kuvataajuus kun käytössä "
|
||||
"on GNOMEn ikkunanhallinnan nauhoitin, kuvaa per sekunti."
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Jos tosi, näytä ISO-viikonpäivät kalenterissa."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Gstreamer-liukuhihna jolla ruutunauhoitukset pakataan"
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Luettelo työpöytätiedostojen tunnisteista lempisovelluksille"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@ -184,11 +125,25 @@ msgstr ""
|
||||
"muotoon VP8-koodekilla. %T korvautuu arvauksella parhaan suorituskyvy "
|
||||
"antavasta säiemäärästä järjestelmässä."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Tiedostopääte ruutunauhoitusten tallentamiseen"
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Näytä päivämäärä kellossa"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Näytä viikonpäivä kalenterissa"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Näytä aika sekuntien kera"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "Näitä tunnisteita vastaavat sovellukset näytetään suosikkien alueella."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -198,45 +153,90 @@ msgstr ""
|
||||
"nykyisen päivämäärän ja tämän tiedostopäätteen mukaisesti. Tiedostopääte "
|
||||
"tulisi vaihtaa mikäli nauhoitetaan eri tallennusmuotoon."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:623
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"Nauhoituksesta tuloksena saatavan ruutunauhoituksen kuvataajuus kun käytössä "
|
||||
"on GNOMEn ikkunanhallinnan nauhoitin, kuvaa per sekunti."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Gstreamer-liukuhihna jolla ruutunauhoitukset pakataan"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"Ikkunanhallinta seuraa normaalisti aktiivisia sovelluksia, jotta eniten "
|
||||
"käytetyt voidaan esittää (esim. käynnistimissä). Vaikka nämä tiedot pysyvät "
|
||||
"yksityisinä, voit silti haluta ottaa ominaisuuden pois käytöstä "
|
||||
"yksityisyyden vuoksi. Huomaa että pois kytkeminen ei poista aiemmin "
|
||||
"tallennettuja tietoja."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Käytettävän näppäimistön tyyppi."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Käyttöön otettavien laajennosten UUID:t"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Kerätäänkö sovellusten käytöstä tilastoja"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Mitä näppäimistöä käytetään"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "käytöstä poistetut OpenSearch-tarjoajat"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:624
|
||||
msgid "Session..."
|
||||
msgstr "Istunto…"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
#: ../js/gdm/loginDialog.js:786
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Kirjaudu sisään"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
#: ../js/gdm/loginDialog.js:831
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(tai pyyhkäise sormella)"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:851
|
||||
#: ../js/gdm/loginDialog.js:852
|
||||
msgid "Not listed?"
|
||||
msgstr "Ei luettelossa?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1019 ../js/ui/endSessionDialog.js:418
|
||||
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:419
|
||||
#: ../js/ui/extensionSystem.js:516 ../js/ui/networkAgent.js:145
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||
msgid "Cancel"
|
||||
msgstr "Peru"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1024
|
||||
#: ../js/gdm/loginDialog.js:1025
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Kirjaudu sisään"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1376
|
||||
#: ../js/gdm/loginDialog.js:1377
|
||||
msgid "Login Window"
|
||||
msgstr "Kirjautumisikkuna"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:113 ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:580 ../js/ui/userMenu.js:649
|
||||
#: ../js/gdm/powerMenu.js:113 ../js/ui/userMenu.js:579
|
||||
#: ../js/ui/userMenu.js:581 ../js/ui/userMenu.js:650
|
||||
msgid "Suspend"
|
||||
msgstr "Valmiustila"
|
||||
|
||||
@ -460,7 +460,7 @@ msgid "Next week"
|
||||
msgstr "Ensi viikolla"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:63 ../js/ui/notificationDaemon.js:486
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:394
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:371
|
||||
msgid "Unknown"
|
||||
msgstr "Tuntematon"
|
||||
|
||||
@ -830,17 +830,17 @@ msgstr "Sovellukset"
|
||||
msgid "Dash"
|
||||
msgstr "Pikavalikko"
|
||||
|
||||
#: ../js/ui/panel.js:564
|
||||
#: ../js/ui/panel.js:567
|
||||
msgid "Quit"
|
||||
msgstr "Lopeta"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:595
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "Activities"
|
||||
msgstr "Toiminnot"
|
||||
|
||||
#: ../js/ui/panel.js:982
|
||||
#: ../js/ui/panel.js:985
|
||||
msgid "Top Bar"
|
||||
msgstr "Yläpalkki"
|
||||
|
||||
@ -857,7 +857,7 @@ msgstr "Yritä uudelleen"
|
||||
msgid "Connect to..."
|
||||
msgstr "Yhdistä…"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:364
|
||||
#: ../js/ui/placeDisplay.js:367
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "SIJAINNIT JA LAITTEET"
|
||||
|
||||
@ -1056,7 +1056,7 @@ msgstr "Salli pääsy aina"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Salli vain tällä kerralla"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1168
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1098
|
||||
msgid "Reject"
|
||||
msgstr "Hylkää"
|
||||
|
||||
@ -1213,11 +1213,11 @@ msgstr "Yhteys epäonnistui"
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Verkkoyhteyden aktivointi epäonnistui"
|
||||
|
||||
#: ../js/ui/status/network.js:1989
|
||||
#: ../js/ui/status/network.js:1992
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Verkko ei ole käytössä"
|
||||
|
||||
#: ../js/ui/status/network.js:2113
|
||||
#: ../js/ui/status/network.js:2116
|
||||
msgid "Network Manager"
|
||||
msgstr "Verkon hallinta"
|
||||
|
||||
@ -1317,47 +1317,46 @@ msgstr "Äänenvoimakkuus"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofoni"
|
||||
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:267
|
||||
#: ../js/ui/telepathyClient.js:225
|
||||
msgid "Invitation"
|
||||
msgstr "Kutsu"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#: ../js/ui/telepathyClient.js:278
|
||||
msgid "Call"
|
||||
msgstr "Soita"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:365
|
||||
#: ../js/ui/telepathyClient.js:294
|
||||
msgid "File Transfer"
|
||||
msgstr "Tiedostonsiirto"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:446
|
||||
#: ../js/ui/telepathyClient.js:376
|
||||
msgid "Subscription request"
|
||||
msgstr "Tilauspyyntö"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:412
|
||||
msgid "Connection error"
|
||||
msgstr "Yhteysvirhe"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:740
|
||||
#: ../js/ui/telepathyClient.js:670
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s on linjoilla."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:745
|
||||
#: ../js/ui/telepathyClient.js:674
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s on poissa linjoilta."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:748
|
||||
#: ../js/ui/telepathyClient.js:678
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s on poissa."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:751
|
||||
#: ../js/ui/telepathyClient.js:681
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s on kiireinen."
|
||||
@ -1365,35 +1364,35 @@ msgstr "%s on kiireinen."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:964
|
||||
#: ../js/ui/telepathyClient.js:894
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Lähetetty <b>%Ana</b> kello <b>%H.%M</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:970
|
||||
#: ../js/ui/telepathyClient.js:900
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Lähetetty <b>%Ana</b> <b>%d. %Bta</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:975
|
||||
#: ../js/ui/telepathyClient.js:905
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Lähetetty <b>%Ana</b> <b>%d. %Bta</b> %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1017
|
||||
#: ../js/ui/telepathyClient.js:947
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s on nyt nimeltään %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1119
|
||||
#: ../js/ui/telepathyClient.js:1049
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Kutsu huoneeseen %s"
|
||||
@ -1401,35 +1400,35 @@ msgstr "Kutsu huoneeseen %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1127
|
||||
#: ../js/ui/telepathyClient.js:1057
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s kutsuu sinut huoneeseen %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1129 ../js/ui/telepathyClient.js:1209
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
#: ../js/ui/telepathyClient.js:1059 ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1237
|
||||
msgid "Decline"
|
||||
msgstr "Kieltäydy"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1130 ../js/ui/telepathyClient.js:1210
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#: ../js/ui/telepathyClient.js:1060 ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1238
|
||||
msgid "Accept"
|
||||
msgstr "Hyväksy"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1160
|
||||
#: ../js/ui/telepathyClient.js:1090
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videopuhelu käyttäjältä %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1163
|
||||
#: ../js/ui/telepathyClient.js:1093
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Puhelu käyttäjältä %s"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1170
|
||||
#: ../js/ui/telepathyClient.js:1100
|
||||
msgid "Answer"
|
||||
msgstr "Vastaa"
|
||||
|
||||
@ -1438,108 +1437,108 @@ msgstr "Vastaa"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1203
|
||||
#: ../js/ui/telepathyClient.js:1133
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s on lähettämässä sinulle tiedostoa %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1272
|
||||
#: ../js/ui/telepathyClient.js:1202
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s haluaisi saada luvan nähdä, milloin olet linjoilla"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1365
|
||||
#: ../js/ui/telepathyClient.js:1295
|
||||
msgid "Network error"
|
||||
msgstr "Verkkovirhe"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1367
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
msgid "Authentication failed"
|
||||
msgstr "Tunnistautuminen epäonnistui"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1369
|
||||
#: ../js/ui/telepathyClient.js:1299
|
||||
msgid "Encryption error"
|
||||
msgstr "Salausvirhe"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1371
|
||||
#: ../js/ui/telepathyClient.js:1301
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Varmennetta ei annettu"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1373
|
||||
#: ../js/ui/telepathyClient.js:1303
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Varmenteeseen ei luoteta"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1375
|
||||
#: ../js/ui/telepathyClient.js:1305
|
||||
msgid "Certificate expired"
|
||||
msgstr "Varmenne on vanhentunut"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1377
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Varmennetta ei ole aktivoitu"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1379
|
||||
#: ../js/ui/telepathyClient.js:1309
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Varmenteen konenimiristiriita"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1381
|
||||
#: ../js/ui/telepathyClient.js:1311
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Varmenteen sormenjälkiristiriita"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1383
|
||||
#: ../js/ui/telepathyClient.js:1313
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Varmenne on itseallekirjoitettu"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1385
|
||||
#: ../js/ui/telepathyClient.js:1315
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Tilaksi on asetettu ”poissa linjoilta”"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1387
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Salaus ei ole käytettävissä"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1389
|
||||
#: ../js/ui/telepathyClient.js:1319
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Varmenne ei kelpaa"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1391
|
||||
#: ../js/ui/telepathyClient.js:1321
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Yhteys on evätty"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1393
|
||||
#: ../js/ui/telepathyClient.js:1323
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Yhteyttä ei voida muodostaa"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1325
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Yhteys on katkennut"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1327
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Tämä resurssi on jo yhteydessä palvelimeen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1329
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Yhteys on korvattu uudella samaa resurssia käyttävällä yhteydellä"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1331
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Tili on jo olemassa palvelimella"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Palvelin on tällä hetkellä liian kiireinen käsittelemään yhteyttä"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1335
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Varmenne on kumottu"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1337
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "Varmenne käyttää turvatonta salausmenetelmää"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1339
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1548,20 +1547,20 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1349
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Yhteys kohteeseen %s katkesi"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
#: ../js/ui/telepathyClient.js:1358
|
||||
msgid "Reconnect"
|
||||
msgstr "Yhdistä uudelleen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1359
|
||||
msgid "Edit account"
|
||||
msgstr "Muokkaa tiliä"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1475
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
msgid "Unknown reason"
|
||||
msgstr "Tuntematon syy"
|
||||
|
||||
@ -1577,39 +1576,39 @@ msgstr "Jouten"
|
||||
msgid "Unavailable"
|
||||
msgstr "Ei tavoitettavissa"
|
||||
|
||||
#: ../js/ui/userMenu.js:576 ../js/ui/userMenu.js:580 ../js/ui/userMenu.js:650
|
||||
#: ../js/ui/userMenu.js:577 ../js/ui/userMenu.js:581 ../js/ui/userMenu.js:651
|
||||
msgid "Power Off..."
|
||||
msgstr "Sammuta…"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
#: ../js/ui/userMenu.js:613
|
||||
msgid "Notifications"
|
||||
msgstr "Ilmoitukset"
|
||||
|
||||
#: ../js/ui/userMenu.js:620
|
||||
#: ../js/ui/userMenu.js:621
|
||||
msgid "Online Accounts"
|
||||
msgstr "Verkkotilit"
|
||||
|
||||
#: ../js/ui/userMenu.js:624
|
||||
#: ../js/ui/userMenu.js:625
|
||||
msgid "System Settings"
|
||||
msgstr "Järjestelmän asetukset"
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:632
|
||||
msgid "Lock Screen"
|
||||
msgstr "Lukitse näyttö"
|
||||
|
||||
#: ../js/ui/userMenu.js:636
|
||||
#: ../js/ui/userMenu.js:637
|
||||
msgid "Switch User"
|
||||
msgstr "Vaihda käyttäjää"
|
||||
|
||||
#: ../js/ui/userMenu.js:641
|
||||
#: ../js/ui/userMenu.js:642
|
||||
msgid "Log Out..."
|
||||
msgstr "Kirjaudu ulos…"
|
||||
|
||||
#: ../js/ui/userMenu.js:669
|
||||
#: ../js/ui/userMenu.js:670
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Pikaviestitilaksi asetetaan ”kiireinen”"
|
||||
|
||||
#: ../js/ui/userMenu.js:670
|
||||
#: ../js/ui/userMenu.js:671
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1642,7 +1641,7 @@ msgstr ""
|
||||
#: ../js/ui/wanda.js:128
|
||||
#, c-format
|
||||
msgid "%s the Oracle says"
|
||||
msgstr ""
|
||||
msgstr "%s, sanoo oraakkeli"
|
||||
|
||||
#: ../js/ui/wanda.js:168
|
||||
msgid "Your favorite Easter Egg"
|
||||
@ -1683,7 +1682,7 @@ msgstr "Tulosta versio"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "GDM:n kirjautumisruudussa käyttämä tila"
|
||||
|
||||
#: ../src/shell-app.c:639
|
||||
#: ../src/shell-app.c:616
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Sovelluksen ”%s” käynnistäminen epäonnistui"
|
||||
|
277
po/he.po
277
po/he.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-12-30 10:49+0200\n"
|
||||
"PO-Revision-Date: 2011-12-30 10:50+0200\n"
|
||||
"POT-Creation-Date: 2012-01-28 11:25+0200\n"
|
||||
"PO-Revision-Date: 2012-01-28 11:25+0200\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <sh.yaron@gmail.com>\n"
|
||||
"Language: he\n"
|
||||
@ -130,30 +130,30 @@ msgstr "באיזו מקלדת להשתמש"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "disabled OpenSearch providers"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:623
|
||||
#: ../js/gdm/loginDialog.js:624
|
||||
msgid "Session..."
|
||||
msgstr "הפעלה..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
#: ../js/gdm/loginDialog.js:786
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "כניסה"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
#: ../js/gdm/loginDialog.js:831
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(או להעביר אצבע)"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:851
|
||||
#: ../js/gdm/loginDialog.js:852
|
||||
msgid "Not listed?"
|
||||
msgstr "לא רשום?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1019
|
||||
#: ../js/ui/endSessionDialog.js:418
|
||||
#: ../js/gdm/loginDialog.js:1020
|
||||
#: ../js/ui/endSessionDialog.js:419
|
||||
#: ../js/ui/extensionSystem.js:516
|
||||
#: ../js/ui/networkAgent.js:145
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175
|
||||
@ -161,19 +161,19 @@ msgstr "לא רשום?"
|
||||
msgid "Cancel"
|
||||
msgstr "ביטול"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1024
|
||||
#: ../js/gdm/loginDialog.js:1025
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "כניסה"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1376
|
||||
#: ../js/gdm/loginDialog.js:1377
|
||||
msgid "Login Window"
|
||||
msgstr "חלון כניסה"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:113
|
||||
#: ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:649
|
||||
#: ../js/ui/userMenu.js:582
|
||||
#: ../js/ui/userMenu.js:651
|
||||
msgid "Suspend"
|
||||
msgstr "השהיה"
|
||||
|
||||
@ -395,9 +395,9 @@ msgid "Next week"
|
||||
msgstr "בשבוע הבא"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:63
|
||||
#: ../js/ui/notificationDaemon.js:466
|
||||
#: ../js/ui/notificationDaemon.js:486
|
||||
#: ../js/ui/status/power.js:215
|
||||
#: ../src/shell-app.c:394
|
||||
#: ../src/shell-app.c:372
|
||||
msgid "Unknown"
|
||||
msgstr "לא ידוע"
|
||||
|
||||
@ -420,7 +420,7 @@ msgstr "עסוק"
|
||||
msgid "Offline"
|
||||
msgstr "מנותק"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:141
|
||||
#: ../js/ui/contactDisplay.js:148
|
||||
msgid "CONTACTS"
|
||||
msgstr "אנשי קשר"
|
||||
|
||||
@ -429,58 +429,58 @@ msgstr "אנשי קשר"
|
||||
msgid "Remove"
|
||||
msgstr "הסרה"
|
||||
|
||||
#: ../js/ui/dateMenu.js:96
|
||||
#: ../js/ui/dateMenu.js:97
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "הגדרות תאריך ושעה"
|
||||
|
||||
#: ../js/ui/dateMenu.js:122
|
||||
#: ../js/ui/dateMenu.js:123
|
||||
msgid "Open Calendar"
|
||||
msgstr "פתיחת היומן"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:180
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %b %e, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:185
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
#: ../js/ui/dateMenu.js:187
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:193
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
#: ../js/ui/dateMenu.js:195
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %b %e, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:198
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
#: ../js/ui/dateMenu.js:200
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:210
|
||||
#: ../js/ui/dateMenu.js:211
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A ה־%e ב%B, %Y"
|
||||
|
||||
@ -661,7 +661,7 @@ msgstr "ביטול ההשתקה"
|
||||
msgid "Mute"
|
||||
msgstr "השתקה"
|
||||
|
||||
#: ../js/ui/messageTray.js:2444
|
||||
#: ../js/ui/messageTray.js:2446
|
||||
msgid "System Information"
|
||||
msgstr "פרטי המערכת"
|
||||
|
||||
@ -763,17 +763,17 @@ msgstr "יישומים"
|
||||
msgid "Dash"
|
||||
msgstr "חלונית"
|
||||
|
||||
#: ../js/ui/panel.js:564
|
||||
#: ../js/ui/panel.js:572
|
||||
msgid "Quit"
|
||||
msgstr "יציאה"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:595
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "Activities"
|
||||
msgstr "פעילויות"
|
||||
|
||||
#: ../js/ui/panel.js:982
|
||||
#: ../js/ui/panel.js:990
|
||||
msgid "Top Bar"
|
||||
msgstr "הסרגל העליון"
|
||||
|
||||
@ -790,7 +790,7 @@ msgstr "ניסיון חוזר"
|
||||
msgid "Connect to..."
|
||||
msgstr "התחברות אל..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:364
|
||||
#: ../js/ui/placeDisplay.js:367
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "מקומות והתקנים"
|
||||
|
||||
@ -823,7 +823,7 @@ msgstr "ססמה:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:719
|
||||
#: ../js/ui/popupMenu.js:720
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -859,6 +859,10 @@ msgstr "הסתרת טקסט"
|
||||
msgid "Wrong password, please try again"
|
||||
msgstr "ססמה שגויה, נא לנסות שוב"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:47
|
||||
msgid "Accessibility"
|
||||
msgstr "נגישות"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:52
|
||||
msgid "Zoom"
|
||||
msgstr "תקריב"
|
||||
@ -902,13 +906,14 @@ msgstr "ניגודיות גבוהה"
|
||||
msgid "Large Text"
|
||||
msgstr "טקסט גדול"
|
||||
|
||||
#: ../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:371
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436
|
||||
#: ../js/ui/status/network.js:892
|
||||
#: ../js/ui/status/network.js:893
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -930,7 +935,7 @@ msgstr "הגדרות Bluetooth"
|
||||
|
||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||
#: ../js/ui/status/bluetooth.js:107
|
||||
#: ../js/ui/status/network.js:255
|
||||
#: ../js/ui/status/network.js:256
|
||||
msgid "hardware disabled"
|
||||
msgstr "מנוטרל חומרתית"
|
||||
|
||||
@ -939,12 +944,12 @@ msgid "Connection"
|
||||
msgstr "חיבור"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214
|
||||
#: ../js/ui/status/network.js:490
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "disconnecting..."
|
||||
msgstr "בהליכי ניתוק..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227
|
||||
#: ../js/ui/status/network.js:496
|
||||
#: ../js/ui/status/network.js:497
|
||||
msgid "connecting..."
|
||||
msgstr "בהתחברות..."
|
||||
|
||||
@ -997,7 +1002,7 @@ msgid "Grant this time only"
|
||||
msgstr "הענקת גישה הפעם בלבד"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/telepathyClient.js:1168
|
||||
#: ../js/ui/telepathyClient.js:1098
|
||||
msgid "Reject"
|
||||
msgstr "סירוב"
|
||||
|
||||
@ -1051,121 +1056,129 @@ msgid "<unknown>"
|
||||
msgstr "<לא ידוע>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:277
|
||||
#: ../js/ui/status/network.js:278
|
||||
msgid "disabled"
|
||||
msgstr "מנוטרל"
|
||||
|
||||
#. 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)
|
||||
#: ../js/ui/status/network.js:488
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unmanaged"
|
||||
msgstr "לא מנוהל"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:499
|
||||
#: ../js/ui/status/network.js:500
|
||||
msgid "authentication required"
|
||||
msgstr "נדרש אימות"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:509
|
||||
#: ../js/ui/status/network.js:510
|
||||
msgid "firmware missing"
|
||||
msgstr "הקושחה חסרה"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:516
|
||||
#: ../js/ui/status/network.js:517
|
||||
msgid "cable unplugged"
|
||||
msgstr "הכבל מנותק"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:522
|
||||
msgid "unavailable"
|
||||
msgstr "לא זמין"
|
||||
|
||||
#: ../js/ui/status/network.js:523
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "connection failed"
|
||||
msgstr "החיבור נכשל"
|
||||
|
||||
#: ../js/ui/status/network.js:584
|
||||
#: ../js/ui/status/network.js:1504
|
||||
#: ../js/ui/status/network.js:585
|
||||
#: ../js/ui/status/network.js:1505
|
||||
msgid "More..."
|
||||
msgstr "עוד..."
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:620
|
||||
#: ../js/ui/status/network.js:1439
|
||||
#: ../js/ui/status/network.js:621
|
||||
#: ../js/ui/status/network.js:1440
|
||||
msgid "Connected (private)"
|
||||
msgstr "מחובר (פרטי)"
|
||||
|
||||
#: ../js/ui/status/network.js:695
|
||||
#: ../js/ui/status/network.js:696
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "אתרנט אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:756
|
||||
#: ../js/ui/status/network.js:757
|
||||
msgid "Auto broadband"
|
||||
msgstr "פס רחב אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:759
|
||||
#: ../js/ui/status/network.js:760
|
||||
msgid "Auto dial-up"
|
||||
msgstr "חיוג אוטומטי"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878
|
||||
#: ../js/ui/status/network.js:1451
|
||||
#: ../js/ui/status/network.js:879
|
||||
#: ../js/ui/status/network.js:1452
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:880
|
||||
#: ../js/ui/status/network.js:881
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1453
|
||||
#: ../js/ui/status/network.js:1454
|
||||
msgid "Auto wireless"
|
||||
msgstr "אלחוטי אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1547
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Network"
|
||||
msgstr "רשת"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
msgid "Enable networking"
|
||||
msgstr "הפעלת תכונת הרשת"
|
||||
|
||||
#: ../js/ui/status/network.js:1559
|
||||
#: ../js/ui/status/network.js:1560
|
||||
msgid "Wired"
|
||||
msgstr "קווי"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1571
|
||||
msgid "Wireless"
|
||||
msgstr "אלחוטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1580
|
||||
#: ../js/ui/status/network.js:1581
|
||||
msgid "Mobile broadband"
|
||||
msgstr "פס־רחב נייד"
|
||||
|
||||
#: ../js/ui/status/network.js:1590
|
||||
#: ../js/ui/status/network.js:1591
|
||||
msgid "VPN Connections"
|
||||
msgstr "חיבורי VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1602
|
||||
msgid "Network Settings"
|
||||
msgstr "הגדרות הרשת"
|
||||
|
||||
#: ../js/ui/status/network.js:1738
|
||||
#: ../js/ui/status/network.js:1739
|
||||
msgid "Connection failed"
|
||||
msgstr "ההתחברות נכשל"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#: ../js/ui/status/network.js:1740
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "הפעלת חיבור הרשת נכשלה"
|
||||
|
||||
#: ../js/ui/status/network.js:1989
|
||||
#: ../js/ui/status/network.js:1993
|
||||
msgid "Networking is disabled"
|
||||
msgstr "תכונת הרשת מנוטרלת"
|
||||
|
||||
#: ../js/ui/status/network.js:2113
|
||||
#: ../js/ui/status/network.js:2117
|
||||
msgid "Network Manager"
|
||||
msgstr "מנהל הרשתות"
|
||||
|
||||
#: ../js/ui/status/power.js:60
|
||||
msgid "Battery"
|
||||
msgstr "סוללה"
|
||||
|
||||
#: ../js/ui/status/power.js:77
|
||||
msgid "Power Settings"
|
||||
msgstr "הגדרות צריכת החשמל"
|
||||
@ -1259,6 +1272,7 @@ msgstr "טבלת שליטה"
|
||||
msgid "Computer"
|
||||
msgstr "מחשב"
|
||||
|
||||
#: ../js/ui/status/volume.js:25
|
||||
#: ../js/ui/status/volume.js:38
|
||||
msgid "Volume"
|
||||
msgstr "עצמה"
|
||||
@ -1267,47 +1281,46 @@ msgstr "עצמה"
|
||||
msgid "Microphone"
|
||||
msgstr "מיקרופון"
|
||||
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:267
|
||||
#: ../js/ui/telepathyClient.js:225
|
||||
msgid "Invitation"
|
||||
msgstr "הזמנה"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#: ../js/ui/telepathyClient.js:278
|
||||
msgid "Call"
|
||||
msgstr "התקשרות"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:365
|
||||
#: ../js/ui/telepathyClient.js:294
|
||||
msgid "File Transfer"
|
||||
msgstr "העברת קבצים"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:446
|
||||
#: ../js/ui/telepathyClient.js:376
|
||||
msgid "Subscription request"
|
||||
msgstr "בקשת הרשמה"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:412
|
||||
msgid "Connection error"
|
||||
msgstr "שגיאת התחברות"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:740
|
||||
#: ../js/ui/telepathyClient.js:670
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s התחבר/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:745
|
||||
#: ../js/ui/telepathyClient.js:674
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s התנתק/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:748
|
||||
#: ../js/ui/telepathyClient.js:678
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "'%s' מרוחק/ת."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:751
|
||||
#: ../js/ui/telepathyClient.js:681
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s עסוק/ה."
|
||||
@ -1315,35 +1328,35 @@ msgstr "%s עסוק/ה."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:964
|
||||
#: ../js/ui/telepathyClient.js:894
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "נשלח ב־<b>%X</b> בשעה <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:970
|
||||
#: ../js/ui/telepathyClient.js:900
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "נשלח ב<b>%A</b>, <b>ה־%d ב%B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:975
|
||||
#: ../js/ui/telepathyClient.js:905
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "נשלח ב<b>%A</b>, <b>ה־%d ב%B</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1017
|
||||
#: ../js/ui/telepathyClient.js:947
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "השם של %s הוחלף ל־%s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1119
|
||||
#: ../js/ui/telepathyClient.js:1049
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "הזמנה ל־%s"
|
||||
@ -1351,37 +1364,37 @@ msgstr "הזמנה ל־%s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1127
|
||||
#: ../js/ui/telepathyClient.js:1057
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "הוזמנת על ידי %s להצטרף אל %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1129
|
||||
#: ../js/ui/telepathyClient.js:1209
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
#: ../js/ui/telepathyClient.js:1059
|
||||
#: ../js/ui/telepathyClient.js:1138
|
||||
#: ../js/ui/telepathyClient.js:1236
|
||||
msgid "Decline"
|
||||
msgstr "דחייה"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1130
|
||||
#: ../js/ui/telepathyClient.js:1210
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#: ../js/ui/telepathyClient.js:1060
|
||||
#: ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1237
|
||||
msgid "Accept"
|
||||
msgstr "אישור"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1160
|
||||
#: ../js/ui/telepathyClient.js:1090
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "שיחת וידאו מאת %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1163
|
||||
#: ../js/ui/telepathyClient.js:1093
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "שיחה מאת %s"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1170
|
||||
#: ../js/ui/telepathyClient.js:1100
|
||||
msgid "Answer"
|
||||
msgstr "מענה"
|
||||
|
||||
@ -1390,125 +1403,125 @@ msgstr "מענה"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1203
|
||||
#: ../js/ui/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s שולח/ת אליך %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1272
|
||||
#: ../js/ui/telepathyClient.js:1201
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1365
|
||||
#: ../js/ui/telepathyClient.js:1294
|
||||
msgid "Network error"
|
||||
msgstr "שגיאת רשת"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1367
|
||||
#: ../js/ui/telepathyClient.js:1296
|
||||
msgid "Authentication failed"
|
||||
msgstr "האימות נכשל"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1369
|
||||
#: ../js/ui/telepathyClient.js:1298
|
||||
msgid "Encryption error"
|
||||
msgstr "שגיאת הצפנה"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1371
|
||||
#: ../js/ui/telepathyClient.js:1300
|
||||
msgid "Certificate not provided"
|
||||
msgstr "לא סופק אישור"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1373
|
||||
#: ../js/ui/telepathyClient.js:1302
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "האישור אינו מהימן"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1375
|
||||
#: ../js/ui/telepathyClient.js:1304
|
||||
msgid "Certificate expired"
|
||||
msgstr "האישור פג"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1377
|
||||
#: ../js/ui/telepathyClient.js:1306
|
||||
msgid "Certificate not activated"
|
||||
msgstr "האישור לא מופעל"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1379
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "שם המארח באישור אינו תואם"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1381
|
||||
#: ../js/ui/telepathyClient.js:1310
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "חוסר התאמה בטביעת האצבע של האישור"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1383
|
||||
#: ../js/ui/telepathyClient.js:1312
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "אישור בחתימה עצמית"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1385
|
||||
#: ../js/ui/telepathyClient.js:1314
|
||||
msgid "Status is set to offline"
|
||||
msgstr "המצב הוגדר ל'מנותק'"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1387
|
||||
#: ../js/ui/telepathyClient.js:1316
|
||||
msgid "Encryption is not available"
|
||||
msgstr "ההצפנה אינה זמינה"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1389
|
||||
#: ../js/ui/telepathyClient.js:1318
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "האישור אינו תקף"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1391
|
||||
#: ../js/ui/telepathyClient.js:1320
|
||||
msgid "Connection has been refused"
|
||||
msgstr "ההתחברות נשללה"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1393
|
||||
#: ../js/ui/telepathyClient.js:1322
|
||||
msgid "Connection can't be established"
|
||||
msgstr "לא ניתן להפעיל את החיבור"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1324
|
||||
msgid "Connection has been lost"
|
||||
msgstr "החיבור אבד"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1326
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "משאב זה כבר מחובר לשרת"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1328
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1330
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "החשבון כבר קיים בשרת"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1334
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "האישור נשלל"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1336
|
||||
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1338
|
||||
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
|
||||
msgstr "אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי ספריית ההצפנה"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1348
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "החיבור אל %s נכשל"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
#: ../js/ui/telepathyClient.js:1357
|
||||
msgid "Reconnect"
|
||||
msgstr "התחברות מחדש"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1358
|
||||
msgid "Edit account"
|
||||
msgstr "עריכת חשבון"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1475
|
||||
#: ../js/ui/telepathyClient.js:1404
|
||||
msgid "Unknown reason"
|
||||
msgstr "סיבה לא ידועה"
|
||||
|
||||
@ -1524,41 +1537,41 @@ msgstr "בהמתנה"
|
||||
msgid "Unavailable"
|
||||
msgstr "לא זמין"
|
||||
|
||||
#: ../js/ui/userMenu.js:576
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:650
|
||||
#: ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:582
|
||||
#: ../js/ui/userMenu.js:652
|
||||
msgid "Power Off..."
|
||||
msgstr "כיבוי..."
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
#: ../js/ui/userMenu.js:614
|
||||
msgid "Notifications"
|
||||
msgstr "התרעות"
|
||||
|
||||
#: ../js/ui/userMenu.js:620
|
||||
#: ../js/ui/userMenu.js:622
|
||||
msgid "Online Accounts"
|
||||
msgstr "חשבונות מקוונים"
|
||||
|
||||
#: ../js/ui/userMenu.js:624
|
||||
#: ../js/ui/userMenu.js:626
|
||||
msgid "System Settings"
|
||||
msgstr "הגדרות המערכת"
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:633
|
||||
msgid "Lock Screen"
|
||||
msgstr "נעילת המסך"
|
||||
|
||||
#: ../js/ui/userMenu.js:636
|
||||
#: ../js/ui/userMenu.js:638
|
||||
msgid "Switch User"
|
||||
msgstr "החלפת משתמש"
|
||||
|
||||
#: ../js/ui/userMenu.js:641
|
||||
#: ../js/ui/userMenu.js:643
|
||||
msgid "Log Out..."
|
||||
msgstr "ניתוק..."
|
||||
|
||||
#: ../js/ui/userMenu.js:669
|
||||
#: ../js/ui/userMenu.js:671
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "מצב הצ׳אט שלך יוגדר ל'עסוק'"
|
||||
|
||||
#: ../js/ui/userMenu.js:670
|
||||
#: ../js/ui/userMenu.js:672
|
||||
msgid "Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."
|
||||
msgstr "ההתרעות כבויות כעת, לרבות הודעות צ׳אט. המצב המקוון שלך הותאם כדי לבשר לאחרים שיתכן שהודעותיהם לא יתקבלו באופן מיידי."
|
||||
|
||||
@ -1630,7 +1643,7 @@ msgstr "Print version"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "המצב בו GDM יעשה שימוש לצורך מסך הכניסה"
|
||||
|
||||
#: ../src/shell-app.c:639
|
||||
#: ../src/shell-app.c:617
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "אירע כשל בטעינת '%s'"
|
||||
@ -1643,7 +1656,7 @@ msgstr "בריטניה"
|
||||
msgid "Default"
|
||||
msgstr "בררת מחדל"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
#: ../src/shell-polkit-authentication-agent.c:332
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
|
||||
|
||||
|
265
po/nb.po
265
po/nb.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 3.3.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-01-06 21:16+0100\n"
|
||||
"PO-Revision-Date: 2012-01-06 21:18+0100\n"
|
||||
"POT-Creation-Date: 2012-01-28 15:53+0100\n"
|
||||
"PO-Revision-Date: 2012-01-28 15:53+0100\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
@ -173,45 +173,45 @@ msgstr ""
|
||||
"og bruke denne filendelsen. Den bør endres når du gjør opptak til et nytt "
|
||||
"oppbevaringsformat."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:623
|
||||
#: ../js/gdm/loginDialog.js:624
|
||||
msgid "Session..."
|
||||
msgstr "Økt …"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
#: ../js/gdm/loginDialog.js:786
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Logg inn"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
#: ../js/gdm/loginDialog.js:831
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(eller dra finger)"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:851
|
||||
#: ../js/gdm/loginDialog.js:852
|
||||
msgid "Not listed?"
|
||||
msgstr "Ikke listet?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1019 ../js/ui/endSessionDialog.js:418
|
||||
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:419
|
||||
#: ../js/ui/extensionSystem.js:516 ../js/ui/networkAgent.js:145
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1024
|
||||
#: ../js/gdm/loginDialog.js:1025
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Logg inn"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1376
|
||||
#: ../js/gdm/loginDialog.js:1377
|
||||
msgid "Login Window"
|
||||
msgstr "Innloggingsvindu"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:113 ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:580 ../js/ui/userMenu.js:649
|
||||
#: ../js/gdm/powerMenu.js:113 ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:582 ../js/ui/userMenu.js:651
|
||||
msgid "Suspend"
|
||||
msgstr "Hvilemodus"
|
||||
|
||||
@ -433,7 +433,7 @@ msgid "Next week"
|
||||
msgstr "Neste uke"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:63 ../js/ui/notificationDaemon.js:486
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:394
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:372
|
||||
msgid "Unknown"
|
||||
msgstr "Ukjent"
|
||||
|
||||
@ -453,7 +453,7 @@ msgstr "Opptatt"
|
||||
msgid "Offline"
|
||||
msgstr "Frakoblet"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:141
|
||||
#: ../js/ui/contactDisplay.js:148
|
||||
msgid "CONTACTS"
|
||||
msgstr "KONTAKTER"
|
||||
|
||||
@ -461,58 +461,58 @@ msgstr "KONTAKTER"
|
||||
msgid "Remove"
|
||||
msgstr "Fjern"
|
||||
|
||||
#: ../js/ui/dateMenu.js:96
|
||||
#: ../js/ui/dateMenu.js:97
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "Innstillinger for dato og klokkeslett"
|
||||
|
||||
#: ../js/ui/dateMenu.js:122
|
||||
#: ../js/ui/dateMenu.js:123
|
||||
msgid "Open Calendar"
|
||||
msgstr "Åpne kalender"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:180
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e %b, %R.%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:185
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R.%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
#: ../js/ui/dateMenu.js:187
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:193
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l.%M.%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
#: ../js/ui/dateMenu.js:195
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e %b, %l.%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:198
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l.%M.%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
#: ../js/ui/dateMenu.js:200
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l.%M %p"
|
||||
|
||||
#. 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").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:210
|
||||
#: ../js/ui/dateMenu.js:211
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%a %e %B, %Y"
|
||||
|
||||
@ -689,7 +689,7 @@ msgstr "Fjern demping"
|
||||
msgid "Mute"
|
||||
msgstr "Demp"
|
||||
|
||||
#: ../js/ui/messageTray.js:2444
|
||||
#: ../js/ui/messageTray.js:2446
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformasjon"
|
||||
|
||||
@ -792,17 +792,17 @@ msgstr "Programmer"
|
||||
msgid "Dash"
|
||||
msgstr "Favoritter"
|
||||
|
||||
#: ../js/ui/panel.js:564
|
||||
#: ../js/ui/panel.js:572
|
||||
msgid "Quit"
|
||||
msgstr "Avslutt"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:595
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
#: ../js/ui/panel.js:982
|
||||
#: ../js/ui/panel.js:990
|
||||
msgid "Top Bar"
|
||||
msgstr "Topp-panel"
|
||||
|
||||
@ -819,7 +819,7 @@ msgstr "Prøv igjen"
|
||||
msgid "Connect to..."
|
||||
msgstr "Koble til …"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:364
|
||||
#: ../js/ui/placeDisplay.js:367
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "STEDER & ENHETER"
|
||||
|
||||
@ -852,7 +852,7 @@ msgstr "Passord:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:719
|
||||
#: ../js/ui/popupMenu.js:720
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -888,6 +888,10 @@ msgstr "Skjul tekst"
|
||||
msgid "Wrong password, please try again"
|
||||
msgstr "Feil passord. Prøv igjen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:47
|
||||
msgid "Accessibility"
|
||||
msgstr "Tilgjengelighet"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:52
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
@ -931,10 +935,10 @@ msgstr "Høy kontrast"
|
||||
msgid "Large Text"
|
||||
msgstr "Stor tekst"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:35 ../js/ui/status/bluetooth.js:258
|
||||
#: ../js/ui/status/bluetooth.js:341 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:436
|
||||
#: ../js/ui/status/network.js:892
|
||||
#: ../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:371 ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436 ../js/ui/status/network.js:893
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -955,7 +959,7 @@ msgid "Bluetooth Settings"
|
||||
msgstr "Innstillinger for Bluetooth"
|
||||
|
||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||
#: ../js/ui/status/bluetooth.js:107 ../js/ui/status/network.js:255
|
||||
#: ../js/ui/status/bluetooth.js:107 ../js/ui/status/network.js:256
|
||||
msgid "hardware disabled"
|
||||
msgstr "maskinvare slått av"
|
||||
|
||||
@ -963,11 +967,11 @@ msgstr "maskinvare slått av"
|
||||
msgid "Connection"
|
||||
msgstr "Tilkobling"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:490
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:491
|
||||
msgid "disconnecting..."
|
||||
msgstr "kobler fra …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:496
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:497
|
||||
msgid "connecting..."
|
||||
msgstr "kobler til …"
|
||||
|
||||
@ -1018,7 +1022,7 @@ msgstr "Alltid gi tilgang"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Gi tilgang kun denne ene gangen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1168
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1098
|
||||
msgid "Reject"
|
||||
msgstr "Avvis"
|
||||
|
||||
@ -1071,118 +1075,126 @@ msgid "<unknown>"
|
||||
msgstr "<ukjent>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:277
|
||||
#: ../js/ui/status/network.js:278
|
||||
msgid "disabled"
|
||||
msgstr "slått av"
|
||||
|
||||
#. 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)
|
||||
#: ../js/ui/status/network.js:488
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unmanaged"
|
||||
msgstr "ikke håndtert"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:499
|
||||
#: ../js/ui/status/network.js:500
|
||||
msgid "authentication required"
|
||||
msgstr "autentisering kreves"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:509
|
||||
#: ../js/ui/status/network.js:510
|
||||
msgid "firmware missing"
|
||||
msgstr "fastvare mangler"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:516
|
||||
#: ../js/ui/status/network.js:517
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel koblet fra"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:522
|
||||
msgid "unavailable"
|
||||
msgstr "ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/status/network.js:523
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "connection failed"
|
||||
msgstr "tilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:584 ../js/ui/status/network.js:1504
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
||||
msgid "More..."
|
||||
msgstr "Mer …"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:620 ../js/ui/status/network.js:1439
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
||||
msgid "Connected (private)"
|
||||
msgstr "Tilkoblet (privat)"
|
||||
|
||||
#: ../js/ui/status/network.js:695
|
||||
#: ../js/ui/status/network.js:696
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatisk Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:756
|
||||
#: ../js/ui/status/network.js:757
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatisk bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:759
|
||||
#: ../js/ui/status/network.js:760
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatisk oppringt"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1451
|
||||
#: ../js/ui/status/network.js:879 ../js/ui/status/network.js:1452
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatisk %s"
|
||||
|
||||
#: ../js/ui/status/network.js:880
|
||||
#: ../js/ui/status/network.js:881
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatisk Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1453
|
||||
#: ../js/ui/status/network.js:1454
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatisk trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1547
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Network"
|
||||
msgstr "Nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
msgid "Enable networking"
|
||||
msgstr "Slå på nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1559
|
||||
#: ../js/ui/status/network.js:1560
|
||||
msgid "Wired"
|
||||
msgstr "Kablet"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1571
|
||||
msgid "Wireless"
|
||||
msgstr "Trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1580
|
||||
#: ../js/ui/status/network.js:1581
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilt bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:1590
|
||||
#: ../js/ui/status/network.js:1591
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-tilkoblinger"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1602
|
||||
msgid "Network Settings"
|
||||
msgstr "Innstillinger for nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1738
|
||||
#: ../js/ui/status/network.js:1739
|
||||
msgid "Connection failed"
|
||||
msgstr "Tilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#: ../js/ui/status/network.js:1740
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivering av nettverkstilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:1989
|
||||
#: ../js/ui/status/network.js:1993
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Nettverk er slått av"
|
||||
|
||||
#: ../js/ui/status/network.js:2113
|
||||
#: ../js/ui/status/network.js:2117
|
||||
msgid "Network Manager"
|
||||
msgstr "Nettverkshåndtering"
|
||||
|
||||
#: ../js/ui/status/power.js:60
|
||||
msgid "Battery"
|
||||
msgstr "Batteri"
|
||||
|
||||
#: ../js/ui/status/power.js:77
|
||||
msgid "Power Settings"
|
||||
msgstr "Innstillinger for strøm"
|
||||
@ -1271,7 +1283,7 @@ msgstr "Nettbrett"
|
||||
msgid "Computer"
|
||||
msgstr "Datamaskin"
|
||||
|
||||
#: ../js/ui/status/volume.js:38
|
||||
#: ../js/ui/status/volume.js:25 ../js/ui/status/volume.js:38
|
||||
msgid "Volume"
|
||||
msgstr "Volum"
|
||||
|
||||
@ -1279,47 +1291,46 @@ msgstr "Volum"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:267
|
||||
#: ../js/ui/telepathyClient.js:225
|
||||
msgid "Invitation"
|
||||
msgstr "Invitasjon"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#: ../js/ui/telepathyClient.js:278
|
||||
msgid "Call"
|
||||
msgstr "Ring"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:365
|
||||
#: ../js/ui/telepathyClient.js:294
|
||||
msgid "File Transfer"
|
||||
msgstr "Filoverføring"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:446
|
||||
#: ../js/ui/telepathyClient.js:376
|
||||
msgid "Subscription request"
|
||||
msgstr "Forespørsel om abbonering"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:412
|
||||
msgid "Connection error"
|
||||
msgstr "Feil ved tilkobling"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:740
|
||||
#: ../js/ui/telepathyClient.js:670
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s er tilkoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:745
|
||||
#: ../js/ui/telepathyClient.js:674
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s er frakoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:748
|
||||
#: ../js/ui/telepathyClient.js:678
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "«%s» er borte."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:751
|
||||
#: ../js/ui/telepathyClient.js:681
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s er opptatt."
|
||||
@ -1327,35 +1338,35 @@ msgstr "%s er opptatt."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:964
|
||||
#: ../js/ui/telepathyClient.js:894
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <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",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:970
|
||||
#: ../js/ui/telepathyClient.js:900
|
||||
#, no-c-format
|
||||
msgid "Sent on <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",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:975
|
||||
#: ../js/ui/telepathyClient.js:905
|
||||
#, no-c-format
|
||||
msgid "Sent on <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
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1017
|
||||
#: ../js/ui/telepathyClient.js:947
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s er nå kjent som %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1119
|
||||
#: ../js/ui/telepathyClient.js:1049
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Invitasjon til %s"
|
||||
@ -1363,35 +1374,35 @@ msgstr "Invitasjon til %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1127
|
||||
#: ../js/ui/telepathyClient.js:1057
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s inviterer deg til å bli med i %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1129 ../js/ui/telepathyClient.js:1209
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
#: ../js/ui/telepathyClient.js:1059 ../js/ui/telepathyClient.js:1138
|
||||
#: ../js/ui/telepathyClient.js:1236
|
||||
msgid "Decline"
|
||||
msgstr "Avslå"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1130 ../js/ui/telepathyClient.js:1210
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
#: ../js/ui/telepathyClient.js:1060 ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1237
|
||||
msgid "Accept"
|
||||
msgstr "Godta"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1160
|
||||
#: ../js/ui/telepathyClient.js:1090
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videosamtale fra %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1163
|
||||
#: ../js/ui/telepathyClient.js:1093
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Samtale fra %s"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1170
|
||||
#: ../js/ui/telepathyClient.js:1100
|
||||
msgid "Answer"
|
||||
msgstr "Svar"
|
||||
|
||||
@ -1400,110 +1411,110 @@ msgstr "Svar"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1203
|
||||
#: ../js/ui/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s sender deg %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1272
|
||||
#: ../js/ui/telepathyClient.js:1201
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1365
|
||||
#: ../js/ui/telepathyClient.js:1294
|
||||
msgid "Network error"
|
||||
msgstr "Nettverksfeil"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1367
|
||||
#: ../js/ui/telepathyClient.js:1296
|
||||
msgid "Authentication failed"
|
||||
msgstr "Autentisering feilet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1369
|
||||
#: ../js/ui/telepathyClient.js:1298
|
||||
msgid "Encryption error"
|
||||
msgstr "Feil ved kryptering"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1371
|
||||
#: ../js/ui/telepathyClient.js:1300
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Sertifikat ikke oppgitt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1373
|
||||
#: ../js/ui/telepathyClient.js:1302
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Stoler ikke på sertifikatet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1375
|
||||
#: ../js/ui/telepathyClient.js:1304
|
||||
msgid "Certificate expired"
|
||||
msgstr "Sertifikatet er utløpt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1377
|
||||
#: ../js/ui/telepathyClient.js:1306
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Sertifikatet er ikke aktivert"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1379
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Feil vertsnavn for sertifikat"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1381
|
||||
#: ../js/ui/telepathyClient.js:1310
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Feil fingeravtrykk for sertifikat"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1383
|
||||
#: ../js/ui/telepathyClient.js:1312
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Sertifikatet er selvsignert"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1385
|
||||
#: ../js/ui/telepathyClient.js:1314
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Status er satt til frakoblet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1387
|
||||
#: ../js/ui/telepathyClient.js:1316
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Kryptering er ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1389
|
||||
#: ../js/ui/telepathyClient.js:1318
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Sertifikatet er ugyldig"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1391
|
||||
#: ../js/ui/telepathyClient.js:1320
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Tilkobling ble nektet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1393
|
||||
#: ../js/ui/telepathyClient.js:1322
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Tilkobling kan ikke etableres"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
#: ../js/ui/telepathyClient.js:1324
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Tilkobling tapt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
#: ../js/ui/telepathyClient.js:1326
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Denne ressursen er allerede koblet til tjeneren"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#: ../js/ui/telepathyClient.js:1328
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
#: ../js/ui/telepathyClient.js:1330
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Kontoen eksisterer allerede på tjeneren"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1334
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Sertifikatet er tilbaketrukket"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
#: ../js/ui/telepathyClient.js:1336
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
#: ../js/ui/telepathyClient.js:1338
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1513,20 +1524,20 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#: ../js/ui/telepathyClient.js:1348
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Tilkobling til %s feilet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
#: ../js/ui/telepathyClient.js:1357
|
||||
msgid "Reconnect"
|
||||
msgstr "Koble til på nytt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
#: ../js/ui/telepathyClient.js:1358
|
||||
msgid "Edit account"
|
||||
msgstr "Rediger konto"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1475
|
||||
#: ../js/ui/telepathyClient.js:1404
|
||||
msgid "Unknown reason"
|
||||
msgstr "Ukjent årsak"
|
||||
|
||||
@ -1542,39 +1553,39 @@ msgstr "Ledig"
|
||||
msgid "Unavailable"
|
||||
msgstr "Ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/userMenu.js:576 ../js/ui/userMenu.js:580 ../js/ui/userMenu.js:650
|
||||
#: ../js/ui/userMenu.js:578 ../js/ui/userMenu.js:582 ../js/ui/userMenu.js:652
|
||||
msgid "Power Off..."
|
||||
msgstr "Slå av …"
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
#: ../js/ui/userMenu.js:614
|
||||
msgid "Notifications"
|
||||
msgstr "Varslinger"
|
||||
|
||||
#: ../js/ui/userMenu.js:620
|
||||
#: ../js/ui/userMenu.js:622
|
||||
msgid "Online Accounts"
|
||||
msgstr "Kontoer på nettet"
|
||||
|
||||
#: ../js/ui/userMenu.js:624
|
||||
#: ../js/ui/userMenu.js:626
|
||||
msgid "System Settings"
|
||||
msgstr "Systeminnstillinger"
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:633
|
||||
msgid "Lock Screen"
|
||||
msgstr "Lås skjerm"
|
||||
|
||||
#: ../js/ui/userMenu.js:636
|
||||
#: ../js/ui/userMenu.js:638
|
||||
msgid "Switch User"
|
||||
msgstr "Bytt bruker"
|
||||
|
||||
#: ../js/ui/userMenu.js:641
|
||||
#: ../js/ui/userMenu.js:643
|
||||
msgid "Log Out..."
|
||||
msgstr "Logg ut …"
|
||||
|
||||
#: ../js/ui/userMenu.js:669
|
||||
#: ../js/ui/userMenu.js:671
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Din pratestatus vil bli satt til opptatt"
|
||||
|
||||
#: ../js/ui/userMenu.js:670
|
||||
#: ../js/ui/userMenu.js:672
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1648,7 +1659,7 @@ msgstr "Skriv ut versjon"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Modus som brukes av GDM for innloggingsskjermen"
|
||||
|
||||
#: ../src/shell-app.c:639
|
||||
#: ../src/shell-app.c:617
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Klarte ikke å starte «%s»"
|
||||
@ -1661,7 +1672,7 @@ msgstr "Storbritannia"
|
||||
msgid "Default"
|
||||
msgstr "Forvalg"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
#: ../src/shell-polkit-authentication-agent.c:332
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Autentiseringsdialogen ble lukket av brukeren"
|
||||
|
||||
|
222
po/sl.po
222
po/sl.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-01-15 01:35+0000\n"
|
||||
"PO-Revision-Date: 2012-01-15 13:44+0100\n"
|
||||
"POT-Creation-Date: 2012-02-02 13:31+0000\n"
|
||||
"PO-Revision-Date: 2012-02-02 20:58+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"Language: Slovenian\n"
|
||||
@ -75,8 +75,8 @@ msgstr "Seznam določil ID namiznih datotek priljubljenih programov"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
|
||||
msgstr "Določa cevovod programa GStreamer, ki se uporablja za kodiranje posnetkov. Ta sledi skladnji, ki se uporablja za gst-launch. Cevovod mora imeti nepovezano korito, kamor se posnetek snema. Običajno je za to namenjen nepovezan izvorni pomnilnik, katerega odvod se zapiše v odvodno datoteko. Vendar pa lahko cevovod ta korak naredi v lastni odvod - možnost se lahko uporabi pri pošiljanju odvoda na strežnik icecast preko shout2send ali podobno. Nedoločena ali prazna možnost se odrazi kot privzeti cevovod. Trenutno je to 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' in omogoča snemanje v zapis WEBM z uporabo kodeka VP8. %T se uporablja kot ročnik za ugibanje optimalnega števila niti na sistemu."
|
||||
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently '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 thread count on the system."
|
||||
msgstr "Določa cevovod programa GStreamer, ki se uporablja za kodiranje posnetkov. Ta sledi skladnji, ki se uporablja za gst-launch. Cevovod mora imeti nepovezano korito, kamor se posnetek snema. Običajno je za to namenjen nepovezan izvorni pomnilnik, katerega odvod se zapiše v odvodno datoteko. Vendar pa lahko cevovod ta korak naredi v lastni odvod - možnost se lahko uporabi pri pošiljanju odvoda na strežnik icecast preko shout2send ali podobno. Nedoločena ali prazna možnost se odrazi kot privzeti cevovod. Trenutno je to 'videorate ! vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux' in omogoča snemanje v zapis WEBM z uporabo kodeka VP8. Vrednost %T se uporablja kot ročnik za ugibanje optimalnega števila niti na sistemu."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -171,9 +171,9 @@ msgid "Login Window"
|
||||
msgstr "Prijavno okno"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:113
|
||||
#: ../js/ui/userMenu.js:579
|
||||
#: ../js/ui/userMenu.js:581
|
||||
#: ../js/ui/userMenu.js:650
|
||||
#: ../js/ui/userMenu.js:583
|
||||
#: ../js/ui/userMenu.js:652
|
||||
msgid "Suspend"
|
||||
msgstr "Zaustavi"
|
||||
|
||||
@ -397,7 +397,7 @@ msgstr "Naslednji teden"
|
||||
#: ../js/ui/contactDisplay.js:63
|
||||
#: ../js/ui/notificationDaemon.js:486
|
||||
#: ../js/ui/status/power.js:215
|
||||
#: ../src/shell-app.c:394
|
||||
#: ../src/shell-app.c:372
|
||||
msgid "Unknown"
|
||||
msgstr "Neznano"
|
||||
|
||||
@ -420,7 +420,7 @@ msgstr "Zaposleno"
|
||||
msgid "Offline"
|
||||
msgstr "Nepovezano"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:141
|
||||
#: ../js/ui/contactDisplay.js:148
|
||||
msgid "CONTACTS"
|
||||
msgstr "Stiki"
|
||||
|
||||
@ -429,58 +429,58 @@ msgstr "Stiki"
|
||||
msgid "Remove"
|
||||
msgstr "Odstrani"
|
||||
|
||||
#: ../js/ui/dateMenu.js:96
|
||||
#: ../js/ui/dateMenu.js:97
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "Nastavitve časa in datuma"
|
||||
|
||||
#: ../js/ui/dateMenu.js:122
|
||||
#: ../js/ui/dateMenu.js:123
|
||||
msgid "Open Calendar"
|
||||
msgstr "Odpri koledar"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:180
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a. %e. %b., %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:181
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a, %e. %b., %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:185
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a. %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:186
|
||||
#: ../js/ui/dateMenu.js:187
|
||||
msgid "%a %R"
|
||||
msgstr "%a. %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:193
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
#: ../js/ui/dateMenu.js:195
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %b %e, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:198
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:199
|
||||
#: ../js/ui/dateMenu.js:200
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:210
|
||||
#: ../js/ui/dateMenu.js:211
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%a, %e. %b., %R"
|
||||
|
||||
@ -665,7 +665,7 @@ msgstr "Povrni glasnost"
|
||||
msgid "Mute"
|
||||
msgstr "Utišaj"
|
||||
|
||||
#: ../js/ui/messageTray.js:2444
|
||||
#: ../js/ui/messageTray.js:2446
|
||||
msgid "System Information"
|
||||
msgstr "Podrobnosti sistema"
|
||||
|
||||
@ -767,17 +767,17 @@ msgstr "Programi"
|
||||
msgid "Dash"
|
||||
msgstr "Armaturna plošča"
|
||||
|
||||
#: ../js/ui/panel.js:564
|
||||
#: ../js/ui/panel.js:572
|
||||
msgid "Quit"
|
||||
msgstr "Končaj"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:595
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "Activities"
|
||||
msgstr "Dejavnosti"
|
||||
|
||||
#: ../js/ui/panel.js:982
|
||||
#: ../js/ui/panel.js:990
|
||||
msgid "Top Bar"
|
||||
msgstr "Vrhnja vrstica"
|
||||
|
||||
@ -827,7 +827,7 @@ msgstr "Geslo:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:719
|
||||
#: ../js/ui/popupMenu.js:720
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -859,10 +859,14 @@ msgstr "Pokaži besedilo"
|
||||
msgid "Hide Text"
|
||||
msgstr "Skrij besedilo"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:269
|
||||
#: ../js/ui/shellMountOperation.js:271
|
||||
msgid "Wrong password, please try again"
|
||||
msgstr "Napačno geslo; poskusite znova."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:47
|
||||
msgid "Accessibility"
|
||||
msgstr "Dostopnost"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:52
|
||||
msgid "Zoom"
|
||||
msgstr "Približanje"
|
||||
@ -906,13 +910,14 @@ msgstr "Visok kontrast"
|
||||
msgid "Large Text"
|
||||
msgstr "Veliko besedilo"
|
||||
|
||||
#: ../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:371
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436
|
||||
#: ../js/ui/status/network.js:892
|
||||
#: ../js/ui/status/network.js:893
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -934,7 +939,7 @@ msgstr "Nastavitve za Bluetooth"
|
||||
|
||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||
#: ../js/ui/status/bluetooth.js:107
|
||||
#: ../js/ui/status/network.js:255
|
||||
#: ../js/ui/status/network.js:256
|
||||
msgid "hardware disabled"
|
||||
msgstr "strojno onemogočen"
|
||||
|
||||
@ -943,12 +948,12 @@ msgid "Connection"
|
||||
msgstr "Povezava"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214
|
||||
#: ../js/ui/status/network.js:490
|
||||
#: ../js/ui/status/network.js:491
|
||||
msgid "disconnecting..."
|
||||
msgstr "prekinjanje povezave ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227
|
||||
#: ../js/ui/status/network.js:496
|
||||
#: ../js/ui/status/network.js:497
|
||||
msgid "connecting..."
|
||||
msgstr "povezovanje ..."
|
||||
|
||||
@ -1055,122 +1060,130 @@ msgid "<unknown>"
|
||||
msgstr "<neznano>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:277
|
||||
#: ../js/ui/status/network.js:278
|
||||
msgid "disabled"
|
||||
msgstr "onemogočeno"
|
||||
|
||||
#. 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)
|
||||
#: ../js/ui/status/network.js:488
|
||||
#: ../js/ui/status/network.js:489
|
||||
msgid "unmanaged"
|
||||
msgstr "neupravljano"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:499
|
||||
#: ../js/ui/status/network.js:500
|
||||
msgid "authentication required"
|
||||
msgstr "zahtevana je overitev"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:509
|
||||
#: ../js/ui/status/network.js:510
|
||||
msgid "firmware missing"
|
||||
msgstr "manjka strojna programska oprema"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:516
|
||||
#: ../js/ui/status/network.js:517
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel ni priklopljen"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:522
|
||||
msgid "unavailable"
|
||||
msgstr "ni na voljo"
|
||||
|
||||
#: ../js/ui/status/network.js:523
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "connection failed"
|
||||
msgstr "povezovanje je spodletelo"
|
||||
|
||||
#: ../js/ui/status/network.js:584
|
||||
#: ../js/ui/status/network.js:1504
|
||||
#: ../js/ui/status/network.js:585
|
||||
#: ../js/ui/status/network.js:1505
|
||||
msgid "More..."
|
||||
msgstr "Več ..."
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:620
|
||||
#: ../js/ui/status/network.js:1439
|
||||
#: ../js/ui/status/network.js:621
|
||||
#: ../js/ui/status/network.js:1440
|
||||
msgid "Connected (private)"
|
||||
msgstr "Povezano (zasebna povezava)"
|
||||
|
||||
#: ../js/ui/status/network.js:695
|
||||
#: ../js/ui/status/network.js:696
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Samodejni eternet"
|
||||
|
||||
#: ../js/ui/status/network.js:756
|
||||
#: ../js/ui/status/network.js:757
|
||||
msgid "Auto broadband"
|
||||
msgstr "Samodejni širokopasovni dostop"
|
||||
|
||||
#: ../js/ui/status/network.js:759
|
||||
#: ../js/ui/status/network.js:760
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Samodejni klicni dostop"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:878
|
||||
#: ../js/ui/status/network.js:1451
|
||||
#: ../js/ui/status/network.js:879
|
||||
#: ../js/ui/status/network.js:1452
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Samodejna povezava z %s"
|
||||
|
||||
#: ../js/ui/status/network.js:880
|
||||
#: ../js/ui/status/network.js:881
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Samodejna povezava z Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1453
|
||||
#: ../js/ui/status/network.js:1454
|
||||
msgid "Auto wireless"
|
||||
msgstr "Samodejni brezžični dostop"
|
||||
|
||||
#: ../js/ui/status/network.js:1547
|
||||
#: ../js/ui/status/network.js:1541
|
||||
msgid "Network"
|
||||
msgstr "Omrežje"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
msgid "Enable networking"
|
||||
msgstr "Omogoči omrežje"
|
||||
|
||||
#: ../js/ui/status/network.js:1559
|
||||
#: ../js/ui/status/network.js:1560
|
||||
msgid "Wired"
|
||||
msgstr "Žično"
|
||||
|
||||
#: ../js/ui/status/network.js:1570
|
||||
#: ../js/ui/status/network.js:1571
|
||||
msgid "Wireless"
|
||||
msgstr "Brezžično"
|
||||
|
||||
#: ../js/ui/status/network.js:1580
|
||||
#: ../js/ui/status/network.js:1581
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilni širokopasovni dostop"
|
||||
|
||||
#: ../js/ui/status/network.js:1590
|
||||
#: ../js/ui/status/network.js:1591
|
||||
msgid "VPN Connections"
|
||||
msgstr "Povezave VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1601
|
||||
#: ../js/ui/status/network.js:1602
|
||||
msgid "Network Settings"
|
||||
msgstr "Omrežne nastavitve"
|
||||
|
||||
#: ../js/ui/status/network.js:1738
|
||||
#: ../js/ui/status/network.js:1739
|
||||
msgid "Connection failed"
|
||||
msgstr "Povezava je spodletela"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#: ../js/ui/status/network.js:1740
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Omogočanje omrežne povezave je spodletelo."
|
||||
|
||||
#: ../js/ui/status/network.js:1989
|
||||
#: ../js/ui/status/network.js:1993
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Omrežje je onemogočeno"
|
||||
|
||||
#: ../js/ui/status/network.js:2113
|
||||
#: ../js/ui/status/network.js:2117
|
||||
msgid "Network Manager"
|
||||
msgstr "Upravljalnik omrežij"
|
||||
|
||||
#: ../js/ui/status/power.js:77
|
||||
#: ../js/ui/status/power.js:59
|
||||
msgid "Battery"
|
||||
msgstr "Baterija"
|
||||
|
||||
#: ../js/ui/status/power.js:76
|
||||
msgid "Power Settings"
|
||||
msgstr "Upravljanje napajanja"
|
||||
|
||||
@ -1267,6 +1280,7 @@ msgstr "Tablični računalnik"
|
||||
msgid "Computer"
|
||||
msgstr "Računalnik"
|
||||
|
||||
#: ../js/ui/status/volume.js:25
|
||||
#: ../js/ui/status/volume.js:38
|
||||
msgid "Volume"
|
||||
msgstr "Glasnost"
|
||||
@ -1364,14 +1378,14 @@ msgid "%s is inviting you to join %s"
|
||||
msgstr "%s vas vabi, da se pridružite v %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1059
|
||||
#: ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1237
|
||||
#: ../js/ui/telepathyClient.js:1138
|
||||
#: ../js/ui/telepathyClient.js:1236
|
||||
msgid "Decline"
|
||||
msgstr "Zavrni"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1060
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1238
|
||||
#: ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1237
|
||||
msgid "Accept"
|
||||
msgstr "Sprejmi"
|
||||
|
||||
@ -1397,125 +1411,125 @@ msgstr "Odgovori"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1133
|
||||
#: ../js/ui/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s pošilja %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1202
|
||||
#: ../js/ui/telepathyClient.js:1201
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s želi dovoljenje za pogled dosegljivosti"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1295
|
||||
#: ../js/ui/telepathyClient.js:1294
|
||||
msgid "Network error"
|
||||
msgstr "Napaka omrežja"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1296
|
||||
msgid "Authentication failed"
|
||||
msgstr "Overitev je spodletela"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1299
|
||||
#: ../js/ui/telepathyClient.js:1298
|
||||
msgid "Encryption error"
|
||||
msgstr "Napaka šifriranja"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1301
|
||||
#: ../js/ui/telepathyClient.js:1300
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Potrdilo ni na voljo"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1303
|
||||
#: ../js/ui/telepathyClient.js:1302
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Potrdilo ni zaupljivo"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1305
|
||||
#: ../js/ui/telepathyClient.js:1304
|
||||
msgid "Certificate expired"
|
||||
msgstr "Potrdilo je preteklo"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
#: ../js/ui/telepathyClient.js:1306
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Potrdilo ni potrjeno"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1309
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Neustrezno ime gostitelja potrdila"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1311
|
||||
#: ../js/ui/telepathyClient.js:1310
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Neustrezen prstni odtis potrdila"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1313
|
||||
#: ../js/ui/telepathyClient.js:1312
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Potrdilo je samo-podpisano"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1315
|
||||
#: ../js/ui/telepathyClient.js:1314
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Stanje je nastavljeno na brez povezave"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
#: ../js/ui/telepathyClient.js:1316
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Šifriranje ni na voljo."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1319
|
||||
#: ../js/ui/telepathyClient.js:1318
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Potrdilo je neveljavno."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1321
|
||||
#: ../js/ui/telepathyClient.js:1320
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Povezava je zavrnjena."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1323
|
||||
#: ../js/ui/telepathyClient.js:1322
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Povezave ni mogoče vzpostaviti."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1325
|
||||
#: ../js/ui/telepathyClient.js:1324
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Povezava je prekinjena."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1327
|
||||
#: ../js/ui/telepathyClient.js:1326
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Vir je s strežnikom že povezan"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1329
|
||||
#: ../js/ui/telepathyClient.js:1328
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Povezava je zamenjana z novo povezavo, ki uporablja isti vir."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1331
|
||||
#: ../js/ui/telepathyClient.js:1330
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Račun na strežniku že obstaja"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1332
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Strežnik je trenutno preveč zaposlen za upravljanje s povezavo."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1335
|
||||
#: ../js/ui/telepathyClient.js:1334
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Potrdilo je preklicano"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1337
|
||||
#: ../js/ui/telepathyClient.js:1336
|
||||
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "Potrdilo ne uporablja varnega algoritma ali pa uporablja šibko šifriranje."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1339
|
||||
#: ../js/ui/telepathyClient.js:1338
|
||||
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
|
||||
msgstr "Dolžina potrdila strežnika ali pa globina verige potrdila presega omejitev, ki je določena s šifrirno knjižnico."
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1349
|
||||
#: ../js/ui/telepathyClient.js:1348
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Povezava z %s je spodletela"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1358
|
||||
#: ../js/ui/telepathyClient.js:1357
|
||||
msgid "Reconnect"
|
||||
msgstr "Ponovno se poveži"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1359
|
||||
#: ../js/ui/telepathyClient.js:1358
|
||||
msgid "Edit account"
|
||||
msgstr "Uredi račun"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
#: ../js/ui/telepathyClient.js:1404
|
||||
msgid "Unknown reason"
|
||||
msgstr "Neznan vzrok"
|
||||
|
||||
@ -1531,41 +1545,41 @@ msgstr "Nedejavno"
|
||||
msgid "Unavailable"
|
||||
msgstr "Nedostopno"
|
||||
|
||||
#: ../js/ui/userMenu.js:577
|
||||
#: ../js/ui/userMenu.js:581
|
||||
#: ../js/ui/userMenu.js:651
|
||||
#: ../js/ui/userMenu.js:579
|
||||
#: ../js/ui/userMenu.js:583
|
||||
#: ../js/ui/userMenu.js:653
|
||||
msgid "Power Off..."
|
||||
msgstr "Izklop ..."
|
||||
|
||||
#: ../js/ui/userMenu.js:613
|
||||
#: ../js/ui/userMenu.js:615
|
||||
msgid "Notifications"
|
||||
msgstr "Obvestila"
|
||||
|
||||
#: ../js/ui/userMenu.js:621
|
||||
#: ../js/ui/userMenu.js:623
|
||||
msgid "Online Accounts"
|
||||
msgstr "Spletni računi"
|
||||
|
||||
#: ../js/ui/userMenu.js:625
|
||||
#: ../js/ui/userMenu.js:627
|
||||
msgid "System Settings"
|
||||
msgstr "Sistemske nastavitve"
|
||||
|
||||
#: ../js/ui/userMenu.js:632
|
||||
#: ../js/ui/userMenu.js:634
|
||||
msgid "Lock Screen"
|
||||
msgstr "Zakleni zaslon"
|
||||
|
||||
#: ../js/ui/userMenu.js:637
|
||||
#: ../js/ui/userMenu.js:639
|
||||
msgid "Switch User"
|
||||
msgstr "Preklopi uporabnika"
|
||||
|
||||
#: ../js/ui/userMenu.js:642
|
||||
#: ../js/ui/userMenu.js:644
|
||||
msgid "Log Out..."
|
||||
msgstr "Odjava ..."
|
||||
|
||||
#: ../js/ui/userMenu.js:670
|
||||
#: ../js/ui/userMenu.js:672
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
|
||||
|
||||
#: ../js/ui/userMenu.js:671
|
||||
#: ../js/ui/userMenu.js:673
|
||||
msgid "Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."
|
||||
msgstr "Obveščanje je zdaj onemogočeno, vključno s sporočili klepeta. Vaše stanje povezanosti se je prilagodilo, da bodo drugi vedeli, da njihovih sporočil morda ne boste opazili."
|
||||
|
||||
@ -1639,7 +1653,7 @@ msgstr "Izpiši različico"
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Način uporabljen v GDM za prijavni naslov"
|
||||
|
||||
#: ../src/shell-app.c:639
|
||||
#: ../src/shell-app.c:617
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Zaganjanje '%s' je spodletelo"
|
||||
@ -1652,7 +1666,7 @@ msgstr "Velika Britanija"
|
||||
msgid "Default"
|
||||
msgstr "Privzeto"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
#: ../src/shell-polkit-authentication-agent.c:332
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Uporabnik je zavrnil pogovorno okno overitve"
|
||||
|
||||
|
688
po/zh_HK.po
688
po/zh_HK.po
File diff suppressed because it is too large
Load Diff
691
po/zh_TW.po
691
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -11,39 +11,16 @@ st_cflags = \
|
||||
|
||||
st_built_sources = \
|
||||
st-enum-types.h \
|
||||
st-enum-types.c \
|
||||
st-marshal.h \
|
||||
st-marshal.c
|
||||
st-enum-types.c
|
||||
|
||||
BUILT_SOURCES += $(st_built_sources)
|
||||
|
||||
EXTRA_DIST += \
|
||||
st/test-theme.css \
|
||||
st/st-marshal.list \
|
||||
st/st-enum-types.h.in \
|
||||
st/st-enum-types.c.in
|
||||
|
||||
CLEANFILES += stamp-st-marshal.h stamp-st-enum-types.h
|
||||
|
||||
st-marshal.h: stamp-st-marshal.h
|
||||
@true
|
||||
stamp-st-marshal.h: Makefile st/st-marshal.list
|
||||
$(AM_V_GEN) $(GLIB_GENMARSHAL) \
|
||||
--prefix=_st_marshal \
|
||||
--header \
|
||||
$(srcdir)/st/st-marshal.list > $@.tmp && \
|
||||
(cmp -s $@.tmp st-marshal.h || cp -f $@.tmp st-marshal.h) && \
|
||||
rm -f $@.tmp && \
|
||||
echo timestamp > $(@F)
|
||||
|
||||
st-marshal.c: Makefile st/st-marshal.list
|
||||
$(AM_V_GEN) (echo "#include \"st-marshal.h\"" ; \
|
||||
$(GLIB_GENMARSHAL) \
|
||||
--prefix=_st_marshal \
|
||||
--body \
|
||||
$(srcdir)/st/st-marshal.list ) > $@.tmp && \
|
||||
cp -f $@.tmp st-marshal.c && \
|
||||
rm -f $@.tmp
|
||||
CLEANFILES += stamp-st-enum-types.h
|
||||
|
||||
st-enum-types.h: stamp-st-enum-types.h Makefile
|
||||
@true
|
||||
|
@ -5,14 +5,8 @@ tray_cflags = \
|
||||
$(TRAY_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
tray_built_sources = \
|
||||
na-marshal.h \
|
||||
na-marshal.c
|
||||
|
||||
BUILT_SOURCES += $(tray_built_sources)
|
||||
|
||||
TRAY_STAMP_FILES = stamp-na-marshal.h
|
||||
|
||||
# please, keep this sorted alphabetically
|
||||
tray_source = \
|
||||
tray/na-tray-child.c \
|
||||
@ -21,26 +15,6 @@ tray_source = \
|
||||
tray/na-tray-manager.h \
|
||||
$(NULL)
|
||||
|
||||
na-marshal.h: stamp-na-marshal.h
|
||||
@true
|
||||
stamp-na-marshal.h: Makefile tray/na-marshal.list
|
||||
$(AM_V_GEN) $(GLIB_GENMARSHAL) \
|
||||
--prefix=_na_marshal \
|
||||
--header \
|
||||
$(srcdir)/tray/na-marshal.list > xgen-tmh && \
|
||||
(cmp -s xgen-tmh na-marshal.h || cp -f xgen-tmh na-marshal.h) && \
|
||||
rm -f xgen-tmh && \
|
||||
echo timestamp > $(@F)
|
||||
|
||||
na-marshal.c: Makefile tray/na-marshal.list
|
||||
$(AM_V_GEN) (echo "#include \"na-marshal.h\"" ; \
|
||||
$(GLIB_GENMARSHAL) \
|
||||
--prefix=_na_marshal \
|
||||
--body \
|
||||
$(srcdir)/tray/na-marshal.list ) > xgen-tmc && \
|
||||
cp -f xgen-tmc na-marshal.c && \
|
||||
rm -f xgen-tmc
|
||||
|
||||
noinst_LTLIBRARIES += libtray.la
|
||||
|
||||
libtray_la_LIBADD = $(TRAY_LIBS)
|
||||
@ -52,6 +26,3 @@ libtray_la_CPPFLAGS = $(tray_cflags)
|
||||
libtray_la_LDFLAGS = $(LDADD)
|
||||
|
||||
CLEANFILES += $(TRAY_STAMP_FILES) $(BUILT_SOURCES)
|
||||
|
||||
EXTRA_DIST += \
|
||||
tray/na-marshal.list
|
||||
|
@ -27,8 +27,8 @@ CLEANFILES += $(service_DATA)
|
||||
|
||||
CLEANFILES += $(gir_DATA) $(typelib_DATA)
|
||||
|
||||
bin_SCRIPTS += gnome-shell-extension-tool
|
||||
EXTRA_DIST += gnome-shell-extension-tool.in
|
||||
bin_SCRIPTS += gnome-shell-extension-tool gnome-shell-extension-prefs
|
||||
EXTRA_DIST += gnome-shell-extension-tool.in gnome-shell-extension-prefs.in
|
||||
bin_PROGRAMS = gnome-shell-real
|
||||
|
||||
if USE_JHBUILD_WRAPPER_SCRIPT
|
||||
@ -48,15 +48,17 @@ uninstall-hook:
|
||||
rm -f $(DESTDIR)$(bindir)/gnome-shell
|
||||
|
||||
generated_script_substitutions = \
|
||||
-e "s|@bindir[@]|$(bindir)|" \
|
||||
-e "s|@datadir[@]|$(datadir)|" \
|
||||
-e "s|@libexecdir[@]|$(libexecdir)|" \
|
||||
-e "s|@libdir[@]|$(libdir)|" \
|
||||
-e "s|@JHBUILD_TYPELIBDIR[@]|$(JHBUILD_TYPELIBDIR)|" \
|
||||
-e "s|@pkgdatadir[@]|$(pkgdatadir)|" \
|
||||
-e "s|@PYTHON[@]|$(PYTHON)|" \
|
||||
-e "s|@VERSION[@]|$(VERSION)|" \
|
||||
-e "s|@sysconfdir[@]|$(sysconfdir)|"
|
||||
-e "s|@bindir[@]|$(bindir)|g" \
|
||||
-e "s|@datadir[@]|$(datadir)|g" \
|
||||
-e "s|@libexecdir[@]|$(libexecdir)|g" \
|
||||
-e "s|@libdir[@]|$(libdir)|g" \
|
||||
-e "s|@pkglibdir[@]|$(pkglibdir)|g" \
|
||||
-e "s|@JHBUILD_TYPELIBDIR[@]|$(JHBUILD_TYPELIBDIR)|g" \
|
||||
-e "s|@pkgdatadir[@]|$(pkgdatadir)|g" \
|
||||
-e "s|@PYTHON[@]|$(PYTHON)|g" \
|
||||
-e "s|@VERSION[@]|$(VERSION)|g" \
|
||||
-e "s|@sysconfdir[@]|$(sysconfdir)|g" \
|
||||
-e "s|@GJS_CONSOLE[@]|$(GJS_CONSOLE)|g"
|
||||
|
||||
gnome-shell-jhbuild: gnome-shell-jhbuild.in gnome-shell-real Makefile
|
||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
||||
@ -66,6 +68,9 @@ gnome-shell-jhbuild: gnome-shell-jhbuild.in gnome-shell-real Makefile
|
||||
gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
|
||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
||||
|
||||
gnome-shell-extension-prefs: gnome-shell-extension-prefs.in Makefile
|
||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
||||
|
||||
CLEANFILES += gnome-shell $(bin_SCRIPTS)
|
||||
|
||||
include Makefile-st.am
|
||||
@ -86,16 +91,13 @@ gnome_shell_cflags = \
|
||||
-DJSDIR=\"$(pkgdatadir)/js\"
|
||||
|
||||
privlibdir = $(pkglibdir)
|
||||
privlib_LTLIBRARIES = libgnome-shell.la
|
||||
privlib_LTLIBRARIES = libgnome-shell.la libgnome-shell-js.la
|
||||
|
||||
shell_built_sources = \
|
||||
shell-marshal.h \
|
||||
shell-marshal.c \
|
||||
shell-enum-types.h \
|
||||
shell-enum-types.c
|
||||
|
||||
BUILT_SOURCES += $(shell_built_sources)
|
||||
EXTRA_DIST += shell-marshal.list
|
||||
|
||||
shell_public_headers_h = \
|
||||
shell-app.h \
|
||||
@ -111,6 +113,7 @@ shell_public_headers_h = \
|
||||
shell-mount-operation.h \
|
||||
shell-network-agent.h \
|
||||
shell-perf-log.h \
|
||||
shell-screen-grabber.h \
|
||||
shell-slicer.h \
|
||||
shell-stack.h \
|
||||
shell-tp-client.h \
|
||||
@ -158,6 +161,7 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-perf-log.c \
|
||||
shell-polkit-authentication-agent.h \
|
||||
shell-polkit-authentication-agent.c \
|
||||
shell-screen-grabber.c \
|
||||
shell-slicer.c \
|
||||
shell-stack.c \
|
||||
shell-tp-client.c \
|
||||
@ -183,6 +187,23 @@ EXTRA_DIST += test-gapplication.js
|
||||
|
||||
########################################
|
||||
|
||||
libgnome_shell_js_la_SOURCES = \
|
||||
shell-js.h \
|
||||
shell-js.c \
|
||||
$(NULL)
|
||||
|
||||
libgnome_shell_js_la_LIBADD = \
|
||||
$(GNOME_SHELL_JS_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
libgnome_shell_js_la_LDFLAGS = \
|
||||
-avoid-version
|
||||
|
||||
libgnome_shell_js_la_CPPFLAGS = \
|
||||
$(GNOME_SHELL_JS_CFLAGS)
|
||||
|
||||
########################################
|
||||
|
||||
shell_recorder_sources = \
|
||||
shell-recorder.c \
|
||||
shell-recorder.h
|
||||
@ -206,6 +227,8 @@ test_recorder_LDADD = $(TEST_SHELL_RECORDER_LIBS)
|
||||
|
||||
test_recorder_SOURCES = \
|
||||
$(shell_recorder_sources) $(shell_recorder_private_sources) \
|
||||
shell-screen-grabber.c \
|
||||
shell-screen-grabber.h \
|
||||
test-recorder.c
|
||||
endif BUILD_RECORDER
|
||||
|
||||
@ -230,28 +253,6 @@ run_js_test_SOURCES = \
|
||||
|
||||
########################################
|
||||
|
||||
shell-marshal.h: stamp-shell-marshal.h
|
||||
@true
|
||||
stamp-shell-marshal.h: Makefile shell-marshal.list
|
||||
$(AM_V_GEN) $(GLIB_GENMARSHAL) \
|
||||
--prefix=_shell_marshal \
|
||||
--header \
|
||||
$(srcdir)/shell-marshal.list > xgen-smh && \
|
||||
(cmp -s xgen-smh shell-marshal.h || cp -f xgen-smh shell-marshal.h) && \
|
||||
rm -f xgen-smh && \
|
||||
echo timestamp > $(@F)
|
||||
CLEANFILES += stamp-shell-marshal.h
|
||||
|
||||
shell-marshal.c: Makefile shell-marshal.list
|
||||
$(AM_V_GEN) (echo "#include \"shell-marshal.h\"" ; \
|
||||
$(GLIB_GENMARSHAL) \
|
||||
--prefix=_shell_marshal \
|
||||
--body \
|
||||
$(srcdir)/shell-marshal.list ) > xgen-smc && \
|
||||
cp -f xgen-smc shell-marshal.c && \
|
||||
rm -f xgen-smc
|
||||
|
||||
|
||||
shell-enum-types.h: stamp-shell-enum-types.h Makefile
|
||||
@true
|
||||
stamp-shell-enum-types.h: $(srcdir)/shell-enum-types.h.in $(shell_public_headers_h)
|
||||
@ -296,6 +297,13 @@ Shell_0_1_gir_SCANNERFLAGS = --include-uninstalled=$(builddir)/St-1.0.gir \
|
||||
INTROSPECTION_GIRS += Shell-0.1.gir
|
||||
CLEANFILES += Shell-0.1.gir
|
||||
|
||||
ShellJS-0.1.gir: libgnome-shell-js.la
|
||||
ShellJS_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
|
||||
ShellJS_0_1_gir_LIBS = libgnome-shell-js.la
|
||||
ShellJS_0_1_gir_FILES = $(libgnome_shell_js_la_SOURCES)
|
||||
INTROSPECTION_GIRS += ShellJS-0.1.gir
|
||||
CLEANFILES += ShellJS-0.1.gir
|
||||
|
||||
St-1.0.gir: libst-1.0.la
|
||||
St_1_0_gir_INCLUDES = Clutter-1.0 Gtk-3.0
|
||||
St_1_0_gir_CFLAGS = $(st_cflags) -DST_COMPILATION
|
||||
|
@ -150,7 +150,7 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
|
||||
appointment_sources_changed),
|
||||
NULL,
|
||||
NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL,
|
||||
G_TYPE_NONE,
|
||||
0);
|
||||
|
||||
@ -162,7 +162,7 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
|
||||
task_sources_changed),
|
||||
NULL,
|
||||
NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL,
|
||||
G_TYPE_NONE,
|
||||
0);
|
||||
}
|
||||
|
15
src/gnome-shell-extension-prefs.in
Normal file
15
src/gnome-shell-extension-prefs.in
Normal file
@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -n "$GI_TYPELIB_PATH" ]; then
|
||||
export GI_TYPELIB_PATH=@pkglibdir@
|
||||
else
|
||||
export GI_TYPELIB_PATH=@pkglibdir@:$GI_TYPELIB_PATH
|
||||
fi
|
||||
|
||||
if [ -n "$LD_LIBRARY_PATH" ] ; then
|
||||
export LD_LIBRARY_PATH=@pkglibdir@
|
||||
else
|
||||
export LD_LIBRARY_PATH=@pkglibdir@:$LD_LIBRARY_PATH
|
||||
fi
|
||||
|
||||
@GJS_CONSOLE@ -I @pkgdatadir@/js -c "const Main = imports.extensionPrefs.main; Main.main(ARGV);" "$@"
|
@ -171,8 +171,7 @@ gvc_channel_map_class_init (GvcChannelMapClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcChannelMapClass, volume_changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__BOOLEAN,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcChannelMapPrivate));
|
||||
|
@ -2137,56 +2137,49 @@ gvc_mixer_control_class_init (GvcMixerControlClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcMixerControlClass, state_changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__UINT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_UINT);
|
||||
signals [STREAM_ADDED] =
|
||||
g_signal_new ("stream-added",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcMixerControlClass, stream_added),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__UINT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_UINT);
|
||||
signals [STREAM_REMOVED] =
|
||||
g_signal_new ("stream-removed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcMixerControlClass, stream_removed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__UINT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_UINT);
|
||||
signals [CARD_ADDED] =
|
||||
g_signal_new ("card-added",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcMixerControlClass, card_added),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__UINT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_UINT);
|
||||
signals [CARD_REMOVED] =
|
||||
g_signal_new ("card-removed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcMixerControlClass, card_removed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__UINT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_UINT);
|
||||
signals [DEFAULT_SINK_CHANGED] =
|
||||
g_signal_new ("default-sink-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcMixerControlClass, default_sink_changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__UINT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_UINT);
|
||||
signals [DEFAULT_SOURCE_CHANGED] =
|
||||
g_signal_new ("default-source-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcMixerControlClass, default_source_changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__UINT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_UINT);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerControlPrivate));
|
||||
|
@ -26,6 +26,7 @@
|
||||
static const char*const vendor_prefixes[] = { "gnome-",
|
||||
"fedora-",
|
||||
"mozilla-",
|
||||
"debian-",
|
||||
NULL };
|
||||
|
||||
enum {
|
||||
@ -69,8 +70,7 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass)
|
||||
SHELL_TYPE_APP_SYSTEM,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
SHELL_TYPE_APP);
|
||||
signals[INSTALLED_CHANGED] =
|
||||
@ -78,8 +78,7 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass)
|
||||
SHELL_TYPE_APP_SYSTEM,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (ShellAppSystemClass, installed_changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate));
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include "shell-app-usage.h"
|
||||
#include "shell-window-tracker.h"
|
||||
#include "shell-global.h"
|
||||
#include "shell-marshal.h"
|
||||
|
||||
/* This file includes modified code from
|
||||
* desktop-data-engine/engine-dbus/hippo-application-monitor.c
|
||||
|
@ -75,6 +75,7 @@ struct _ShellApp
|
||||
char *name_collation_key;
|
||||
char *casefolded_description;
|
||||
char *casefolded_exec;
|
||||
char **casefolded_keywords;
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -1299,6 +1300,7 @@ shell_app_init_search_data (ShellApp *app)
|
||||
const char *name;
|
||||
const char *exec;
|
||||
const char *comment;
|
||||
const char * const *keywords;
|
||||
char *normalized_exec;
|
||||
GDesktopAppInfo *appinfo;
|
||||
|
||||
@ -1313,6 +1315,25 @@ shell_app_init_search_data (ShellApp *app)
|
||||
normalized_exec = shell_util_normalize_and_casefold (exec);
|
||||
app->casefolded_exec = trim_exec_line (normalized_exec);
|
||||
g_free (normalized_exec);
|
||||
|
||||
keywords = g_desktop_app_info_get_keywords (appinfo);
|
||||
|
||||
if (keywords)
|
||||
{
|
||||
int i;
|
||||
|
||||
app->casefolded_keywords = g_new0 (char*, g_strv_length ((char **)keywords) + 1);
|
||||
|
||||
i = 0;
|
||||
while (keywords[i])
|
||||
{
|
||||
app->casefolded_keywords[i] = shell_util_normalize_and_casefold (keywords[i]);
|
||||
++i;
|
||||
}
|
||||
app->casefolded_keywords[i] = NULL;
|
||||
}
|
||||
else
|
||||
app->casefolded_keywords = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1381,6 +1402,23 @@ _shell_app_match_search_terms (ShellApp *app,
|
||||
current_match = MATCH_SUBSTRING;
|
||||
}
|
||||
|
||||
if (app->casefolded_keywords)
|
||||
{
|
||||
int i = 0;
|
||||
while (app->casefolded_keywords[i] && current_match < MATCH_PREFIX)
|
||||
{
|
||||
p = strstr (app->casefolded_keywords[i], term);
|
||||
if (p != NULL)
|
||||
{
|
||||
if (p == app->casefolded_keywords[i])
|
||||
current_match = MATCH_PREFIX;
|
||||
else
|
||||
current_match = MATCH_SUBSTRING;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
if (current_match == MATCH_NONE)
|
||||
return current_match;
|
||||
|
||||
@ -1464,6 +1502,7 @@ shell_app_finalize (GObject *object)
|
||||
g_free (app->name_collation_key);
|
||||
g_free (app->casefolded_description);
|
||||
g_free (app->casefolded_exec);
|
||||
g_strfreev (app->casefolded_keywords);
|
||||
|
||||
G_OBJECT_CLASS(shell_app_parent_class)->finalize (object);
|
||||
}
|
||||
@ -1481,8 +1520,7 @@ shell_app_class_init(ShellAppClass *klass)
|
||||
SHELL_TYPE_APP,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
/**
|
||||
|
@ -320,8 +320,7 @@ shell_doc_system_class_init(ShellDocSystemClass *klass)
|
||||
SHELL_TYPE_DOC_SYSTEM,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
signals[DELETED] =
|
||||
@ -329,8 +328,7 @@ shell_doc_system_class_init(ShellDocSystemClass *klass)
|
||||
SHELL_TYPE_DOC_SYSTEM,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__BOXED,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, GTK_TYPE_RECENT_INFO);
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (ShellDocSystemPrivate));
|
||||
|
@ -285,8 +285,7 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
gi_cclosure_marshal_generic,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 2, G_TYPE_FLOAT, SHELL_TYPE_GENERIC_CONTAINER_ALLOCATION);
|
||||
|
||||
/**
|
||||
@ -310,8 +309,7 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
gi_cclosure_marshal_generic,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 2, G_TYPE_FLOAT, SHELL_TYPE_GENERIC_CONTAINER_ALLOCATION);
|
||||
|
||||
/**
|
||||
@ -331,8 +329,7 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
gi_cclosure_marshal_generic,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 2, CLUTTER_TYPE_ACTOR_BOX, CLUTTER_TYPE_ALLOCATION_FLAGS);
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (ShellGenericContainerPrivate));
|
||||
|
@ -25,10 +25,8 @@ typedef struct _screenshot_data {
|
||||
|
||||
char *filename;
|
||||
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
cairo_surface_t *image;
|
||||
cairo_rectangle_int_t screenshot_area;
|
||||
|
||||
ShellGlobalScreenshotCallback callback;
|
||||
} _screenshot_data;
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include <girepository.h>
|
||||
#include <meta/display.h>
|
||||
#include <meta/util.h>
|
||||
#include <meta/meta-shaped-texture.h>
|
||||
|
||||
/* Memory report bits */
|
||||
#ifdef HAVE_MALLINFO
|
||||
@ -34,8 +35,8 @@
|
||||
#include "shell-enum-types.h"
|
||||
#include "shell-global-private.h"
|
||||
#include "shell-jsapi-compat-private.h"
|
||||
#include "shell-marshal.h"
|
||||
#include "shell-perf-log.h"
|
||||
#include "shell-screen-grabber.h"
|
||||
#include "shell-window-tracker.h"
|
||||
#include "shell-wm.h"
|
||||
#include "st.h"
|
||||
@ -311,8 +312,7 @@ shell_global_class_init (ShellGlobalClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
_shell_marshal_VOID__INT_INT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
|
||||
|
||||
/* Emitted from gnome-shell-plugin.c during event handling */
|
||||
@ -321,8 +321,7 @@ shell_global_class_init (ShellGlobalClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
/* Emitted from gnome-shell-plugin.c during event handling */
|
||||
@ -331,8 +330,7 @@ shell_global_class_init (ShellGlobalClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
shell_global_signals[NOTIFY_ERROR] =
|
||||
@ -340,8 +338,7 @@ shell_global_class_init (ShellGlobalClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
gi_cclosure_marshal_generic,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 2,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING);
|
||||
@ -1180,70 +1177,6 @@ shell_global_destroy_pointer_barrier (ShellGlobal *global, guint32 barrier)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* shell_global_add_extension_importer:
|
||||
* @target_object_script: JavaScript code evaluating to a target object
|
||||
* @target_property: Name of property to use for importer
|
||||
* @directory: Source directory:
|
||||
* @error: A #GError
|
||||
*
|
||||
* This function sets a property named @target_property on the object
|
||||
* resulting from the evaluation of @target_object_script code, which
|
||||
* acts as a GJS importer for directory @directory.
|
||||
*
|
||||
* Returns: %TRUE on success
|
||||
*/
|
||||
gboolean
|
||||
shell_global_add_extension_importer (ShellGlobal *global,
|
||||
const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error)
|
||||
{
|
||||
jsval target_object;
|
||||
JSContext *context = gjs_context_get_native_context (global->js_context);
|
||||
char *search_path[2] = { 0, 0 };
|
||||
|
||||
JS_BeginRequest (context);
|
||||
|
||||
// This is a bit of a hack; ideally we'd be able to pass our target
|
||||
// object directly into this function, but introspection doesn't
|
||||
// support that at the moment. Instead evaluate a string to get it.
|
||||
if (!JS_EvaluateScript(context,
|
||||
JS_GetGlobalObject(context),
|
||||
target_object_script,
|
||||
strlen (target_object_script),
|
||||
"<target_object_script>",
|
||||
0,
|
||||
&target_object))
|
||||
{
|
||||
char *message;
|
||||
gjs_log_exception(context,
|
||||
&message);
|
||||
g_set_error(error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
"%s", message ? message : "(unknown)");
|
||||
g_free(message);
|
||||
goto out_error;
|
||||
}
|
||||
|
||||
if (!JSVAL_IS_OBJECT (target_object))
|
||||
{
|
||||
g_error ("shell_global_add_extension_importer: invalid target object");
|
||||
goto out_error;
|
||||
}
|
||||
|
||||
search_path[0] = (char*)directory;
|
||||
gjs_define_importer (context, JSVAL_TO_OBJECT (target_object), target_property, (const char **)search_path, FALSE);
|
||||
JS_EndRequest (context);
|
||||
return TRUE;
|
||||
out_error:
|
||||
JS_EndRequest (context);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Code to close all file descriptors before we exec; copied from gspawn.c in GLib.
|
||||
*
|
||||
* Authors: Padraig O'Briain, Matthias Clasen, Lennart Poettering
|
||||
@ -1965,25 +1898,67 @@ shell_global_launch_calendar_server (ShellGlobal *global)
|
||||
g_free (calendar_server_exe);
|
||||
}
|
||||
|
||||
static void
|
||||
on_screenshot_written (GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
_screenshot_data *screenshot_data = (_screenshot_data*) user_data;
|
||||
if (screenshot_data->callback)
|
||||
screenshot_data->callback (screenshot_data->global,
|
||||
g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (result)),
|
||||
&screenshot_data->screenshot_area);
|
||||
|
||||
cairo_surface_destroy (screenshot_data->image);
|
||||
g_free (screenshot_data->filename);
|
||||
g_free (screenshot_data);
|
||||
}
|
||||
|
||||
static void
|
||||
write_screenshot_thread (GSimpleAsyncResult *result,
|
||||
GObject *object,
|
||||
GCancellable *cancellable)
|
||||
{
|
||||
cairo_status_t status;
|
||||
_screenshot_data *screenshot_data = g_async_result_get_user_data (G_ASYNC_RESULT (result));
|
||||
g_assert (screenshot_data != NULL);
|
||||
|
||||
status = cairo_surface_write_to_png (screenshot_data->image, screenshot_data->filename);
|
||||
g_simple_async_result_set_op_res_gboolean (result, status == CAIRO_STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
static void
|
||||
do_grab_screenshot (_screenshot_data *screenshot_data,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
ShellScreenGrabber *grabber;
|
||||
static const cairo_user_data_key_t key;
|
||||
guchar *data;
|
||||
|
||||
grabber = shell_screen_grabber_new ();
|
||||
data = shell_screen_grabber_grab (grabber, x, y, width, height);
|
||||
g_object_unref (grabber);
|
||||
|
||||
screenshot_data->image = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_RGB24,
|
||||
width, height, width * 4);
|
||||
cairo_surface_set_user_data (screenshot_data->image, &key,
|
||||
data, (cairo_destroy_func_t)g_free);
|
||||
}
|
||||
|
||||
static void
|
||||
grab_screenshot (ClutterActor *stage,
|
||||
_screenshot_data *screenshot_data)
|
||||
{
|
||||
MetaScreen *screen = shell_global_get_screen (screenshot_data->global);
|
||||
cairo_status_t status;
|
||||
cairo_surface_t *image;
|
||||
guchar *data;
|
||||
int width, height;
|
||||
GSimpleAsyncResult *result;
|
||||
|
||||
meta_plugin_query_screen_size (screenshot_data->global->plugin, &width, &height);
|
||||
image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
|
||||
data = cairo_image_surface_get_data (image);
|
||||
|
||||
cogl_flush();
|
||||
|
||||
cogl_read_pixels (0, 0, width, height, COGL_READ_PIXELS_COLOR_BUFFER, CLUTTER_CAIRO_FORMAT_ARGB32, data);
|
||||
|
||||
cairo_surface_mark_dirty (image);
|
||||
do_grab_screenshot (screenshot_data, 0, 0, width, height);
|
||||
|
||||
if (meta_screen_get_n_monitors (screen) > 1)
|
||||
{
|
||||
@ -2009,7 +1984,7 @@ grab_screenshot (ClutterActor *stage,
|
||||
cairo_region_xor (stage_region, screen_region);
|
||||
cairo_region_destroy (screen_region);
|
||||
|
||||
cr = cairo_create (image);
|
||||
cr = cairo_create (screenshot_data->image);
|
||||
|
||||
for (i = 0; i < cairo_region_num_rectangles (stage_region); i++)
|
||||
{
|
||||
@ -2023,41 +1998,34 @@ grab_screenshot (ClutterActor *stage,
|
||||
cairo_region_destroy (stage_region);
|
||||
}
|
||||
|
||||
|
||||
status = cairo_surface_write_to_png (image, screenshot_data->filename);
|
||||
cairo_surface_destroy (image);
|
||||
|
||||
if (screenshot_data->callback)
|
||||
screenshot_data->callback (screenshot_data->global, status == CAIRO_STATUS_SUCCESS);
|
||||
screenshot_data->screenshot_area.x = 0;
|
||||
screenshot_data->screenshot_area.y = 0;
|
||||
screenshot_data->screenshot_area.width = width;
|
||||
screenshot_data->screenshot_area.height = height;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (stage, (void *)grab_screenshot, (gpointer)screenshot_data);
|
||||
g_free (screenshot_data->filename);
|
||||
g_free (screenshot_data);
|
||||
|
||||
result = g_simple_async_result_new (NULL, on_screenshot_written, (gpointer)screenshot_data, grab_screenshot);
|
||||
g_simple_async_result_run_in_thread (result, write_screenshot_thread, G_PRIORITY_DEFAULT, NULL);
|
||||
g_object_unref (result);
|
||||
}
|
||||
|
||||
static void
|
||||
grab_area_screenshot (ClutterActor *stage,
|
||||
_screenshot_data *screenshot_data)
|
||||
{
|
||||
cairo_status_t status;
|
||||
cairo_surface_t *image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, screenshot_data->width, screenshot_data->height);
|
||||
guchar *data = cairo_image_surface_get_data (image);
|
||||
GSimpleAsyncResult *result;
|
||||
|
||||
cogl_flush();
|
||||
|
||||
cogl_read_pixels (screenshot_data->x, screenshot_data->y, screenshot_data->width, screenshot_data->height,
|
||||
COGL_READ_PIXELS_COLOR_BUFFER, CLUTTER_CAIRO_FORMAT_ARGB32, data);
|
||||
|
||||
cairo_surface_mark_dirty (image);
|
||||
status = cairo_surface_write_to_png (image, screenshot_data->filename);
|
||||
cairo_surface_destroy (image);
|
||||
|
||||
if (screenshot_data->callback)
|
||||
screenshot_data->callback (screenshot_data->global, status == CAIRO_STATUS_SUCCESS);
|
||||
do_grab_screenshot (screenshot_data,
|
||||
screenshot_data->screenshot_area.x,
|
||||
screenshot_data->screenshot_area.y,
|
||||
screenshot_data->screenshot_area.width,
|
||||
screenshot_data->screenshot_area.height);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (stage, (void *)grab_area_screenshot, (gpointer)screenshot_data);
|
||||
g_free (screenshot_data->filename);
|
||||
g_free (screenshot_data);
|
||||
result = g_simple_async_result_new (NULL, on_screenshot_written, (gpointer)screenshot_data, grab_area_screenshot);
|
||||
g_simple_async_result_run_in_thread (result, write_screenshot_thread, G_PRIORITY_DEFAULT, NULL);
|
||||
g_object_unref (result);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2073,8 +2041,8 @@ grab_area_screenshot (ClutterActor *stage,
|
||||
*/
|
||||
void
|
||||
shell_global_screenshot (ShellGlobal *global,
|
||||
const char *filename,
|
||||
ShellGlobalScreenshotCallback callback)
|
||||
const char *filename,
|
||||
ShellGlobalScreenshotCallback callback)
|
||||
{
|
||||
ClutterActor *stage;
|
||||
_screenshot_data *data = g_new0 (_screenshot_data, 1);
|
||||
@ -2119,10 +2087,10 @@ shell_global_screenshot_area (ShellGlobal *global,
|
||||
|
||||
data->global = global;
|
||||
data->filename = g_strdup (filename);
|
||||
data->x = x;
|
||||
data->y = y;
|
||||
data->width = width;
|
||||
data->height = height;
|
||||
data->screenshot_area.x = x;
|
||||
data->screenshot_area.y = y;
|
||||
data->screenshot_area.width = width;
|
||||
data->screenshot_area.height = height;
|
||||
data->callback = callback;
|
||||
|
||||
stage = CLUTTER_ACTOR (meta_plugin_get_stage (global->plugin));
|
||||
@ -2138,60 +2106,69 @@ shell_global_screenshot_area (ShellGlobal *global,
|
||||
* @include_frame: Whether to include the frame or not
|
||||
*
|
||||
* @filename: The filename for the screenshot
|
||||
* @callback: (scope async): function to call returning success or failure
|
||||
* of the async grabbing
|
||||
*
|
||||
* Takes a screenshot of the focused window (optionally omitting the frame)
|
||||
* in @filename as png image.
|
||||
*
|
||||
* Return value: success or failure.
|
||||
*/
|
||||
gboolean
|
||||
void
|
||||
shell_global_screenshot_window (ShellGlobal *global,
|
||||
gboolean include_frame,
|
||||
const char *filename)
|
||||
const char *filename,
|
||||
ShellGlobalScreenshotCallback callback)
|
||||
{
|
||||
CoglHandle texture;
|
||||
cairo_surface_t *image;
|
||||
guchar *data;
|
||||
GSimpleAsyncResult *result;
|
||||
|
||||
_screenshot_data *screenshot_data = g_new0 (_screenshot_data, 1);
|
||||
|
||||
MetaScreen *screen = meta_plugin_get_screen (global->plugin);
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
MetaWindow *window = meta_display_get_focus_window (display);
|
||||
ClutterActor *window_actor;
|
||||
gfloat actor_x, actor_y;
|
||||
MetaShapedTexture *stex;
|
||||
MetaRectangle rect;
|
||||
cairo_rectangle_int_t clip;
|
||||
|
||||
cairo_status_t status;
|
||||
screenshot_data->global = global;
|
||||
screenshot_data->filename = g_strdup (filename);
|
||||
screenshot_data->callback = callback;
|
||||
|
||||
window_actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window));
|
||||
texture = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (meta_window_actor_get_texture (META_WINDOW_ACTOR (window_actor))));
|
||||
clutter_actor_get_position (window_actor, &actor_x, &actor_y);
|
||||
|
||||
if (!include_frame)
|
||||
if (include_frame || !meta_window_get_frame (window))
|
||||
{
|
||||
MetaRectangle *window_rect = meta_window_get_rect (window);
|
||||
texture = cogl_texture_new_from_sub_texture (texture,
|
||||
window_rect->x,
|
||||
window_rect->y,
|
||||
window_rect->width,
|
||||
window_rect->height);
|
||||
meta_window_get_outer_rect (window, &rect);
|
||||
|
||||
image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
|
||||
window_rect->width,
|
||||
window_rect->height);
|
||||
screenshot_data->screenshot_area.x = rect.x;
|
||||
screenshot_data->screenshot_area.y = rect.y;
|
||||
|
||||
clip.x = rect.x - (gint) actor_x;
|
||||
clip.y = rect.y - (gint) actor_y;
|
||||
}
|
||||
else
|
||||
image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
|
||||
clutter_actor_get_width (window_actor),
|
||||
clutter_actor_get_height (window_actor));
|
||||
{
|
||||
rect = *meta_window_get_rect (window);
|
||||
|
||||
data = cairo_image_surface_get_data (image);
|
||||
screenshot_data->screenshot_area.x = (gint) actor_x + rect.x;
|
||||
screenshot_data->screenshot_area.y = (gint) actor_y + rect.y;
|
||||
|
||||
cogl_flush();
|
||||
clip.x = rect.x;
|
||||
clip.y = rect.y;
|
||||
}
|
||||
|
||||
cogl_texture_get_data (texture, CLUTTER_CAIRO_FORMAT_ARGB32, 0, data);
|
||||
clip.width = screenshot_data->screenshot_area.width = rect.width;
|
||||
clip.height = screenshot_data->screenshot_area.height = rect.height;
|
||||
|
||||
cairo_surface_mark_dirty (image);
|
||||
status = cairo_surface_write_to_png (image, filename);
|
||||
cairo_surface_destroy (image);
|
||||
stex = META_SHAPED_TEXTURE (meta_window_actor_get_texture (META_WINDOW_ACTOR (window_actor)));
|
||||
screenshot_data->image = meta_shaped_texture_get_image (stex, &clip);
|
||||
|
||||
return status == CAIRO_STATUS_SUCCESS;
|
||||
result = g_simple_async_result_new (NULL, on_screenshot_written, (gpointer)screenshot_data, shell_global_screenshot_window);
|
||||
g_simple_async_result_run_in_thread (result, write_screenshot_thread, G_PRIORITY_DEFAULT, NULL);
|
||||
g_object_unref (result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,12 +119,6 @@ void shell_global_run_at_leisure (ShellGlobal *global,
|
||||
|
||||
|
||||
/* Misc utilities / Shell API */
|
||||
gboolean shell_global_add_extension_importer (ShellGlobal *global,
|
||||
const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error);
|
||||
|
||||
void shell_global_sync_pointer (ShellGlobal *global);
|
||||
|
||||
GAppLaunchContext *
|
||||
@ -146,7 +140,9 @@ void shell_global_reexec_self (ShellGlobal *global);
|
||||
|
||||
void shell_global_launch_calendar_server (ShellGlobal *global);
|
||||
|
||||
typedef void (*ShellGlobalScreenshotCallback) (ShellGlobal *global, gboolean success);
|
||||
typedef void (*ShellGlobalScreenshotCallback) (ShellGlobal *global,
|
||||
gboolean success,
|
||||
cairo_rectangle_int_t *screenshot_area);
|
||||
|
||||
void shell_global_screenshot_area (ShellGlobal *global,
|
||||
int x,
|
||||
@ -156,9 +152,10 @@ void shell_global_screenshot_area (ShellGlobal *global,
|
||||
const char *filename,
|
||||
ShellGlobalScreenshotCallback callback);
|
||||
|
||||
gboolean shell_global_screenshot_window (ShellGlobal *global,
|
||||
void shell_global_screenshot_window (ShellGlobal *global,
|
||||
gboolean include_frame,
|
||||
const char *filename);
|
||||
const char *filename,
|
||||
ShellGlobalScreenshotCallback callback);
|
||||
|
||||
void shell_global_screenshot (ShellGlobal *global,
|
||||
const char *filename,
|
||||
|
81
src/shell-js.c
Normal file
81
src/shell-js.c
Normal file
@ -0,0 +1,81 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "shell-js.h"
|
||||
|
||||
#include <jsapi.h>
|
||||
#include <gio/gio.h>
|
||||
#include <gjs/gjs.h>
|
||||
#include <gjs/gjs-module.h>
|
||||
|
||||
/**
|
||||
* shell_js_add_extension_importer:
|
||||
* @target_object_script: JavaScript code evaluating to a target object
|
||||
* @target_property: Name of property to use for importer
|
||||
* @directory: Source directory:
|
||||
* @error: A #GError
|
||||
*
|
||||
* This function sets a property named @target_property on the object
|
||||
* resulting from the evaluation of @target_object_script code, which
|
||||
* acts as a GJS importer for directory @directory.
|
||||
*
|
||||
* Returns: %TRUE on success
|
||||
*/
|
||||
gboolean
|
||||
shell_js_add_extension_importer (const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error)
|
||||
{
|
||||
jsval target_object;
|
||||
GList *contexts;
|
||||
JSContext *context;
|
||||
char *search_path[2] = { 0, 0 };
|
||||
gboolean ret = FALSE;
|
||||
|
||||
/* Take the first GjsContext from all of them --
|
||||
* we should only ever have one context, so this
|
||||
* should be alright. */
|
||||
contexts = gjs_context_get_all ();
|
||||
context = gjs_context_get_native_context (contexts->data);
|
||||
g_list_free_full (contexts, g_object_unref);
|
||||
|
||||
JS_BeginRequest (context);
|
||||
|
||||
/* This is a bit of a hack; ideally we'd be able to pass our target
|
||||
* object directly into this function, but introspection doesn't
|
||||
* support that at the moment. Instead evaluate a string to get it. */
|
||||
if (!JS_EvaluateScript(context,
|
||||
JS_GetGlobalObject(context),
|
||||
target_object_script,
|
||||
strlen (target_object_script),
|
||||
"<target_object_script>",
|
||||
0,
|
||||
&target_object))
|
||||
{
|
||||
char *message;
|
||||
gjs_log_exception(context,
|
||||
&message);
|
||||
g_set_error(error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
"%s", message ? message : "(unknown)");
|
||||
g_free(message);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!JSVAL_IS_OBJECT (target_object))
|
||||
{
|
||||
g_error ("shell_js_add_extension_importer: invalid target object");
|
||||
goto out;
|
||||
}
|
||||
|
||||
search_path[0] = (char*)directory;
|
||||
gjs_define_importer (context, JSVAL_TO_OBJECT (target_object), target_property, (const char **)search_path, FALSE);
|
||||
ret = TRUE;
|
||||
|
||||
out:
|
||||
JS_EndRequest (context);
|
||||
return ret;
|
||||
}
|
16
src/shell-js.h
Normal file
16
src/shell-js.h
Normal file
@ -0,0 +1,16 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
#ifndef __SHELL_JS_H__
|
||||
#define __SHELL_JS_H__
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
gboolean shell_js_add_extension_importer (const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error);
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#endif /* __SHELL_JS_H__ */
|
@ -1,9 +0,0 @@
|
||||
VOID:INT,INT,INT
|
||||
VOID:OBJECT,INT,INT,INT,INT
|
||||
VOID:BOXED
|
||||
VOID:BOXED,OBJECT
|
||||
VOID:OBJECT,OBJECT
|
||||
VOID:STRING,UINT,OBJECT,BOOLEAN
|
||||
VOID:INT,INT
|
||||
VOID:STRING,STRING,STRING,STRING,BOXED
|
||||
VOID:STRING,OBJECT,STRING,BOXED
|
@ -135,8 +135,7 @@ shell_mount_operation_class_init (ShellMountOperationClass *klass)
|
||||
g_signal_new ("show-processes-2",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (ShellMountOperationPrivate));
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include <gnome-keyring.h>
|
||||
|
||||
#include "shell-network-agent.h"
|
||||
#include "shell-marshal.h"
|
||||
|
||||
enum {
|
||||
SIGNAL_NEW_REQUEST,
|
||||
@ -775,7 +774,7 @@ shell_network_agent_class_init (ShellNetworkAgentClass *klass)
|
||||
0, /* class offset */
|
||||
NULL, /* accumulator */
|
||||
NULL, /* accu_data */
|
||||
_shell_marshal_VOID__STRING_OBJECT_STRING_BOXED,
|
||||
NULL, /* marshaller */
|
||||
G_TYPE_NONE, /* return */
|
||||
3, /* n_params */
|
||||
G_TYPE_STRING,
|
||||
@ -789,7 +788,7 @@ shell_network_agent_class_init (ShellNetworkAgentClass *klass)
|
||||
0, /* class offset */
|
||||
NULL, /* accumulator */
|
||||
NULL, /* accu_data */
|
||||
g_cclosure_marshal_VOID__STRING,
|
||||
NULL, /* marshaller */
|
||||
G_TYPE_NONE,
|
||||
1, /* n_params */
|
||||
G_TYPE_STRING);
|
||||
|
@ -10,8 +10,6 @@
|
||||
|
||||
#include <pwd.h>
|
||||
|
||||
#include "shell-marshal.h"
|
||||
|
||||
#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE
|
||||
#include <polkitagent/polkitagent.h>
|
||||
#include "shell-polkit-authentication-agent.h"
|
||||
@ -173,7 +171,7 @@ shell_polkit_authentication_agent_class_init (ShellPolkitAuthenticationAgentClas
|
||||
0, /* class_offset */
|
||||
NULL, /* accumulator */
|
||||
NULL, /* accumulator data */
|
||||
_shell_marshal_VOID__STRING_STRING_STRING_STRING_BOXED,
|
||||
NULL, /* marshaller */
|
||||
G_TYPE_NONE,
|
||||
5,
|
||||
G_TYPE_STRING,
|
||||
@ -189,7 +187,7 @@ shell_polkit_authentication_agent_class_init (ShellPolkitAuthenticationAgentClas
|
||||
0, /* class_offset */
|
||||
NULL, /* accumulator */
|
||||
NULL, /* accumulator data */
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, /* marshaller */
|
||||
G_TYPE_NONE,
|
||||
0);
|
||||
}
|
||||
|
@ -40,6 +40,8 @@ static void
|
||||
shell_recorder_src_init (ShellRecorderSrc *src,
|
||||
ShellRecorderSrcClass *klass)
|
||||
{
|
||||
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
||||
|
||||
src->queue = g_async_queue_new ();
|
||||
src->mutex = &src->mutex_data;
|
||||
g_mutex_init (src->mutex);
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "shell-recorder-src.h"
|
||||
#include "shell-recorder.h"
|
||||
#include "shell-screen-grabber.h"
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
@ -47,6 +48,8 @@ struct _ShellRecorder {
|
||||
int stage_width;
|
||||
int stage_height;
|
||||
|
||||
ShellScreenGrabber *grabber;
|
||||
|
||||
gboolean have_pointer;
|
||||
int pointer_x;
|
||||
int pointer_y;
|
||||
@ -74,6 +77,7 @@ struct _ShellRecorder {
|
||||
GSList *pipelines; /* all pipelines */
|
||||
|
||||
GstClockTime start_time; /* When we started recording (adjusted for pauses) */
|
||||
GstClockTime last_frame_time; /* Timestamp for the last frame */
|
||||
GstClockTime pause_time; /* When the pipeline was paused */
|
||||
|
||||
/* GSource IDs for different timeouts and idles */
|
||||
@ -114,14 +118,12 @@ enum {
|
||||
|
||||
G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
|
||||
|
||||
/* The number of frames per second we configure for the GStreamer pipeline.
|
||||
* (the number of frames we actually write into the GStreamer pipeline is
|
||||
* based entirely on how fast clutter is drawing.) Using 60fps seems high
|
||||
* but the observed smoothness is a lot better than for 30fps when encoding
|
||||
* as theora for a minimal size increase. This may be an artifact of the
|
||||
* encoding process.
|
||||
/* The default value of the target frame rate; we'll never record more
|
||||
* than this many frames per second, though we may record less if the
|
||||
* screen isn't being redrawn. 30 is a compromise between smoothness
|
||||
* and the size of the recording.
|
||||
*/
|
||||
#define DEFAULT_FRAMES_PER_SECOND 15
|
||||
#define DEFAULT_FRAMES_PER_SECOND 30
|
||||
|
||||
/* The time (in milliseconds) between querying the server for the cursor
|
||||
* position.
|
||||
@ -145,7 +147,7 @@ G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
|
||||
* (Theora does have some support for frames at non-uniform times, but
|
||||
* things seem to break down if there are large gaps.)
|
||||
*/
|
||||
#define DEFAULT_PIPELINE "videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux"
|
||||
#define DEFAULT_PIPELINE "vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux"
|
||||
|
||||
/* The default filename pattern. Example shell-20090311b-2.webm
|
||||
*/
|
||||
@ -265,6 +267,8 @@ shell_recorder_init (ShellRecorder *recorder)
|
||||
recorder->recording_icon = create_recording_icon ();
|
||||
recorder->memory_target = get_memory_target();
|
||||
|
||||
recorder->grabber = shell_screen_grabber_new ();
|
||||
|
||||
recorder->state = RECORDER_STATE_CLOSED;
|
||||
recorder->framerate = DEFAULT_FRAMES_PER_SECOND;
|
||||
}
|
||||
@ -296,6 +300,8 @@ shell_recorder_finalize (GObject *object)
|
||||
recorder_set_pipeline (recorder, NULL);
|
||||
recorder_set_filename (recorder, NULL);
|
||||
|
||||
g_object_unref (recorder->grabber);
|
||||
|
||||
cogl_handle_unref (recorder->recording_icon);
|
||||
|
||||
G_OBJECT_CLASS (shell_recorder_parent_class)->finalize (object);
|
||||
@ -518,21 +524,35 @@ recorder_record_frame (ShellRecorder *recorder)
|
||||
GstBuffer *buffer;
|
||||
guint8 *data;
|
||||
guint size;
|
||||
GstClockTime now;
|
||||
|
||||
/* If we get into the red zone, stop buffering new frames; 13/16 is
|
||||
* a bit more than the 3/4 threshold for a red indicator to keep the
|
||||
* indicator from flashing between red and yellow. */
|
||||
if (recorder->memory_used > (recorder->memory_target * 13) / 16)
|
||||
return;
|
||||
|
||||
/* Drop frames to get down to something like the target frame rate; since frames
|
||||
* are generated with VBlank sync, we don't have full control anyways, so we just
|
||||
* drop frames if the interval since the last frame is less than 75% of the
|
||||
* desired inter-frame interval.
|
||||
*/
|
||||
now = get_wall_time();
|
||||
if (now - recorder->last_frame_time < (3 * 1000000000LL / (4 * recorder->framerate)))
|
||||
return;
|
||||
|
||||
recorder->last_frame_time = now;
|
||||
|
||||
size = recorder->stage_width * recorder->stage_height * 4;
|
||||
data = g_malloc (size);
|
||||
|
||||
data = shell_screen_grabber_grab (recorder->grabber,
|
||||
0, 0, recorder->stage_width, recorder->stage_height);
|
||||
|
||||
buffer = gst_buffer_new();
|
||||
GST_BUFFER_SIZE(buffer) = size;
|
||||
GST_BUFFER_MALLOCDATA(buffer) = GST_BUFFER_DATA(buffer) = data;
|
||||
|
||||
GST_BUFFER_TIMESTAMP(buffer) = get_wall_time() - recorder->start_time;
|
||||
|
||||
cogl_read_pixels (0, 0,
|
||||
recorder->stage_width, recorder->stage_height,
|
||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||
CLUTTER_CAIRO_FORMAT_ARGB32,
|
||||
data);
|
||||
GST_BUFFER_TIMESTAMP(buffer) = now - recorder->start_time;
|
||||
|
||||
recorder_draw_cursor (recorder, buffer);
|
||||
|
||||
@ -1558,9 +1578,15 @@ shell_recorder_new (ClutterStage *stage)
|
||||
* @recorder: the #ShellRecorder
|
||||
* @framerate: Framerate used for resulting video in frames-per-second.
|
||||
*
|
||||
* Sets the number of frames per second we configure for the GStreamer pipeline.
|
||||
* Sets the number of frames per second we try to record. Less frames
|
||||
* will be recorded when the screen doesn't need to be redrawn this
|
||||
* quickly. (This value will also be set as the framerate for the
|
||||
* GStreamer pipeline; whether that has an effect on the resulting
|
||||
* video will depend on the details of the pipeline and the codec. The
|
||||
* default encoding to webm format doesn't pay attention to the pipeline
|
||||
* framerate.)
|
||||
*
|
||||
* The default value is 15.
|
||||
* The default value is 30.
|
||||
*/
|
||||
void
|
||||
shell_recorder_set_framerate (ShellRecorder *recorder,
|
||||
@ -1619,7 +1645,7 @@ shell_recorder_set_filename (ShellRecorder *recorder,
|
||||
* might be used to send the output to an icecast server
|
||||
* via shout2send or similar.
|
||||
*
|
||||
* The default value is 'videorate ! theoraenc ! oggmux'
|
||||
* The default value is 'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux'
|
||||
*/
|
||||
void
|
||||
shell_recorder_set_pipeline (ShellRecorder *recorder,
|
||||
@ -1662,6 +1688,7 @@ shell_recorder_record (ShellRecorder *recorder)
|
||||
* pause
|
||||
*/
|
||||
recorder->start_time = recorder->start_time + (get_wall_time() - recorder->pause_time);
|
||||
recorder->last_frame_time = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1669,6 +1696,7 @@ shell_recorder_record (ShellRecorder *recorder)
|
||||
return FALSE;
|
||||
|
||||
recorder->start_time = get_wall_time();
|
||||
recorder->last_frame_time = 0;
|
||||
}
|
||||
|
||||
recorder->state = RECORDER_STATE_RECORDING;
|
||||
|
205
src/shell-screen-grabber.c
Normal file
205
src/shell-screen-grabber.c
Normal file
@ -0,0 +1,205 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include <cogl/cogl.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glx.h>
|
||||
#include <GL/glext.h>
|
||||
|
||||
#include "shell-screen-grabber.h"
|
||||
|
||||
PFNGLBINDBUFFERARBPROC pf_glBindBufferARB;
|
||||
PFNGLBUFFERDATAARBPROC pf_glBufferDataARB;
|
||||
PFNGLDELETEBUFFERSARBPROC pf_glDeleteBuffersARB;
|
||||
PFNGLGENBUFFERSARBPROC pf_glGenBuffersARB;
|
||||
PFNGLMAPBUFFERARBPROC pf_glMapBufferARB;
|
||||
PFNGLUNMAPBUFFERARBPROC pf_glUnmapBufferARB;
|
||||
|
||||
struct _ShellScreenGrabberClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
struct _ShellScreenGrabber
|
||||
{
|
||||
GObject parent_instance;
|
||||
|
||||
int have_pixel_buffers;
|
||||
int have_pack_invert;
|
||||
int width, height;
|
||||
GLuint pixel_buffer;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(ShellScreenGrabber, shell_screen_grabber, G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
shell_screen_grabber_finalize (GObject *gobject)
|
||||
{
|
||||
ShellScreenGrabber *grabber = SHELL_SCREEN_GRABBER (gobject);
|
||||
|
||||
if (grabber->pixel_buffer != 0)
|
||||
pf_glDeleteBuffersARB (1, &grabber->pixel_buffer);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_screen_grabber_class_init (ShellScreenGrabberClass *grabber_class)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (grabber_class);
|
||||
|
||||
gobject_class->finalize = shell_screen_grabber_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
shell_screen_grabber_init (ShellScreenGrabber *grabber)
|
||||
{
|
||||
grabber->have_pixel_buffers = -1;
|
||||
grabber->width = -1;
|
||||
grabber->height= -1;
|
||||
grabber->pixel_buffer = 0;
|
||||
}
|
||||
|
||||
ShellScreenGrabber *
|
||||
shell_screen_grabber_new (void)
|
||||
{
|
||||
return g_object_new (SHELL_TYPE_SCREEN_GRABBER, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_screen_grabber_grab:
|
||||
* x: X coordinate of the rectangle to grab
|
||||
* y: Y coordinate of the rectangle to grab
|
||||
* width: width of the rectangle to grab
|
||||
* height: heigth of the rectangle to grab
|
||||
*
|
||||
* Grabs pixel data from a portion of the screen.
|
||||
*
|
||||
* Return value: buffer holding the grabbed data. The data is stored as 32-bit
|
||||
* words with native-endian xRGB pixels (i.e., the same as CAIRO_FORMAT_RGB24)
|
||||
* with no padding on the rows. So, the size of the buffer is width * height * 4
|
||||
* bytes. Free with g_free().
|
||||
**/
|
||||
guchar *
|
||||
shell_screen_grabber_grab (ShellScreenGrabber *grabber,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
guchar *data;
|
||||
gsize row_bytes;
|
||||
gsize data_size;
|
||||
|
||||
row_bytes = width * 4;
|
||||
data_size = row_bytes * height;
|
||||
data = g_malloc (data_size);
|
||||
|
||||
if (grabber->have_pixel_buffers == -1)
|
||||
{
|
||||
const GLubyte* extensions = glGetString (GL_EXTENSIONS);
|
||||
grabber->have_pixel_buffers = strstr ((const char *)extensions, "GL_EXT_pixel_buffer_object") != NULL;
|
||||
grabber->have_pack_invert = strstr ((const char *)extensions, "GL_MESA_pack_invert") != NULL;
|
||||
}
|
||||
|
||||
if (grabber->have_pixel_buffers)
|
||||
{
|
||||
GLubyte *mapped_data;
|
||||
GLint old_swap_bytes, old_lsb_first, old_row_length, old_skip_pixels, old_skip_rows, old_alignment;
|
||||
GLint old_pack_invert = GL_FALSE;
|
||||
guchar *src_row, *dest_row;
|
||||
int i;
|
||||
|
||||
cogl_flush ();
|
||||
|
||||
if (pf_glBindBufferARB == NULL)
|
||||
{
|
||||
pf_glBindBufferARB = (PFNGLBINDBUFFERARBPROC) cogl_get_proc_address ("glBindBufferARB");
|
||||
pf_glBufferDataARB = (PFNGLBUFFERDATAARBPROC) cogl_get_proc_address ("glBufferDataARB");
|
||||
pf_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) cogl_get_proc_address ("glDeleteBuffersARB");
|
||||
pf_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) cogl_get_proc_address ("glGenBuffersARB");
|
||||
pf_glMapBufferARB = (PFNGLMAPBUFFERARBPROC) cogl_get_proc_address ("glMapBufferARB");
|
||||
pf_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC) cogl_get_proc_address ("glUnmapBufferARB");
|
||||
}
|
||||
|
||||
glGetIntegerv (GL_PACK_SWAP_BYTES, &old_swap_bytes);
|
||||
glGetIntegerv (GL_PACK_LSB_FIRST, &old_lsb_first);
|
||||
glGetIntegerv (GL_PACK_ROW_LENGTH, &old_row_length);
|
||||
glGetIntegerv (GL_PACK_SKIP_PIXELS, &old_skip_pixels);
|
||||
glGetIntegerv (GL_PACK_SKIP_ROWS, &old_skip_rows);
|
||||
glGetIntegerv (GL_PACK_ALIGNMENT, &old_alignment);
|
||||
|
||||
glPixelStorei (GL_PACK_SWAP_BYTES, GL_FALSE);
|
||||
glPixelStorei (GL_PACK_LSB_FIRST, GL_FALSE);
|
||||
glPixelStorei (GL_PACK_ROW_LENGTH, 0);
|
||||
glPixelStorei (GL_PACK_SKIP_PIXELS, 0);
|
||||
glPixelStorei (GL_PACK_SKIP_ROWS, 0);
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, 1);
|
||||
|
||||
if (grabber->have_pack_invert)
|
||||
{
|
||||
glGetIntegerv (GL_PACK_INVERT_MESA, &old_pack_invert);
|
||||
glPixelStorei (GL_PACK_INVERT_MESA, GL_FALSE);
|
||||
}
|
||||
|
||||
if (grabber->pixel_buffer != 0 &&
|
||||
(grabber->width != width ||
|
||||
grabber->height != height))
|
||||
{
|
||||
pf_glDeleteBuffersARB (1, &grabber->pixel_buffer);
|
||||
grabber->pixel_buffer = 0;
|
||||
}
|
||||
|
||||
if (grabber->pixel_buffer == 0)
|
||||
{
|
||||
pf_glGenBuffersARB (1, &grabber->pixel_buffer);
|
||||
|
||||
pf_glBindBufferARB (GL_PIXEL_PACK_BUFFER_ARB, grabber->pixel_buffer);
|
||||
pf_glBufferDataARB (GL_PIXEL_PACK_BUFFER_ARB, data_size, 0, GL_STREAM_READ_ARB);
|
||||
|
||||
grabber->width = width;
|
||||
grabber->height = height;
|
||||
}
|
||||
else
|
||||
{
|
||||
pf_glBindBufferARB (GL_PIXEL_PACK_BUFFER_ARB, grabber->pixel_buffer);
|
||||
}
|
||||
|
||||
glReadPixels (x, y, width, height, GL_BGRA, GL_UNSIGNED_BYTE, 0);
|
||||
|
||||
mapped_data = pf_glMapBufferARB (GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB);
|
||||
|
||||
src_row = mapped_data + (height - 1) * row_bytes;
|
||||
dest_row = data;
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
{
|
||||
memcpy (dest_row, src_row, row_bytes);
|
||||
src_row -= row_bytes;
|
||||
dest_row += row_bytes;
|
||||
}
|
||||
|
||||
pf_glUnmapBufferARB (GL_PIXEL_PACK_BUFFER_ARB);
|
||||
pf_glBindBufferARB (GL_PIXEL_PACK_BUFFER_ARB, 0);
|
||||
|
||||
glPixelStorei (GL_PACK_SWAP_BYTES, old_swap_bytes);
|
||||
glPixelStorei (GL_PACK_LSB_FIRST, old_lsb_first);
|
||||
glPixelStorei (GL_PACK_ROW_LENGTH, old_row_length);
|
||||
glPixelStorei (GL_PACK_SKIP_PIXELS, old_skip_pixels);
|
||||
glPixelStorei (GL_PACK_SKIP_ROWS, old_skip_rows);
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, old_alignment);
|
||||
|
||||
if (grabber->have_pack_invert)
|
||||
glPixelStorei (GL_PACK_INVERT_MESA, old_pack_invert);
|
||||
}
|
||||
else
|
||||
{
|
||||
cogl_read_pixels (x, y,
|
||||
width, height,
|
||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||
CLUTTER_CAIRO_FORMAT_ARGB32,
|
||||
data);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
44
src/shell-screen-grabber.h
Normal file
44
src/shell-screen-grabber.h
Normal file
@ -0,0 +1,44 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
#ifndef __SHELL_SCREEN_GRABBER_H__
|
||||
#define __SHELL_SCREEN_GRABBER_H__
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* SECTION:shell-screen-grabber
|
||||
* @short_description: Grab pixel data from the screen
|
||||
*
|
||||
* The #ShellScreenGrabber object is used to download previous drawn
|
||||
* content to the screen. It internally uses pixel-buffer objects if
|
||||
* available, otherwise falls back to cogl_read_pixels().
|
||||
*
|
||||
* If you are repeatedly grabbing images of the same size from the
|
||||
* screen, it makes sense to create one #ShellScreenGrabber and keep
|
||||
* it around. Otherwise, it's fine to simply create one as needed and
|
||||
* then get rid of it.
|
||||
*/
|
||||
|
||||
typedef struct _ShellScreenGrabber ShellScreenGrabber;
|
||||
typedef struct _ShellScreenGrabberClass ShellScreenGrabberClass;
|
||||
|
||||
#define SHELL_TYPE_SCREEN_GRABBER (shell_screen_grabber_get_type ())
|
||||
#define SHELL_SCREEN_GRABBER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_SCREEN_GRABBER, ShellScreenGrabber))
|
||||
#define SHELL_SCREEN_GRABBER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_SCREEN_GRABBER, ShellScreenGrabberClass))
|
||||
#define SHELL_IS_SCREEN_GRABBER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_SCREEN_GRABBER))
|
||||
#define SHELL_IS_SCREEN_GRABBER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_SCREEN_GRABBER))
|
||||
#define SHELL_SCREEN_GRABBER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_SCREEN_GRABBER, ShellScreenGrabberClass))
|
||||
|
||||
GType shell_screen_grabber_get_type (void) G_GNUC_CONST;
|
||||
|
||||
ShellScreenGrabber *shell_screen_grabber_new (void);
|
||||
guchar * shell_screen_grabber_grab (ShellScreenGrabber *grabber,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_SCREEN_GRABBER_H__ */
|
@ -157,8 +157,7 @@ shell_tray_manager_class_init (ShellTrayManagerClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (ShellTrayManagerClass, tray_icon_added),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
CLUTTER_TYPE_ACTOR);
|
||||
shell_tray_manager_signals[TRAY_ICON_REMOVED] =
|
||||
@ -166,8 +165,7 @@ shell_tray_manager_class_init (ShellTrayManagerClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (ShellTrayManagerClass, tray_icon_removed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
CLUTTER_TYPE_ACTOR);
|
||||
|
||||
|
@ -678,18 +678,6 @@ shell_get_file_contents_utf8_sync (const char *path,
|
||||
return contents;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_breakpoint:
|
||||
*
|
||||
* Using G_BREAKPOINT(), interrupt the current process. This is useful
|
||||
* in conjunction with a debugger such as gdb.
|
||||
*/
|
||||
void
|
||||
shell_breakpoint (void)
|
||||
{
|
||||
G_BREAKPOINT ();
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_parse_search_provider:
|
||||
* @data: description of provider
|
||||
|
@ -39,8 +39,6 @@ gboolean shell_write_string_to_stream (GOutputStream *stream,
|
||||
char *shell_get_file_contents_utf8_sync (const char *path,
|
||||
GError **error);
|
||||
|
||||
void shell_breakpoint (void);
|
||||
|
||||
gboolean shell_parse_search_provider (const char *data,
|
||||
char **name,
|
||||
char **url,
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include "shell-window-tracker-private.h"
|
||||
#include "shell-app-private.h"
|
||||
#include "shell-global.h"
|
||||
#include "shell-marshal.h"
|
||||
#include "st.h"
|
||||
|
||||
/* This file includes modified code from
|
||||
@ -117,15 +116,13 @@ shell_window_tracker_class_init (ShellWindowTrackerClass *klass)
|
||||
SHELL_TYPE_WINDOW_TRACKER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__BOXED,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, SHELL_TYPE_STARTUP_SEQUENCE);
|
||||
signals[TRACKED_WINDOWS_CHANGED] = g_signal_new ("tracked-windows-changed",
|
||||
SHELL_TYPE_WINDOW_TRACKER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@
|
||||
|
||||
#include "shell-wm-private.h"
|
||||
#include "shell-global.h"
|
||||
#include "shell-marshal.h"
|
||||
|
||||
struct _ShellWM {
|
||||
GObject parent;
|
||||
@ -58,8 +57,7 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_WINDOW_ACTOR);
|
||||
shell_wm_signals[MAXIMIZE] =
|
||||
@ -67,8 +65,7 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
_shell_marshal_VOID__OBJECT_INT_INT_INT_INT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 5,
|
||||
META_TYPE_WINDOW_ACTOR, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
|
||||
shell_wm_signals[UNMAXIMIZE] =
|
||||
@ -76,8 +73,7 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
_shell_marshal_VOID__OBJECT_INT_INT_INT_INT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_WINDOW_ACTOR, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
|
||||
shell_wm_signals[MAP] =
|
||||
@ -85,8 +81,7 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_WINDOW_ACTOR);
|
||||
shell_wm_signals[DESTROY] =
|
||||
@ -94,8 +89,7 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_WINDOW_ACTOR);
|
||||
shell_wm_signals[SWITCH_WORKSPACE] =
|
||||
@ -103,8 +97,7 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
_shell_marshal_VOID__INT_INT_INT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 3,
|
||||
G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
|
||||
shell_wm_signals[KILL_SWITCH_WORKSPACE] =
|
||||
@ -112,16 +105,14 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
shell_wm_signals[KILL_WINDOW_EFFECTS] =
|
||||
g_signal_new ("kill-window-effects",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_WINDOW_ACTOR);
|
||||
}
|
||||
|
@ -304,8 +304,7 @@ shell_xfixes_cursor_class_init (ShellXFixesCursorClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
gobject_class->get_property = shell_xfixes_cursor_get_property;
|
||||
|
@ -34,7 +34,6 @@
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include "st-adjustment.h"
|
||||
#include "st-marshal.h"
|
||||
#include "st-private.h"
|
||||
|
||||
G_DEFINE_TYPE (StAdjustment, st_adjustment, G_TYPE_OBJECT)
|
||||
@ -267,8 +266,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StAdjustmentClass, changed),
|
||||
NULL, NULL,
|
||||
_st_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include "st-button.h"
|
||||
|
||||
#include "st-enum-types.h"
|
||||
#include "st-marshal.h"
|
||||
#include "st-texture-cache.h"
|
||||
#include "st-private.h"
|
||||
|
||||
@ -444,8 +443,7 @@ st_button_class_init (StButtonClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StButtonClass, clicked),
|
||||
NULL, NULL,
|
||||
_st_marshal_VOID__INT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
G_TYPE_INT);
|
||||
}
|
||||
|
@ -184,8 +184,7 @@ st_drawing_area_class_init (StDrawingAreaClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StDrawingAreaClass, repaint),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (StDrawingAreaPrivate));
|
||||
|
@ -62,7 +62,6 @@
|
||||
#include "st-icon.h"
|
||||
#include "st-widget.h"
|
||||
#include "st-texture-cache.h"
|
||||
#include "st-marshal.h"
|
||||
#include "st-clipboard.h"
|
||||
#include "st-private.h"
|
||||
|
||||
@ -548,38 +547,6 @@ st_entry_pick (ClutterActor *actor,
|
||||
clutter_actor_paint (priv->secondary_icon);
|
||||
}
|
||||
|
||||
static void
|
||||
st_entry_map (ClutterActor *actor)
|
||||
{
|
||||
StEntryPrivate *priv = ST_ENTRY (actor)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_entry_parent_class)->map (actor);
|
||||
|
||||
clutter_actor_map (priv->entry);
|
||||
|
||||
if (priv->primary_icon)
|
||||
clutter_actor_map (priv->primary_icon);
|
||||
|
||||
if (priv->secondary_icon)
|
||||
clutter_actor_map (priv->secondary_icon);
|
||||
}
|
||||
|
||||
static void
|
||||
st_entry_unmap (ClutterActor *actor)
|
||||
{
|
||||
StEntryPrivate *priv = ST_ENTRY (actor)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_entry_parent_class)->unmap (actor);
|
||||
|
||||
clutter_actor_unmap (priv->entry);
|
||||
|
||||
if (priv->primary_icon)
|
||||
clutter_actor_unmap (priv->primary_icon);
|
||||
|
||||
if (priv->secondary_icon)
|
||||
clutter_actor_unmap (priv->secondary_icon);
|
||||
}
|
||||
|
||||
static void
|
||||
st_entry_clipboard_callback (StClipboard *clipboard,
|
||||
const gchar *text,
|
||||
@ -695,8 +662,6 @@ st_entry_class_init (StEntryClass *klass)
|
||||
actor_class->allocate = st_entry_allocate;
|
||||
actor_class->paint = st_entry_paint;
|
||||
actor_class->pick = st_entry_pick;
|
||||
actor_class->map = st_entry_map;
|
||||
actor_class->unmap = st_entry_unmap;
|
||||
|
||||
actor_class->key_press_event = st_entry_key_press_event;
|
||||
actor_class->key_focus_in = st_entry_key_focus_in;
|
||||
@ -735,8 +700,7 @@ st_entry_class_init (StEntryClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StEntryClass, primary_icon_clicked),
|
||||
NULL, NULL,
|
||||
_st_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
/**
|
||||
* StEntry::secondary-icon-clicked:
|
||||
@ -748,8 +712,7 @@ st_entry_class_init (StEntryClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StEntryClass, secondary_icon_clicked),
|
||||
NULL, NULL,
|
||||
_st_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
|
@ -88,12 +88,15 @@ st_im_text_dispose (GObject *object)
|
||||
{
|
||||
StIMTextPrivate *priv = ST_IM_TEXT (object)->priv;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (priv->im_context,
|
||||
(void *) st_im_text_commit_cb,
|
||||
object);
|
||||
if (priv->im_context != NULL)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (priv->im_context,
|
||||
(void *) st_im_text_commit_cb,
|
||||
object);
|
||||
|
||||
g_object_unref (priv->im_context);
|
||||
priv->im_context = NULL;
|
||||
g_object_unref (priv->im_context);
|
||||
priv->im_context = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (st_im_text_parent_class)->dispose (object);
|
||||
}
|
||||
|
@ -253,26 +253,6 @@ st_label_paint (ClutterActor *actor)
|
||||
clutter_actor_paint (priv->label);
|
||||
}
|
||||
|
||||
static void
|
||||
st_label_map (ClutterActor *actor)
|
||||
{
|
||||
StLabelPrivate *priv = ST_LABEL (actor)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_label_parent_class)->map (actor);
|
||||
|
||||
clutter_actor_map (priv->label);
|
||||
}
|
||||
|
||||
static void
|
||||
st_label_unmap (ClutterActor *actor)
|
||||
{
|
||||
StLabelPrivate *priv = ST_LABEL (actor)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_label_parent_class)->unmap (actor);
|
||||
|
||||
clutter_actor_unmap (priv->label);
|
||||
}
|
||||
|
||||
static void
|
||||
st_label_class_init (StLabelClass *klass)
|
||||
{
|
||||
@ -291,8 +271,6 @@ st_label_class_init (StLabelClass *klass)
|
||||
actor_class->allocate = st_label_allocate;
|
||||
actor_class->get_preferred_width = st_label_get_preferred_width;
|
||||
actor_class->get_preferred_height = st_label_get_preferred_height;
|
||||
actor_class->map = st_label_map;
|
||||
actor_class->unmap = st_label_unmap;
|
||||
|
||||
widget_class->style_changed = st_label_style_changed;
|
||||
widget_class->get_accessible_type = st_label_accessible_get_type;
|
||||
@ -481,12 +459,24 @@ st_label_accessible_init (StLabelAccessible *self)
|
||||
/* initialization done on AtkObject->initialize */
|
||||
}
|
||||
|
||||
static void
|
||||
label_text_notify_cb (StLabel *label,
|
||||
GParamSpec *pspec,
|
||||
AtkObject *accessible)
|
||||
{
|
||||
g_object_notify (G_OBJECT (accessible), "accessible-name");
|
||||
}
|
||||
|
||||
static void
|
||||
st_label_accessible_initialize (AtkObject *obj,
|
||||
gpointer data)
|
||||
{
|
||||
ATK_OBJECT_CLASS (st_label_accessible_parent_class)->initialize (obj, data);
|
||||
|
||||
g_signal_connect (data, "notify::text",
|
||||
G_CALLBACK (label_text_notify_cb),
|
||||
obj);
|
||||
|
||||
obj->role = ATK_ROLE_LABEL;
|
||||
}
|
||||
|
||||
|
@ -1,13 +0,0 @@
|
||||
VOID:OBJECT
|
||||
VOID:VOID
|
||||
VOID:PARAM
|
||||
VOID:POINTER
|
||||
VOID:INT
|
||||
VOID:UINT
|
||||
VOID:UINT,UINT
|
||||
VOID:OBJECT,OBJECT
|
||||
VOID:STRING,OBJECT
|
||||
VOID:OBJECT,OBJECT,INT,INT
|
||||
VOID:OBJECT,FLOAT,FLOAT,INT,ENUM
|
||||
VOID:FLOAT,FLOAT,INT,ENUM
|
||||
VOID:FLOAT,FLOAT
|
@ -36,7 +36,6 @@
|
||||
|
||||
#include "st-scroll-bar.h"
|
||||
#include "st-bin.h"
|
||||
#include "st-marshal.h"
|
||||
#include "st-enum-types.h"
|
||||
#include "st-private.h"
|
||||
#include "st-button.h"
|
||||
@ -243,36 +242,12 @@ st_scroll_bar_pick (ClutterActor *actor,
|
||||
clutter_actor_paint (priv->handle);
|
||||
}
|
||||
|
||||
static void
|
||||
st_scroll_bar_map (ClutterActor *actor)
|
||||
{
|
||||
StScrollBarPrivate *priv = ST_SCROLL_BAR (actor)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_scroll_bar_parent_class)->map (actor);
|
||||
|
||||
clutter_actor_map (priv->bw_stepper);
|
||||
clutter_actor_map (priv->fw_stepper);
|
||||
clutter_actor_map (priv->trough);
|
||||
|
||||
if (priv->handle)
|
||||
clutter_actor_map (priv->handle);
|
||||
}
|
||||
|
||||
static void
|
||||
st_scroll_bar_unmap (ClutterActor *actor)
|
||||
{
|
||||
StScrollBarPrivate *priv = ST_SCROLL_BAR (actor)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_scroll_bar_parent_class)->unmap (actor);
|
||||
|
||||
stop_scrolling (ST_SCROLL_BAR (actor));
|
||||
|
||||
clutter_actor_unmap (priv->bw_stepper);
|
||||
clutter_actor_unmap (priv->fw_stepper);
|
||||
clutter_actor_unmap (priv->trough);
|
||||
|
||||
if (priv->handle)
|
||||
clutter_actor_unmap (priv->handle);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -688,7 +663,6 @@ st_scroll_bar_class_init (StScrollBarClass *klass)
|
||||
actor_class->paint = st_scroll_bar_paint;
|
||||
actor_class->pick = st_scroll_bar_pick;
|
||||
actor_class->scroll_event = st_scroll_bar_scroll_event;
|
||||
actor_class->map = st_scroll_bar_map;
|
||||
actor_class->unmap = st_scroll_bar_unmap;
|
||||
|
||||
widget_class->style_changed = st_scroll_bar_style_changed;
|
||||
@ -714,8 +688,7 @@ st_scroll_bar_class_init (StScrollBarClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StScrollBarClass, scroll_start),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
signals[SCROLL_STOP] =
|
||||
@ -723,8 +696,7 @@ st_scroll_bar_class_init (StScrollBarClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StScrollBarClass, scroll_stop),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,6 @@
|
||||
*/
|
||||
|
||||
#include "st-scroll-view.h"
|
||||
#include "st-marshal.h"
|
||||
#include "st-scroll-bar.h"
|
||||
#include "st-scrollable.h"
|
||||
#include "st-scroll-view-fade.h"
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include "st-enum-types.h"
|
||||
#include "st-marshal.h"
|
||||
#include "st-private.h"
|
||||
#include "st-table-child.h"
|
||||
#include "st-table-private.h"
|
||||
|
@ -95,8 +95,7 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, /* no default handler slot */
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
|
@ -86,8 +86,7 @@ st_theme_context_class_init (StThemeContextClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, /* no default handler slot */
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
|
@ -469,12 +469,12 @@ get_background_position (StThemeNode *self,
|
||||
gdouble scale_w, scale_h;
|
||||
|
||||
/* get the background image size */
|
||||
background_image_width = allocation->x2 - allocation->x1;
|
||||
background_image_height = allocation->y2 - allocation->y1;
|
||||
background_image_width = cogl_texture_get_width (self->background_texture);
|
||||
background_image_height = cogl_texture_get_height (self->background_texture);
|
||||
|
||||
/* get the painting area size */
|
||||
painting_area_width = cogl_texture_get_width (self->background_texture);
|
||||
painting_area_height = cogl_texture_get_height (self->background_texture);
|
||||
painting_area_width = allocation->x2 - allocation->x1;
|
||||
painting_area_height = allocation->y2 - allocation->y1;
|
||||
|
||||
/* scale if requested */
|
||||
get_background_scale (self,
|
||||
@ -1445,35 +1445,7 @@ st_theme_node_render_resources (StThemeNode *node,
|
||||
background_image_shadow_spec = st_theme_node_get_background_image_shadow (node);
|
||||
if (background_image != NULL && !has_border && !has_border_radius)
|
||||
{
|
||||
CoglHandle texture;
|
||||
|
||||
texture = st_texture_cache_load_file_to_cogl_texture (texture_cache, background_image);
|
||||
|
||||
/* If no background position is specified, then we will automatically scale
|
||||
* the background to fit within the node allocation. But, if a background
|
||||
* position is specified, we won't scale the background, and it could
|
||||
* potentially leak out of bounds. To prevent that, we subtexture from the
|
||||
* in bounds area when necessary.
|
||||
*/
|
||||
if (node->background_position_set &&
|
||||
(cogl_texture_get_width (texture) > width ||
|
||||
cogl_texture_get_height (texture) > height))
|
||||
{
|
||||
CoglHandle subtexture;
|
||||
|
||||
subtexture = cogl_texture_new_from_sub_texture (texture,
|
||||
0, 0,
|
||||
width - node->background_position_x,
|
||||
height - node->background_position_y);
|
||||
cogl_handle_unref (texture);
|
||||
|
||||
node->background_texture = subtexture;
|
||||
}
|
||||
else
|
||||
{
|
||||
node->background_texture = texture;
|
||||
}
|
||||
|
||||
node->background_texture = st_texture_cache_load_file_to_cogl_texture (texture_cache, background_image);
|
||||
node->background_material = _st_create_texture_material (node->background_texture);
|
||||
|
||||
if (background_image_shadow_spec)
|
||||
|
@ -454,8 +454,7 @@ st_theme_node_transition_class_init (StThemeNodeTransitionClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StThemeNodeTransitionClass, completed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
signals[NEW_FRAME] =
|
||||
@ -463,7 +462,6 @@ st_theme_node_transition_class_init (StThemeNodeTransitionClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StThemeNodeTransitionClass, new_frame),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
@ -35,7 +35,6 @@
|
||||
#include "st-widget.h"
|
||||
|
||||
#include "st-label.h"
|
||||
#include "st-marshal.h"
|
||||
#include "st-private.h"
|
||||
#include "st-texture-cache.h"
|
||||
#include "st-theme-context.h"
|
||||
@ -995,8 +994,7 @@ st_widget_class_init (StWidgetClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StWidgetClass, style_changed),
|
||||
NULL, NULL,
|
||||
_st_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
/**
|
||||
@ -1011,8 +1009,7 @@ st_widget_class_init (StWidgetClass *klass)
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (StWidgetClass, popup_menu),
|
||||
NULL, NULL,
|
||||
_st_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
@ -2441,7 +2438,7 @@ st_ui_root_destroyed (ClutterActor *actor,
|
||||
}
|
||||
|
||||
/**
|
||||
* st_get_ui_root:
|
||||
* st_set_ui_root:
|
||||
* @stage: a #ClutterStage
|
||||
* @container: (allow-none): the new UI root
|
||||
*
|
||||
|
@ -1,3 +0,0 @@
|
||||
VOID:OBJECT,OBJECT
|
||||
VOID:OBJECT,STRING,LONG,LONG
|
||||
VOID:OBJECT,LONG
|
@ -34,8 +34,6 @@
|
||||
#endif
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "na-marshal.h"
|
||||
|
||||
/* Signals */
|
||||
enum
|
||||
{
|
||||
@ -143,8 +141,7 @@ na_tray_manager_class_init (NaTrayManagerClass *klass)
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (NaTrayManagerClass, tray_icon_added),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
GTK_TYPE_SOCKET);
|
||||
|
||||
@ -153,8 +150,7 @@ na_tray_manager_class_init (NaTrayManagerClass *klass)
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (NaTrayManagerClass, tray_icon_removed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
GTK_TYPE_SOCKET);
|
||||
manager_signals[MESSAGE_SENT] =
|
||||
@ -162,8 +158,7 @@ na_tray_manager_class_init (NaTrayManagerClass *klass)
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (NaTrayManagerClass, message_sent),
|
||||
NULL, NULL,
|
||||
_na_marshal_VOID__OBJECT_STRING_LONG_LONG,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 4,
|
||||
GTK_TYPE_SOCKET,
|
||||
G_TYPE_STRING,
|
||||
@ -174,8 +169,7 @@ na_tray_manager_class_init (NaTrayManagerClass *klass)
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (NaTrayManagerClass, message_cancelled),
|
||||
NULL, NULL,
|
||||
_na_marshal_VOID__OBJECT_LONG,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 2,
|
||||
GTK_TYPE_SOCKET,
|
||||
G_TYPE_LONG);
|
||||
@ -184,8 +178,7 @@ na_tray_manager_class_init (NaTrayManagerClass *klass)
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (NaTrayManagerClass, lost_selection),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
#if defined (GDK_WINDOWING_X11)
|
||||
|
Reference in New Issue
Block a user