Compare commits
151 Commits
3.6.2
...
wip/media-
Author | SHA1 | Date | |
---|---|---|---|
60d87ef4ba | |||
d886dc17e1 | |||
9dd2a467ba | |||
e757b06987 | |||
6f2da1baf1 | |||
f30dcad8a7 | |||
7dc235511e | |||
644c210fe2 | |||
68e8f98671 | |||
1228db6ac1 | |||
86596749fa | |||
76229a3601 | |||
95abdeb919 | |||
df0151d338 | |||
ee2f12fe81 | |||
10c104529f | |||
cbc8ec6508 | |||
8e7758e280 | |||
9aefbd189c | |||
b9d50584d8 | |||
e5f7390c09 | |||
797b1ff8bb | |||
09b738045c | |||
4fd690333a | |||
5ef5e25a7f | |||
87e8770cbc | |||
cac9d120be | |||
1ae0fadbf4 | |||
65497e089a | |||
2d763bd033 | |||
4ebf396cf5 | |||
6faa50d496 | |||
6fcd6298c8 | |||
5c16be5dbb | |||
e3abb6f178 | |||
70736be4eb | |||
1c3e7330f3 | |||
6e4c89b310 | |||
73b4a0ef5f | |||
d88002c4ed | |||
025c63c045 | |||
b189cbd46e | |||
a21ddb5914 | |||
e04a4c3923 | |||
ae0821e07b | |||
a508bece36 | |||
2c9969a8f4 | |||
dd9fc91f6f | |||
39d9838cc1 | |||
1397c7c624 | |||
c09fcba94f | |||
c77b38fc4f | |||
aef9b733e5 | |||
348208617b | |||
2c34c8e20f | |||
d19fa731d6 | |||
59bb1cc387 | |||
56909d0646 | |||
04da29c939 | |||
307f7a3024 | |||
e80bfa39f5 | |||
29714922ea | |||
88192114ac | |||
9d78208b76 | |||
d817bf0395 | |||
4d51056226 | |||
a607174a25 | |||
37d6a624b7 | |||
0c807bddaf | |||
a0470bfc66 | |||
b9463d23e8 | |||
04debd1623 | |||
9d31576cf5 | |||
8daca28a90 | |||
9899604261 | |||
687e1eabed | |||
eb09f34114 | |||
fbeb446ed7 | |||
92033ce0f5 | |||
9171bab5e5 | |||
f9819eb7b0 | |||
85728f0d15 | |||
9396849d56 | |||
6f5e5672bb | |||
b936e60876 | |||
fa4bd91213 | |||
81eeef7d3c | |||
a7b5134820 | |||
92a01c67ba | |||
71c23613b5 | |||
4f876995de | |||
9cf4a76196 | |||
9efe5287e4 | |||
8c4b34de4e | |||
93e3559dc3 | |||
caa0f63e1f | |||
a4e29e1244 | |||
599f2f43e3 | |||
3a453c5f73 | |||
98b313c75f | |||
8b796d80a7 | |||
719a8908a6 | |||
fed007ecae | |||
990443465f | |||
1f183b8a4e | |||
96556eb959 | |||
3ffeeac577 | |||
d7929a2340 | |||
667019a8c1 | |||
d9b46b4782 | |||
e249218a9d | |||
a2b1946b01 | |||
96a80f7ba0 | |||
9955fbf4f8 | |||
14966b0cd0 | |||
6e1a8f16a8 | |||
d106191e6a | |||
418cf6281e | |||
bdeb7d86b6 | |||
a0e0cc1038 | |||
78f6dec73b | |||
f6458f215f | |||
c7e0d547c4 | |||
fa54cfa0c3 | |||
31ea3f737c | |||
2a8a8065a8 | |||
d3ba002313 | |||
f18fd8d959 | |||
d54f7b13fb | |||
9c8b75206c | |||
15273c7f22 | |||
0ea8217c55 | |||
1735f28f5a | |||
8de4070f7f | |||
45e64f453f | |||
62dc5f2ac6 | |||
86c85a752e | |||
3de0ebf7fd | |||
1496ba0bbd | |||
f5974f6793 | |||
928ea3bb01 | |||
b7acb1d488 | |||
360d94dd67 | |||
671a813135 | |||
c005417f9b | |||
b5ec68bda3 | |||
b4ed29094d | |||
284ab031b8 | |||
6ad5064c09 | |||
3a8e723a36 | |||
dd3484b93f |
1
.gitignore
vendored
1
.gitignore
vendored
@ -45,6 +45,7 @@ intltool-merge.in
|
|||||||
intltool-update.in
|
intltool-update.in
|
||||||
libtool
|
libtool
|
||||||
m4/
|
m4/
|
||||||
|
man/gnome-shell.1
|
||||||
omf.make
|
omf.make
|
||||||
po/*.gmo
|
po/*.gmo
|
||||||
po/gnome-shell.pot
|
po/gnome-shell.pot
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
# Point to our macro directory and pick up user flags from the environment
|
# Point to our macro directory and pick up user flags from the environment
|
||||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
SUBDIRS = data js src browser-plugin tests po man docs
|
SUBDIRS = data js src browser-plugin tests po docs
|
||||||
|
|
||||||
|
if ENABLE_MAN
|
||||||
|
SUBDIRS += man
|
||||||
|
endif
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
.project \
|
.project \
|
||||||
@ -21,4 +25,4 @@ distcheck-hook:
|
|||||||
@echo "Checking disted files against files in git"
|
@echo "Checking disted files against files in git"
|
||||||
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
|
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
|
||||||
|
|
||||||
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
|
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man
|
||||||
|
30
NEWS
30
NEWS
@ -1,3 +1,33 @@
|
|||||||
|
3.7.1
|
||||||
|
=====
|
||||||
|
* Add shortcut to open application view directly [Jeremy; #685738]
|
||||||
|
* Expose '<Super>F10' shortcut in System Settings [Florian; #672909]
|
||||||
|
* Clean up timestamp format in chat notifications [Carlos; #680989]
|
||||||
|
* loginScreen: Add support for 'disable-restart-buttons' [Florian; #686247]
|
||||||
|
* Update textures automatically on file changes [Florian; #679268]
|
||||||
|
* Implement org.gnome.ScreenSaver.GetActiveTime [Giovanni; #686064]
|
||||||
|
* Add missing translations for GSetting schema [Giovanni; #686413]
|
||||||
|
* Hide workspace switcher completely when it's not necessary [Seif; #686483]
|
||||||
|
* Explicitly load gnome-screensaver when not running GDM [Tim; #683060]
|
||||||
|
* Port to GnomeIdleMonitor [Jasper; #682224]
|
||||||
|
* Set Empathy as preferred handler when delegating channels [Xavier; #686296]
|
||||||
|
* Allow testing GDM login dialog from the session [Giovanni; #683725]
|
||||||
|
* Use all available space for windows in window picker [Jasper, Pierre-Eric;
|
||||||
|
#582650]
|
||||||
|
* Use logind for suspend if available [Florian; #686482]
|
||||||
|
* Misc. fixes and cleanups [Jasper, Florian, Adel, Rui; #677426, #680426,
|
||||||
|
#686233, #686241, #686318, #686240, #686484, #686002, #684650, #686487]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jeremy Bicha, Giovanni Campagna, Xavier Claessens, Adel Gadllah, Seif Lotfy,
|
||||||
|
Tim Lunn, Rui Matos, Florian Müllner, Pierre-Eric Pelloux-Prayer,
|
||||||
|
Carlos Soriano, Jasper St. Pierre
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Andika Triwidada [id], Matej Urbančič [sl], Ihar Hrachyshka [be],
|
||||||
|
Daniel Mustieles [es], Fran Diéguez [gl], Takayuki KUSANO [ja],
|
||||||
|
Мирослав Николић [sr, sr@latin], Dušan Kazik [sk], Tom Tryfonidis [el]
|
||||||
|
|
||||||
3.6.1
|
3.6.1
|
||||||
=====
|
=====
|
||||||
* dash: Make padding even on the top/bottom of the dash [Jasper; #684619]
|
* dash: Make padding even on the top/bottom of the dash [Jasper; #684619]
|
||||||
|
@ -153,8 +153,6 @@ NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
|||||||
/* global initialization routine, called once when plugin
|
/* global initialization routine, called once when plugin
|
||||||
is loaded */
|
is loaded */
|
||||||
|
|
||||||
g_type_init ();
|
|
||||||
|
|
||||||
g_debug ("plugin loaded");
|
g_debug ("plugin loaded");
|
||||||
|
|
||||||
memcpy (&funcs, pfuncs, sizeof (funcs));
|
memcpy (&funcs, pfuncs, sizeof (funcs));
|
||||||
|
31
configure.ac
31
configure.ac
@ -1,5 +1,5 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[3.6.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
AC_INIT([gnome-shell],[3.7.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
@ -36,6 +36,8 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
|
|||||||
|
|
||||||
PKG_PROG_PKG_CONFIG([0.22])
|
PKG_PROG_PKG_CONFIG([0.22])
|
||||||
|
|
||||||
|
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
||||||
|
|
||||||
GLIB_GSETTINGS
|
GLIB_GSETTINGS
|
||||||
|
|
||||||
# Get a value to substitute into gnome-shell.in
|
# Get a value to substitute into gnome-shell.in
|
||||||
@ -52,7 +54,7 @@ AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
|
|||||||
if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
|
if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
build_recorder=true
|
build_recorder=true
|
||||||
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11"
|
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11 gtk+-3.0"
|
||||||
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0 xfixes gl)
|
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0 xfixes gl)
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@ -63,9 +65,9 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
|||||||
CLUTTER_MIN_VERSION=1.11.11
|
CLUTTER_MIN_VERSION=1.11.11
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
GJS_MIN_VERSION=1.33.2
|
GJS_MIN_VERSION=1.33.2
|
||||||
MUTTER_MIN_VERSION=3.6.1
|
MUTTER_MIN_VERSION=3.7.1
|
||||||
GTK_MIN_VERSION=3.3.9
|
GTK_MIN_VERSION=3.3.9
|
||||||
GIO_MIN_VERSION=2.31.6
|
GIO_MIN_VERSION=2.35.0
|
||||||
LIBECAL_MIN_VERSION=3.5.3
|
LIBECAL_MIN_VERSION=3.5.3
|
||||||
LIBEDATASERVER_MIN_VERSION=3.5.3
|
LIBEDATASERVER_MIN_VERSION=3.5.3
|
||||||
LIBEDATASERVERUI_MIN_VERSION=3.5.3
|
LIBEDATASERVERUI_MIN_VERSION=3.5.3
|
||||||
@ -74,7 +76,7 @@ TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
|||||||
POLKIT_MIN_VERSION=0.100
|
POLKIT_MIN_VERSION=0.100
|
||||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||||
GCR_MIN_VERSION=3.3.90
|
GCR_MIN_VERSION=3.3.90
|
||||||
GNOME_DESKTOP_REQUIRED_VERSION=3.5.1
|
GNOME_DESKTOP_REQUIRED_VERSION=3.7.1
|
||||||
GNOME_MENUS_REQUIRED_VERSION=3.5.3
|
GNOME_MENUS_REQUIRED_VERSION=3.5.3
|
||||||
|
|
||||||
# Collect more than 20 libraries for a prize!
|
# Collect more than 20 libraries for a prize!
|
||||||
@ -97,8 +99,7 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
|||||||
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
||||||
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
||||||
libnm-glib libnm-util gnome-keyring-1
|
libnm-glib libnm-util gnome-keyring-1
|
||||||
gcr-3 >= $GCR_MIN_VERSION
|
gcr-3 >= $GCR_MIN_VERSION)
|
||||||
gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||||
|
|
||||||
@ -120,7 +121,7 @@ CFLAGS=$saved_CFLAGS
|
|||||||
LIBS=$saved_LIBS
|
LIBS=$saved_LIBS
|
||||||
|
|
||||||
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
|
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
|
||||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 x11)
|
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
||||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
||||||
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
||||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.5.4)
|
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.5.4)
|
||||||
@ -139,7 +140,7 @@ PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
|
|||||||
AC_SUBST([HAVE_BLUETOOTH],[0])
|
AC_SUBST([HAVE_BLUETOOTH],[0])
|
||||||
AC_MSG_RESULT([no])])
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION libedataserverui-3.0 >= $LIBEDATASERVERUI_MIN_VERSION gio-2.0)
|
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION gio-2.0)
|
||||||
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
||||||
AC_SUBST(CALENDAR_SERVER_LIBS)
|
AC_SUBST(CALENDAR_SERVER_LIBS)
|
||||||
|
|
||||||
@ -208,6 +209,18 @@ AC_SUBST(TYPELIBDIR)
|
|||||||
|
|
||||||
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
|
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(man,
|
||||||
|
[AS_HELP_STRING([--enable-man],
|
||||||
|
[generate man pages [default=yes]])],,
|
||||||
|
enable_man=yes)
|
||||||
|
if test "$enable_man" != no; then
|
||||||
|
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
||||||
|
if test -z "$XSLTPROC"; then
|
||||||
|
AC_MSG_ERROR([xsltproc is required for --enable-man])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
||||||
|
|
||||||
# Stay command-line compatible with the gnome-common configure option. Here
|
# Stay command-line compatible with the gnome-common configure option. Here
|
||||||
# minimum/yes/maximum are the same, however.
|
# minimum/yes/maximum are the same, however.
|
||||||
AC_ARG_ENABLE(compile_warnings,
|
AC_ARG_ENABLE(compile_warnings,
|
||||||
|
@ -8,5 +8,14 @@
|
|||||||
<KeyListEntry name="toggle-message-tray"
|
<KeyListEntry name="toggle-message-tray"
|
||||||
_description="Show the message tray"/>
|
_description="Show the message tray"/>
|
||||||
|
|
||||||
|
<KeyListEntry name="focus-active-notification"
|
||||||
|
_description="Focus the active notification"/>
|
||||||
|
|
||||||
|
<KeyListEntry name="toggle-application-view"
|
||||||
|
_description="Show all applications"/>
|
||||||
|
|
||||||
|
<KeyListEntry name="open-application-menu"
|
||||||
|
_description="Open the application menu"/>
|
||||||
|
|
||||||
</KeyListEntries>
|
</KeyListEntries>
|
||||||
|
|
||||||
|
@ -57,6 +57,14 @@ value here is from the TpConnectionPresenceType enumeration.</_summary>
|
|||||||
<_summary>Internally used to store the last session presence status for the user. The
|
<_summary>Internally used to store the last session presence status for the user. The
|
||||||
value here is from the GsmPresenceStatus enumeration.</_summary>
|
value here is from the GsmPresenceStatus enumeration.</_summary>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="always-show-log-out" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
<_summary>Always show the 'Log out' menuitem in the user menu.</_summary>
|
||||||
|
<_description>
|
||||||
|
This key overrides the automatic hiding of the 'Log out'
|
||||||
|
menuitem in single-user, single-session situations.
|
||||||
|
</_description>
|
||||||
|
</key>
|
||||||
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
||||||
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
||||||
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
|
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
|
||||||
@ -83,6 +91,14 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
|
|||||||
Keybinding to open the application menu.
|
Keybinding to open the application menu.
|
||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="toggle-application-view" type="as">
|
||||||
|
<default>["<Super>a"]</default>
|
||||||
|
<_summary>Keybinding to open the "Show Applications" view</_summary>
|
||||||
|
<_description>
|
||||||
|
Keybinding to open the "Show Applications" view of the Activities
|
||||||
|
Overview.
|
||||||
|
</_description>
|
||||||
|
</key>
|
||||||
<key name="toggle-message-tray" type="as">
|
<key name="toggle-message-tray" type="as">
|
||||||
<default>["<Super>m"]</default>
|
<default>["<Super>m"]</default>
|
||||||
<_summary>Keybinding to toggle the visibility of the message tray</_summary>
|
<_summary>Keybinding to toggle the visibility of the message tray</_summary>
|
||||||
@ -90,6 +106,13 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
|
|||||||
Keybinding to toggle the visibility of the message tray.
|
Keybinding to toggle the visibility of the message tray.
|
||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="focus-active-notification" type="as">
|
||||||
|
<default>["<Super>n"]</default>
|
||||||
|
<_summary>Keybinding to focus the active notification</_summary>
|
||||||
|
<_description>
|
||||||
|
Keybinding to focus the active notification.
|
||||||
|
</_description>
|
||||||
|
</key>
|
||||||
<key name="toggle-recording" type="as">
|
<key name="toggle-recording" type="as">
|
||||||
<default><![CDATA[['<Control><Shift><Alt>r']]]></default>
|
<default><![CDATA[['<Control><Shift><Alt>r']]]></default>
|
||||||
<_summary>Keybinding to toggle the screen recorder</_summary>
|
<_summary>Keybinding to toggle the screen recorder</_summary>
|
||||||
@ -148,47 +171,48 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
|
|||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
<schema id="org.gnome.shell.overrides" path="/org/gnome/shell/overrides/">
|
<schema id="org.gnome.shell.overrides" path="/org/gnome/shell/overrides/"
|
||||||
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
<key name="attach-modal-dialogs" type="b">
|
<key name="attach-modal-dialogs" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Attach modal dialog to the parent window</summary>
|
<_summary>Attach modal dialog to the parent window</_summary>
|
||||||
<description>
|
<_description>
|
||||||
This key overrides the key in org.gnome.mutter when running
|
This key overrides the key in org.gnome.mutter when running
|
||||||
GNOME Shell.
|
GNOME Shell.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="button-layout" type="s">
|
<key name="button-layout" type="s">
|
||||||
<default>":close"</default>
|
<default>":close"</default>
|
||||||
<summary>Arrangement of buttons on the titlebar</summary>
|
<_summary>Arrangement of buttons on the titlebar</_summary>
|
||||||
<description>
|
<_description>
|
||||||
This key overrides the key in org.gnome.desktop.wm.preferences when
|
This key overrides the key in org.gnome.desktop.wm.preferences when
|
||||||
running GNOME Shell.
|
running GNOME Shell.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="edge-tiling" type="b">
|
<key name="edge-tiling" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Enable edge tiling when dropping windows on screen edges</summary>
|
<_summary>Enable edge tiling when dropping windows on screen edges</_summary>
|
||||||
<description>
|
<_description>
|
||||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="dynamic-workspaces" type="b">
|
<key name="dynamic-workspaces" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Workspaces are managed dynamically</summary>
|
<_summary>Workspaces are managed dynamically</_summary>
|
||||||
<description>
|
<_description>
|
||||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="workspaces-only-on-primary" type="b">
|
<key name="workspaces-only-on-primary" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Workspaces only on primary monitor</summary>
|
<_summary>Workspaces only on primary monitor</_summary>
|
||||||
<description>
|
<_description>
|
||||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="focus-change-on-pointer-rest" type="b">
|
<key name="focus-change-on-pointer-rest" type="b">
|
||||||
|
@ -39,7 +39,6 @@ stage {
|
|||||||
/* small */
|
/* small */
|
||||||
.app-well-menu,
|
.app-well-menu,
|
||||||
.contact-details-status,
|
.contact-details-status,
|
||||||
.run-dialog-label,
|
|
||||||
.run-dialog-error-label {
|
.run-dialog-error-label {
|
||||||
font-size: 9pt;
|
font-size: 9pt;
|
||||||
}
|
}
|
||||||
@ -311,7 +310,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
.notification-icon-button:focus,
|
.notification-icon-button:focus,
|
||||||
.hotplug-notification-item:focus,
|
.hotplug-notification-item:focus,
|
||||||
.modal-dialog-button:focus {
|
.modal-dialog-button:focus {
|
||||||
border: 2px solid #8b8b8b;
|
border-width: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dash-search-button:active,
|
.dash-search-button:active,
|
||||||
@ -326,17 +325,20 @@ StScrollBar StButton#vhandle:active {
|
|||||||
background-gradient-end: rgba(255, 255, 255, 0.2);
|
background-gradient-end: rgba(255, 255, 255, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notification-button:insensitive,
|
||||||
.notification-icon-button:insensitive,
|
.notification-icon-button:insensitive,
|
||||||
.notification-button:insensitive {
|
.modal-dialog-button:insensitive {
|
||||||
|
border-color: #666666;
|
||||||
color: #9f9f9f;
|
color: #9f9f9f;
|
||||||
|
background-gradient-direction: none;
|
||||||
|
background-color: rgba(102, 102, 102, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Entries */
|
/* Entries */
|
||||||
|
|
||||||
#searchEntry,
|
#searchEntry,
|
||||||
.notification StEntry,
|
.notification StEntry,
|
||||||
.login-dialog-prompt-entry,
|
.modal-dialog StEntry {
|
||||||
.prompt-dialog-password-entry {
|
|
||||||
color: rgb(64, 64, 64);
|
color: rgb(64, 64, 64);
|
||||||
caret-color: rgb(64, 64, 64);
|
caret-color: rgb(64, 64, 64);
|
||||||
font-size: 12pt;
|
font-size: 12pt;
|
||||||
@ -346,6 +348,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#searchEntry,
|
#searchEntry,
|
||||||
|
.run-dialog-entry,
|
||||||
.notification StEntry {
|
.notification StEntry {
|
||||||
border: 2px solid rgba(245,245,245,0.2);
|
border: 2px solid rgba(245,245,245,0.2);
|
||||||
background-gradient-start: rgba(5,5,6,0.1);
|
background-gradient-start: rgba(5,5,6,0.1);
|
||||||
@ -358,8 +361,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
#searchEntry:focus,
|
#searchEntry:focus,
|
||||||
#searchEntry:hover,
|
#searchEntry:hover,
|
||||||
.notification StEntry:focus,
|
.notification StEntry:focus,
|
||||||
.login-dialog-prompt-entry,
|
.modal-dialog StEntry {
|
||||||
.prompt-dialog-password-entry {
|
|
||||||
border: 2px solid rgb(136,138,133);
|
border: 2px solid rgb(136,138,133);
|
||||||
background-gradient-start: rgb(200,200,200);
|
background-gradient-start: rgb(200,200,200);
|
||||||
background-gradient-end: white;
|
background-gradient-end: white;
|
||||||
@ -368,12 +370,17 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.notification StEntry:focus,
|
.notification StEntry:focus,
|
||||||
.prompt-dialog-password-entry:focus,
|
.modal-dialog StEntry:focus {
|
||||||
.login-dialog-prompt-entry:focus {
|
|
||||||
border: 2px solid #3465a4;
|
border: 2px solid #3465a4;
|
||||||
}
|
}
|
||||||
|
|
||||||
#searchEntry {
|
#searchEntry {
|
||||||
|
border-color: rgba(245,245,245,0.3);
|
||||||
|
color: rgb(192, 192, 192);
|
||||||
|
caret-color: rgb(192, 192, 192);
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchEntry:hover {
|
||||||
color: rgb(128, 128, 128);
|
color: rgb(128, 128, 128);
|
||||||
caret-color: rgb(128, 128, 128);
|
caret-color: rgb(128, 128, 128);
|
||||||
}
|
}
|
||||||
@ -386,8 +393,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.notification StEntry,
|
.notification StEntry,
|
||||||
.prompt-dialog-password-entry,
|
.modal-dialog StEntry {
|
||||||
.login-dialog-prompt-entry {
|
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
padding: 4px 4px;
|
padding: 4px 4px;
|
||||||
}
|
}
|
||||||
@ -551,7 +557,6 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.status-chooser-combo.popup-combo-menu {
|
.status-chooser-combo.popup-combo-menu {
|
||||||
background-color: rgba(0,0,0,0.7);
|
|
||||||
padding: .4em 0em;
|
padding: .4em 0em;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
border: 1px solid #5f5f5f;
|
border: 1px solid #5f5f5f;
|
||||||
@ -569,7 +574,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
/* Overview */
|
/* Overview */
|
||||||
|
|
||||||
#overview {
|
#overview {
|
||||||
spacing: 12px;
|
spacing: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-caption {
|
.window-caption {
|
||||||
@ -614,9 +619,9 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
.window-close, .notification-close {
|
.window-close, .notification-close {
|
||||||
background-image: url("close-window.svg");
|
background-image: url("close-window.svg");
|
||||||
background-size: 34px;
|
background-size: 32px;
|
||||||
height: 34px;
|
height: 32px;
|
||||||
width: 34px;
|
width: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-close {
|
.window-close {
|
||||||
@ -627,19 +632,31 @@ StScrollBar StButton#vhandle:active {
|
|||||||
/* we start out in the top right of the
|
/* we start out in the top right of the
|
||||||
* notification, inset.
|
* notification, inset.
|
||||||
*
|
*
|
||||||
* center is 32px/2 = 17px
|
* center is 32px/2 = 16px
|
||||||
*
|
*
|
||||||
* adjust left 2px
|
* adjust left 2px
|
||||||
* adjust down 8px */
|
* adjust down 8px */
|
||||||
|
|
||||||
-shell-close-overlap-x: 15px;
|
-shell-close-overlap-x: 14px;
|
||||||
-shell-close-overlap-y: 12px;
|
-shell-close-overlap-y: -12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-close:rtl {
|
||||||
|
/* as above, but starting out in the top left of the
|
||||||
|
* notification. */
|
||||||
|
|
||||||
|
-shell-close-overlap-x: -14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-close:rtl {
|
.window-close:rtl {
|
||||||
-st-background-image-shadow: 2px 2px 6px rgba(0,0,0,0.5);
|
-st-background-image-shadow: 2px 2px 6px rgba(0,0,0,0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.window-picker {
|
||||||
|
-horizontal-spacing: 40px;
|
||||||
|
-vertical-spacing: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Dash */
|
/* Dash */
|
||||||
|
|
||||||
#dash {
|
#dash {
|
||||||
@ -677,6 +694,11 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
.search-entry-icon {
|
.search-entry-icon {
|
||||||
icon-size: 1em;
|
icon-size: 1em;
|
||||||
|
color: #c0c0c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchEntry:hover .search-entry-icon,
|
||||||
|
#searchEntry:focus .search-entry-icon {
|
||||||
color: #8d8f8a;
|
color: #8d8f8a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1188,7 +1210,6 @@ StScrollBar StButton#vhandle:active {
|
|||||||
background: #2e3436 url(message-tray-background.png);
|
background: #2e3436 url(message-tray-background.png);
|
||||||
background-repeat: repeat;
|
background-repeat: repeat;
|
||||||
transition-duration: 250;
|
transition-duration: 250;
|
||||||
height: 72px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#message-tray:keyboard {
|
#message-tray:keyboard {
|
||||||
@ -1198,7 +1219,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
#message-tray:overview {
|
#message-tray:overview {
|
||||||
background: rgba(0, 0, 0, 0.1);
|
background: rgba(0, 0, 0, 0.1);
|
||||||
border-top: 1px solid rgba(128, 128, 128, 0.3);
|
outline: 1px solid rgba(128, 128, 128, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification {
|
.notification {
|
||||||
@ -1411,6 +1432,10 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chat-notification-scrollview{
|
||||||
|
max-height: 22em;
|
||||||
|
}
|
||||||
|
|
||||||
.subscription-message {
|
.subscription-message {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
@ -1420,28 +1445,34 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#summary-mode {
|
#summary-mode {
|
||||||
padding: 0px 6px 0px 6px; /* same as the values in .summary-source */
|
height: 72px;
|
||||||
height: 60px;
|
|
||||||
spacing: 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-source-button {
|
.summary-source-button {
|
||||||
border-radius: 4px;
|
padding: 6px 3px 6px 3px;
|
||||||
transition-duration: 100;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-source-button:hover {
|
.summary-source-button:last-child:ltr {
|
||||||
|
padding-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-source-button:last-child:rtl {
|
||||||
|
padding-left: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-source-button:hover .summary-source {
|
||||||
background-color: rgba(255,255,255,0.1);
|
background-color: rgba(255,255,255,0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-source-button:focus,
|
.summary-source-button:focus .summary-source,
|
||||||
.summary-source-button:selected {
|
.summary-source-button:selected .summary-source {
|
||||||
background-color: rgba(255,255,255,0.33);
|
background-color: rgba(255,255,255,0.33);
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-source {
|
.summary-source {
|
||||||
padding-right: 6px;
|
border-radius: 4px;
|
||||||
padding-left: 6px;
|
padding: 0 6px 0 6px;
|
||||||
|
transition-duration: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-source-counter {
|
.summary-source-counter {
|
||||||
@ -1619,35 +1650,26 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding: 4px 32px 5px;
|
padding: 4px 32px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-dialog-button:insensitive {
|
|
||||||
color: rgb(60, 60, 60);
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-dialog-button:focus {
|
.modal-dialog-button:focus {
|
||||||
padding: 3px 31px 4px;
|
padding: 3px 31px 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Run Dialog */
|
/* Run Dialog */
|
||||||
|
|
||||||
|
.run-dialog-label {
|
||||||
|
font-size: 12pt;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #999999;
|
||||||
|
padding-bottom: .4em;
|
||||||
|
}
|
||||||
|
|
||||||
.run-dialog-error-box {
|
.run-dialog-error-box {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
spacing: 5px;
|
spacing: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.run-dialog-entry {
|
.modal-dialog .run-dialog-entry {
|
||||||
font-weight: bold;
|
width: 20em;
|
||||||
width: 23em;
|
|
||||||
selection-background-color: white;
|
|
||||||
selected-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.run-dialog {
|
|
||||||
border-radius: 16px;
|
|
||||||
|
|
||||||
padding-right: 21px;
|
|
||||||
padding-left: 21px;
|
|
||||||
padding-bottom: 15px;
|
|
||||||
padding-top: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox {
|
.lightbox {
|
||||||
@ -2173,24 +2195,20 @@ StScrollBar StButton#vhandle:active {
|
|||||||
height: .75em;
|
height: .75em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.login-dialog .modal-dialog-button {
|
.login-dialog .modal-dialog-button {
|
||||||
border: 1px solid #666666;
|
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
padding: 3px 18px;
|
padding: 3px 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-dialog .modal-dialog-button:focus {
|
.login-dialog .modal-dialog-button:focus {
|
||||||
padding: 2px 17px;
|
padding: 2px 17px;
|
||||||
border: 2px solid #8b8b8b;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-dialog .modal-dialog-button:default {
|
.login-dialog .modal-dialog-button:default {
|
||||||
background-gradient-start: #6793c4;
|
background-gradient-start: #6793c4;
|
||||||
background-gradient-end: #335d8f;
|
background-gradient-end: #335d8f;
|
||||||
background-gradient-direction: vertical;
|
background-gradient-direction: vertical;
|
||||||
padding: 2px 17px;
|
border-color: #16335d;
|
||||||
border: 2px solid #16335d;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-dialog .modal-dialog-button:default:focus {
|
.login-dialog .modal-dialog-button:default:focus {
|
||||||
@ -2208,6 +2226,13 @@ StScrollBar StButton#vhandle:active {
|
|||||||
background-gradient-end: #74a0d0;
|
background-gradient-end: #74a0d0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.login-dialog .modal-dialog-button:default:insensitive {
|
||||||
|
border-color: #666666;
|
||||||
|
color: #9f9f9f;
|
||||||
|
background-gradient-direction: none;
|
||||||
|
background-color: rgba(102, 102, 102, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
.login-dialog-message-warning {
|
.login-dialog-message-warning {
|
||||||
color: orange;
|
color: orange;
|
||||||
}
|
}
|
||||||
@ -2300,3 +2325,17 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.osd-window {
|
||||||
|
color: #ededed;
|
||||||
|
background-color: rgba(33, 37, 38, 0.80);
|
||||||
|
border-radius: 15px;
|
||||||
|
text-shadow: 0 1px rgba(0, 0, 0, 0.75);
|
||||||
|
|
||||||
|
padding: 40px;
|
||||||
|
spacing: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.osd-progress-bar {
|
||||||
|
height: 0.8em;
|
||||||
|
border: 1px solid;
|
||||||
|
}
|
||||||
|
@ -100,6 +100,7 @@ nobase_dist_js_DATA = \
|
|||||||
ui/components/__init__.js \
|
ui/components/__init__.js \
|
||||||
ui/components/autorunManager.js \
|
ui/components/autorunManager.js \
|
||||||
ui/components/automountManager.js \
|
ui/components/automountManager.js \
|
||||||
|
ui/components/mediaKeysManager.js \
|
||||||
ui/components/networkAgent.js \
|
ui/components/networkAgent.js \
|
||||||
ui/components/polkitAgent.js \
|
ui/components/polkitAgent.js \
|
||||||
ui/components/recorder.js \
|
ui/components/recorder.js \
|
||||||
|
@ -39,13 +39,14 @@ const GdmUtil = imports.gdm.util;
|
|||||||
const Lightbox = imports.ui.lightbox;
|
const Lightbox = imports.ui.lightbox;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const UserMenu = imports.ui.userMenu;
|
const UserMenu = imports.ui.userMenu;
|
||||||
|
|
||||||
const _RESIZE_ANIMATION_TIME = 0.25;
|
const _RESIZE_ANIMATION_TIME = 0.25;
|
||||||
const _SCROLL_ANIMATION_TIME = 0.5;
|
const _SCROLL_ANIMATION_TIME = 0.5;
|
||||||
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
||||||
const _LOGO_ICON_NAME_SIZE = 48;
|
const _LOGO_ICON_HEIGHT = 16;
|
||||||
|
|
||||||
let _loginDialog = null;
|
let _loginDialog = null;
|
||||||
|
|
||||||
@ -82,6 +83,36 @@ function _smoothlyResizeActor(actor, width, height) {
|
|||||||
return hold;
|
return hold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const LogoMenuButton = new Lang.Class({
|
||||||
|
Name: 'LogoMenuButton',
|
||||||
|
Extends: PanelMenu.Button,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent(0.0, null, true);
|
||||||
|
|
||||||
|
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
|
||||||
|
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
|
||||||
|
Lang.bind(this, this._updateLogo));
|
||||||
|
|
||||||
|
this._iconBin = new St.Bin();
|
||||||
|
this.actor.add_actor(this._iconBin);
|
||||||
|
|
||||||
|
this._updateLogo();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateLogo: function() {
|
||||||
|
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
|
||||||
|
let icon = null;
|
||||||
|
|
||||||
|
if (path) {
|
||||||
|
let file = Gio.file_new_for_path(path);
|
||||||
|
let cache = St.TextureCache.get_default();
|
||||||
|
icon = cache.load_uri_async(file.get_uri(), -1, _LOGO_ICON_HEIGHT);
|
||||||
|
}
|
||||||
|
this._iconBin.set_child(icon);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const UserListItem = new Lang.Class({
|
const UserListItem = new Lang.Class({
|
||||||
Name: 'UserListItem',
|
Name: 'UserListItem',
|
||||||
|
|
||||||
@ -638,35 +669,34 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._userManager = AccountsService.UserManager.get_default()
|
this._userManager = AccountsService.UserManager.get_default()
|
||||||
this._greeterClient = new Gdm.Client();
|
this._greeterClient = new Gdm.Client();
|
||||||
|
|
||||||
this._greeter = this._greeterClient.get_greeter_sync(null);
|
if (GLib.getenv('GDM_GREETER_TEST') != '1') {
|
||||||
|
this._greeter = this._greeterClient.get_greeter_sync(null);
|
||||||
|
|
||||||
this._greeter.connect('default-session-name-changed',
|
this._greeter.connect('default-session-name-changed',
|
||||||
Lang.bind(this, this._onDefaultSessionChanged));
|
Lang.bind(this, this._onDefaultSessionChanged));
|
||||||
|
|
||||||
this._greeter.connect('session-opened',
|
this._greeter.connect('session-opened',
|
||||||
Lang.bind(this, this._onSessionOpened));
|
Lang.bind(this, this._onSessionOpened));
|
||||||
this._greeter.connect('timed-login-requested',
|
this._greeter.connect('timed-login-requested',
|
||||||
Lang.bind(this, this._onTimedLoginRequested));
|
Lang.bind(this, this._onTimedLoginRequested));
|
||||||
|
}
|
||||||
|
|
||||||
this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient);
|
this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient);
|
||||||
this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion));
|
this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion));
|
||||||
this._userVerifier.connect('show-message', Lang.bind(this, this._showMessage));
|
this._userVerifier.connect('show-message', Lang.bind(this, this._showMessage));
|
||||||
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
|
this._userVerifier.connect('reset', Lang.bind(this, this._reset));
|
||||||
this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint));
|
this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint));
|
||||||
this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint));
|
this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint));
|
||||||
|
this._verifyingUser = false;
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
|
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
|
||||||
|
|
||||||
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
|
|
||||||
Lang.bind(this, this._updateLogo));
|
|
||||||
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
|
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
|
||||||
Lang.bind(this, this._updateBanner));
|
Lang.bind(this, this._updateBanner));
|
||||||
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY,
|
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY,
|
||||||
Lang.bind(this, this._updateBanner));
|
Lang.bind(this, this._updateBanner));
|
||||||
|
this._settings.connect('changed::' + GdmUtil.DISABLE_USER_LIST_KEY,
|
||||||
this._logoBox = new St.Bin({ style_class: 'login-dialog-logo-box' });
|
Lang.bind(this, this._updateDisableUserList));
|
||||||
this.contentLayout.add(this._logoBox);
|
|
||||||
this._updateLogo();
|
|
||||||
|
|
||||||
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
|
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
|
||||||
text: '' });
|
text: '' });
|
||||||
@ -674,7 +704,8 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._updateBanner();
|
this._updateBanner();
|
||||||
|
|
||||||
this._titleLabel = new St.Label({ style_class: 'login-dialog-title',
|
this._titleLabel = new St.Label({ style_class: 'login-dialog-title',
|
||||||
text: C_("title", "Sign In") });
|
text: C_("title", "Sign In"),
|
||||||
|
visible: false });
|
||||||
|
|
||||||
this.contentLayout.add(this._titleLabel,
|
this.contentLayout.add(this._titleLabel,
|
||||||
{ y_fill: false,
|
{ y_fill: false,
|
||||||
@ -704,6 +735,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
this._promptEntry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
this._promptEntry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
||||||
can_focus: true });
|
can_focus: true });
|
||||||
|
this._promptEntryTextChangedId = 0;
|
||||||
this._promptBox.add(this._promptEntry,
|
this._promptBox.add(this._promptEntry,
|
||||||
{ expand: true,
|
{ expand: true,
|
||||||
x_fill: true,
|
x_fill: true,
|
||||||
@ -742,7 +774,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
x_align: St.Align.START,
|
x_align: St.Align.START,
|
||||||
x_fill: true });
|
x_fill: true });
|
||||||
|
|
||||||
this._notListedButton.connect('clicked', Lang.bind(this, this._onNotListedClicked));
|
this._notListedButton.connect('clicked', Lang.bind(this, this._hideUserListAndLogIn));
|
||||||
|
|
||||||
this.contentLayout.add(this._notListedButton,
|
this.contentLayout.add(this._notListedButton,
|
||||||
{ expand: false,
|
{ expand: false,
|
||||||
@ -768,18 +800,19 @@ const LoginDialog = new Lang.Class({
|
|||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateLogo: function() {
|
_updateDisableUserList: function() {
|
||||||
this._logoBox.child = null;
|
let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
|
||||||
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
|
|
||||||
|
|
||||||
if (path) {
|
// If this is the first time around, set initial focus
|
||||||
let file = Gio.file_new_for_path(path);
|
if (this._disableUserList == undefined && disableUserList)
|
||||||
let uri = file.get_uri();
|
this.setInitialKeyFocus(this._promptEntry);
|
||||||
|
|
||||||
let textureCache = St.TextureCache.get_default();
|
if (disableUserList != this._disableUserList) {
|
||||||
this._logoBox.child = textureCache.load_uri_async(uri, -1, _LOGO_ICON_NAME_SIZE);
|
this._disableUserList = disableUserList;
|
||||||
|
|
||||||
|
if (!this._verifyingUser)
|
||||||
|
this._reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateBanner: function() {
|
_updateBanner: function() {
|
||||||
@ -794,32 +827,15 @@ const LoginDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onReset: function(client, serviceName) {
|
_reset: function() {
|
||||||
this._promptMessage.hide();
|
this._promptMessage.hide();
|
||||||
|
|
||||||
let tasks = [this._hidePrompt,
|
|
||||||
|
|
||||||
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
|
|
||||||
this._fadeInNotListedButton,
|
|
||||||
this._fadeInLogo]),
|
|
||||||
|
|
||||||
function() {
|
|
||||||
this._sessionList.close();
|
|
||||||
this._promptLoginHint.hide();
|
|
||||||
this._userList.actor.show();
|
|
||||||
this._userList.actor.opacity = 255;
|
|
||||||
return this._userList.showItems();
|
|
||||||
},
|
|
||||||
|
|
||||||
function() {
|
|
||||||
this._userList.actor.reactive = true;
|
|
||||||
this._userList.actor.grab_key_focus();
|
|
||||||
}];
|
|
||||||
|
|
||||||
this._user = null;
|
this._user = null;
|
||||||
|
this._verifyingUser = false;
|
||||||
|
|
||||||
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
if (this._disableUserList)
|
||||||
batch.run();
|
this._hideUserListAndLogIn();
|
||||||
|
else
|
||||||
|
this._showUserList();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDefaultSessionChanged: function(client, sessionId) {
|
_onDefaultSessionChanged: function(client, sessionId) {
|
||||||
@ -827,9 +843,13 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_showMessage: function(userVerifier, message, styleClass) {
|
_showMessage: function(userVerifier, message, styleClass) {
|
||||||
this._promptMessage.text = message;
|
if (message) {
|
||||||
this._promptMessage.styleClass = styleClass;
|
this._promptMessage.text = message;
|
||||||
GdmUtil.fadeInActor(this._promptMessage);
|
this._promptMessage.styleClass = styleClass;
|
||||||
|
GdmUtil.fadeInActor(this._promptMessage);
|
||||||
|
} else {
|
||||||
|
GdmUtil.fadeOutActor(this._promptMessage);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_showLoginHint: function(verifier, message) {
|
_showLoginHint: function(verifier, message) {
|
||||||
@ -870,6 +890,9 @@ const LoginDialog = new Lang.Class({
|
|||||||
if (this._user && this._user.is_logged_in())
|
if (this._user && this._user.is_logged_in())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
if (!this._verifyingUser)
|
||||||
|
return null;
|
||||||
|
|
||||||
return GdmUtil.fadeInActor(this._sessionList.actor);
|
return GdmUtil.fadeInActor(this._sessionList.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -882,17 +905,21 @@ const LoginDialog = new Lang.Class({
|
|||||||
return batch.run();
|
return batch.run();
|
||||||
},
|
},
|
||||||
|
|
||||||
_showPrompt: function() {
|
_showPrompt: function(forSecret) {
|
||||||
let hold = new Batch.Hold();
|
let hold = new Batch.Hold();
|
||||||
|
|
||||||
let buttons = [{ action: Lang.bind(this, this.cancel),
|
let cancelButtonInfo = { action: Lang.bind(this, this.cancel),
|
||||||
label: _("Cancel"),
|
label: _("Cancel"),
|
||||||
key: Clutter.Escape },
|
key: Clutter.Escape };
|
||||||
{ action: Lang.bind(this, function() {
|
let okButtonInfo = { action: Lang.bind(this, function() {
|
||||||
hold.release();
|
hold.release();
|
||||||
}),
|
}),
|
||||||
label: C_("button", "Sign In"),
|
label: forSecret ? C_("button", "Sign In") : _("Next"),
|
||||||
default: true }];
|
default: true };
|
||||||
|
let buttons = [];
|
||||||
|
if (!this._disableUserList || this._verifyingUser)
|
||||||
|
buttons.push(cancelButtonInfo);
|
||||||
|
buttons.push(okButtonInfo);
|
||||||
|
|
||||||
let tasks = [function() {
|
let tasks = [function() {
|
||||||
return this._fadeInPrompt();
|
return this._fadeInPrompt();
|
||||||
@ -900,6 +927,16 @@ const LoginDialog = new Lang.Class({
|
|||||||
|
|
||||||
function() {
|
function() {
|
||||||
this.setButtons(buttons);
|
this.setButtons(buttons);
|
||||||
|
|
||||||
|
let updateOkButtonEnabled = Lang.bind(this, function() {
|
||||||
|
let sensitive = this._promptEntry.text.length > 0;
|
||||||
|
okButtonInfo.button.reactive = sensitive;
|
||||||
|
okButtonInfo.button.can_focus = sensitive;
|
||||||
|
});
|
||||||
|
|
||||||
|
updateOkButtonEnabled();
|
||||||
|
|
||||||
|
this._promptEntryTextChangedId = this._promptEntry.clutter_text.connect('text-changed', updateOkButtonEnabled);
|
||||||
},
|
},
|
||||||
|
|
||||||
hold];
|
hold];
|
||||||
@ -912,6 +949,11 @@ const LoginDialog = new Lang.Class({
|
|||||||
_hidePrompt: function() {
|
_hidePrompt: function() {
|
||||||
this.setButtons([]);
|
this.setButtons([]);
|
||||||
|
|
||||||
|
if (this._promptEntryTextChangedId > 0) {
|
||||||
|
this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId);
|
||||||
|
this._promptEntryTextChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
let tasks = [function() {
|
let tasks = [function() {
|
||||||
return GdmUtil.fadeOutActor(this._promptBox);
|
return GdmUtil.fadeOutActor(this._promptBox);
|
||||||
},
|
},
|
||||||
@ -933,7 +975,9 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._promptEntry.set_text('');
|
this._promptEntry.set_text('');
|
||||||
this._promptEntry.clutter_text.set_password_char(passwordChar);
|
this._promptEntry.clutter_text.set_password_char(passwordChar);
|
||||||
|
|
||||||
let tasks = [this._showPrompt,
|
let tasks = [function() {
|
||||||
|
return this._showPrompt(!!passwordChar);
|
||||||
|
},
|
||||||
|
|
||||||
function() {
|
function() {
|
||||||
let _text = this._promptEntry.get_text();
|
let _text = this._promptEntry.get_text();
|
||||||
@ -945,6 +989,23 @@ const LoginDialog = new Lang.Class({
|
|||||||
return batch.run();
|
return batch.run();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_askForUsernameAndLogIn: function() {
|
||||||
|
this._promptLabel.set_text(_("Username: "));
|
||||||
|
this._promptEntry.set_text('');
|
||||||
|
this._promptEntry.clutter_text.set_password_char('');
|
||||||
|
|
||||||
|
let tasks = [this._showPrompt,
|
||||||
|
|
||||||
|
function() {
|
||||||
|
let userName = this._promptEntry.get_text();
|
||||||
|
this._promptEntry.reactive = false;
|
||||||
|
return this._beginVerificationForUser(userName);
|
||||||
|
}];
|
||||||
|
|
||||||
|
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
||||||
|
return batch.run();
|
||||||
|
},
|
||||||
|
|
||||||
_onSessionOpened: function(client, serviceName) {
|
_onSessionOpened: function(client, serviceName) {
|
||||||
this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
|
this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
|
||||||
},
|
},
|
||||||
@ -1073,7 +1134,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onNotListedClicked: function(user) {
|
_hideUserListAndLogIn: function() {
|
||||||
let tasks = [function() {
|
let tasks = [function() {
|
||||||
return this._userList.hideItems();
|
return this._userList.hideItems();
|
||||||
},
|
},
|
||||||
@ -1087,26 +1148,37 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
||||||
this._fadeOutNotListedButton,
|
this._fadeOutNotListedButton]),
|
||||||
this._fadeOutLogo]),
|
|
||||||
|
|
||||||
function() {
|
function() {
|
||||||
let hold = new Batch.Hold();
|
return this._askForUsernameAndLogIn();
|
||||||
|
|
||||||
this._userVerifier.begin(null, hold);
|
|
||||||
return hold;
|
|
||||||
}];
|
}];
|
||||||
|
|
||||||
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
||||||
batch.run();
|
batch.run();
|
||||||
},
|
},
|
||||||
|
|
||||||
_fadeInLogo: function() {
|
_showUserList: function() {
|
||||||
return GdmUtil.fadeInActor(this._logoBox);
|
let tasks = [this._hidePrompt,
|
||||||
},
|
|
||||||
|
|
||||||
_fadeOutLogo: function() {
|
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
|
||||||
return GdmUtil.fadeOutActor(this._logoBox);
|
this._fadeInNotListedButton]),
|
||||||
|
|
||||||
|
function() {
|
||||||
|
this._sessionList.close();
|
||||||
|
this._promptLoginHint.hide();
|
||||||
|
this._userList.actor.show();
|
||||||
|
this._userList.actor.opacity = 255;
|
||||||
|
return this._userList.showItems();
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
this._userList.actor.reactive = true;
|
||||||
|
this._userList.actor.grab_key_focus();
|
||||||
|
}];
|
||||||
|
|
||||||
|
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
||||||
|
batch.run();
|
||||||
},
|
},
|
||||||
|
|
||||||
_fadeInBanner: function() {
|
_fadeInBanner: function() {
|
||||||
@ -1137,6 +1209,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
let hold = new Batch.Hold();
|
let hold = new Batch.Hold();
|
||||||
|
|
||||||
this._userVerifier.begin(userName, hold);
|
this._userVerifier.begin(userName, hold);
|
||||||
|
this._verifyingUser = true;
|
||||||
return hold;
|
return hold;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1157,8 +1230,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
||||||
this._fadeOutNotListedButton,
|
this._fadeOutNotListedButton]),
|
||||||
this._fadeOutLogo]),
|
|
||||||
|
|
||||||
function() {
|
function() {
|
||||||
return this._userList.shrinkToNaturalHeight();
|
return this._userList.shrinkToNaturalHeight();
|
||||||
@ -1190,6 +1262,8 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._userList.addUser(users[i]);
|
this._userList.addUser(users[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._updateDisableUserList();
|
||||||
|
|
||||||
this._userManager.connect('user-added',
|
this._userManager.connect('user-added',
|
||||||
Lang.bind(this, function(userManager, user) {
|
Lang.bind(this, function(userManager, user) {
|
||||||
this._userList.addUser(user);
|
this._userList.addUser(user);
|
||||||
|
@ -18,11 +18,12 @@
|
|||||||
* 02111-1307, USA.
|
* 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const UPowerGlib = imports.gi.UPowerGlib;
|
|
||||||
|
|
||||||
const LoginManager = imports.misc.loginManager;
|
const LoginManager = imports.misc.loginManager;
|
||||||
|
|
||||||
|
const GdmUtil = imports.gdm.util;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
@ -33,15 +34,14 @@ const PowerMenuButton = new Lang.Class({
|
|||||||
_init: function() {
|
_init: function() {
|
||||||
/* Translators: accessible name of the power menu in the login screen */
|
/* Translators: accessible name of the power menu in the login screen */
|
||||||
this.parent('system-shutdown-symbolic', _("Power"));
|
this.parent('system-shutdown-symbolic', _("Power"));
|
||||||
this._upClient = new UPowerGlib.Client();
|
|
||||||
|
|
||||||
this._loginManager = LoginManager.getLoginManager();
|
this._loginManager = LoginManager.getLoginManager();
|
||||||
|
|
||||||
this._createSubMenu();
|
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
|
||||||
|
this._settings.connect('changed::disable-restart-buttons',
|
||||||
|
Lang.bind(this, this._updateVisibility));
|
||||||
|
|
||||||
this._upClient.connect('notify::can-suspend',
|
this._createSubMenu();
|
||||||
Lang.bind(this, this._updateHaveSuspend));
|
|
||||||
this._updateHaveSuspend();
|
|
||||||
|
|
||||||
// ConsoleKit doesn't send notifications when shutdown/reboot
|
// ConsoleKit doesn't send notifications when shutdown/reboot
|
||||||
// are disabled, so we update the menu item each time the menu opens
|
// are disabled, so we update the menu item each time the menu opens
|
||||||
@ -50,15 +50,17 @@ const PowerMenuButton = new Lang.Class({
|
|||||||
if (open) {
|
if (open) {
|
||||||
this._updateHaveShutdown();
|
this._updateHaveShutdown();
|
||||||
this._updateHaveRestart();
|
this._updateHaveRestart();
|
||||||
|
this._updateHaveSuspend();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
this._updateHaveShutdown();
|
this._updateHaveShutdown();
|
||||||
this._updateHaveRestart();
|
this._updateHaveRestart();
|
||||||
|
this._updateHaveSuspend();
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateVisibility: function() {
|
_updateVisibility: function() {
|
||||||
let shouldBeVisible = (this._haveSuspend || this._haveShutdown || this._haveRestart);
|
let shouldBeVisible = (this._haveSuspend || this._haveShutdown || this._haveRestart);
|
||||||
this.actor.visible = shouldBeVisible;
|
this.actor.visible = shouldBeVisible && !this._settings.get_boolean('disable-restart-buttons');
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateHaveShutdown: function() {
|
_updateHaveShutdown: function() {
|
||||||
@ -78,9 +80,11 @@ const PowerMenuButton = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updateHaveSuspend: function() {
|
_updateHaveSuspend: function() {
|
||||||
this._haveSuspend = this._upClient.get_can_suspend();
|
this._loginManager.canSuspend(Lang.bind(this, function(result) {
|
||||||
this._suspendItem.actor.visible = this._haveSuspend;
|
this._haveSuspend = result;
|
||||||
this._updateVisibility();
|
this._suspendItem.actor.visible = this._haveSuspend;
|
||||||
|
this._updateVisibility();
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_createSubMenu: function() {
|
_createSubMenu: function() {
|
||||||
@ -103,8 +107,10 @@ const PowerMenuButton = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onActivateSuspend: function() {
|
_onActivateSuspend: function() {
|
||||||
if (this._haveSuspend)
|
if (!this._haveSuspend)
|
||||||
this._upClient.suspend_sync(null);
|
return;
|
||||||
|
|
||||||
|
this._loginManager.suspend();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onActivateRestart: function() {
|
_onActivateRestart: function() {
|
||||||
|
@ -23,6 +23,7 @@ const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
|
|||||||
const ALLOWED_FAILURES_KEY = 'allowed-failures';
|
const ALLOWED_FAILURES_KEY = 'allowed-failures';
|
||||||
|
|
||||||
const LOGO_KEY = 'logo';
|
const LOGO_KEY = 'logo';
|
||||||
|
const DISABLE_USER_LIST_KEY = 'disable-user-list';
|
||||||
|
|
||||||
function fadeInActor(actor) {
|
function fadeInActor(actor) {
|
||||||
if (actor.opacity == 255 && actor.visible)
|
if (actor.opacity == 255 && actor.visible)
|
||||||
@ -125,6 +126,9 @@ const ShellUserVerifier = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
answerQuery: function(serviceName, answer) {
|
answerQuery: function(serviceName, answer) {
|
||||||
|
// Clear any previous message
|
||||||
|
this.emit('show-message', null, null);
|
||||||
|
|
||||||
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
|
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -330,12 +334,11 @@ const ShellUserVerifier = new Lang.Class({
|
|||||||
// Otherwise, we allow ALLOWED_FAILURES attempts. After that, we
|
// Otherwise, we allow ALLOWED_FAILURES attempts. After that, we
|
||||||
// go back to the welcome screen.
|
// go back to the welcome screen.
|
||||||
|
|
||||||
|
this._failCounter++;
|
||||||
let canRetry = retry && this._userName &&
|
let canRetry = retry && this._userName &&
|
||||||
this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY);
|
this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY);
|
||||||
|
|
||||||
if (canRetry) {
|
if (canRetry) {
|
||||||
this._failCounter++;
|
|
||||||
|
|
||||||
this.clear();
|
this.clear();
|
||||||
this.begin(this._userName, new Batch.Hold());
|
this.begin(this._userName, new Batch.Hold());
|
||||||
} else {
|
} else {
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
|
const UPowerGlib = imports.gi.UPowerGlib;
|
||||||
|
|
||||||
const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager'>
|
const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager'>
|
||||||
<method name='PowerOff'>
|
<method name='PowerOff'>
|
||||||
@ -12,12 +14,24 @@ const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager
|
|||||||
<method name='Reboot'>
|
<method name='Reboot'>
|
||||||
<arg type='b' direction='in'/>
|
<arg type='b' direction='in'/>
|
||||||
</method>
|
</method>
|
||||||
|
<method name='Suspend'>
|
||||||
|
<arg type='b' direction='in'/>
|
||||||
|
</method>
|
||||||
|
<method name='Hibernate'>
|
||||||
|
<arg type='b' direction='in'/>
|
||||||
|
</method>
|
||||||
<method name='CanPowerOff'>
|
<method name='CanPowerOff'>
|
||||||
<arg type='s' direction='out'/>
|
<arg type='s' direction='out'/>
|
||||||
</method>
|
</method>
|
||||||
<method name='CanReboot'>
|
<method name='CanReboot'>
|
||||||
<arg type='s' direction='out'/>
|
<arg type='s' direction='out'/>
|
||||||
</method>
|
</method>
|
||||||
|
<method name='CanSuspend'>
|
||||||
|
<arg type='s' direction='out'/>
|
||||||
|
</method>
|
||||||
|
<method name='CanHibernate'>
|
||||||
|
<arg type='s' direction='out'/>
|
||||||
|
</method>
|
||||||
</interface>;
|
</interface>;
|
||||||
|
|
||||||
const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session'>
|
const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session'>
|
||||||
@ -123,12 +137,38 @@ const LoginManagerSystemd = new Lang.Class({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
canSuspend: function(asyncCallback) {
|
||||||
|
this._proxy.CanSuspendRemote(function(result, error) {
|
||||||
|
if (error)
|
||||||
|
asyncCallback(false);
|
||||||
|
else
|
||||||
|
asyncCallback(result[0] != 'no');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
canHibernate: function(asyncCallback) {
|
||||||
|
this._proxy.CanSuspendRemote(function(result, error) {
|
||||||
|
if (error)
|
||||||
|
asyncCallback(false);
|
||||||
|
else
|
||||||
|
asyncCallback(result[0] != 'no');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
powerOff: function() {
|
powerOff: function() {
|
||||||
this._proxy.PowerOffRemote(true);
|
this._proxy.PowerOffRemote(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
reboot: function() {
|
reboot: function() {
|
||||||
this._proxy.RebootRemote(true);
|
this._proxy.RebootRemote(true);
|
||||||
|
},
|
||||||
|
|
||||||
|
suspend: function() {
|
||||||
|
this._proxy.SuspendRemote(true);
|
||||||
|
},
|
||||||
|
|
||||||
|
hibernate: function() {
|
||||||
|
this._proxy.HibernateRemote(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -139,6 +179,7 @@ const LoginManagerConsoleKit = new Lang.Class({
|
|||||||
this._proxy = new ConsoleKitManager(Gio.DBus.system,
|
this._proxy = new ConsoleKitManager(Gio.DBus.system,
|
||||||
'org.freedesktop.ConsoleKit',
|
'org.freedesktop.ConsoleKit',
|
||||||
'/org/freedesktop/ConsoleKit/Manager');
|
'/org/freedesktop/ConsoleKit/Manager');
|
||||||
|
this._upClient = new UPowerGlib.Client();
|
||||||
},
|
},
|
||||||
|
|
||||||
// Having this function is a bit of a hack since the Systemd and ConsoleKit
|
// Having this function is a bit of a hack since the Systemd and ConsoleKit
|
||||||
@ -186,12 +227,33 @@ const LoginManagerConsoleKit = new Lang.Class({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
canSuspend: function(asyncCallback) {
|
||||||
|
Mainloop.idle_add(Lang.bind(this, function() {
|
||||||
|
asyncCallback(this._upClient.get_can_suspend());
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
canHibernate: function(asyncCallback) {
|
||||||
|
Mainloop.idle_add(Lang.bind(this, function() {
|
||||||
|
asyncCallback(this._upClient.get_can_hibernate());
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
powerOff: function() {
|
powerOff: function() {
|
||||||
this._proxy.StopRemote();
|
this._proxy.StopRemote();
|
||||||
},
|
},
|
||||||
|
|
||||||
reboot: function() {
|
reboot: function() {
|
||||||
this._proxy.RestartRemote();
|
this._proxy.RestartRemote();
|
||||||
|
},
|
||||||
|
|
||||||
|
suspend: function() {
|
||||||
|
this._upClient.suspend_sync(null);
|
||||||
|
},
|
||||||
|
|
||||||
|
hibernate: function() {
|
||||||
|
this._upClient.hibernate_sync(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -46,8 +46,70 @@ let _providersTable;
|
|||||||
function _getProvidersTable() {
|
function _getProvidersTable() {
|
||||||
if (_providersTable)
|
if (_providersTable)
|
||||||
return _providersTable;
|
return _providersTable;
|
||||||
let [providers, countryCodes] = Shell.mobile_providers_parse();
|
return _providersTable = Shell.mobile_providers_parse(null,null);
|
||||||
return _providersTable = providers;
|
}
|
||||||
|
|
||||||
|
function findProviderForMCCMNC(table, needle) {
|
||||||
|
let needlemcc = needle.substring(0, 3);
|
||||||
|
let needlemnc = needle.substring(3, needle.length);
|
||||||
|
|
||||||
|
let name2, name3;
|
||||||
|
for (let iter in table) {
|
||||||
|
let country = table[iter];
|
||||||
|
let providers = country.get_providers();
|
||||||
|
|
||||||
|
// Search through each country's providers
|
||||||
|
for (let i = 0; i < providers.length; i++) {
|
||||||
|
let provider = providers[i];
|
||||||
|
|
||||||
|
// Search through MCC/MNC list
|
||||||
|
let list = provider.get_gsm_mcc_mnc();
|
||||||
|
for (let j = 0; j < list.length; j++) {
|
||||||
|
let mccmnc = list[j];
|
||||||
|
|
||||||
|
// Match both 2-digit and 3-digit MNC; prefer a
|
||||||
|
// 3-digit match if found, otherwise a 2-digit one.
|
||||||
|
if (mccmnc.mcc != needlemcc)
|
||||||
|
continue; // MCC was wrong
|
||||||
|
|
||||||
|
if (!name3 && needle.length == 6 && needlemnc == mccmnc.mnc)
|
||||||
|
name3 = provider.name;
|
||||||
|
|
||||||
|
if (!name2 && needlemnc.substring(0, 2) == mccmnc.mnc.substring(0, 2))
|
||||||
|
name2 = provider.name;
|
||||||
|
|
||||||
|
if (name2 && name3)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return name3 || name2 || null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function findProviderForSid(table, sid) {
|
||||||
|
if (sid == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Search through each country
|
||||||
|
for (let iter in table) {
|
||||||
|
let country = table[iter];
|
||||||
|
let providers = country.get_providers();
|
||||||
|
|
||||||
|
// Search through each country's providers
|
||||||
|
for (let i = 0; i < providers.length; i++) {
|
||||||
|
let provider = providers[i];
|
||||||
|
let cdma_sid = provider.get_cdma_sid();
|
||||||
|
|
||||||
|
// Search through CDMA SID list
|
||||||
|
for (let j = 0; j < cdma_sid.length; j++) {
|
||||||
|
if (cdma_sid[j] == sid)
|
||||||
|
return provider.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ModemGsm = new Lang.Class({
|
const ModemGsm = new Lang.Class({
|
||||||
@ -91,64 +153,29 @@ const ModemGsm = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_findOperatorName: function(name, opCode) {
|
_findOperatorName: function(name, opCode) {
|
||||||
if (name.length != 0 && (name.length > 6 || name.length < 5)) {
|
if (name) {
|
||||||
// this looks like a valid name, i.e. not an MCCMNC (that some
|
if (name && name.length != 0 && (name.length > 6 || name.length < 5)) {
|
||||||
// devices return when not yet connected
|
// this looks like a valid name, i.e. not an MCCMNC (that some
|
||||||
return name;
|
// devices return when not yet connected
|
||||||
}
|
return name;
|
||||||
if (isNaN(parseInt(name))) {
|
}
|
||||||
// name is definitely not a MCCMNC, so it may be a name
|
if (isNaN(parseInt(name))) {
|
||||||
// after all; return that
|
// name is definitely not a MCCMNC, so it may be a name
|
||||||
return name;
|
// after all; return that
|
||||||
|
return name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let needle;
|
let needle;
|
||||||
if (name.length == 0 && opCode)
|
if ((name == null || name.length == 0) && opCode)
|
||||||
needle = opCode;
|
needle = opCode;
|
||||||
else if (name.length == 6 || name.length == 5)
|
else if (name.length == 6 || name.length == 5)
|
||||||
needle = name;
|
needle = name;
|
||||||
else // nothing to search
|
else // nothing to search
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return this._findProviderForMCCMNC(needle);
|
|
||||||
},
|
|
||||||
|
|
||||||
_findProviderForMCCMNC: function(needle) {
|
|
||||||
let table = _getProvidersTable();
|
let table = _getProvidersTable();
|
||||||
let needlemcc = needle.substring(0, 3);
|
return findProviderForMCCMNC(table, needle);
|
||||||
let needlemnc = needle.substring(3, needle.length);
|
|
||||||
|
|
||||||
let name2, name3;
|
|
||||||
for (let iter in table) {
|
|
||||||
let providers = table[iter];
|
|
||||||
|
|
||||||
// Search through each country's providers
|
|
||||||
for (let i = 0; i < providers.length; i++) {
|
|
||||||
let provider = providers[i];
|
|
||||||
|
|
||||||
// Search through MCC/MNC list
|
|
||||||
let list = provider.get_gsm_mcc_mnc();
|
|
||||||
for (let j = 0; j < list.length; j++) {
|
|
||||||
let mccmnc = list[j];
|
|
||||||
|
|
||||||
// Match both 2-digit and 3-digit MNC; prefer a
|
|
||||||
// 3-digit match if found, otherwise a 2-digit one.
|
|
||||||
if (mccmnc.mcc != needlemcc)
|
|
||||||
continue; // MCC was wrong
|
|
||||||
|
|
||||||
if (!name3 && needle.length == 6 && needlemnc == mccmnc.mnc)
|
|
||||||
name3 = provider.name;
|
|
||||||
|
|
||||||
if (!name2 && needlemnc.substring(0, 2) == mccmnc.mnc.substring(0, 2))
|
|
||||||
name2 = provider.name;
|
|
||||||
|
|
||||||
if (name2 && name3)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return name3 || name2 || null;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(ModemGsm.prototype);
|
Signals.addSignalMethods(ModemGsm.prototype);
|
||||||
@ -189,39 +216,14 @@ const ModemCdma = new Lang.Class({
|
|||||||
this.operator_name = null;
|
this.operator_name = null;
|
||||||
} else {
|
} else {
|
||||||
let [bandClass, band, id] = result;
|
let [bandClass, band, id] = result;
|
||||||
if (name.length > 0)
|
if (name.length > 0) {
|
||||||
this.operator_name = this._findProviderForSid(id);
|
let table = _getProvidersTable();
|
||||||
else
|
this.operator_name = findProviderForSid(table, id);
|
||||||
|
} else
|
||||||
this.operator_name = null;
|
this.operator_name = null;
|
||||||
}
|
}
|
||||||
this.emit('notify::operator-name');
|
this.emit('notify::operator-name');
|
||||||
}));
|
}));
|
||||||
},
|
|
||||||
|
|
||||||
_findProviderForSid: function(sid) {
|
|
||||||
if (sid == 0)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
let table = _getProvidersTable();
|
|
||||||
|
|
||||||
// Search through each country
|
|
||||||
for (let iter in table) {
|
|
||||||
let providers = table[iter];
|
|
||||||
|
|
||||||
// Search through each country's providers
|
|
||||||
for (let i = 0; i < providers.length; i++) {
|
|
||||||
let provider = providers[i];
|
|
||||||
let cdma_sid = provider.get_cdma_sid();
|
|
||||||
|
|
||||||
// Search through CDMA SID list
|
|
||||||
for (let j = 0; j < cdma_sid.length; j++) {
|
|
||||||
if (cdma_sid[j] == sid)
|
|
||||||
return provider.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(ModemCdma.prototype);
|
Signals.addSignalMethods(ModemCdma.prototype);
|
||||||
|
@ -288,3 +288,31 @@ function insertSorted(array, val, cmp) {
|
|||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wrapKeybinding:
|
||||||
|
*
|
||||||
|
* Wrap a keybinding handler so that
|
||||||
|
* it ignores an invocation if the shell is modal, but
|
||||||
|
* not when the overview is active, or when global
|
||||||
|
* keybindings are allowed by session mode.
|
||||||
|
* This function is only useful for keybindings installed
|
||||||
|
* with Meta.KeybindingFlags.HANDLE_WHEN_GRABBED
|
||||||
|
*/
|
||||||
|
function wrapKeybinding(handler, onlyInOverview) {
|
||||||
|
return function() {
|
||||||
|
let handle;
|
||||||
|
|
||||||
|
if (onlyInOverview) {
|
||||||
|
handle = Main.sessionMode.allowKeybindingsWhenModal ||
|
||||||
|
Main.modalCount == (Main.overview.visible ? 1 : 0);
|
||||||
|
} else {
|
||||||
|
handle = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (handle)
|
||||||
|
return handler.apply(this, arguments);
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -199,7 +199,7 @@ const AltTabPopup = new Lang.Class({
|
|||||||
this.actor.get_allocation_box();
|
this.actor.get_allocation_box();
|
||||||
|
|
||||||
// Make the initial selection
|
// Make the initial selection
|
||||||
if (binding == 'switch-group') {
|
if (binding == 'internal-keybinding-switch-group') {
|
||||||
if (backward) {
|
if (backward) {
|
||||||
this._select(0, this._appIcons[0].cachedWindows.length - 1);
|
this._select(0, this._appIcons[0].cachedWindows.length - 1);
|
||||||
} else {
|
} else {
|
||||||
@ -208,9 +208,9 @@ const AltTabPopup = new Lang.Class({
|
|||||||
else
|
else
|
||||||
this._select(0, 0);
|
this._select(0, 0);
|
||||||
}
|
}
|
||||||
} else if (binding == 'switch-group-backward') {
|
} else if (binding == 'internal-keybinding-switch-group-backward') {
|
||||||
this._select(0, this._appIcons[0].cachedWindows.length - 1);
|
this._select(0, this._appIcons[0].cachedWindows.length - 1);
|
||||||
} else if (binding == 'switch-windows-backward') {
|
} else if (binding == 'internal-keybinding-switch-windows-backward') {
|
||||||
this._select(this._appIcons.length - 1);
|
this._select(this._appIcons.length - 1);
|
||||||
} else if (this._appIcons.length == 1) {
|
} else if (this._appIcons.length == 1) {
|
||||||
this._select(0);
|
this._select(0);
|
||||||
|
@ -479,7 +479,6 @@ const AppWellIcon = new Lang.Class({
|
|||||||
Lang.bind(this,
|
Lang.bind(this,
|
||||||
this._onStateChanged));
|
this._onStateChanged));
|
||||||
this._onStateChanged();
|
this._onStateChanged();
|
||||||
this.isMenuUp = false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
@ -561,7 +560,8 @@ const AppWellIcon = new Lang.Class({
|
|||||||
this._menuManager.addMenu(this._menu);
|
this._menuManager.addMenu(this._menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isMenuUp = true;
|
this.emit('menu-state-changed', true);
|
||||||
|
|
||||||
this.actor.set_hover(true);
|
this.actor.set_hover(true);
|
||||||
this._menu.popup();
|
this._menu.popup();
|
||||||
|
|
||||||
@ -578,7 +578,7 @@ const AppWellIcon = new Lang.Class({
|
|||||||
|
|
||||||
_onMenuPoppedDown: function() {
|
_onMenuPoppedDown: function() {
|
||||||
this.actor.sync_hover();
|
this.actor.sync_hover();
|
||||||
this.isMenuUp = false;
|
this.emit('menu-state-changed', false);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onActivate: function (event) {
|
_onActivate: function (event) {
|
||||||
|
@ -84,9 +84,12 @@ const AppFavorites = new Lang.Class({
|
|||||||
|
|
||||||
let app = Shell.AppSystem.get_default().lookup_app(appId);
|
let app = Shell.AppSystem.get_default().lookup_app(appId);
|
||||||
|
|
||||||
Main.overview.setMessage(_("%s has been added to your favorites.").format(app.get_name()), Lang.bind(this, function () {
|
Main.overview.setMessage(_("%s has been added to your favorites.").format(app.get_name()),
|
||||||
this._removeFavorite(appId);
|
{ forFeedback: true,
|
||||||
}));
|
undoCallback: Lang.bind(this, function () {
|
||||||
|
this._removeFavorite(appId);
|
||||||
|
})
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
addFavorite: function(appId) {
|
addFavorite: function(appId) {
|
||||||
@ -116,9 +119,11 @@ const AppFavorites = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
Main.overview.setMessage(_("%s has been removed from your favorites.").format(app.get_name()),
|
Main.overview.setMessage(_("%s has been removed from your favorites.").format(app.get_name()),
|
||||||
Lang.bind(this, function () {
|
{ forFeedback: true,
|
||||||
this._addFavorite(appId, pos);
|
undoCallback: Lang.bind(this, function () {
|
||||||
}));
|
this._addFavorite(appId, pos);
|
||||||
|
})
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(AppFavorites.prototype);
|
Signals.addSignalMethods(AppFavorites.prototype);
|
||||||
|
@ -141,6 +141,7 @@ const BoxPointer = new Lang.Class({
|
|||||||
|
|
||||||
this._muteInput();
|
this._muteInput();
|
||||||
|
|
||||||
|
Tweener.removeTweens(this);
|
||||||
Tweener.addTween(this, { opacity: fade ? 0 : 255,
|
Tweener.addTween(this, { opacity: fade ? 0 : 255,
|
||||||
xOffset: xOffset,
|
xOffset: xOffset,
|
||||||
yOffset: yOffset,
|
yOffset: yOffset,
|
||||||
|
@ -270,8 +270,9 @@ const DBusEventSource = new Lang.Class({
|
|||||||
this._loadEvents(false);
|
this._loadEvents(false);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onEventsReceived: function([appointments]) {
|
_onEventsReceived: function(results, error) {
|
||||||
let newEvents = [];
|
let newEvents = [];
|
||||||
|
let appointments = results ? results[0] : null;
|
||||||
if (appointments != null) {
|
if (appointments != null) {
|
||||||
for (let n = 0; n < appointments.length; n++) {
|
for (let n = 0; n < appointments.length; n++) {
|
||||||
let a = appointments[n];
|
let a = appointments[n];
|
||||||
|
@ -45,14 +45,12 @@ function isMountRootHidden(root) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function isMountNonLocal(mount) {
|
function isMountNonLocal(mount) {
|
||||||
// If the mount doesn't have an associated volume, that means it could
|
// If the mount doesn't have an associated volume, that means it's
|
||||||
// be a remote filesystem. For certain kinds of local filesystems,
|
// an uninteresting filesystem. Most devices that we care about will
|
||||||
// like digital cameras and music players, there's no associated
|
// have a mount, like media players and USB sticks.
|
||||||
// gvfs volume, so err on the side of caution and assume it's a local
|
|
||||||
// filesystem to allow the prompt.
|
|
||||||
let volume = mount.get_volume();
|
let volume = mount.get_volume();
|
||||||
if (volume == null)
|
if (volume == null)
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
return (volume.get_identifier("class") == "network");
|
return (volume.get_identifier("class") == "network");
|
||||||
}
|
}
|
||||||
@ -546,9 +544,8 @@ const AutorunTransientSource = new Lang.Class({
|
|||||||
this.notify(this._notification);
|
this.notify(this._notification);
|
||||||
},
|
},
|
||||||
|
|
||||||
createIcon: function(size) {
|
getIcon: function() {
|
||||||
return new St.Icon({ gicon: this.mount.get_icon(),
|
return this.mount.get_icon();
|
||||||
icon_size: size });
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
647
js/ui/components/mediaKeysManager.js
Normal file
647
js/ui/components/mediaKeysManager.js
Normal file
@ -0,0 +1,647 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
|
const INTERFACE_SETTINGS = 'org.gnome.desktop.interface';
|
||||||
|
const POWER_SETTINGS = 'org.gnome.settings-daemon.plugins.power';
|
||||||
|
const XSETTINGS_SETTINGS = 'org.gnome.settings-daemon.plugins.xsettings';
|
||||||
|
const TOUCHPAD_SETTINGS = 'org.gnome.settings-daemon.peripherals.touchpad';
|
||||||
|
const KEYBINDING_SETTINGS = 'org.gnome.settings-daemon.plugins.media-keys';
|
||||||
|
const CUSTOM_KEYBINDING_SETTINGS = 'org.gnome.settings-daemon.plugins.media-keys.custom-keybinding';
|
||||||
|
const A11Y_SETTINGS = 'org.gnome.desktop.a11y.applications';
|
||||||
|
const MAGNIFIER_SETTINGS = 'org.gnome.desktop.a11y.magnifier';
|
||||||
|
const INPUT_SOURCE_SETTINGS = 'org.gnome.desktop.input-sources';
|
||||||
|
|
||||||
|
const MediaKeysInterface = <interface name='org.gnome.SettingsDaemon.MediaKeys'>
|
||||||
|
<method name='GrabMediaPlayerKeys'>
|
||||||
|
<arg name='application' direction='in' type='s'/>
|
||||||
|
<arg name='time' direction='in' type='u'/>
|
||||||
|
</method>
|
||||||
|
<method name='ReleaseMediaPlayerKeys'>
|
||||||
|
<arg name='application' direction='in' type='s'/>
|
||||||
|
</method>
|
||||||
|
<signal name='MediaPlayerKeyPressed'>
|
||||||
|
<arg name='application' type='s'/>
|
||||||
|
<arg name='key' type='s'/>
|
||||||
|
</signal>
|
||||||
|
</interface>;
|
||||||
|
|
||||||
|
/* [ actionName, setting, hardcodedKeysym, overviewOnly, args ] */
|
||||||
|
/* (overviewOnly means that the keybinding is handled when the shell is not
|
||||||
|
modal, or when the overview is active, but not when other modal operations
|
||||||
|
are active; otherwise the keybinding is always handled) */
|
||||||
|
const DEFAULT_KEYBINDINGS = [
|
||||||
|
[ 'doTouchpadToggle', null, 'XF86TouchpadToggle', false ],
|
||||||
|
[ 'doTouchpadSet', null, 'XF86TouchpadOn', false, [ true ] ],
|
||||||
|
[ 'doTouchpadSet', null, 'XF86TouchpadOff', false, [ false ] ],
|
||||||
|
[ 'doMute', 'volume-mute', null, false, [ false ] ],
|
||||||
|
[ 'doVolumeAdjust', 'volume-down', null, false, [ Clutter.ScrollDirection.DOWN, false ] ],
|
||||||
|
[ 'doVolumeAdjust', 'volume-up', null, false, [ Clutter.ScrollDirection.UP, false ] ],
|
||||||
|
[ 'doMute', null, '<Alt>XF86AudioMute', false, [ true ] ],
|
||||||
|
[ 'doVolumeAdjust', null, '<Alt>XF86AudioLowerVolume', false, [ Clutter.ScrollDirection.DOWN, true ] ],
|
||||||
|
[ 'doVolumeAdjust', null, '<Alt>XF86AudioRaiseVolume', false, [ Clutter.ScrollDirection.UP, true ] ],
|
||||||
|
[ 'doLogout', 'logout', null, true ],
|
||||||
|
[ 'doEject', 'eject', null, false ],
|
||||||
|
[ 'doHome', 'home', null, true ],
|
||||||
|
[ 'doLaunchMimeHandler', 'media', null, true, [ 'application/x-vorbis+ogg' ] ],
|
||||||
|
[ 'doLaunchApp', 'calculator', null, true, [ 'gcalcltool.desktop' ] ],
|
||||||
|
[ 'doLaunchApp', 'search', null, true, [ 'tracker-needle.desktop' ] ],
|
||||||
|
[ 'doLaunchMimeHandler', 'email', null, true, [ 'x-scheme-handler/mailto' ] ],
|
||||||
|
[ 'doScreensaver', 'screensaver', null, true ],
|
||||||
|
[ 'doScreensaver', null, 'XF86ScreenSaver', true ],
|
||||||
|
[ 'doLaunchApp', 'help', null, true, [ 'yelp.desktop' ] ],
|
||||||
|
[ 'doSpawn', 'screenshot', null, true, [ ['gnome-screenshot'] ] ],
|
||||||
|
[ 'doSpawn', 'window-screenshot', null, true, [ ['gnome-screenshot', '--window'] ] ],
|
||||||
|
[ 'doSpawn', 'area-screenshot', null, true, [ ['gnome-screenshot', '--area'] ] ],
|
||||||
|
[ 'doSpawn', 'screenshot-clip', null, true, [ ['gnome-screenshot', '--clipboard'] ] ],
|
||||||
|
[ 'doSpawn', 'window-screenshot-clip', null, true, [ ['gnome-screenshot', '--window', '--clipboard'] ] ],
|
||||||
|
[ 'doSpawn', 'area-screenshot-clip', null, true, [ ['gnome-screenshot', '--area', '--clipboard'] ] ],
|
||||||
|
[ 'doLaunchMimeHandler', 'www', null, true, [ 'x-scheme-handler/http' ] ],
|
||||||
|
[ 'doMediaKey', 'play', null, true, [ 'Play' ] ],
|
||||||
|
[ 'doMediaKey', 'pause', null, true, [ 'Pause' ] ],
|
||||||
|
[ 'doMediaKey', 'stop', null, true, [ 'Stop' ] ],
|
||||||
|
[ 'doMediaKey', 'previous', null, true, [ 'Previous' ] ],
|
||||||
|
[ 'doMediaKey', 'next', null, true, [ 'Next' ] ],
|
||||||
|
[ 'doMediaKey', null, 'XF86AudioRewind', true, [ 'Rewind' ] ],
|
||||||
|
[ 'doMediaKey', null, 'XF86AudioForward', true, [ 'FastForward' ] ],
|
||||||
|
[ 'doMediaKey', null, 'XF86AudioRepeat', true, [ 'Repeat' ] ],
|
||||||
|
[ 'doMediaKey', null, 'XF86AudioRandomPlay', true, [ 'Shuffle' ] ],
|
||||||
|
[ 'doXRandRAction', null, '<Super>p', false, [ 'VideoModeSwitch' ] ],
|
||||||
|
/* Key code of the XF86Display key (Fn-F7 on Thinkpads, Fn-F4 on HP machines, etc.) */
|
||||||
|
[ 'doXRandRAction', null, 'XF86Display', false, [ 'VideoModeSwitch' ] ],
|
||||||
|
/* Key code of the XF86RotateWindows key (present on some tablets) */
|
||||||
|
[ 'doXRandRAction', null, 'XF86RotateWindows', false, [ 'Rotate' ] ],
|
||||||
|
[ 'doA11yAction', 'magnifier', null, true, [ 'screen-magnifier-enabled' ] ],
|
||||||
|
[ 'doA11yAction', 'screenreader', null, true, [ 'screen-reader-enabled' ] ],
|
||||||
|
[ 'doA11yAction', 'on-screen-keyboard', null, true, [ 'screen-keyboard-enabled' ] ],
|
||||||
|
[ 'doTextSize', 'increase-text-size', null, true, [ 1 ] ],
|
||||||
|
[ 'doTextSize', 'decrease-text-size', null, true, [ -1 ] ],
|
||||||
|
[ 'doToggleContrast', 'toggle-contrast', null, true ],
|
||||||
|
[ 'doMagnifierZoom', 'magnifier-zoom-in', null, true, [ 1 ] ],
|
||||||
|
[ 'doMagnifierZoom', 'magnifier-zoom-out', null, true, [ -1 ] ],
|
||||||
|
[ 'doPowerAction', null, 'XF86PowerOff', true, [ 'button-power' ] ],
|
||||||
|
/* the kernel / Xorg names really are like this... */
|
||||||
|
[ 'doPowerAction', null, 'XF86Suspend', false, [ 'button-sleep' ] ],
|
||||||
|
[ 'doPowerAction', null, 'XF86Sleep', false, [ 'button-suspend' ] ],
|
||||||
|
[ 'doPowerAction', null, 'XF86Hibernate', false, [ 'button-hibernate' ] ],
|
||||||
|
[ 'doBrightness', null, 'XF86MonBrightnessUp', false, [ 'Screen', 'StepUp' ] ],
|
||||||
|
[ 'doBrightness', null, 'XF86MonBrightnessDown', false, [ 'Screen', 'StepDown' ] ],
|
||||||
|
[ 'doBrightness', null, 'XF86KbdBrightnessUp', false, [ 'Keyboard', 'StepUp' ] ],
|
||||||
|
[ 'doBrightness', null, 'XF86KbdBrightnessDown', false, [ 'Keyboard', 'StepDown' ] ],
|
||||||
|
[ 'doBrightnessToggle', null, 'XF86KbdLightOnOff', false, ],
|
||||||
|
[ 'doInputSource', 'switch-input-source', null, false, [ +1 ] ],
|
||||||
|
[ 'doInputSource', 'switch-input-source-backward', null, false, [ -1 ] ],
|
||||||
|
[ 'doLaunchApp', null, 'XF86Battery', true, [ 'gnome-power-statistics.desktop' ] ]
|
||||||
|
];
|
||||||
|
|
||||||
|
var osdWin;
|
||||||
|
const OSDWindow = new Lang.Class({
|
||||||
|
Name: 'OSDWindow',
|
||||||
|
|
||||||
|
FADE_TIMEOUT: 1500,
|
||||||
|
FADE_DURATION: 100,
|
||||||
|
|
||||||
|
_init: function(iconName, value) {
|
||||||
|
/* assume 130x130 on a 640x480 display and scale from there */
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let scalew = monitor.width / 640.0;
|
||||||
|
let scaleh = monitor.height / 480.0;
|
||||||
|
let scale = Math.min(scalew, scaleh);
|
||||||
|
let size = 130 * Math.max(1, scale);
|
||||||
|
|
||||||
|
this.actor = new St.BoxLayout({ style_class: 'osd-window',
|
||||||
|
vertical: true,
|
||||||
|
reactive: false,
|
||||||
|
visible: false,
|
||||||
|
width: size,
|
||||||
|
height: size,
|
||||||
|
});
|
||||||
|
|
||||||
|
this._icon = new St.Icon({ icon_name: iconName,
|
||||||
|
icon_size: size / 2,
|
||||||
|
});
|
||||||
|
this.actor.add(this._icon, { expand: true,
|
||||||
|
x_align: St.Align.MIDDLE,
|
||||||
|
y_align: St.Align.MIDDLE });
|
||||||
|
|
||||||
|
this._value = value;
|
||||||
|
this._progressBar = new St.DrawingArea({ style_class: 'osd-progress-bar' });
|
||||||
|
this._progressBar.connect('repaint', Lang.bind(this, this._drawProgress));
|
||||||
|
this.actor.add(this._progressBar, { expand: true, x_fill: true, y_fill: false });
|
||||||
|
this._progressBar.visible = value !== undefined;
|
||||||
|
|
||||||
|
Main.layoutManager.addChrome(this.actor);
|
||||||
|
|
||||||
|
/* Position in the middle of primary monitor */
|
||||||
|
let [width, height] = this.actor.get_size();
|
||||||
|
this.actor.x = ((monitor.width - width) / 2) + monitor.x;
|
||||||
|
this.actor.y = monitor.y + (monitor.height / 2) + (monitor.height / 2 - height) / 2;
|
||||||
|
},
|
||||||
|
|
||||||
|
show: function() {
|
||||||
|
this.actor.show();
|
||||||
|
Tweener.addTween(this.actor,
|
||||||
|
{ opacity: 255,
|
||||||
|
time: this.FADE_DURATION / 1000,
|
||||||
|
transition: 'easeInQuad' });
|
||||||
|
|
||||||
|
if (this._timeoutId)
|
||||||
|
GLib.source_remove(this._timeoutId);
|
||||||
|
|
||||||
|
this._timeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, this.FADE_TIMEOUT, Lang.bind(this, this.hide));
|
||||||
|
},
|
||||||
|
|
||||||
|
hide: function() {
|
||||||
|
Tweener.addTween(this.actor,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: this.FADE_DURATION / 1000,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: function() {
|
||||||
|
this.actor.destroy();
|
||||||
|
this.actor = null;
|
||||||
|
osdWin = null;
|
||||||
|
},
|
||||||
|
onCompleteScope: this });
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
setIcon: function(name) {
|
||||||
|
this._icon.icon_name = name;
|
||||||
|
},
|
||||||
|
|
||||||
|
setValue: function(value) {
|
||||||
|
if (value == this._value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._value = value;
|
||||||
|
this._progressBar.visible = value !== undefined;
|
||||||
|
this._progressBar.queue_repaint();
|
||||||
|
},
|
||||||
|
|
||||||
|
_drawProgress: function(area) {
|
||||||
|
let cr = area.get_context();
|
||||||
|
|
||||||
|
let themeNode = this.actor.get_theme_node();
|
||||||
|
let color = themeNode.get_foreground_color();
|
||||||
|
Clutter.cairo_set_source_color(cr, color);
|
||||||
|
|
||||||
|
let [width, height] = area.get_surface_size();
|
||||||
|
width = width * this._value;
|
||||||
|
|
||||||
|
cr.moveTo(0,0);
|
||||||
|
cr.lineTo(width, 0);
|
||||||
|
cr.lineTo(width, height);
|
||||||
|
cr.lineTo(0, height);
|
||||||
|
cr.fill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function showOSD(icon, value) {
|
||||||
|
if (osdWin) {
|
||||||
|
osdWin.setIcon(icon);
|
||||||
|
osdWin.setValue(value);
|
||||||
|
} else {
|
||||||
|
osdWin = new OSDWindow(icon, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
osdWin.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
const MediaKeysGrabber = new Lang.Class({
|
||||||
|
Name: 'MediaKeysGrabber',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(MediaKeysInterface, this);
|
||||||
|
this._apps = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function() {
|
||||||
|
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SettingsDaemon/MediaKeys');
|
||||||
|
},
|
||||||
|
|
||||||
|
disable: function() {
|
||||||
|
this._dbusImpl.unexport();
|
||||||
|
},
|
||||||
|
|
||||||
|
GrabMediaPlayerKeysAsync: function(parameters, invocation) {
|
||||||
|
let [appName, time] = parameters;
|
||||||
|
|
||||||
|
/* I'm not sure of this code, but it is in gnome-settings-daemon
|
||||||
|
(letting alone that the introspection is wrong in glib...)
|
||||||
|
*/
|
||||||
|
if (time == Gdk.CURRENT_TIME) {
|
||||||
|
let tv = new GLib.TimeVal;
|
||||||
|
GLib.get_current_time(tv);
|
||||||
|
time = tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
let pos = -1;
|
||||||
|
for (let i = 0; i < this._apps.length; i++) {
|
||||||
|
if (this._apps[i].appName == appName) {
|
||||||
|
pos = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos != -1)
|
||||||
|
this._freeMediaPlayer(pos);
|
||||||
|
|
||||||
|
let app = {
|
||||||
|
appName: appName,
|
||||||
|
name: invocation.get_sender(),
|
||||||
|
time: time,
|
||||||
|
watchId: Gio.DBus.session.watch_name(invocation.get_sender(),
|
||||||
|
Gio.BusNameWatcherFlags.NONE,
|
||||||
|
null,
|
||||||
|
Lang.bind(this, this._onNameVanished)),
|
||||||
|
};
|
||||||
|
Util.insertSorted(this._apps, app, function(a, b) {
|
||||||
|
return b.time-a.time;
|
||||||
|
});
|
||||||
|
|
||||||
|
invocation.return_value(GLib.Variant.new('()', []));
|
||||||
|
},
|
||||||
|
|
||||||
|
ReleaseMediaPlayerAsync: function(parameters, invocation) {
|
||||||
|
let name = invocation.get_sender();
|
||||||
|
let [appName] = parameters;
|
||||||
|
|
||||||
|
let pos = -1;
|
||||||
|
for (let i = 0; i < this._apps.length; i++) {
|
||||||
|
if (this._apps[i].appName == appName) {
|
||||||
|
pos = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos == -1) {
|
||||||
|
for (let i = 0; i < this._apps.length; i++) {
|
||||||
|
if (this._apps[i].name == name) {
|
||||||
|
pos = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos != -1)
|
||||||
|
this._freeMediaPlayer(pos);
|
||||||
|
|
||||||
|
invocation.return_value(GLib.Variant.new('()', []));
|
||||||
|
},
|
||||||
|
|
||||||
|
_freeMediaPlayer: function(pos) {
|
||||||
|
let app = this._apps[pos];
|
||||||
|
Gio.bus_unwatch_name(app.watchId)
|
||||||
|
|
||||||
|
this._apps.splice(pos, 1);
|
||||||
|
},
|
||||||
|
|
||||||
|
mediaKeyPressed: function(key) {
|
||||||
|
if (this._apps.length == 0) {
|
||||||
|
showOSD('action-unavailable-symbolic');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let app = this._apps[0];
|
||||||
|
Gio.DBus.session.emit_signal(app.name,
|
||||||
|
'/org/gnome/SettingsDaemon/MediaKeys',
|
||||||
|
'org.gnome.SettingsDaemon.MediaKeys',
|
||||||
|
'MediaPlayerKeyPressed',
|
||||||
|
GLib.Variant.new('(ss)', [app.appName || '',
|
||||||
|
key]));
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const MediaKeysManager = new Lang.Class({
|
||||||
|
Name: 'MediaKeysManager',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._a11yControl = Main.panel.statusArea.a11y;
|
||||||
|
this._volumeControl = Main.panel.statusArea.volume;
|
||||||
|
this._userMenu = Main.panel.statusArea.userMenu;
|
||||||
|
this._mediaPlayerKeys = new MediaKeysGrabber();
|
||||||
|
|
||||||
|
this._keybindingSettings = new Gio.Settings({ schema: KEYBINDING_SETTINGS });
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function() {
|
||||||
|
for (let i = 0; i < DEFAULT_KEYBINDINGS.length; i++) {
|
||||||
|
let [action, setting, keyval, overviewOnly, args] = DEFAULT_KEYBINDINGS[i];
|
||||||
|
let func = this[action];
|
||||||
|
if (!func) {
|
||||||
|
log('Keybinding action %s is missing'.format(action));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let name = setting ? setting : 'media-keys-keybindings-%d'.format(i);
|
||||||
|
let ok;
|
||||||
|
func = Util.wrapKeybinding(Lang.bind.apply(null, [this, func].concat(args)), overviewOnly);
|
||||||
|
if (setting)
|
||||||
|
ok = global.display.add_keybinding(setting, this._keybindingSettings,
|
||||||
|
Meta.KeyBindingFlags.BUILTIN |
|
||||||
|
Meta.KeyBindingFlags.IS_SINGLE |
|
||||||
|
Meta.KeyBindingFlags.HANDLE_WHEN_GRABBED, func);
|
||||||
|
else
|
||||||
|
ok = global.display.add_grabbed_key(name, keyval,
|
||||||
|
Meta.KeyBindingFlags.HANDLE_WHEN_GRABBED, func);
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
log('Installing keybinding %s failed'.format(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._customKeybindings = [];
|
||||||
|
this._changedId = this._keybindingSettings.connect('changed::custom-keybindings',
|
||||||
|
Lang.bind(this, this._reloadCustomKeybindings));
|
||||||
|
this._reloadCustomKeybindings();
|
||||||
|
|
||||||
|
this._mediaPlayerKeys.enable();
|
||||||
|
},
|
||||||
|
|
||||||
|
disable: function() {
|
||||||
|
for (let i = 0; i < DEFAULT_KEYBINDINGS.length; i++) {
|
||||||
|
let [action, setting, keyval, overviewOnly, args] = DEFAULT_KEYBINDINGS[i];
|
||||||
|
|
||||||
|
let name = setting ? setting : 'media-keys-keybindings-%d'.format(i);
|
||||||
|
if (setting)
|
||||||
|
global.display.remove_keybinding(setting, this._keybindingSettings);
|
||||||
|
else
|
||||||
|
global.display.remove_grabbed_key(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._clearCustomKeybindings();
|
||||||
|
this._keybindingSettings.disconnect(this._changedId);
|
||||||
|
|
||||||
|
this._mediaPlayerKeys.disable();
|
||||||
|
},
|
||||||
|
|
||||||
|
_clearCustomKeybindings: function() {
|
||||||
|
for (let i = 0; i < this._customKeybindings.length; i++)
|
||||||
|
global.display.remove_keybinding('binding', this._customKeybindings[i]);
|
||||||
|
|
||||||
|
this._customKeybindings = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
_reloadCustomKeybindings: function() {
|
||||||
|
this._clearCustomKeybindings();
|
||||||
|
|
||||||
|
let paths = this._keybindingSettings.get_strv('custom-keybindings');
|
||||||
|
for (let i = 0; i < paths.length; i++) {
|
||||||
|
let setting = new Gio.Settings({ schema: CUSTOM_KEYBINDING_SETTINGS,
|
||||||
|
path: paths[i] });
|
||||||
|
let func = Util.wrapKeybinding(Lang.bind(this, this.doCustom, setting), true);
|
||||||
|
|
||||||
|
global.display.add_keybinding('binding', setting,
|
||||||
|
Meta.KeyBindingFlags.IS_SINGLE |
|
||||||
|
Meta.KeyBindingFlags.HANDLE_WHEN_GRABBED, func);
|
||||||
|
this._customKeybindings.push(setting);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
doCustom: function(display, screen, window, binding, settings) {
|
||||||
|
let command = settings.get_string('command');
|
||||||
|
Util.spawnCommandLine(command);
|
||||||
|
},
|
||||||
|
|
||||||
|
doTouchpadToggle: function(display, screen, window, binding) {
|
||||||
|
let settings = new Gio.Settings({ schema: TOUCHPAD_SETTINGS });
|
||||||
|
let enabled = settings.get_boolean('touchpad-enabled');
|
||||||
|
|
||||||
|
this.doTouchpadSet(display, screen, window, binding, !enabled);
|
||||||
|
settings.set_boolean(!enabled);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doTouchpadSet: function(display, screen, window, binding, enabled) {
|
||||||
|
showOSD(enabled ? 'input-touchpad-symbolic' : 'touchpad-disabled-symbolic');
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doMute: function(display, screen, window, binding, quiet) {
|
||||||
|
let [icon, value] = this._volumeControl.volumeMenu.toggleMute(quiet);
|
||||||
|
showOSD(icon, value);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doVolumeAdjust: function(display, screen, window, binding, direction, quiet) {
|
||||||
|
let [icon, value] = this._volumeControl.volumeMenu.scroll(direction, quiet);
|
||||||
|
showOSD(icon, value);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doLogout: function(display, screen, window, binding) {
|
||||||
|
this._userMenu.logOut();
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doEject: function(display, screen, window, binding) {
|
||||||
|
let volumeMonitor = Gio.VolumeMonitor.get();
|
||||||
|
|
||||||
|
let drives = volumeMonitor.get_connected_drives();
|
||||||
|
let score = 0, drive;
|
||||||
|
for (let i = 0; i < drives.length; i++) {
|
||||||
|
if (!drives[i].can_eject())
|
||||||
|
continue;
|
||||||
|
if (!drives[i].is_media_removable())
|
||||||
|
continue;
|
||||||
|
if (score < 1) {
|
||||||
|
drive = drives[i];
|
||||||
|
score = 1;
|
||||||
|
}
|
||||||
|
if (!drives[i].has_media())
|
||||||
|
continue;
|
||||||
|
if (score < 2) {
|
||||||
|
drive = drives[i];
|
||||||
|
score = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
showOSD('media-eject-custom-symbolic');
|
||||||
|
|
||||||
|
if (!drive)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
let mountOp = new ShellMountOperation.ShellMountOperation(drive);
|
||||||
|
drive.eject_with_operation(Gio.MountUnmountFlags.FORCE,
|
||||||
|
mountOp.mountOp, null, null);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doHome: function() {
|
||||||
|
let homeFile = Gio.file_new_for_path (GLib.get_home_dir());
|
||||||
|
let homeUri = homeFile.get_uri();
|
||||||
|
Gio.app_info_launch_default_for_uri(homeUri, null);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doLaunchMimeHandler: function(display, screen, window, binding, mimeType) {
|
||||||
|
let gioApp = Gio.AppInfo.get_default_for_type(mimeType, false);
|
||||||
|
if (gioApp != null) {
|
||||||
|
let app = Shell.AppSystem.get_default().lookup_app(gioApp.get_id());
|
||||||
|
app.open_new_window(-1);
|
||||||
|
} else {
|
||||||
|
log('Could not find default application for \'%s\' mime-type'.format(mimeType));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doLaunchApp: function(display, screen, window, binding, appId) {
|
||||||
|
let app = Shell.AppSystem.get_default().lookup_app(appId);
|
||||||
|
app.open_new_window(-1);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doScreensaver: function() {
|
||||||
|
// FIXME: handled in house, to the screenshield!
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doSpawn: function(display, screen, window, binding, argv) {
|
||||||
|
Util.spawn(argv);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
doMediaKey: function(display, screen, window, binding, key) {
|
||||||
|
this._mediaPlayerKeys.mediaKeyPressed(key);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onXRandRFinished: function(connection, result) {
|
||||||
|
connection.call_finish(result);
|
||||||
|
this._XRandRCancellable = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
doXRandRAction: function(display, screen, window, binding, action) {
|
||||||
|
if (this._XRandRCancellable)
|
||||||
|
this._XRandRCancellable.cancel();
|
||||||
|
|
||||||
|
this._XRandRCancellable = new Gio.Cancellable();
|
||||||
|
Gio.DBus.session.call('org.gnome.SettingsDaemon',
|
||||||
|
'/org/gnome/SettingsDaemon/XRANDR',
|
||||||
|
'org.gnome.SettingsDaemon.XRANDR_2',
|
||||||
|
action,
|
||||||
|
GLib.Variant.new('(x)', [global.get_current_time()]),
|
||||||
|
null, /* reply type */
|
||||||
|
Gio.DBusCallFlags.NONE,
|
||||||
|
-1,
|
||||||
|
this._XRandRCancellable,
|
||||||
|
Lang.bind(this, this._onXRandRFinished));
|
||||||
|
},
|
||||||
|
|
||||||
|
doA11yAction: function(display, screen, window, binding, key) {
|
||||||
|
let settings = new Gio.Settings({ schema: A11Y_SETTINGS });
|
||||||
|
let enabled = settings.get_boolean(key);
|
||||||
|
settings.set_boolean(key, !enabled);
|
||||||
|
},
|
||||||
|
|
||||||
|
doTextSize: function(display, screen, window, binding, multiplier) {
|
||||||
|
// Same values used in the Seeing tab of the Universal Access panel
|
||||||
|
const FACTORS = [ 0.75, 1.0, 1.25, 1.5 ];
|
||||||
|
|
||||||
|
// Figure out the current DPI scaling factor
|
||||||
|
let settings = new Gio.Settings({ schema: INTERFACE_SETTINGS });
|
||||||
|
let factor = settings.get_double('text-scaling-factor');
|
||||||
|
factor += multiplier * 0.25;
|
||||||
|
|
||||||
|
/* Try to find a matching value */
|
||||||
|
let distance = 1e6;
|
||||||
|
let best = 1.0;
|
||||||
|
for (let i = 0; i < FACTORS.length; i++) {
|
||||||
|
let d = Math.abs(factor - FACTORS[i]);
|
||||||
|
if (d < distance) {
|
||||||
|
best = factors[i];
|
||||||
|
distance = d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (best == 1.0)
|
||||||
|
settings.reset('text-scaling-factor');
|
||||||
|
else
|
||||||
|
settings.set_double('text-scaling-factor', best);
|
||||||
|
},
|
||||||
|
|
||||||
|
doToggleContrast: function(display, screen, window, binding) {
|
||||||
|
this._a11yControl.toggleHighContrast();
|
||||||
|
},
|
||||||
|
|
||||||
|
doMagnifierZoom: function(display, screen, window, binding, offset) {
|
||||||
|
let settings = new Gio.Settings({ schema: MAGNIFIER_SETTINGS });
|
||||||
|
|
||||||
|
let value = settings.get_value('mag-factor');
|
||||||
|
value = Math.round(value + offset);
|
||||||
|
settings.set_value('mag-factor', value);
|
||||||
|
},
|
||||||
|
|
||||||
|
doPowerAction: function(display, screen, window, binding, action) {
|
||||||
|
let settings = new Gio.Settings({ schema: POWER_SETTINGS });
|
||||||
|
switch (settings.get_string(action)) {
|
||||||
|
case 'suspend':
|
||||||
|
this._userMenu.suspend();
|
||||||
|
break;
|
||||||
|
case 'interactive':
|
||||||
|
case 'shutdown':
|
||||||
|
this._userMenu.shutdown();
|
||||||
|
break;
|
||||||
|
case 'hibernate':
|
||||||
|
this._userMenu.hibernate();
|
||||||
|
break;
|
||||||
|
case 'blank':
|
||||||
|
case 'default':
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onBrightnessFinished: function(connection, result, kind) {
|
||||||
|
let [percentage] = connection.call_finish(result).deep_unpack();
|
||||||
|
|
||||||
|
let icon = kind == 'Keyboard' ? 'keyboard-brightness-symbolic' : 'display-brightness-symbolic';
|
||||||
|
showOSD(icon, percentage / 100);
|
||||||
|
},
|
||||||
|
|
||||||
|
doBrightness: function(display, screen, window, binding, kind, action) {
|
||||||
|
let iface = 'org.gnome.SettingsDaemon.Power.' + kind;
|
||||||
|
let objectPath = '/org/gnome/SettingsDaemon/Power';
|
||||||
|
|
||||||
|
Gio.DBus.session.call('org.gnome.SettingsDaemon',
|
||||||
|
objectPath, iface, action,
|
||||||
|
null, null, /* parameters, reply type */
|
||||||
|
Gio.DBusCallFlags.NONE, -1, null,
|
||||||
|
Lang.bind(this, this._onBrightnessFinished, kind));
|
||||||
|
},
|
||||||
|
|
||||||
|
doInputSource: function(display, screen, window, binding, offset) {
|
||||||
|
let settings = new Gio.Settings({ schema: INPUT_SOURCE_SETTINGS });
|
||||||
|
|
||||||
|
let current = settings.get_uint('current');
|
||||||
|
let max = settings.get_strv('sources').length - 1;
|
||||||
|
|
||||||
|
current += offset;
|
||||||
|
if (current < 0)
|
||||||
|
current = 0;
|
||||||
|
else if (current > max)
|
||||||
|
current = max;
|
||||||
|
|
||||||
|
settings.set_uint('current', current);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const Component = MediaKeysManager;
|
@ -408,7 +408,10 @@ const VPNRequestHandler = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
cancel: function() {
|
cancel: function(respond) {
|
||||||
|
if (respond)
|
||||||
|
this._agent.respond(this._requestId, Shell.NetworkAgentResponse.USER_CANCELED);
|
||||||
|
|
||||||
if (this._newStylePlugin && this._shellDialog) {
|
if (this._newStylePlugin && this._shellDialog) {
|
||||||
this._shellDialog.close(global.get_current_time());
|
this._shellDialog.close(global.get_current_time());
|
||||||
this._shellDialog.destroy();
|
this._shellDialog.destroy();
|
||||||
@ -599,6 +602,16 @@ const NetworkAgent = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
disable: function() {
|
disable: function() {
|
||||||
|
let requestId;
|
||||||
|
|
||||||
|
for (requestId in this._dialogs)
|
||||||
|
this._dialogs[requestId].cancel();
|
||||||
|
this._dialogs = { };
|
||||||
|
|
||||||
|
for (requestId in this._vpnRequests)
|
||||||
|
this._vpnRequests[requestId].cancel(true);
|
||||||
|
this._vpnRequests = { };
|
||||||
|
|
||||||
this._native.unregister();
|
this._native.unregister();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -622,7 +635,7 @@ const NetworkAgent = new Lang.Class({
|
|||||||
this._dialogs[requestId].destroy();
|
this._dialogs[requestId].destroy();
|
||||||
delete this._dialogs[requestId];
|
delete this._dialogs[requestId];
|
||||||
} else if (this._vpnRequests[requestId]) {
|
} else if (this._vpnRequests[requestId]) {
|
||||||
this._vpnRequests[requestId].cancel();
|
this._vpnRequests[requestId].cancel(false);
|
||||||
delete this._vpnRequests[requestId];
|
delete this._vpnRequests[requestId];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -41,7 +41,7 @@ const Recorder = new Lang.Class({
|
|||||||
recorder.set_framerate(this._recorderSettings.get_int('framerate'));
|
recorder.set_framerate(this._recorderSettings.get_int('framerate'));
|
||||||
/* Translators: this is a filename used for screencast recording */
|
/* Translators: this is a filename used for screencast recording */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
recorder.set_filename(_("Screencast from %d %t") + '.' + this._recorderSettings.get_string('file-extension'));
|
recorder.set_file_template(_("Screencast from %d %t") + '.' + this._recorderSettings.get_string('file-extension'));
|
||||||
let pipeline = this._recorderSettings.get_string('pipeline');
|
let pipeline = this._recorderSettings.get_string('pipeline');
|
||||||
|
|
||||||
if (!pipeline.match(/^\s*$/))
|
if (!pipeline.match(/^\s*$/))
|
||||||
@ -52,6 +52,8 @@ const Recorder = new Lang.Class({
|
|||||||
Meta.disable_unredirect_for_screen(global.screen);
|
Meta.disable_unredirect_for_screen(global.screen);
|
||||||
recorder.record();
|
recorder.record();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -509,51 +509,42 @@ const ChatSource = new Lang.Class({
|
|||||||
this._notification.appendAliasChange(oldAlias, newAlias);
|
this._notification.appendAliasChange(oldAlias, newAlias);
|
||||||
},
|
},
|
||||||
|
|
||||||
createIcon: function(size) {
|
getIcon: function() {
|
||||||
this._iconBox = new St.Bin({ style_class: 'avatar-box' });
|
|
||||||
this._iconBox._size = size;
|
|
||||||
let textureCache = St.TextureCache.get_default();
|
|
||||||
let file = this._contact.get_avatar_file();
|
let file = this._contact.get_avatar_file();
|
||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
let uri = file.get_uri();
|
return new Gio.FileIcon({ file: file });
|
||||||
this._iconBox.child = textureCache.load_uri_async(uri, this._iconBox._size, this._iconBox._size);
|
|
||||||
} else {
|
} else {
|
||||||
this._iconBox.child = new St.Icon({ icon_name: 'avatar-default',
|
return new Gio.ThemedIcon({ name: 'avatar-default' });
|
||||||
icon_size: this._iconBox._size });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._iconBox;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
createSecondaryIcon: function() {
|
getSecondaryIcon: function() {
|
||||||
let iconBox = new St.Bin();
|
let iconName;
|
||||||
iconBox.child = new St.Icon({ style_class: 'secondary-icon' });
|
|
||||||
let presenceType = this._contact.get_presence_type();
|
let presenceType = this._contact.get_presence_type();
|
||||||
|
|
||||||
switch (presenceType) {
|
switch (presenceType) {
|
||||||
case Tp.ConnectionPresenceType.AVAILABLE:
|
case Tp.ConnectionPresenceType.AVAILABLE:
|
||||||
iconBox.child.icon_name = 'user-available';
|
iconName = 'user-available';
|
||||||
break;
|
break;
|
||||||
case Tp.ConnectionPresenceType.BUSY:
|
case Tp.ConnectionPresenceType.BUSY:
|
||||||
iconBox.child.icon_name = 'user-busy';
|
iconName = 'user-busy';
|
||||||
break;
|
break;
|
||||||
case Tp.ConnectionPresenceType.OFFLINE:
|
case Tp.ConnectionPresenceType.OFFLINE:
|
||||||
iconBox.child.icon_name = 'user-offline';
|
iconName = 'user-offline';
|
||||||
break;
|
break;
|
||||||
case Tp.ConnectionPresenceType.HIDDEN:
|
case Tp.ConnectionPresenceType.HIDDEN:
|
||||||
iconBox.child.icon_name = 'user-invisible';
|
iconName = 'user-invisible';
|
||||||
break;
|
break;
|
||||||
case Tp.ConnectionPresenceType.AWAY:
|
case Tp.ConnectionPresenceType.AWAY:
|
||||||
iconBox.child.icon_name = 'user-away';
|
iconName = 'user-away';
|
||||||
break;
|
break;
|
||||||
case Tp.ConnectionPresenceType.EXTENDED_AWAY:
|
case Tp.ConnectionPresenceType.EXTENDED_AWAY:
|
||||||
iconBox.child.icon_name = 'user-idle';
|
iconName = 'user-idle';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
iconBox.child.icon_name = 'user-offline';
|
iconName = 'user-offline';
|
||||||
}
|
}
|
||||||
return iconBox;
|
return new Gio.ThemedIcon({ name: iconName });
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateAvatarIcon: function() {
|
_updateAvatarIcon: function() {
|
||||||
@ -564,7 +555,9 @@ const ChatSource = new Lang.Class({
|
|||||||
open: function(notification) {
|
open: function(notification) {
|
||||||
if (this._client.is_handling_channel(this._channel)) {
|
if (this._client.is_handling_channel(this._channel)) {
|
||||||
// We are handling the channel, try to pass it to Empathy
|
// We are handling the channel, try to pass it to Empathy
|
||||||
this._client.delegate_channels_async([this._channel], global.get_current_time(), '', null);
|
this._client.delegate_channels_async([this._channel],
|
||||||
|
global.get_current_time(),
|
||||||
|
'org.freedesktop.Telepathy.Client.Empathy.Chat', null);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// We are not the handler, just ask to present the channel
|
// We are not the handler, just ask to present the channel
|
||||||
@ -733,7 +726,7 @@ const ChatSource = new Lang.Class({
|
|||||||
|
|
||||||
title = GLib.markup_escape_text(this.title, -1);
|
title = GLib.markup_escape_text(this.title, -1);
|
||||||
|
|
||||||
this._notification.update(this._notification.title, null, { customContent: true, secondaryIcon: this.createSecondaryIcon() });
|
this._notification.update(this._notification.title, null, { customContent: true, secondaryGIcon: this.getSecondaryIcon() });
|
||||||
|
|
||||||
if (message)
|
if (message)
|
||||||
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
||||||
@ -761,7 +754,7 @@ const ChatNotification = new Lang.Class({
|
|||||||
Extends: MessageTray.Notification,
|
Extends: MessageTray.Notification,
|
||||||
|
|
||||||
_init: function(source) {
|
_init: function(source) {
|
||||||
this.parent(source, source.title, null, { customContent: true, secondaryIcon: source.createSecondaryIcon() });
|
this.parent(source, source.title, null, { customContent: true, secondaryGIcon: source.getSecondaryIcon() });
|
||||||
this.setResident(true);
|
this.setResident(true);
|
||||||
|
|
||||||
this._responseEntry = new St.Entry({ style_class: 'chat-response',
|
this._responseEntry = new St.Entry({ style_class: 'chat-response',
|
||||||
@ -778,16 +771,19 @@ const ChatNotification = new Lang.Class({
|
|||||||
this.emit('unfocused');
|
this.emit('unfocused');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._oldMaxScrollAdjustment = 0;
|
|
||||||
this._createScrollArea();
|
this._createScrollArea();
|
||||||
this._lastGroup = null;
|
this._lastGroup = null;
|
||||||
this._lastGroupActor = null;
|
this._lastGroupActor = null;
|
||||||
|
|
||||||
|
// Keep track of the bottom position for the current adjustment and
|
||||||
|
// force a scroll to the bottom if things change while we were at the
|
||||||
|
// bottom
|
||||||
|
this._oldMaxScrollValue = this._scrollArea.vscroll.adjustment.value;
|
||||||
|
this._scrollArea.add_style_class_name('chat-notification-scrollview');
|
||||||
this._scrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
|
this._scrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
|
||||||
let currentValue = adjustment.value + adjustment.page_size;
|
if (adjustment.value == this._oldMaxScrollValue)
|
||||||
if (currentValue == this._oldMaxScrollAdjustment)
|
|
||||||
this.scrollTo(St.Side.BOTTOM);
|
this.scrollTo(St.Side.BOTTOM);
|
||||||
this._oldMaxScrollAdjustment = adjustment.upper;
|
this._oldMaxScrollValue = Math.max(adjustment.lower, adjustment.upper - adjustment.page_size);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._inputHistory = new History.HistoryManager({ entry: this._responseEntry.clutter_text });
|
this._inputHistory = new History.HistoryManager({ entry: this._responseEntry.clutter_text });
|
||||||
@ -939,24 +935,32 @@ const ChatNotification = new Lang.Class({
|
|||||||
|
|
||||||
let format;
|
let format;
|
||||||
|
|
||||||
// Show a week day and time if date is in the last week
|
// Show only the hour if date is on today
|
||||||
if (daysAgo < 1 || (daysAgo < 7 && now.getDay() != date.getDay())) {
|
if(daysAgo < 1){
|
||||||
/* Translators: this is a time format string followed by a date.
|
format = "<b>%H:%M</b>";
|
||||||
If applicable, replace %X with a strftime format valid for your
|
}
|
||||||
locale, without seconds. */
|
// Show the word "Yesterday" and time if date is on yesterday
|
||||||
|
else if(daysAgo <2){
|
||||||
|
/* Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"*/
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("Sent at <b>%X</b> on <b>%A</b>");
|
format = _("<b>%H:%M</b> on Yesterday");
|
||||||
|
}
|
||||||
|
// Show a week day and time if date is in the last week
|
||||||
|
else if (daysAgo < 7) {
|
||||||
|
/* Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday*/
|
||||||
|
// xgettext:no-c-format
|
||||||
|
format = _("<b>%H:%M</b> on <b>%A</b>");
|
||||||
|
|
||||||
} else if (date.getYear() == now.getYear()) {
|
} else if (date.getYear() == now.getYear()) {
|
||||||
/* Translators: this is a time format in the style of "Wednesday, May 25",
|
/* Translators: this is a time format in the style of "14:30 on Wednesday, May 25",
|
||||||
shown when you get a chat message in the same year. */
|
shown when you get a chat message in the same year */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("Sent on <b>%A</b>, <b>%B %d</b>");
|
format = _("<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>");
|
||||||
} else {
|
} else {
|
||||||
/* Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
/* Translators: this is a time format in the style of "14:30 on Wednesday, May 25, 2012",
|
||||||
shown when you get a chat message in a different year. */
|
shown when you get a chat message in a different year */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("Sent on <b>%A</b>, <b>%B %d</b>, %Y");
|
format = _("<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>, %Y");
|
||||||
}
|
}
|
||||||
|
|
||||||
return date.toLocaleFormat(format);
|
return date.toLocaleFormat(format);
|
||||||
@ -969,8 +973,7 @@ const ChatNotification = new Lang.Class({
|
|||||||
let timeLabel = this._append({ body: this._formatTimestamp(lastMessageDate),
|
let timeLabel = this._append({ body: this._formatTimestamp(lastMessageDate),
|
||||||
group: 'meta',
|
group: 'meta',
|
||||||
styles: ['chat-meta-message'],
|
styles: ['chat-meta-message'],
|
||||||
childProps: { expand: true, x_fill: false,
|
childProps: { expand: true, x_fill: false },
|
||||||
x_align: St.Align.END },
|
|
||||||
noTimestamp: true,
|
noTimestamp: true,
|
||||||
timestamp: lastMessageTime });
|
timestamp: lastMessageTime });
|
||||||
|
|
||||||
@ -1071,9 +1074,8 @@ const ApproverSource = new Lang.Class({
|
|||||||
this.parent();
|
this.parent();
|
||||||
},
|
},
|
||||||
|
|
||||||
createIcon: function(size) {
|
getIcon: function() {
|
||||||
return new St.Icon({ gicon: this._gicon,
|
return this._gicon;
|
||||||
icon_size: size });
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1134,7 +1136,7 @@ const AudioVideoNotification = new Lang.Class({
|
|||||||
this.parent(source, title, null, { customContent: true });
|
this.parent(source, title, null, { customContent: true });
|
||||||
this.setResident(true);
|
this.setResident(true);
|
||||||
|
|
||||||
this.addButton('reject', _("Reject"));
|
this.addButton('reject', _("Decline"));
|
||||||
/* translators: this is a button label (verb), not a noun */
|
/* translators: this is a button label (verb), not a noun */
|
||||||
this.addButton('answer', _("Answer"));
|
this.addButton('answer', _("Answer"));
|
||||||
|
|
||||||
|
@ -23,8 +23,7 @@ const DASH_ITEM_HOVER_TIMEOUT = 300;
|
|||||||
|
|
||||||
function getAppFromSource(source) {
|
function getAppFromSource(source) {
|
||||||
if (source instanceof AppDisplay.AppWellIcon) {
|
if (source instanceof AppDisplay.AppWellIcon) {
|
||||||
let appSystem = Shell.AppSystem.get_default();
|
return source.app;
|
||||||
return appSystem.lookup_app(source.getId());
|
|
||||||
} else if (source.metaWindow) {
|
} else if (source.metaWindow) {
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
return tracker.get_window_app(source.metaWindow);
|
return tracker.get_window_app(source.metaWindow);
|
||||||
@ -142,6 +141,7 @@ const DashItemContainer = new Lang.Class({
|
|||||||
|
|
||||||
setLabelText: function(text) {
|
setLabelText: function(text) {
|
||||||
this._labelText = text;
|
this._labelText = text;
|
||||||
|
this.child.accessible_name = text;
|
||||||
},
|
},
|
||||||
|
|
||||||
hideLabel: function () {
|
hideLabel: function () {
|
||||||
@ -259,7 +259,6 @@ const ShowAppsIcon = new Lang.Class({
|
|||||||
|
|
||||||
this.setChild(this.toggleButton);
|
this.setChild(this.toggleButton);
|
||||||
this.setDragApp(null);
|
this.setDragApp(null);
|
||||||
this.toggleButton.label_actor = this.label;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_createIcon: function(size) {
|
_createIcon: function(size) {
|
||||||
@ -492,32 +491,51 @@ const Dash = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_createAppItem: function(app) {
|
_createAppItem: function(app) {
|
||||||
let display = new AppDisplay.AppWellIcon(app,
|
let appIcon = new AppDisplay.AppWellIcon(app,
|
||||||
{ setSizeManually: true,
|
{ setSizeManually: true,
|
||||||
showLabel: false });
|
showLabel: false });
|
||||||
display._draggable.connect('drag-begin',
|
appIcon._draggable.connect('drag-begin',
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
display.actor.opacity = 50;
|
appIcon.actor.opacity = 50;
|
||||||
}));
|
}));
|
||||||
display._draggable.connect('drag-end',
|
appIcon._draggable.connect('drag-end',
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
display.actor.opacity = 255;
|
appIcon.actor.opacity = 255;
|
||||||
}));
|
}));
|
||||||
|
appIcon.connect('menu-state-changed',
|
||||||
|
Lang.bind(this, function(appIcon, opened) {
|
||||||
|
this._itemMenuStateChanged(item, opened);
|
||||||
|
}));
|
||||||
|
|
||||||
let item = new DashItemContainer();
|
let item = new DashItemContainer();
|
||||||
item.setChild(display.actor);
|
item.setChild(appIcon.actor);
|
||||||
|
|
||||||
|
// Override default AppWellIcon label_actor, now the
|
||||||
|
// accessible_name is set at DashItemContainer.setLabelText
|
||||||
|
appIcon.actor.label_actor = null;
|
||||||
item.setLabelText(app.get_name());
|
item.setLabelText(app.get_name());
|
||||||
// Override default AppWellIcon label_actor
|
|
||||||
display.actor.label_actor = item.label;
|
appIcon.icon.setIconSize(this.iconSize);
|
||||||
display.icon.setIconSize(this.iconSize);
|
|
||||||
this._hookUpLabel(item);
|
this._hookUpLabel(item);
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_itemMenuStateChanged: function(item, opened) {
|
||||||
|
// When the menu closes, it calls sync_hover, which means
|
||||||
|
// that the notify::hover handler does everything we need to.
|
||||||
|
if (opened) {
|
||||||
|
if (this._showLabelTimeoutId > 0) {
|
||||||
|
Mainloop.source_remove(this._showLabelTimeoutId);
|
||||||
|
this._showLabelTimeoutId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
item.hideLabel();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_onHover: function (item) {
|
_onHover: function (item) {
|
||||||
if (item.child.get_hover() && !item.child._delegate.isMenuUp) {
|
if (item.child.get_hover()) {
|
||||||
if (this._showLabelTimeoutId == 0) {
|
if (this._showLabelTimeoutId == 0) {
|
||||||
let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT;
|
let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT;
|
||||||
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,
|
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,
|
||||||
|
@ -105,7 +105,7 @@ const restartDialogContent = {
|
|||||||
endDescription: _("Restarting the system."),
|
endDescription: _("Restarting the system."),
|
||||||
confirmButtons: [{ signal: 'ConfirmedReboot',
|
confirmButtons: [{ signal: 'ConfirmedReboot',
|
||||||
label: C_("button", "Restart") }],
|
label: C_("button", "Restart") }],
|
||||||
iconName: 'system-shutdown-symbolic',
|
iconName: 'view-refresh-symbolic',
|
||||||
iconStyleClass: 'end-session-dialog-shutdown-icon'
|
iconStyleClass: 'end-session-dialog-shutdown-icon'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -20,25 +20,6 @@ const KEYBOARD_TYPE = 'keyboard-type';
|
|||||||
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
||||||
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
|
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
|
||||||
|
|
||||||
// Key constants taken from Antler
|
|
||||||
// FIXME: ought to be moved into libcaribou
|
|
||||||
const PRETTY_KEYS = {
|
|
||||||
'BackSpace': '\u232b',
|
|
||||||
'space': ' ',
|
|
||||||
'Return': '\u23ce',
|
|
||||||
'Caribou_Prefs': '\u2328',
|
|
||||||
'Caribou_ShiftUp': '\u2b06',
|
|
||||||
'Caribou_ShiftDown': '\u2b07',
|
|
||||||
'Caribou_Emoticons': '\u263a',
|
|
||||||
'Caribou_Symbols': '123',
|
|
||||||
'Caribou_Symbols_More': '{#*',
|
|
||||||
'Caribou_Alpha': 'Abc',
|
|
||||||
'Tab': 'Tab',
|
|
||||||
'Escape': 'Esc',
|
|
||||||
'Control_L': 'Ctrl',
|
|
||||||
'Alt_L': 'Alt'
|
|
||||||
};
|
|
||||||
|
|
||||||
const CaribouKeyboardIface = <interface name='org.gnome.Caribou.Keyboard'>
|
const CaribouKeyboardIface = <interface name='org.gnome.Caribou.Keyboard'>
|
||||||
<method name='Show'>
|
<method name='Show'>
|
||||||
<arg type='u' direction='in' />
|
<arg type='u' direction='in' />
|
||||||
@ -98,17 +79,7 @@ const Key = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_makeKey: function () {
|
_makeKey: function () {
|
||||||
let label = this._key.name;
|
let label = GLib.markup_escape_text(this._key.label, -1);
|
||||||
|
|
||||||
if (label.length > 1) {
|
|
||||||
let pretty = PRETTY_KEYS[label];
|
|
||||||
if (pretty)
|
|
||||||
label = pretty;
|
|
||||||
else
|
|
||||||
label = this._getUnichar(this._key);
|
|
||||||
}
|
|
||||||
|
|
||||||
label = GLib.markup_escape_text(label, -1);
|
|
||||||
let button = new St.Button ({ label: label,
|
let button = new St.Button ({ label: label,
|
||||||
style_class: 'keyboard-key' });
|
style_class: 'keyboard-key' });
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ const LayoutManager = new Lang.Class({
|
|||||||
this.primaryMonitor = null;
|
this.primaryMonitor = null;
|
||||||
this.primaryIndex = -1;
|
this.primaryIndex = -1;
|
||||||
this._hotCorners = [];
|
this._hotCorners = [];
|
||||||
this._rootPixmap = null;
|
this._background = null;
|
||||||
this._leftPanelBarrier = 0;
|
this._leftPanelBarrier = 0;
|
||||||
this._rightPanelBarrier = 0;
|
this._rightPanelBarrier = 0;
|
||||||
this._trayBarrier = 0;
|
this._trayBarrier = 0;
|
||||||
@ -128,8 +128,6 @@ const LayoutManager = new Lang.Class({
|
|||||||
this.trayBox = new St.Widget({ name: 'trayBox',
|
this.trayBox = new St.Widget({ name: 'trayBox',
|
||||||
layout_manager: new Clutter.BinLayout() });
|
layout_manager: new Clutter.BinLayout() });
|
||||||
this.addChrome(this.trayBox);
|
this.addChrome(this.trayBox);
|
||||||
this.trayBox.connect('allocation-changed',
|
|
||||||
Lang.bind(this, this._updateTrayBarrier));
|
|
||||||
|
|
||||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
@ -280,22 +278,6 @@ const LayoutManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateTrayBarrier: function() {
|
|
||||||
let monitor = this.bottomMonitor;
|
|
||||||
|
|
||||||
if (this._trayBarrier)
|
|
||||||
global.destroy_pointer_barrier(this._trayBarrier);
|
|
||||||
|
|
||||||
if (Main.messageTray) {
|
|
||||||
this._trayBarrier =
|
|
||||||
global.create_pointer_barrier(monitor.x + monitor.width, monitor.y + monitor.height - Main.messageTray.actor.height,
|
|
||||||
monitor.x + monitor.width, monitor.y + monitor.height,
|
|
||||||
4 /* BarrierNegativeX */);
|
|
||||||
} else {
|
|
||||||
this._trayBarrier = 0;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_monitorsChanged: function() {
|
_monitorsChanged: function() {
|
||||||
this._updateMonitors();
|
this._updateMonitors();
|
||||||
this._updateBoxes();
|
this._updateBoxes();
|
||||||
@ -333,30 +315,30 @@ const LayoutManager = new Lang.Class({
|
|||||||
// to the greeter. Otherwise, we'll just animate the panel,
|
// to the greeter. Otherwise, we'll just animate the panel,
|
||||||
// as usual.
|
// as usual.
|
||||||
if (Main.sessionMode.isGreeter) {
|
if (Main.sessionMode.isGreeter) {
|
||||||
this._rootPixmap = global.create_xrootpmap_texture();
|
this._background = Meta.BackgroundActor.new_for_screen(global.screen);
|
||||||
if (this._rootPixmap != null) {
|
if (this._background != null) {
|
||||||
Main.uiGroup.add_actor(this._rootPixmap);
|
Main.uiGroup.add_actor(this._background);
|
||||||
Tweener.addTween(this._rootPixmap,
|
Tweener.addTween(this._background,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
time: PLYMOUTH_TRANSITION_TIME,
|
time: PLYMOUTH_TRANSITION_TIME,
|
||||||
transition: 'linear',
|
transition: 'linear',
|
||||||
onComplete: this._fadeRootpmapComplete,
|
onComplete: this._fadeBackgroundComplete,
|
||||||
onCompleteScope: this });
|
onCompleteScope: this });
|
||||||
plymouthTransitionRunning = true;
|
plymouthTransitionRunning = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!plymouthTransitionRunning)
|
if (!plymouthTransitionRunning)
|
||||||
this._fadeRootpmapComplete();
|
this._fadeBackgroundComplete();
|
||||||
},
|
},
|
||||||
|
|
||||||
_fadeRootpmapComplete: function() {
|
_fadeBackgroundComplete: function() {
|
||||||
// Don't animate the strut
|
// Don't animate the strut
|
||||||
this._chrome.freezeUpdateRegions();
|
this._chrome.freezeUpdateRegions();
|
||||||
|
|
||||||
if (this._rootPixmap != null) {
|
if (this._background != null) {
|
||||||
this._rootPixmap.destroy();
|
this._background.destroy();
|
||||||
this._rootPixmap = null;
|
this._background = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tweener.addTween(this.panelBox,
|
Tweener.addTween(this.panelBox,
|
||||||
|
@ -69,7 +69,7 @@ let _overridesSettings = null;
|
|||||||
let background = null;
|
let background = null;
|
||||||
|
|
||||||
function _sessionUpdated() {
|
function _sessionUpdated() {
|
||||||
Meta.keybindings_set_custom_handler('panel-run-dialog', sessionMode.hasRunDialog ? openRunDialog : null);
|
Meta.keybindings_set_custom_handler('internal-keybinding-panel-run-dialog', sessionMode.hasRunDialog ? Util.wrapKeybinding(openRunDialog, true) : null);
|
||||||
if (sessionMode.isGreeter)
|
if (sessionMode.isGreeter)
|
||||||
screenShield.showDialog();
|
screenShield.showDialog();
|
||||||
}
|
}
|
||||||
@ -155,8 +155,14 @@ function start() {
|
|||||||
|
|
||||||
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
|
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
|
||||||
false, -1, 1);
|
false, -1, 1);
|
||||||
Meta.keybindings_set_custom_handler('panel-main-menu', Lang.bind(overview, overview.toggle));
|
Meta.keybindings_set_custom_handler('internal-keybinding-panel-main-menu', Util.wrapKeybinding(Lang.bind(overview, function() {
|
||||||
global.display.connect('overlay-key', Lang.bind(overview, overview.toggle));
|
this.toggle();
|
||||||
|
return true;
|
||||||
|
}), true));
|
||||||
|
global.display.connect('overlay-key', Util.wrapKeybinding(Lang.bind(overview, function() {
|
||||||
|
this.toggle();
|
||||||
|
return true;
|
||||||
|
}), true));
|
||||||
|
|
||||||
sessionMode.connect('update', _sessionUpdated);
|
sessionMode.connect('update', _sessionUpdated);
|
||||||
_sessionUpdated();
|
_sessionUpdated();
|
||||||
@ -167,8 +173,6 @@ function start() {
|
|||||||
|
|
||||||
_startDate = new Date();
|
_startDate = new Date();
|
||||||
|
|
||||||
global.stage.connect('captured-event', _globalKeyPressHandler);
|
|
||||||
|
|
||||||
log('GNOME Shell started at ' + _startDate);
|
log('GNOME Shell started at ' + _startDate);
|
||||||
|
|
||||||
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
|
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
|
||||||
@ -465,80 +469,6 @@ function getWindowActorsForWorkspace(workspaceIndex) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// This function encapsulates hacks to make certain global keybindings
|
|
||||||
// work even when we are in one of our modes where global keybindings
|
|
||||||
// are disabled with a global grab. (When there is a global grab, then
|
|
||||||
// all key events will be delivered to the stage, so ::captured-event
|
|
||||||
// on the stage can be used for global keybindings.)
|
|
||||||
function _globalKeyPressHandler(actor, event) {
|
|
||||||
if (modalCount == 0)
|
|
||||||
return false;
|
|
||||||
if (event.type() != Clutter.EventType.KEY_PRESS)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!sessionMode.allowKeybindingsWhenModal) {
|
|
||||||
if (modalCount > (overview.visible ? 1 : 0))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let symbol = event.get_key_symbol();
|
|
||||||
let keyCode = event.get_key_code();
|
|
||||||
let ignoredModifiers = global.display.get_ignored_modifier_mask();
|
|
||||||
let modifierState = event.get_state() & ~ignoredModifiers;
|
|
||||||
|
|
||||||
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
|
||||||
let action = global.display.get_keybinding_action(keyCode, modifierState);
|
|
||||||
|
|
||||||
if (action == Meta.KeyBindingAction.SWITCH_PANELS) {
|
|
||||||
ctrlAltTabManager.popup(modifierState & Clutter.ModifierType.SHIFT_MASK,
|
|
||||||
modifierState);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (action) {
|
|
||||||
// left/right would effectively act as synonyms for up/down if we enabled them;
|
|
||||||
// but that could be considered confusing; we also disable them in the main view.
|
|
||||||
//
|
|
||||||
// case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
|
||||||
// if (!sessionMode.hasWorkspaces)
|
|
||||||
// return false;
|
|
||||||
//
|
|
||||||
// wm.actionMoveWorkspaceLeft();
|
|
||||||
// return true;
|
|
||||||
// case Meta.KeyBindingAction.WORKSPACE_RIGHT:
|
|
||||||
// if (!sessionMode.hasWorkspaces)
|
|
||||||
// return false;
|
|
||||||
//
|
|
||||||
// wm.actionMoveWorkspaceRight();
|
|
||||||
// return true;
|
|
||||||
case Meta.KeyBindingAction.WORKSPACE_UP:
|
|
||||||
if (!sessionMode.hasWorkspaces)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
wm.actionMoveWorkspace(Meta.MotionDirection.UP);
|
|
||||||
return true;
|
|
||||||
case Meta.KeyBindingAction.WORKSPACE_DOWN:
|
|
||||||
if (!sessionMode.hasWorkspaces)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
wm.actionMoveWorkspace(Meta.MotionDirection.DOWN);
|
|
||||||
return true;
|
|
||||||
case Meta.KeyBindingAction.PANEL_RUN_DIALOG:
|
|
||||||
case Meta.KeyBindingAction.COMMAND_2:
|
|
||||||
if (!sessionMode.hasRunDialog)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
openRunDialog();
|
|
||||||
return true;
|
|
||||||
case Meta.KeyBindingAction.PANEL_MAIN_MENU:
|
|
||||||
case Meta.KeyBindingAction.OVERLAY_KEY:
|
|
||||||
overview.hide();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _findModal(actor) {
|
function _findModal(actor) {
|
||||||
for (let i = 0; i < modalActorFocusStack.length; i++) {
|
for (let i = 0; i < modalActorFocusStack.length; i++) {
|
||||||
if (modalActorFocusStack[i].actor == actor)
|
if (modalActorFocusStack[i].actor == actor)
|
||||||
@ -679,6 +609,8 @@ function openRunDialog() {
|
|||||||
runDialog = new RunDialog.RunDialog();
|
runDialog = new RunDialog.RunDialog();
|
||||||
}
|
}
|
||||||
runDialog.open();
|
runDialog.open();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4,6 +4,7 @@ const Clutter = imports.gi.Clutter;
|
|||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||||
const Atk = imports.gi.Atk;
|
const Atk = imports.gi.Atk;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
@ -35,8 +36,6 @@ const LONGER_SUMMARY_TIMEOUT = 4;
|
|||||||
const HIDE_TIMEOUT = 0.2;
|
const HIDE_TIMEOUT = 0.2;
|
||||||
const LONGER_HIDE_TIMEOUT = 0.6;
|
const LONGER_HIDE_TIMEOUT = 0.6;
|
||||||
|
|
||||||
const NOTIFICATION_ICON_SIZE = 24;
|
|
||||||
|
|
||||||
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
|
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
|
||||||
// range from the point where it left the tray.
|
// range from the point where it left the tray.
|
||||||
const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
|
const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
|
||||||
@ -143,14 +142,9 @@ const URLHighlighter = new Lang.Class({
|
|||||||
let url = this._urls[urlId].url;
|
let url = this._urls[urlId].url;
|
||||||
if (url.indexOf(':') == -1)
|
if (url.indexOf(':') == -1)
|
||||||
url = 'http://' + url;
|
url = 'http://' + url;
|
||||||
try {
|
|
||||||
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
|
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
|
||||||
return true;
|
return true;
|
||||||
} catch (e) {
|
|
||||||
// TODO: remove this after gnome 3 release
|
|
||||||
Util.spawn(['gvfs-open', url]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}));
|
}));
|
||||||
@ -243,9 +237,7 @@ function makeCloseButton() {
|
|||||||
closeButton.connect('style-changed', function() {
|
closeButton.connect('style-changed', function() {
|
||||||
let themeNode = closeButton.get_theme_node();
|
let themeNode = closeButton.get_theme_node();
|
||||||
closeButton.translation_x = themeNode.get_length('-shell-close-overlap-x');
|
closeButton.translation_x = themeNode.get_length('-shell-close-overlap-x');
|
||||||
|
closeButton.translation_y = themeNode.get_length('-shell-close-overlap-y');
|
||||||
// libcroco doesn't support negative units
|
|
||||||
closeButton.translation_y = -themeNode.get_length('-shell-close-overlap-y');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return closeButton;
|
return closeButton;
|
||||||
@ -291,9 +283,12 @@ function makeCloseButton() {
|
|||||||
// If @params contains a 'body' parameter, then that text will be added to
|
// If @params contains a 'body' parameter, then that text will be added to
|
||||||
// the content area (as with addBody()).
|
// the content area (as with addBody()).
|
||||||
//
|
//
|
||||||
// By default, the icon shown is created by calling
|
// By default, the icon shown is the same as the source's.
|
||||||
// source.createIcon(). However, if @params contains an 'icon'
|
// However, if @params contains a 'gicon' parameter, the passed in gicon
|
||||||
// parameter, the passed in icon will be used.
|
// will be used.
|
||||||
|
//
|
||||||
|
// You can add a secondary icon to the banner with 'secondaryGIcon'. There
|
||||||
|
// is no fallback for this icon.
|
||||||
//
|
//
|
||||||
// If @params contains a 'titleMarkup', 'bannerMarkup', or
|
// If @params contains a 'titleMarkup', 'bannerMarkup', or
|
||||||
// 'bodyMarkup' parameter with the value %true, then the corresponding
|
// 'bodyMarkup' parameter with the value %true, then the corresponding
|
||||||
@ -308,6 +303,8 @@ function makeCloseButton() {
|
|||||||
const Notification = new Lang.Class({
|
const Notification = new Lang.Class({
|
||||||
Name: 'Notification',
|
Name: 'Notification',
|
||||||
|
|
||||||
|
ICON_SIZE: 24,
|
||||||
|
|
||||||
IMAGE_SIZE: 125,
|
IMAGE_SIZE: 125,
|
||||||
|
|
||||||
_init: function(source, title, banner, params) {
|
_init: function(source, title, banner, params) {
|
||||||
@ -317,6 +314,7 @@ const Notification = new Lang.Class({
|
|||||||
this.resident = false;
|
this.resident = false;
|
||||||
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
||||||
this.isTransient = false;
|
this.isTransient = false;
|
||||||
|
this.forFeedback = false;
|
||||||
this.expanded = false;
|
this.expanded = false;
|
||||||
this.focused = false;
|
this.focused = false;
|
||||||
this.acknowledged = false;
|
this.acknowledged = false;
|
||||||
@ -391,8 +389,8 @@ const Notification = new Lang.Class({
|
|||||||
update: function(title, banner, params) {
|
update: function(title, banner, params) {
|
||||||
params = Params.parse(params, { customContent: false,
|
params = Params.parse(params, { customContent: false,
|
||||||
body: null,
|
body: null,
|
||||||
icon: null,
|
gicon: null,
|
||||||
secondaryIcon: null,
|
secondaryGIcon: null,
|
||||||
titleMarkup: false,
|
titleMarkup: false,
|
||||||
bannerMarkup: false,
|
bannerMarkup: false,
|
||||||
bodyMarkup: false,
|
bodyMarkup: false,
|
||||||
@ -402,12 +400,12 @@ const Notification = new Lang.Class({
|
|||||||
|
|
||||||
let oldFocus = global.stage.key_focus;
|
let oldFocus = global.stage.key_focus;
|
||||||
|
|
||||||
if (this._icon && (params.icon || params.clear)) {
|
if (this._icon && (params.gicon || params.clear)) {
|
||||||
this._icon.destroy();
|
this._icon.destroy();
|
||||||
this._icon = null;
|
this._icon = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._secondaryIcon && (params.secondaryIcon || params.clear)) {
|
if (this._secondaryIcon && (params.secondaryGIcon || params.clear)) {
|
||||||
this._secondaryIcon.destroy();
|
this._secondaryIcon.destroy();
|
||||||
this._secondaryIcon = null;
|
this._secondaryIcon = null;
|
||||||
}
|
}
|
||||||
@ -437,8 +435,14 @@ const Notification = new Lang.Class({
|
|||||||
if (!this._scrollArea && !this._actionArea && !this._imageBin)
|
if (!this._scrollArea && !this._actionArea && !this._imageBin)
|
||||||
this._table.remove_style_class_name('multi-line-notification');
|
this._table.remove_style_class_name('multi-line-notification');
|
||||||
|
|
||||||
if (!this._icon) {
|
if (params.gicon) {
|
||||||
this._icon = params.icon || this.source.createIcon(NOTIFICATION_ICON_SIZE);
|
this._icon = new St.Icon({ gicon: params.gicon,
|
||||||
|
icon_size: this.ICON_SIZE });
|
||||||
|
} else {
|
||||||
|
this._icon = this.source.createIcon(this.ICON_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._icon) {
|
||||||
this._table.add(this._icon, { row: 0,
|
this._table.add(this._icon, { row: 0,
|
||||||
col: 0,
|
col: 0,
|
||||||
x_expand: false,
|
x_expand: false,
|
||||||
@ -447,11 +451,10 @@ const Notification = new Lang.Class({
|
|||||||
y_align: St.Align.START });
|
y_align: St.Align.START });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this._secondaryIcon) {
|
if (params.secondaryGIcon) {
|
||||||
this._secondaryIcon = params.secondaryIcon;
|
this._secondaryIcon = new St.Icon({ gicon: params.secondaryGIcon,
|
||||||
|
style_class: 'secondary-icon' });
|
||||||
if (this._secondaryIcon)
|
this._bannerBox.add_actor(this._secondaryIcon);
|
||||||
this._bannerBox.add_actor(this._secondaryIcon);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.title = title;
|
this.title = title;
|
||||||
@ -711,6 +714,10 @@ const Notification = new Lang.Class({
|
|||||||
this.isTransient = isTransient;
|
this.isTransient = isTransient;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setForFeedback: function(forFeedback) {
|
||||||
|
this.forFeedback = forFeedback;
|
||||||
|
},
|
||||||
|
|
||||||
setUseActionIcons: function(useIcons) {
|
setUseActionIcons: function(useIcons) {
|
||||||
this._useActionIcons = useIcons;
|
this._useActionIcons = useIcons;
|
||||||
},
|
},
|
||||||
@ -1114,10 +1121,14 @@ const Source = new Lang.Class({
|
|||||||
// Provides a sane default implementation, override if you need
|
// Provides a sane default implementation, override if you need
|
||||||
// something more fancy.
|
// something more fancy.
|
||||||
createIcon: function(size) {
|
createIcon: function(size) {
|
||||||
return new St.Icon({ icon_name: this.iconName,
|
return new St.Icon({ gicon: this.getIcon(),
|
||||||
icon_size: size });
|
icon_size: size });
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getIcon: function() {
|
||||||
|
return new Gio.ThemedIcon({ name: this.iconName });
|
||||||
|
},
|
||||||
|
|
||||||
_ensureMainIcon: function() {
|
_ensureMainIcon: function() {
|
||||||
if (this._mainIcon)
|
if (this._mainIcon)
|
||||||
return;
|
return;
|
||||||
@ -1231,12 +1242,6 @@ const SummaryItem = new Lang.Class({
|
|||||||
|
|
||||||
this.notificationStackWidget = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
this.notificationStackWidget = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
||||||
|
|
||||||
this._closeButton = makeCloseButton();
|
|
||||||
this._closeButton.connect('clicked', Lang.bind(this, function() {
|
|
||||||
source.destroy();
|
|
||||||
source.emit('done-displaying-content');
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.notificationStackView = new St.ScrollView({ style_class: source.isChat ? '' : 'summary-notification-stack-scrollview',
|
this.notificationStackView = new St.ScrollView({ style_class: source.isChat ? '' : 'summary-notification-stack-scrollview',
|
||||||
vscrollbar_policy: source.isChat ? Gtk.PolicyType.NEVER : Gtk.PolicyType.AUTOMATIC,
|
vscrollbar_policy: source.isChat ? Gtk.PolicyType.NEVER : Gtk.PolicyType.AUTOMATIC,
|
||||||
hscrollbar_policy: Gtk.PolicyType.NEVER });
|
hscrollbar_policy: Gtk.PolicyType.NEVER });
|
||||||
@ -1245,7 +1250,9 @@ const SummaryItem = new Lang.Class({
|
|||||||
vertical: true });
|
vertical: true });
|
||||||
this.notificationStackView.add_actor(this.notificationStack);
|
this.notificationStackView.add_actor(this.notificationStack);
|
||||||
this.notificationStackWidget.add_actor(this.notificationStackView);
|
this.notificationStackWidget.add_actor(this.notificationStackView);
|
||||||
this.notificationStackWidget.add_actor(this._closeButton);
|
|
||||||
|
this.closeButton = makeCloseButton();
|
||||||
|
this.notificationStackWidget.add_actor(this.closeButton);
|
||||||
this._stackedNotifications = [];
|
this._stackedNotifications = [];
|
||||||
|
|
||||||
this._oldMaxScrollAdjustment = 0;
|
this._oldMaxScrollAdjustment = 0;
|
||||||
@ -1262,14 +1269,6 @@ const SummaryItem = new Lang.Class({
|
|||||||
global.focus_manager.add_group(this.rightClickMenu);
|
global.focus_manager.add_group(this.rightClickMenu);
|
||||||
},
|
},
|
||||||
|
|
||||||
get closeButtonVisible() {
|
|
||||||
return this._closeButton.visible;
|
|
||||||
},
|
|
||||||
|
|
||||||
set closeButtonVisible(v) {
|
|
||||||
this._closeButton.visible = v;
|
|
||||||
},
|
|
||||||
|
|
||||||
_onKeyPress: function(actor, event) {
|
_onKeyPress: function(actor, event) {
|
||||||
if (event.get_key_symbol() == Clutter.KEY_Up) {
|
if (event.get_key_symbol() == Clutter.KEY_Up) {
|
||||||
actor.emit('clicked', 1);
|
actor.emit('clicked', 1);
|
||||||
@ -1395,6 +1394,8 @@ const MessageTray = new Lang.Class({
|
|||||||
y_expand: true,
|
y_expand: true,
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
layout_manager: new Clutter.BinLayout() });
|
layout_manager: new Clutter.BinLayout() });
|
||||||
|
this._notificationWidget.connect('key-release-event', Lang.bind(this, this._onNotificationKeyRelease));
|
||||||
|
|
||||||
this.actor.add_actor(this._notificationWidget);
|
this.actor.add_actor(this._notificationWidget);
|
||||||
|
|
||||||
this._notificationBin = new St.Bin({ y_expand: true });
|
this._notificationBin = new St.Bin({ y_expand: true });
|
||||||
@ -1444,13 +1445,13 @@ const MessageTray = new Lang.Class({
|
|||||||
|
|
||||||
this._closeButton = makeCloseButton();
|
this._closeButton = makeCloseButton();
|
||||||
this._closeButton.hide();
|
this._closeButton.hide();
|
||||||
this._closeButton.connect('clicked', Lang.bind(this, this._onCloseClicked));
|
this._closeButton.connect('clicked', Lang.bind(this, this._closeNotification));
|
||||||
this._notificationWidget.add_actor(this._closeButton);
|
this._notificationWidget.add_actor(this._closeButton);
|
||||||
|
|
||||||
this._idleMonitorWatchId = 0;
|
this._idleMonitorBecameActiveId = 0;
|
||||||
this._userActiveWhileNotificationShown = false;
|
this._userActiveWhileNotificationShown = false;
|
||||||
|
|
||||||
this.idleMonitor = Shell.IdleMonitor.get();
|
this.idleMonitor = new GnomeDesktop.IdleMonitor();
|
||||||
|
|
||||||
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
|
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
|
||||||
this._grabHelper.addActor(this._summaryBoxPointer.actor);
|
this._grabHelper.addActor(this._summaryBoxPointer.actor);
|
||||||
@ -1520,6 +1521,10 @@ const MessageTray = new Lang.Class({
|
|||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Lang.bind(this, this.toggleAndNavigate));
|
Lang.bind(this, this.toggleAndNavigate));
|
||||||
|
global.display.add_keybinding('focus-active-notification',
|
||||||
|
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
|
Meta.KeyBindingFlags.NONE,
|
||||||
|
Lang.bind(this, this._expandActiveNotification));
|
||||||
|
|
||||||
this._summaryItems = [];
|
this._summaryItems = [];
|
||||||
this._chatSummaryItemsCount = 0;
|
this._chatSummaryItemsCount = 0;
|
||||||
@ -1595,14 +1600,23 @@ const MessageTray = new Lang.Class({
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onCloseClicked: function() {
|
_onNotificationKeyRelease: function(actor, event) {
|
||||||
|
let ignoredModifiers = global.display.get_ignored_modifier_mask();
|
||||||
|
let modifierState = event.get_state() & ~ignoredModifiers;
|
||||||
|
|
||||||
|
if (event.get_key_symbol() == Clutter.KEY_Escape && modifierState == 0) {
|
||||||
|
this._closeNotification();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_closeNotification: function() {
|
||||||
if (this._notificationState == State.SHOWN) {
|
if (this._notificationState == State.SHOWN) {
|
||||||
|
this._closeButton.hide();
|
||||||
this._notificationClosed = true;
|
this._notificationClosed = true;
|
||||||
this._notification.emit('done-displaying');
|
this._updateState();
|
||||||
|
|
||||||
if (!this._notification.resident)
|
|
||||||
this._notification.destroy();
|
|
||||||
|
|
||||||
this._notificationClosed = false;
|
this._notificationClosed = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1958,8 +1972,9 @@ const MessageTray = new Lang.Class({
|
|||||||
// Notifications
|
// Notifications
|
||||||
let notificationQueue = this._notificationQueue;
|
let notificationQueue = this._notificationQueue;
|
||||||
let notificationUrgent = notificationQueue.length > 0 && notificationQueue[0].urgency == Urgency.CRITICAL;
|
let notificationUrgent = notificationQueue.length > 0 && notificationQueue[0].urgency == Urgency.CRITICAL;
|
||||||
|
let notificationForFeedback = notificationQueue.length > 0 && notificationQueue[0].forFeedback;
|
||||||
let notificationsLimited = this._busy || this._inFullscreen;
|
let notificationsLimited = this._busy || this._inFullscreen;
|
||||||
let notificationsPending = notificationQueue.length > 0 && (!notificationsLimited || notificationUrgent) && Main.sessionMode.hasNotifications;
|
let notificationsPending = notificationQueue.length > 0 && (!notificationsLimited || notificationUrgent || notificationForFeedback) && Main.sessionMode.hasNotifications;
|
||||||
let nextNotification = notificationQueue.length > 0 ? notificationQueue[0] : null;
|
let nextNotification = notificationQueue.length > 0 ? notificationQueue[0] : null;
|
||||||
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
||||||
let notificationExpanded = this._notification && this._notification.expanded;
|
let notificationExpanded = this._notification && this._notification.expanded;
|
||||||
@ -2095,9 +2110,8 @@ const MessageTray = new Lang.Class({
|
|||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this._overviewVisible) {
|
if (!this._overviewVisible)
|
||||||
this._lightbox.show();
|
this._lightbox.show();
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
@ -2135,6 +2149,10 @@ const MessageTray = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_hideTray: function() {
|
_hideTray: function() {
|
||||||
|
// Having the summary item animate out while sliding down the tray
|
||||||
|
// is distracting, so hide it immediately in case it was visible.
|
||||||
|
this._summaryBoxPointer.actor.hide();
|
||||||
|
|
||||||
this._tween(this.actor, '_trayState', State.HIDDEN,
|
this._tween(this.actor, '_trayState', State.HIDDEN,
|
||||||
{ y: 0,
|
{ y: 0,
|
||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
@ -2162,20 +2180,26 @@ const MessageTray = new Lang.Class({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_onIdleMonitorWatch: function(monitor, id, userBecameIdle) {
|
_onIdleMonitorBecameActive: function() {
|
||||||
this.idleMonitor.remove_watch(this._idleMonitorWatchId);
|
this.idleMonitor.disconnect(this._idleMonitorBecameActiveId);
|
||||||
this._idleMonitorWatchId = 0;
|
this._idleMonitorBecameActiveId = 0;
|
||||||
if (!userBecameIdle)
|
|
||||||
this._updateNotificationTimeout(2000);
|
|
||||||
this._userActiveWhileNotificationShown = true;
|
this._userActiveWhileNotificationShown = true;
|
||||||
|
this._updateNotificationTimeout(2000);
|
||||||
this._updateState();
|
this._updateState();
|
||||||
},
|
},
|
||||||
|
|
||||||
_showNotification: function() {
|
_showNotification: function() {
|
||||||
this._notification = this._notificationQueue.shift();
|
this._notification = this._notificationQueue.shift();
|
||||||
this._userActiveWhileNotificationShown = this.idleMonitor.get_idletime() <= IDLE_TIME;
|
|
||||||
this._idleMonitorWatchId = this.idleMonitor.add_watch(IDLE_TIME,
|
let userIdle = this.idleMonitor.get_idletime() > IDLE_TIME;
|
||||||
Lang.bind(this, this._onIdleMonitorWatch));
|
if (userIdle) {
|
||||||
|
this._userActiveWhileNotificationShown = false;
|
||||||
|
this._idleMonitorBecameActiveId = this.idleMonitor.connect('became-active', Lang.bind(this, this._onIdleMonitorBecameActive));
|
||||||
|
} else {
|
||||||
|
this._userActiveWhileNotificationShown = true;
|
||||||
|
}
|
||||||
|
|
||||||
this._notificationClickedId = this._notification.connect('done-displaying',
|
this._notificationClickedId = this._notification.connect('done-displaying',
|
||||||
Lang.bind(this, this._escapeTray));
|
Lang.bind(this, this._escapeTray));
|
||||||
this._notification.connect('unfocused', Lang.bind(this, function() {
|
this._notification.connect('unfocused', Lang.bind(this, function() {
|
||||||
@ -2288,6 +2312,11 @@ const MessageTray = new Lang.Class({
|
|||||||
_hideNotification: function() {
|
_hideNotification: function() {
|
||||||
this._grabHelper.ungrab({ actor: this._notification.actor });
|
this._grabHelper.ungrab({ actor: this._notification.actor });
|
||||||
|
|
||||||
|
if (this._idleMonitorBecameActiveId) {
|
||||||
|
this.idleMonitor.disconnect(this._idleMonitorBecameActiveId);
|
||||||
|
this._idleMonitorBecameActiveId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (this._notificationExpandedId) {
|
if (this._notificationExpandedId) {
|
||||||
this._notification.disconnect(this._notificationExpandedId);
|
this._notification.disconnect(this._notificationExpandedId);
|
||||||
this._notificationExpandedId = 0;
|
this._notificationExpandedId = 0;
|
||||||
@ -2327,6 +2356,13 @@ const MessageTray = new Lang.Class({
|
|||||||
notification.destroy(NotificationDestroyedReason.EXPIRED);
|
notification.destroy(NotificationDestroyedReason.EXPIRED);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_expandActiveNotification: function() {
|
||||||
|
if (!this._notification)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._expandNotification(false);
|
||||||
|
},
|
||||||
|
|
||||||
_expandNotification: function(autoExpanding) {
|
_expandNotification: function(autoExpanding) {
|
||||||
// Don't grab focus in notifications that are auto-expanded.
|
// Don't grab focus in notifications that are auto-expanded.
|
||||||
if (!autoExpanding)
|
if (!autoExpanding)
|
||||||
@ -2403,7 +2439,10 @@ const MessageTray = new Lang.Class({
|
|||||||
this._notificationQueue = newQueue;
|
this._notificationQueue = newQueue;
|
||||||
|
|
||||||
this._summaryBoxPointer.bin.child = this._summaryBoxPointerItem.notificationStackWidget;
|
this._summaryBoxPointer.bin.child = this._summaryBoxPointerItem.notificationStackWidget;
|
||||||
this._summaryBoxPointerItem.closeButtonVisible = true;
|
|
||||||
|
let closeButton = this._summaryBoxPointerItem.closeButton;
|
||||||
|
closeButton.show();
|
||||||
|
this._summaryBoxPointerCloseClickedId = closeButton.connect('clicked', Lang.bind(this, this._hideSummaryBoxPointer));
|
||||||
this._summaryBoxPointerItem.prepareNotificationStackForShowing();
|
this._summaryBoxPointerItem.prepareNotificationStackForShowing();
|
||||||
} else if (this._clickedSummaryItemMouseButton == 3) {
|
} else if (this._clickedSummaryItemMouseButton == 3) {
|
||||||
this._summaryBoxPointer.bin.child = this._clickedSummaryItem.rightClickMenu;
|
this._summaryBoxPointer.bin.child = this._clickedSummaryItem.rightClickMenu;
|
||||||
@ -2513,6 +2552,8 @@ const MessageTray = new Lang.Class({
|
|||||||
this._summaryBoxPointer.bin.child = null;
|
this._summaryBoxPointer.bin.child = null;
|
||||||
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerContentUpdatedId);
|
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerContentUpdatedId);
|
||||||
this._summaryBoxPointerContentUpdatedId = 0;
|
this._summaryBoxPointerContentUpdatedId = 0;
|
||||||
|
this._summaryBoxPointerItem.closeButton.disconnect(this._summaryBoxPointerCloseClickedId);
|
||||||
|
this._summaryBoxPointerCloseClickedId = 0;
|
||||||
this._summaryBoxPointerItem.source.disconnect(this._sourceDoneDisplayingId);
|
this._summaryBoxPointerItem.source.disconnect(this._sourceDoneDisplayingId);
|
||||||
this._summaryBoxPointerDoneDisplayingId = 0;
|
this._summaryBoxPointerDoneDisplayingId = 0;
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ const Main = imports.ui.main;
|
|||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
const OPEN_AND_CLOSE_TIME = 0.1;
|
const OPEN_AND_CLOSE_TIME = 0.1;
|
||||||
const FADE_IN_BUTTONS_TIME = 0.33;
|
|
||||||
const FADE_OUT_DIALOG_TIME = 1.0;
|
const FADE_OUT_DIALOG_TIME = 1.0;
|
||||||
|
|
||||||
const State = {
|
const State = {
|
||||||
@ -117,8 +116,6 @@ const ModalDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
setButtons: function(buttons) {
|
setButtons: function(buttons) {
|
||||||
let hadChildren = this._buttonLayout.get_children() > 0;
|
|
||||||
|
|
||||||
this._buttonLayout.destroy_all_children();
|
this._buttonLayout.destroy_all_children();
|
||||||
this._actionKeys = {};
|
this._actionKeys = {};
|
||||||
|
|
||||||
@ -169,21 +166,7 @@ const ModalDialog = new Lang.Class({
|
|||||||
this._actionKeys[key] = action;
|
this._actionKeys[key] = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fade in buttons if there weren't any before
|
this.emit('buttons-set');
|
||||||
if (!hadChildren && buttons.length > 0) {
|
|
||||||
this._buttonLayout.opacity = 0;
|
|
||||||
Tweener.addTween(this._buttonLayout,
|
|
||||||
{ opacity: 255,
|
|
||||||
time: FADE_IN_BUTTONS_TIME,
|
|
||||||
transition: 'easeOutQuad',
|
|
||||||
onComplete: Lang.bind(this, function() {
|
|
||||||
this.emit('buttons-set');
|
|
||||||
})
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.emit('buttons-set');
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyReleaseEvent: function(object, event) {
|
_onKeyReleaseEvent: function(object, event) {
|
||||||
|
@ -356,12 +356,10 @@ const NotificationDaemon = new Lang.Class({
|
|||||||
ndata.actions, ndata.hints, ndata.notification];
|
ndata.actions, ndata.hints, ndata.notification];
|
||||||
|
|
||||||
let gicon = this._iconForNotificationData(icon, hints);
|
let gicon = this._iconForNotificationData(icon, hints);
|
||||||
let iconActor = new St.Icon({ gicon: gicon,
|
|
||||||
icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
|
|
||||||
|
|
||||||
if (notification == null) {
|
if (notification == null) {
|
||||||
notification = new MessageTray.Notification(source, summary, body,
|
notification = new MessageTray.Notification(source, summary, body,
|
||||||
{ icon: iconActor,
|
{ gicon: gicon,
|
||||||
bannerMarkup: true });
|
bannerMarkup: true });
|
||||||
ndata.notification = notification;
|
ndata.notification = notification;
|
||||||
notification.connect('destroy', Lang.bind(this,
|
notification.connect('destroy', Lang.bind(this,
|
||||||
@ -386,7 +384,7 @@ const NotificationDaemon = new Lang.Class({
|
|||||||
this._emitActionInvoked(ndata.id, actionId);
|
this._emitActionInvoked(ndata.id, actionId);
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
notification.update(summary, body, { icon: iconActor,
|
notification.update(summary, body, { gicon: gicon,
|
||||||
bannerMarkup: true,
|
bannerMarkup: true,
|
||||||
clear: true });
|
clear: true });
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,29 @@ const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
|||||||
// Time for initial animation going into Overview mode
|
// Time for initial animation going into Overview mode
|
||||||
const ANIMATION_TIME = 0.25;
|
const ANIMATION_TIME = 0.25;
|
||||||
|
|
||||||
// We split the screen vertically between the dash and the view selector.
|
// XXX -- grab this automatically. Hard to do.
|
||||||
const DASH_SPLIT_FRACTION = 0.1;
|
const DASH_MAX_WIDTH = 96;
|
||||||
|
|
||||||
const DND_WINDOW_SWITCH_TIMEOUT = 1250;
|
const DND_WINDOW_SWITCH_TIMEOUT = 1250;
|
||||||
|
|
||||||
|
const GLSL_DIM_EFFECT_DECLARATIONS = '';
|
||||||
|
const GLSL_DIM_EFFECT_CODE = '\
|
||||||
|
vec2 dist = cogl_tex_coord_in[0].xy - vec2(0.5, 0.5); \
|
||||||
|
float elipse_radius = 0.5; \
|
||||||
|
/* from https://bugzilla.gnome.org/show_bug.cgi?id=669798: \
|
||||||
|
the alpha on the gradient goes from 165 at its darkest to 98 at its most transparent. */ \
|
||||||
|
float y = 165.0 / 255.0; \
|
||||||
|
float x = 98.0 / 255.0; \
|
||||||
|
/* interpolate darkening value, based on distance from screen center */ \
|
||||||
|
float val = min(length(dist), elipse_radius); \
|
||||||
|
float a = mix(x, y, val / elipse_radius); \
|
||||||
|
/* dim_factor varies from [1.0 -> 0.5] when overview is showing \
|
||||||
|
We use it to smooth value, then we clamp it to valid color interval */ \
|
||||||
|
a = clamp(a - cogl_color_in.r + 0.5, 0.0, 1.0); \
|
||||||
|
/* We\'re blending between: color and black color (obviously omitted in the equation) */ \
|
||||||
|
cogl_color_out.xyz = cogl_color_out.xyz * (1.0 - a); \
|
||||||
|
cogl_color_out.a = 1.0;';
|
||||||
|
|
||||||
const SwipeScrollDirection = {
|
const SwipeScrollDirection = {
|
||||||
NONE: 0,
|
NONE: 0,
|
||||||
HORIZONTAL: 1,
|
HORIZONTAL: 1,
|
||||||
@ -57,7 +75,14 @@ const ShellInfo = new Lang.Class({
|
|||||||
this._source.destroy();
|
this._source.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
setMessage: function(text, undoCallback, undoLabel) {
|
setMessage: function(text, options) {
|
||||||
|
options = Params.parse(options, { undoCallback: null,
|
||||||
|
forFeedback: false
|
||||||
|
});
|
||||||
|
|
||||||
|
let undoCallback = options.undoCallback;
|
||||||
|
let forFeedback = options.forFeedback;
|
||||||
|
|
||||||
if (this._source == null) {
|
if (this._source == null) {
|
||||||
this._source = new MessageTray.SystemNotificationSource();
|
this._source = new MessageTray.SystemNotificationSource();
|
||||||
this._source.connect('destroy', Lang.bind(this,
|
this._source.connect('destroy', Lang.bind(this,
|
||||||
@ -71,6 +96,7 @@ const ShellInfo = new Lang.Class({
|
|||||||
if (this._source.notifications.length == 0) {
|
if (this._source.notifications.length == 0) {
|
||||||
notification = new MessageTray.Notification(this._source, text, null);
|
notification = new MessageTray.Notification(this._source, text, null);
|
||||||
notification.setTransient(true);
|
notification.setTransient(true);
|
||||||
|
notification.setForFeedback(forFeedback);
|
||||||
} else {
|
} else {
|
||||||
notification = this._source.notifications[0];
|
notification = this._source.notifications[0];
|
||||||
notification.update(text, null, { clear: true });
|
notification.update(text, null, { clear: true });
|
||||||
@ -78,10 +104,8 @@ const ShellInfo = new Lang.Class({
|
|||||||
|
|
||||||
this._undoCallback = undoCallback;
|
this._undoCallback = undoCallback;
|
||||||
if (undoCallback) {
|
if (undoCallback) {
|
||||||
notification.addButton('system-undo',
|
notification.addButton('system-undo', _("Undo"));
|
||||||
undoLabel ? undoLabel : _("Undo"));
|
notification.connect('action-invoked', Lang.bind(this, this._onUndoClicked));
|
||||||
notification.connect('action-invoked',
|
|
||||||
Lang.bind(this, this._onUndoClicked));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this._source.notify(notification);
|
this._source.notify(notification);
|
||||||
@ -113,6 +137,10 @@ const Overview = new Lang.Class({
|
|||||||
// scenes which allows us to show the background with different
|
// scenes which allows us to show the background with different
|
||||||
// rendering options without duplicating the texture data.
|
// rendering options without duplicating the texture data.
|
||||||
this._background = Meta.BackgroundActor.new_for_screen(global.screen);
|
this._background = Meta.BackgroundActor.new_for_screen(global.screen);
|
||||||
|
this._background.add_glsl_snippet(Meta.SnippetHook.FRAGMENT,
|
||||||
|
GLSL_DIM_EFFECT_DECLARATIONS,
|
||||||
|
GLSL_DIM_EFFECT_CODE,
|
||||||
|
false);
|
||||||
this._background.hide();
|
this._background.hide();
|
||||||
global.overlay_group.add_actor(this._background);
|
global.overlay_group.add_actor(this._background);
|
||||||
|
|
||||||
@ -233,11 +261,16 @@ const Overview = new Lang.Class({
|
|||||||
this._viewSelector.removeSearchProvider(provider);
|
this._viewSelector.removeSearchProvider(provider);
|
||||||
},
|
},
|
||||||
|
|
||||||
setMessage: function(text, undoCallback, undoLabel) {
|
//
|
||||||
|
// options:
|
||||||
|
// - undoCallback (function): the callback to be called if undo support is needed
|
||||||
|
// - forFeedback (boolean): whether the message is for direct feedback of a user action
|
||||||
|
//
|
||||||
|
setMessage: function(text, options) {
|
||||||
if (this.isDummy)
|
if (this.isDummy)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._shellInfo.setMessage(text, undoCallback, undoLabel);
|
this._shellInfo.setMessage(text, options);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDragBegin: function() {
|
_onDragBegin: function() {
|
||||||
@ -502,7 +535,7 @@ const Overview = new Lang.Class({
|
|||||||
let searchX = (primary.width - searchWidth) / 2;
|
let searchX = (primary.width - searchWidth) / 2;
|
||||||
let searchY = contentY + this._spacing;
|
let searchY = contentY + this._spacing;
|
||||||
|
|
||||||
let dashWidth = Math.round(DASH_SPLIT_FRACTION * primary.width);
|
let dashWidth = DASH_MAX_WIDTH;
|
||||||
let dashY = searchY + searchHeight + this._spacing;
|
let dashY = searchY + searchHeight + this._spacing;
|
||||||
let dashX;
|
let dashX;
|
||||||
if (rtl) {
|
if (rtl) {
|
||||||
@ -622,7 +655,7 @@ const Overview = new Lang.Class({
|
|||||||
});
|
});
|
||||||
|
|
||||||
Tweener.addTween(this._background,
|
Tweener.addTween(this._background,
|
||||||
{ dim_factor: 0.4,
|
{ dim_factor: 0.8,
|
||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
});
|
});
|
||||||
|
@ -247,6 +247,10 @@ const AppMenuButton = new Lang.Class({
|
|||||||
this._container.connect('get-preferred-height', Lang.bind(this, this._getContentPreferredHeight));
|
this._container.connect('get-preferred-height', Lang.bind(this, this._getContentPreferredHeight));
|
||||||
this._container.connect('allocate', Lang.bind(this, this._contentAllocate));
|
this._container.connect('allocate', Lang.bind(this, this._contentAllocate));
|
||||||
|
|
||||||
|
let textureCache = St.TextureCache.get_default();
|
||||||
|
textureCache.connect('icon-theme-changed',
|
||||||
|
Lang.bind(this, this._onIconThemeChanged));
|
||||||
|
|
||||||
this._iconBox = new Shell.Slicer({ name: 'appMenuIcon' });
|
this._iconBox = new Shell.Slicer({ name: 'appMenuIcon' });
|
||||||
this._iconBox.connect('style-changed',
|
this._iconBox.connect('style-changed',
|
||||||
Lang.bind(this, this._onIconBoxStyleChanged));
|
Lang.bind(this, this._onIconBoxStyleChanged));
|
||||||
@ -332,6 +336,15 @@ const AppMenuButton = new Lang.Class({
|
|||||||
this._updateIconBoxClip();
|
this._updateIconBoxClip();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onIconThemeChanged: function() {
|
||||||
|
if (this._iconBox.child == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._iconBox.child.destroy();
|
||||||
|
let icon = this._targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
|
||||||
|
this._iconBox.set_child(icon);
|
||||||
|
},
|
||||||
|
|
||||||
_updateIconBoxClip: function() {
|
_updateIconBoxClip: function() {
|
||||||
let allocation = this._iconBox.allocation;
|
let allocation = this._iconBox.allocation;
|
||||||
if (this._iconBottomClip > 0)
|
if (this._iconBottomClip > 0)
|
||||||
@ -901,6 +914,7 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
|
|||||||
'volume': imports.ui.status.volume.Indicator,
|
'volume': imports.ui.status.volume.Indicator,
|
||||||
'battery': imports.ui.status.power.Indicator,
|
'battery': imports.ui.status.power.Indicator,
|
||||||
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
||||||
|
'logo': imports.gdm.loginDialog.LogoMenuButton,
|
||||||
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
||||||
'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
|
'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
|
||||||
'userMenu': imports.ui.userMenu.UserMenuButton
|
'userMenu': imports.ui.userMenu.UserMenuButton
|
||||||
|
@ -214,7 +214,8 @@ const Button = new Lang.Class({
|
|||||||
destroy: function() {
|
destroy: function() {
|
||||||
this.actor._delegate = null;
|
this.actor._delegate = null;
|
||||||
|
|
||||||
this.menu.destroy();
|
if (this.menu)
|
||||||
|
this.menu.destroy();
|
||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
|
|
||||||
this.emit('destroy');
|
this.emit('destroy');
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
|
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
// We stop polling if the user is idle for more than this amount of time
|
// We stop polling if the user is idle for more than this amount of time
|
||||||
@ -40,9 +41,9 @@ const PointerWatcher = new Lang.Class({
|
|||||||
Name: 'PointerWatcher',
|
Name: 'PointerWatcher',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
let idleMonitor = Shell.IdleMonitor.get();
|
let idleMonitor = new GnomeDesktop.IdleMonitor();
|
||||||
idleMonitor.add_watch(IDLE_TIME,
|
idleMonitor.connect('became-active', Lang.bind(this, this._onIdleMonitorBecameActive));
|
||||||
Lang.bind(this, this._onIdleMonitorWatch));
|
idleMonitor.add_watch(IDLE_TIME, Lang.bind(this, this._onIdleMonitorBecameIdle));
|
||||||
this._idle = idleMonitor.get_idletime() > IDLE_TIME;
|
this._idle = idleMonitor.get_idletime() > IDLE_TIME;
|
||||||
this._watches = [];
|
this._watches = [];
|
||||||
this.pointerX = null;
|
this.pointerX = null;
|
||||||
@ -78,11 +79,14 @@ const PointerWatcher = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onIdleMonitorWatch: function(monitor, id, userBecameIdle) {
|
_onIdleMonitorBecameActive: function(monitor) {
|
||||||
this._idle = userBecameIdle;
|
this._idle = false;
|
||||||
if (!userBecameIdle)
|
this._updatePointer();
|
||||||
this._updatePointer();
|
this._updateTimeout();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onIdleMonitorBecameIdle: function(monitor) {
|
||||||
|
this._idle = true;
|
||||||
this._updateTimeout();
|
this._updateTimeout();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1269,13 +1269,14 @@ const PopupMenu = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
close: function(animate) {
|
close: function(animate) {
|
||||||
if (!this.isOpen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (this._activeMenuItem)
|
if (this._activeMenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.setActive(false);
|
||||||
|
|
||||||
this._boxPointer.hide(animate);
|
if (this._boxPointer.actor.visible)
|
||||||
|
this._boxPointer.hide(animate);
|
||||||
|
|
||||||
|
if (!this.isOpen)
|
||||||
|
return;
|
||||||
|
|
||||||
this.isOpen = false;
|
this.isOpen = false;
|
||||||
this.emit('open-state-changed', false);
|
this.emit('open-state-changed', false);
|
||||||
|
@ -38,9 +38,22 @@ function loadRemoteSearchProviders(addProviderCallback) {
|
|||||||
for (let i = 0; i < dataDirs.length; i++) {
|
for (let i = 0; i < dataDirs.length; i++) {
|
||||||
let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'search-providers']);
|
let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'search-providers']);
|
||||||
let dir = Gio.file_new_for_path(path);
|
let dir = Gio.file_new_for_path(path);
|
||||||
if (!dir.query_exists(null))
|
|
||||||
continue;
|
dir.query_info_async('standard:type', Gio.FileQueryInfoFlags.NONE,
|
||||||
loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallback);
|
GLib.PRIORITY_DEFAULT, null,
|
||||||
|
function(object, res) {
|
||||||
|
let exists = false;
|
||||||
|
try {
|
||||||
|
object.query_info_finish(res);
|
||||||
|
exists = true;
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exists)
|
||||||
|
return;
|
||||||
|
|
||||||
|
loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallback);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -60,7 +73,7 @@ function loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallb
|
|||||||
if (!keyfile.has_group(KEY_FILE_GROUP))
|
if (!keyfile.has_group(KEY_FILE_GROUP))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
let remoteProvider, title;
|
let remoteProvider;
|
||||||
try {
|
try {
|
||||||
let group = KEY_FILE_GROUP;
|
let group = KEY_FILE_GROUP;
|
||||||
let busName = keyfile.get_string(group, 'BusName');
|
let busName = keyfile.get_string(group, 'BusName');
|
||||||
@ -74,25 +87,17 @@ function loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallb
|
|||||||
let desktopId = keyfile.get_string(group, 'DesktopId');
|
let desktopId = keyfile.get_string(group, 'DesktopId');
|
||||||
appInfo = Gio.DesktopAppInfo.new(desktopId);
|
appInfo = Gio.DesktopAppInfo.new(desktopId);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
log('Ignoring search provider ' + path + ': missing DesktopId');
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let icon;
|
remoteProvider = new RemoteSearchProvider(appInfo.get_name(),
|
||||||
if (appInfo) {
|
appInfo.get_icon(),
|
||||||
icon = appInfo.get_icon();
|
|
||||||
title = appInfo.get_name();
|
|
||||||
} else {
|
|
||||||
let iconName = keyfile.get_string(group, 'Icon');
|
|
||||||
icon = new Gio.ThemedIcon({ name: iconName });
|
|
||||||
title = keyfile.get_locale_string(group, 'Title', null);
|
|
||||||
}
|
|
||||||
|
|
||||||
remoteProvider = new RemoteSearchProvider(title,
|
|
||||||
icon,
|
|
||||||
busName,
|
busName,
|
||||||
objectPath);
|
objectPath);
|
||||||
loadedProviders[objectPath] = remoteProvider;
|
loadedProviders[objectPath] = remoteProvider;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
log('Failed to add search provider "%s": %s'.format(title, e.toString()));
|
log('Failed to add search provider %s: %s'.format(path, e.toString()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,12 +113,16 @@ const RemoteSearchProvider = new Lang.Class({
|
|||||||
|
|
||||||
_init: function(title, icon, dbusName, dbusPath) {
|
_init: function(title, icon, dbusName, dbusPath) {
|
||||||
this._proxy = new SearchProviderProxy(Gio.DBus.session,
|
this._proxy = new SearchProviderProxy(Gio.DBus.session,
|
||||||
dbusName, dbusPath);
|
dbusName, dbusPath, Lang.bind(this, this._onProxyConstructed));
|
||||||
|
|
||||||
this.parent(title.toUpperCase());
|
this.parent(title.toUpperCase());
|
||||||
this._cancellable = new Gio.Cancellable();
|
this._cancellable = new Gio.Cancellable();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onProxyConstructed: function(proxy) {
|
||||||
|
// Do nothing
|
||||||
|
},
|
||||||
|
|
||||||
createIcon: function(size, meta) {
|
createIcon: function(size, meta) {
|
||||||
if (meta['gicon']) {
|
if (meta['gicon']) {
|
||||||
return new St.Icon({ gicon: Gio.icon_new_for_string(meta['gicon']),
|
return new St.Icon({ gicon: Gio.icon_new_for_string(meta['gicon']),
|
||||||
|
@ -202,11 +202,12 @@ const RunDialog = new Lang.Class({
|
|||||||
|
|
||||||
|
|
||||||
let label = new St.Label({ style_class: 'run-dialog-label',
|
let label = new St.Label({ style_class: 'run-dialog-label',
|
||||||
text: _("Please enter a command:") });
|
text: _("Enter a Command") });
|
||||||
|
|
||||||
this.contentLayout.add(label, { y_align: St.Align.START });
|
this.contentLayout.add(label, { y_align: St.Align.START });
|
||||||
|
|
||||||
let entry = new St.Entry({ style_class: 'run-dialog-entry' });
|
let entry = new St.Entry({ style_class: 'run-dialog-entry',
|
||||||
|
can_focus: true });
|
||||||
ShellEntry.addContextMenu(entry);
|
ShellEntry.addContextMenu(entry);
|
||||||
|
|
||||||
entry.label_actor = label;
|
entry.label_actor = label;
|
||||||
@ -219,7 +220,9 @@ const RunDialog = new Lang.Class({
|
|||||||
|
|
||||||
this.contentLayout.add(this._errorBox, { expand: true });
|
this.contentLayout.add(this._errorBox, { expand: true });
|
||||||
|
|
||||||
let errorIcon = new St.Icon({ icon_name: 'dialog-error', icon_size: 24, style_class: 'run-dialog-error-icon' });
|
let errorIcon = new St.Icon({ icon_name: 'dialog-error-symbolic',
|
||||||
|
icon_size: 24,
|
||||||
|
style_class: 'run-dialog-error-icon' });
|
||||||
|
|
||||||
this._errorBox.add(errorIcon, { y_align: St.Align.MIDDLE });
|
this._errorBox.add(errorIcon, { y_align: St.Align.MIDDLE });
|
||||||
|
|
||||||
@ -234,6 +237,10 @@ const RunDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._errorBox.hide();
|
this._errorBox.hide();
|
||||||
|
|
||||||
|
this.setButtons([{ action: Lang.bind(this, this.close),
|
||||||
|
label: _("Close"),
|
||||||
|
key: Clutter.Escape }]);
|
||||||
|
|
||||||
this._pathCompleter = new Gio.FilenameCompleter();
|
this._pathCompleter = new Gio.FilenameCompleter();
|
||||||
this._commandCompleter = new CommandCompleter();
|
this._commandCompleter = new CommandCompleter();
|
||||||
this._group.connect('notify::visible', Lang.bind(this._commandCompleter, this._commandCompleter.update));
|
this._group.connect('notify::visible', Lang.bind(this._commandCompleter, this._commandCompleter.update));
|
||||||
@ -244,20 +251,12 @@ const RunDialog = new Lang.Class({
|
|||||||
let symbol = e.get_key_symbol();
|
let symbol = e.get_key_symbol();
|
||||||
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
|
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
|
||||||
this.popModal();
|
this.popModal();
|
||||||
if (e.get_state() & Clutter.ModifierType.CONTROL_MASK)
|
this._run(o.get_text(),
|
||||||
this._run(o.get_text(), true);
|
e.get_state() & Clutter.ModifierType.CONTROL_MASK);
|
||||||
else
|
if (!this._commandError ||
|
||||||
this._run(o.get_text(), false);
|
!this.pushModal())
|
||||||
if (!this._commandError)
|
|
||||||
this.close();
|
this.close();
|
||||||
else {
|
|
||||||
if (!this.pushModal())
|
|
||||||
this.close();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (symbol == Clutter.Escape) {
|
|
||||||
this.close();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (symbol == Clutter.slash) {
|
if (symbol == Clutter.slash) {
|
||||||
|
@ -21,11 +21,12 @@ const Overview = imports.ui.overview;
|
|||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
const ShellDBus = imports.ui.shellDBus;
|
const ShellDBus = imports.ui.shellDBus;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
|
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
|
||||||
const LOCK_ENABLED_KEY = 'lock-enabled';
|
const LOCK_ENABLED_KEY = 'lock-enabled';
|
||||||
|
|
||||||
const CURTAIN_SLIDE_TIME = 0.5;
|
const CURTAIN_SLIDE_TIME = 0.3;
|
||||||
// fraction of screen height the arrow must reach before completing
|
// fraction of screen height the arrow must reach before completing
|
||||||
// the slide up automatically
|
// the slide up automatically
|
||||||
const ARROW_DRAG_THRESHOLD = 0.1;
|
const ARROW_DRAG_THRESHOLD = 0.1;
|
||||||
@ -46,7 +47,39 @@ const SUMMARY_ICON_SIZE = 48;
|
|||||||
// STANDARD_FADE_TIME is used when the session goes idle, while
|
// STANDARD_FADE_TIME is used when the session goes idle, while
|
||||||
// SHORT_FADE_TIME is used when requesting lock explicitly from the user menu
|
// SHORT_FADE_TIME is used when requesting lock explicitly from the user menu
|
||||||
const STANDARD_FADE_TIME = 10;
|
const STANDARD_FADE_TIME = 10;
|
||||||
const SHORT_FADE_TIME = 0.8;
|
const SHORT_FADE_TIME = 0.3;
|
||||||
|
|
||||||
|
function sample(offx, offy) {
|
||||||
|
return 'texel += texture2D (sampler, tex_coord.st + pixel_step * ' +
|
||||||
|
'vec2 (' + offx + ',' + offy + ') * 2.0);\n'
|
||||||
|
}
|
||||||
|
const GLSL_BLUR_EFFECT_DECLARATIONS = ' \
|
||||||
|
uniform vec2 pixel_step;\n \
|
||||||
|
vec4 apply_blur(in sampler2D sampler, in vec2 tex_coord) {\n \
|
||||||
|
vec4 texel;\n \
|
||||||
|
texel = texture2D (sampler, tex_coord.st);\n'
|
||||||
|
+ sample(-1.0, -1.0)
|
||||||
|
+ sample( 0.0, -1.0)
|
||||||
|
+ sample(+1.0, -1.0)
|
||||||
|
+ sample(-1.0, 0.0)
|
||||||
|
+ sample( 0.0, 0.0)
|
||||||
|
+ sample(+1.0, 0.0)
|
||||||
|
+ sample(-1.0, +1.0)
|
||||||
|
+ sample( 0.0, +1.0)
|
||||||
|
+ sample(+1.0, +1.0) + ' \
|
||||||
|
texel /= 9.0;\n \
|
||||||
|
return texel;\n \
|
||||||
|
}\n \
|
||||||
|
vec3 desaturate (const vec3 color, const float desaturation)\n \
|
||||||
|
{\n \
|
||||||
|
const vec3 gray_conv = vec3 (0.299, 0.587, 0.114);\n \
|
||||||
|
vec3 gray = vec3 (dot (gray_conv, color));\n \
|
||||||
|
return vec3 (mix (color.rgb, gray, desaturation));\n \
|
||||||
|
}';
|
||||||
|
const GLSL_BLUR_EFFECT_CODE = ' \
|
||||||
|
cogl_texel = apply_blur(cogl_sampler, cogl_tex_coord.st);\n \
|
||||||
|
cogl_texel.rgb = desaturate(cogl_texel.rgb, 0.6);\n';
|
||||||
|
|
||||||
|
|
||||||
const Clock = new Lang.Class({
|
const Clock = new Lang.Class({
|
||||||
Name: 'ScreenShieldClock',
|
Name: 'ScreenShieldClock',
|
||||||
@ -185,7 +218,7 @@ const NotificationsBox = new Lang.Class({
|
|||||||
|
|
||||||
if (obj.resident) {
|
if (obj.resident) {
|
||||||
this._residentNotificationBox.add(item.notificationStackWidget);
|
this._residentNotificationBox.add(item.notificationStackWidget);
|
||||||
item.closeButtonVisible = false;
|
item.closeButton.hide();
|
||||||
item.prepareNotificationStackForShowing();
|
item.prepareNotificationStackForShowing();
|
||||||
} else {
|
} else {
|
||||||
[obj.sourceBox, obj.countLabel] = this._makeNotificationSource(item.source);
|
[obj.sourceBox, obj.countLabel] = this._makeNotificationSource(item.source);
|
||||||
@ -243,7 +276,7 @@ const NotificationsBox = new Lang.Class({
|
|||||||
obj.resident = true;
|
obj.resident = true;
|
||||||
|
|
||||||
this._residentNotificationBox.add(obj.item.notificationStackWidget);
|
this._residentNotificationBox.add(obj.item.notificationStackWidget);
|
||||||
obj.item.closeButtonVisible = false;
|
obj.item.closeButton.hide();
|
||||||
obj.item.prepareNotificationStackForShowing();
|
obj.item.prepareNotificationStackForShowing();
|
||||||
} else {
|
} else {
|
||||||
// just update the counter
|
// just update the counter
|
||||||
@ -334,6 +367,10 @@ const Arrow = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function clamp(value, min, max) {
|
||||||
|
return Math.max(min, Math.min(max, value));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To test screen shield, make sure to kill gnome-screensaver.
|
* To test screen shield, make sure to kill gnome-screensaver.
|
||||||
*
|
*
|
||||||
@ -366,8 +403,13 @@ const ScreenShield = new Lang.Class({
|
|||||||
name: 'lockScreenContents' });
|
name: 'lockScreenContents' });
|
||||||
this._lockScreenContents.add_constraint(new Layout.MonitorConstraint({ primary: true }));
|
this._lockScreenContents.add_constraint(new Layout.MonitorConstraint({ primary: true }));
|
||||||
|
|
||||||
|
let backgroundActor = Meta.BackgroundActor.new_for_screen(global.screen);
|
||||||
|
backgroundActor.add_glsl_snippet(Meta.SnippetHook.TEXTURE_LOOKUP,
|
||||||
|
GLSL_BLUR_EFFECT_DECLARATIONS,
|
||||||
|
GLSL_BLUR_EFFECT_CODE,
|
||||||
|
true);
|
||||||
this._background = new St.Bin({ style_class: 'screen-shield-background',
|
this._background = new St.Bin({ style_class: 'screen-shield-background',
|
||||||
child: Meta.BackgroundActor.new_for_screen(global.screen) });
|
child: backgroundActor });
|
||||||
this._lockScreenGroup.add_actor(this._background);
|
this._lockScreenGroup.add_actor(this._background);
|
||||||
this._lockScreenGroup.add_actor(this._lockScreenContents);
|
this._lockScreenGroup.add_actor(this._lockScreenContents);
|
||||||
|
|
||||||
@ -386,14 +428,11 @@ const ScreenShield = new Lang.Class({
|
|||||||
}
|
}
|
||||||
this._lockScreenContents.add_actor(this._arrowContainer);
|
this._lockScreenContents.add_actor(this._arrowContainer);
|
||||||
|
|
||||||
let dragArea = new Clutter.Rect({ origin: new Clutter.Point({ x: 0, y: -global.screen_height, }),
|
this._dragAction = new Clutter.GestureAction();
|
||||||
size: new Clutter.Size({ width: global.screen_width,
|
this._dragAction.connect('gesture-begin', Lang.bind(this, this._onDragBegin));
|
||||||
height: global.screen_height }) });
|
this._dragAction.connect('gesture-progress', Lang.bind(this, this._onDragMotion));
|
||||||
let action = new Clutter.DragAction({ drag_axis: Clutter.DragAxis.Y_AXIS,
|
this._dragAction.connect('gesture-end', Lang.bind(this, this._onDragEnd));
|
||||||
drag_area: dragArea });
|
this._lockScreenGroup.add_action(this._dragAction);
|
||||||
action.connect('drag-begin', Lang.bind(this, this._onDragBegin));
|
|
||||||
action.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
|
||||||
this._lockScreenGroup.add_action(action);
|
|
||||||
|
|
||||||
this._lockDialogGroup = new St.Widget({ x_expand: true,
|
this._lockDialogGroup = new St.Widget({ x_expand: true,
|
||||||
y_expand: true,
|
y_expand: true,
|
||||||
@ -429,11 +468,14 @@ const ScreenShield = new Lang.Class({
|
|||||||
this._isGreeter = false;
|
this._isGreeter = false;
|
||||||
this._isActive = false;
|
this._isActive = false;
|
||||||
this._inUnlockAnimation = false;
|
this._inUnlockAnimation = false;
|
||||||
|
this._activationTime = 0;
|
||||||
|
|
||||||
this._lightbox = new Lightbox.Lightbox(Main.uiGroup,
|
this._lightbox = new Lightbox.Lightbox(Main.uiGroup,
|
||||||
{ inhibitEvents: true,
|
{ inhibitEvents: true,
|
||||||
fadeInTime: STANDARD_FADE_TIME,
|
fadeInTime: STANDARD_FADE_TIME,
|
||||||
fadeFactor: 1 });
|
fadeFactor: 1 });
|
||||||
|
|
||||||
|
this.idleMonitor = new GnomeDesktop.IdleMonitor();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onLockScreenKeyRelease: function(actor, event) {
|
_onLockScreenKeyRelease: function(actor, event) {
|
||||||
@ -454,7 +496,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
symbol == Clutter.KEY_Return ||
|
symbol == Clutter.KEY_Return ||
|
||||||
symbol == Clutter.KEY_KP_Enter) {
|
symbol == Clutter.KEY_KP_Enter) {
|
||||||
this._ensureUnlockDialog(true);
|
this._ensureUnlockDialog(true);
|
||||||
this._hideLockScreen(true);
|
this._hideLockScreen(true, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,7 +519,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
// 7 standard scrolls to lift up
|
// 7 standard scrolls to lift up
|
||||||
if (this._lockScreenScrollCounter > 35) {
|
if (this._lockScreenScrollCounter > 35) {
|
||||||
this._ensureUnlockDialog(false);
|
this._ensureUnlockDialog(false);
|
||||||
this._hideLockScreen(true);
|
this._hideLockScreen(true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -509,12 +551,27 @@ const ScreenShield = new Lang.Class({
|
|||||||
Tweener.removeTweens(this._lockScreenGroup);
|
Tweener.removeTweens(this._lockScreenGroup);
|
||||||
this._lockScreenState = MessageTray.State.HIDING;
|
this._lockScreenState = MessageTray.State.HIDING;
|
||||||
this._ensureUnlockDialog(false);
|
this._ensureUnlockDialog(false);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onDragMotion: function() {
|
||||||
|
let [origX, origY] = this._dragAction.get_press_coords(0);
|
||||||
|
let [currentX, currentY] = this._dragAction.get_motion_coords(0);
|
||||||
|
|
||||||
|
let newY = currentY - origY;
|
||||||
|
newY = clamp(newY, -global.stage.height, 0);
|
||||||
|
|
||||||
|
this._lockScreenGroup.y = newY;
|
||||||
|
|
||||||
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDragEnd: function(action, actor, eventX, eventY, modifiers) {
|
_onDragEnd: function(action, actor, eventX, eventY, modifiers) {
|
||||||
if (this._lockScreenGroup.y < -(ARROW_DRAG_THRESHOLD * global.stage.height)) {
|
if (this._lockScreenGroup.y < -(ARROW_DRAG_THRESHOLD * global.stage.height)) {
|
||||||
// Complete motion automatically
|
// Complete motion automatically
|
||||||
this._hideLockScreen(true);
|
let [velocity, velocityX, velocityY] = this._dragAction.get_velocity(0);
|
||||||
|
this._hideLockScreen(true, -velocityY);
|
||||||
} else {
|
} else {
|
||||||
// restore the lock screen to its original place
|
// restore the lock screen to its original place
|
||||||
// try to use the same speed as the normal animation
|
// try to use the same speed as the normal animation
|
||||||
@ -524,7 +581,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
Tweener.addTween(this._lockScreenGroup,
|
Tweener.addTween(this._lockScreenGroup,
|
||||||
{ y: 0,
|
{ y: 0,
|
||||||
time: time,
|
time: time,
|
||||||
transition: 'linear',
|
transition: 'easeInQuad',
|
||||||
onComplete: function() {
|
onComplete: function() {
|
||||||
this._lockScreenGroup.fixed_position_set = false;
|
this._lockScreenGroup.fixed_position_set = false;
|
||||||
this._lockScreenState = MessageTray.State.SHOWN;
|
this._lockScreenState = MessageTray.State.SHOWN;
|
||||||
@ -543,31 +600,43 @@ const ScreenShield = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onStatusChanged: function(status) {
|
_onStatusChanged: function(status) {
|
||||||
if (status == GnomeSession.PresenceStatus.IDLE) {
|
if (status != GnomeSession.PresenceStatus.IDLE)
|
||||||
if (this._dialog) {
|
return;
|
||||||
this._dialog.cancel();
|
|
||||||
if (!this._isGreeter) {
|
if (this._dialog) {
|
||||||
this._dialog = null;
|
this._dialog.cancel();
|
||||||
|
if (!this._isGreeter) {
|
||||||
|
this._dialog = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this._isModal) {
|
||||||
|
Main.pushModal(this.actor);
|
||||||
|
this._isModal = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this._isActive) {
|
||||||
|
this._lightbox.show();
|
||||||
|
|
||||||
|
if (this._activationTime == 0)
|
||||||
|
this._activationTime = GLib.get_monotonic_time();
|
||||||
|
|
||||||
|
this._becameActiveId = this.idleMonitor.connect('became-active', Lang.bind(this, function() {
|
||||||
|
this.idleMonitor.disconnect(this._becameActiveId);
|
||||||
|
|
||||||
|
let lightboxWasShown = this._lightbox.shown;
|
||||||
|
this._lightbox.hide();
|
||||||
|
|
||||||
|
let shouldLock = lightboxWasShown && this._settings.get_boolean(LOCK_ENABLED_KEY);
|
||||||
|
if (shouldLock || this._isLocked) {
|
||||||
|
this.lock(false);
|
||||||
|
} else if (this._isActive) {
|
||||||
|
this.unlock();
|
||||||
}
|
}
|
||||||
}
|
}));
|
||||||
|
|
||||||
if (!this._isModal) {
|
this._isActive = true;
|
||||||
Main.pushModal(this.actor);
|
this.emit('lock-status-changed');
|
||||||
this._isModal = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this._isActive)
|
|
||||||
this._lightbox.show();
|
|
||||||
} else {
|
|
||||||
let lightboxWasShown = this._lightbox.shown;
|
|
||||||
this._lightbox.hide();
|
|
||||||
|
|
||||||
let shouldLock = lightboxWasShown && this._settings.get_boolean(LOCK_ENABLED_KEY);
|
|
||||||
if (shouldLock || this._isActive) {
|
|
||||||
this.lock(false);
|
|
||||||
} else if (this._isModal) {
|
|
||||||
this.unlock();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -586,7 +655,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
this.actor.show();
|
this.actor.show();
|
||||||
this._isGreeter = Main.sessionMode.isGreeter;
|
this._isGreeter = Main.sessionMode.isGreeter;
|
||||||
this._ensureUnlockDialog(true);
|
this._ensureUnlockDialog(true);
|
||||||
this._hideLockScreen(false);
|
this._hideLockScreen(false, 0);
|
||||||
},
|
},
|
||||||
|
|
||||||
_bumpLockScreen: function() {
|
_bumpLockScreen: function() {
|
||||||
@ -604,19 +673,26 @@ const ScreenShield = new Lang.Class({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideLockScreen: function(animate) {
|
_hideLockScreen: function(animate, velocity) {
|
||||||
this._lockScreenState = MessageTray.State.HIDING;
|
this._lockScreenState = MessageTray.State.HIDING;
|
||||||
|
|
||||||
if (animate) {
|
if (animate) {
|
||||||
// Tween the lock screen out of screen
|
// Tween the lock screen out of screen
|
||||||
// try to use the same speed regardless of original position
|
// if velocity is not specified (i.e. we come here from pressing ESC),
|
||||||
|
// use the same speed regardless of original position
|
||||||
|
// if velocity is specified, it's in pixels per milliseconds
|
||||||
let h = global.stage.height;
|
let h = global.stage.height;
|
||||||
let time = CURTAIN_SLIDE_TIME * (h + this._lockScreenGroup.y) / h;
|
let delta = (h + this._lockScreenGroup.y);
|
||||||
|
let min_velocity = global.stage.height / (CURTAIN_SLIDE_TIME * 1000);
|
||||||
|
|
||||||
|
velocity = Math.max(min_velocity, velocity);
|
||||||
|
let time = (delta / velocity) / 1000;
|
||||||
|
|
||||||
Tweener.removeTweens(this._lockScreenGroup);
|
Tweener.removeTweens(this._lockScreenGroup);
|
||||||
Tweener.addTween(this._lockScreenGroup,
|
Tweener.addTween(this._lockScreenGroup,
|
||||||
{ y: -h,
|
{ y: -h,
|
||||||
time: time,
|
time: time,
|
||||||
transition: 'linear',
|
transition: 'easeInQuad',
|
||||||
onComplete: function() {
|
onComplete: function() {
|
||||||
this._lockScreenState = MessageTray.State.HIDDEN;
|
this._lockScreenState = MessageTray.State.HIDDEN;
|
||||||
this._lockScreenGroup.hide();
|
this._lockScreenGroup.hide();
|
||||||
@ -628,6 +704,8 @@ const ScreenShield = new Lang.Class({
|
|||||||
this._lockScreenGroup.hide();
|
this._lockScreenGroup.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
global.stage.show_cursor();
|
||||||
|
|
||||||
if (Main.sessionMode.currentMode == 'lock-screen')
|
if (Main.sessionMode.currentMode == 'lock-screen')
|
||||||
Main.sessionMode.popMode('lock-screen');
|
Main.sessionMode.popMode('lock-screen');
|
||||||
},
|
},
|
||||||
@ -677,7 +755,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
Tweener.addTween(this._lockScreenGroup,
|
Tweener.addTween(this._lockScreenGroup,
|
||||||
{ y: 0,
|
{ y: 0,
|
||||||
time: SHORT_FADE_TIME,
|
time: SHORT_FADE_TIME,
|
||||||
transition: 'linear',
|
transition: 'easeOutQuad',
|
||||||
onComplete: function() {
|
onComplete: function() {
|
||||||
this._lockScreenShown();
|
this._lockScreenShown();
|
||||||
},
|
},
|
||||||
@ -716,6 +794,16 @@ const ScreenShield = new Lang.Class({
|
|||||||
this._arrowAnimationId = Mainloop.timeout_add(6000, Lang.bind(this, this._animateArrows));
|
this._arrowAnimationId = Mainloop.timeout_add(6000, Lang.bind(this, this._animateArrows));
|
||||||
this._animateArrows();
|
this._animateArrows();
|
||||||
|
|
||||||
|
let motionId = global.stage.connect('captured-event', function(stage, event) {
|
||||||
|
if (event.type() == Clutter.EventType.MOTION) {
|
||||||
|
global.stage.show_cursor();
|
||||||
|
global.stage.disconnect(motionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
global.stage.hide_cursor();
|
||||||
|
|
||||||
this._lockScreenState = MessageTray.State.SHOWN;
|
this._lockScreenState = MessageTray.State.SHOWN;
|
||||||
this._lockScreenGroup.fixed_position_set = false;
|
this._lockScreenGroup.fixed_position_set = false;
|
||||||
this._lockScreenScrollCounter = 0;
|
this._lockScreenScrollCounter = 0;
|
||||||
@ -774,6 +862,10 @@ const ScreenShield = new Lang.Class({
|
|||||||
return this._isActive;
|
return this._isActive;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get activationTime() {
|
||||||
|
return this._activationTime;
|
||||||
|
},
|
||||||
|
|
||||||
_tweenUnlocked: function() {
|
_tweenUnlocked: function() {
|
||||||
this._inUnlockAnimation = true;
|
this._inUnlockAnimation = true;
|
||||||
this.unlock();
|
this.unlock();
|
||||||
@ -818,7 +910,9 @@ const ScreenShield = new Lang.Class({
|
|||||||
if (Main.sessionMode.currentMode == 'unlock-dialog')
|
if (Main.sessionMode.currentMode == 'unlock-dialog')
|
||||||
Main.sessionMode.popMode('unlock-dialog');
|
Main.sessionMode.popMode('unlock-dialog');
|
||||||
|
|
||||||
|
this._activationTime = 0;
|
||||||
this._isActive = false;
|
this._isActive = false;
|
||||||
|
this._isLocked = false;
|
||||||
this.emit('lock-status-changed');
|
this.emit('lock-status-changed');
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -828,6 +922,9 @@ const ScreenShield = new Lang.Class({
|
|||||||
this._isModal = true;
|
this._isModal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._activationTime == 0)
|
||||||
|
this._activationTime = GLib.get_monotonic_time();
|
||||||
|
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
|
|
||||||
if (Main.sessionMode.currentMode != 'unlock-dialog' &&
|
if (Main.sessionMode.currentMode != 'unlock-dialog' &&
|
||||||
@ -840,6 +937,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
this._resetLockScreen(animate, animate);
|
this._resetLockScreen(animate, animate);
|
||||||
|
|
||||||
this._isActive = true;
|
this._isActive = true;
|
||||||
|
this._isLocked = true;
|
||||||
this.emit('lock-status-changed');
|
this.emit('lock-status-changed');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -852,6 +950,8 @@ const ScreenShieldFallback = new Lang.Class({
|
|||||||
Name: 'ScreenShieldFallback',
|
Name: 'ScreenShieldFallback',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
|
Util.spawn(['gnome-screensaver']);
|
||||||
|
|
||||||
this._proxy = new Gio.DBusProxy({ g_connection: Gio.DBus.session,
|
this._proxy = new Gio.DBusProxy({ g_connection: Gio.DBus.session,
|
||||||
g_name: 'org.gnome.ScreenSaver',
|
g_name: 'org.gnome.ScreenSaver',
|
||||||
g_object_path: '/org/gnome/ScreenSaver',
|
g_object_path: '/org/gnome/ScreenSaver',
|
||||||
|
@ -37,9 +37,9 @@ const _modes = {
|
|||||||
isGreeter: true,
|
isGreeter: true,
|
||||||
isPrimary: true,
|
isPrimary: true,
|
||||||
unlockDialog: imports.gdm.loginDialog.LoginDialog,
|
unlockDialog: imports.gdm.loginDialog.LoginDialog,
|
||||||
components: ['polkitAgent'],
|
components: ['polkitAgent', 'mediaKeysManager'],
|
||||||
panel: {
|
panel: {
|
||||||
left: [],
|
left: ['logo'],
|
||||||
center: ['dateMenu'],
|
center: ['dateMenu'],
|
||||||
right: ['a11y', 'display', 'keyboard',
|
right: ['a11y', 'display', 'keyboard',
|
||||||
'volume', 'battery', 'powerMenu']
|
'volume', 'battery', 'powerMenu']
|
||||||
@ -50,7 +50,7 @@ const _modes = {
|
|||||||
isLocked: true,
|
isLocked: true,
|
||||||
isGreeter: undefined,
|
isGreeter: undefined,
|
||||||
unlockDialog: undefined,
|
unlockDialog: undefined,
|
||||||
components: ['polkitAgent', 'telepathyClient'],
|
components: ['polkitAgent', 'telepathyClient', 'mediaKeysManager'],
|
||||||
panel: {
|
panel: {
|
||||||
left: ['userMenu'],
|
left: ['userMenu'],
|
||||||
center: [],
|
center: [],
|
||||||
@ -61,7 +61,7 @@ const _modes = {
|
|||||||
'unlock-dialog': {
|
'unlock-dialog': {
|
||||||
isLocked: true,
|
isLocked: true,
|
||||||
unlockDialog: undefined,
|
unlockDialog: undefined,
|
||||||
components: ['polkitAgent', 'telepathyClient'],
|
components: ['polkitAgent', 'telepathyClient', 'mediaKeysManager'],
|
||||||
panel: {
|
panel: {
|
||||||
left: ['userMenu'],
|
left: ['userMenu'],
|
||||||
center: [],
|
center: [],
|
||||||
@ -71,7 +71,7 @@ const _modes = {
|
|||||||
|
|
||||||
'initial-setup': {
|
'initial-setup': {
|
||||||
isPrimary: true,
|
isPrimary: true,
|
||||||
components: ['keyring'],
|
components: ['keyring', 'mediaKeysManager'],
|
||||||
panel: {
|
panel: {
|
||||||
left: [],
|
left: [],
|
||||||
center: ['dateMenu'],
|
center: ['dateMenu'],
|
||||||
@ -91,8 +91,9 @@ const _modes = {
|
|||||||
isLocked: false,
|
isLocked: false,
|
||||||
isPrimary: true,
|
isPrimary: true,
|
||||||
unlockDialog: imports.ui.unlockDialog.UnlockDialog,
|
unlockDialog: imports.ui.unlockDialog.UnlockDialog,
|
||||||
components: ['networkAgent', 'polkitAgent', 'telepathyClient',
|
components: ['networkAgent', 'polkitAgent', 'telepathyClient', 'keyring',
|
||||||
'keyring', 'recorder', 'autorunManager', 'automountManager'],
|
'recorder', 'autorunManager', 'automountManager',
|
||||||
|
'mediaKeysManager'],
|
||||||
panel: {
|
panel: {
|
||||||
left: ['activities', 'appMenu'],
|
left: ['activities', 'appMenu'],
|
||||||
center: ['dateMenu'],
|
center: ['dateMenu'],
|
||||||
|
@ -59,6 +59,9 @@ const ScreenSaverIface = <interface name="org.gnome.ScreenSaver">
|
|||||||
<method name="SetActive">
|
<method name="SetActive">
|
||||||
<arg name="value" direction="in" type="b" />
|
<arg name="value" direction="in" type="b" />
|
||||||
</method>
|
</method>
|
||||||
|
<method name="GetActiveTime">
|
||||||
|
<arg name="value" direction="out" type="u" />
|
||||||
|
</method>
|
||||||
<signal name="ActiveChanged">
|
<signal name="ActiveChanged">
|
||||||
<arg name="new_value" type="b" />
|
<arg name="new_value" type="b" />
|
||||||
</signal>
|
</signal>
|
||||||
@ -373,5 +376,13 @@ const ScreenSaverDBus = new Lang.Class({
|
|||||||
|
|
||||||
GetActive: function() {
|
GetActive: function() {
|
||||||
return this._screenShield.locked;
|
return this._screenShield.locked;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
GetActiveTime: function() {
|
||||||
|
let started = this._screenShield.activationTime;
|
||||||
|
if (started > 0)
|
||||||
|
return Math.floor((GLib.get_monotonic_time() - started) / 1000000);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
@ -38,8 +38,8 @@ const ATIndicator = new Lang.Class({
|
|||||||
_init: function() {
|
_init: function() {
|
||||||
this.parent('preferences-desktop-accessibility-symbolic', _("Accessibility"));
|
this.parent('preferences-desktop-accessibility-symbolic', _("Accessibility"));
|
||||||
|
|
||||||
let highContrast = this._buildHCItem();
|
this._highContrast = this._buildHCItem();
|
||||||
this.menu.addMenuItem(highContrast);
|
this.menu.addMenuItem(this._highContrast);
|
||||||
|
|
||||||
let magnifier = this._buildItem(_("Zoom"), APPLICATIONS_SCHEMA,
|
let magnifier = this._buildItem(_("Zoom"), APPLICATIONS_SCHEMA,
|
||||||
'screen-magnifier-enabled');
|
'screen-magnifier-enabled');
|
||||||
@ -159,5 +159,9 @@ const ATIndicator = new Lang.Class({
|
|||||||
widget.setToggleState(active);
|
widget.setToggleState(active);
|
||||||
});
|
});
|
||||||
return widget;
|
return widget;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
toggleHighContrast: function() {
|
||||||
|
this._highContrast.toggle();
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
@ -233,20 +233,11 @@ const NMWirelessSectionTitleMenuItem = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const NMDevice = new Lang.Class({
|
const NMConnectionBased = new Lang.Class({
|
||||||
Name: 'NMDevice',
|
Name: 'NMConnectionBased',
|
||||||
Abstract: true,
|
Abstract: true,
|
||||||
|
|
||||||
_init: function(client, device, connections) {
|
_init: function(connections) {
|
||||||
this.device = device;
|
|
||||||
if (device) {
|
|
||||||
this.device._delegate = this;
|
|
||||||
this._stateChangedId = this.device.connect('state-changed', Lang.bind(this, this._deviceStateChanged));
|
|
||||||
} else
|
|
||||||
this._stateChangedId = 0;
|
|
||||||
|
|
||||||
// protected
|
|
||||||
this._client = client;
|
|
||||||
this._connections = [ ];
|
this._connections = [ ];
|
||||||
for (let i = 0; i < connections.length; i++) {
|
for (let i = 0; i < connections.length; i++) {
|
||||||
if (!connections[i].get_uuid())
|
if (!connections[i].get_uuid())
|
||||||
@ -264,26 +255,115 @@ const NMDevice = new Lang.Class({
|
|||||||
this._connections.push(obj);
|
this._connections.push(obj);
|
||||||
}
|
}
|
||||||
this._connections.sort(this._connectionSortFunction);
|
this._connections.sort(this._connectionSortFunction);
|
||||||
|
},
|
||||||
|
|
||||||
|
checkConnection: function(connection) {
|
||||||
|
let pos = this._findConnection(connection.get_uuid());
|
||||||
|
let exists = pos != -1;
|
||||||
|
let valid = this.connectionValid(connection);
|
||||||
|
let similar = false;
|
||||||
|
if (exists) {
|
||||||
|
let existing = this._connections[pos];
|
||||||
|
|
||||||
|
// Check if connection changed name or id
|
||||||
|
similar = existing.name == connection.get_id() &&
|
||||||
|
existing.timestamp == connection._timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists && valid && similar) {
|
||||||
|
// Nothing to do
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists)
|
||||||
|
this.removeConnection(connection);
|
||||||
|
if (valid)
|
||||||
|
this.addConnection(connection);
|
||||||
|
},
|
||||||
|
|
||||||
|
addConnection: function(connection) {
|
||||||
|
// record the connection
|
||||||
|
let obj = {
|
||||||
|
connection: connection,
|
||||||
|
name: connection.get_id(),
|
||||||
|
uuid: connection.get_uuid(),
|
||||||
|
timestamp: connection._timestamp,
|
||||||
|
item: null,
|
||||||
|
};
|
||||||
|
Util.insertSorted(this._connections, obj, this._connectionSortFunction);
|
||||||
|
|
||||||
|
this._queueCreateSection();
|
||||||
|
},
|
||||||
|
|
||||||
|
removeConnection: function(connection) {
|
||||||
|
let pos = this._findConnection(connection.get_uuid());
|
||||||
|
if (pos == -1) {
|
||||||
|
// this connection was never added, nothing to do here
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let obj = this._connections[pos];
|
||||||
|
if (obj.item)
|
||||||
|
obj.item.destroy();
|
||||||
|
this._connections.splice(pos, 1);
|
||||||
|
|
||||||
|
if (this._connections.length <= 1) {
|
||||||
|
// We need to show the automatic connection again
|
||||||
|
// (or in the case of NMDeviceWired, we want to hide
|
||||||
|
// the only explicit connection)
|
||||||
|
this._queueCreateSection();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_findConnection: function(uuid) {
|
||||||
|
for (let i = 0; i < this._connections.length; i++) {
|
||||||
|
let obj = this._connections[i];
|
||||||
|
if (obj.uuid == uuid)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
},
|
||||||
|
|
||||||
|
_connectionSortFunction: function(one, two) {
|
||||||
|
if (one.timestamp == two.timestamp)
|
||||||
|
return GLib.utf8_collate(one.name, two.name);
|
||||||
|
|
||||||
|
return two.timestamp - one.timestamp;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(NMConnectionBased.prototype);
|
||||||
|
|
||||||
|
const NMDevice = new Lang.Class({
|
||||||
|
Name: 'NMDevice',
|
||||||
|
Abstract: true,
|
||||||
|
Extends: NMConnectionBased,
|
||||||
|
|
||||||
|
_init: function(client, device, connections) {
|
||||||
|
this.device = device;
|
||||||
|
this.device._delegate = this;
|
||||||
|
this._stateChangedId = this.device.connect('state-changed', Lang.bind(this, this._deviceStateChanged));
|
||||||
|
|
||||||
|
// protected
|
||||||
|
this._client = client;
|
||||||
|
this.parent(connections);
|
||||||
this._activeConnection = null;
|
this._activeConnection = null;
|
||||||
this._activeConnectionItem = null;
|
this._activeConnectionItem = null;
|
||||||
this._autoConnectionItem = null;
|
this._autoConnectionItem = null;
|
||||||
this._overflowItem = null;
|
this._overflowItem = null;
|
||||||
|
|
||||||
if (this.device) {
|
this.statusItem = new PopupMenu.PopupSwitchMenuItem(this._getDescription(), this.connected, { style_class: 'popup-subtitle-menu-item' });
|
||||||
this.statusItem = new PopupMenu.PopupSwitchMenuItem(this._getDescription(), this.connected, { style_class: 'popup-subtitle-menu-item' });
|
this._statusChanged = this.statusItem.connect('toggled', Lang.bind(this, function(item, state) {
|
||||||
this._statusChanged = this.statusItem.connect('toggled', Lang.bind(this, function(item, state) {
|
let ok;
|
||||||
let ok;
|
if (state)
|
||||||
if (state)
|
ok = this.activate();
|
||||||
ok = this.activate();
|
else
|
||||||
else
|
ok = this.deactivate();
|
||||||
ok = this.deactivate();
|
|
||||||
|
|
||||||
if (!ok)
|
if (!ok)
|
||||||
item.setToggleState(!state);
|
item.setToggleState(!state);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._updateStatusItem();
|
this._updateStatusItem();
|
||||||
}
|
|
||||||
this.section = new PopupMenu.PopupMenuSection();
|
this.section = new PopupMenu.PopupMenuSection();
|
||||||
|
|
||||||
this._deferredWorkId = Main.initializeDeferredWork(this.section.actor, Lang.bind(this, this._createSection));
|
this._deferredWorkId = Main.initializeDeferredWork(this.section.actor, Lang.bind(this, this._createSection));
|
||||||
@ -352,6 +432,10 @@ const NMDevice = new Lang.Class({
|
|||||||
return this.device.state == NetworkManager.DeviceState.ACTIVATED;
|
return this.device.state == NetworkManager.DeviceState.ACTIVATED;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
clearActiveConnection: function(activeConnection) {
|
||||||
|
this.setActiveConnection(null);
|
||||||
|
},
|
||||||
|
|
||||||
setActiveConnection: function(activeConnection) {
|
setActiveConnection: function(activeConnection) {
|
||||||
if (activeConnection == this._activeConnection)
|
if (activeConnection == this._activeConnection)
|
||||||
// nothing to do
|
// nothing to do
|
||||||
@ -369,80 +453,13 @@ const NMDevice = new Lang.Class({
|
|||||||
this._queueCreateSection();
|
this._queueCreateSection();
|
||||||
},
|
},
|
||||||
|
|
||||||
checkConnection: function(connection) {
|
|
||||||
let pos = this._findConnection(connection.get_uuid());
|
|
||||||
let exists = pos != -1;
|
|
||||||
let valid = this.connectionValid(connection);
|
|
||||||
let similar = false;
|
|
||||||
if (exists) {
|
|
||||||
let existing = this._connections[pos];
|
|
||||||
|
|
||||||
// Check if connection changed name or id
|
|
||||||
similar = existing.name == connection.get_id() &&
|
|
||||||
existing.timestamp == connection._timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists && valid && similar) {
|
|
||||||
// Nothing to do
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists)
|
|
||||||
this.removeConnection(connection);
|
|
||||||
if (valid)
|
|
||||||
this.addConnection(connection);
|
|
||||||
},
|
|
||||||
|
|
||||||
addConnection: function(connection) {
|
|
||||||
// record the connection
|
|
||||||
let obj = {
|
|
||||||
connection: connection,
|
|
||||||
name: connection.get_id(),
|
|
||||||
uuid: connection.get_uuid(),
|
|
||||||
timestamp: connection._timestamp,
|
|
||||||
item: null,
|
|
||||||
};
|
|
||||||
Util.insertSorted(this._connections, obj, this._connectionSortFunction);
|
|
||||||
|
|
||||||
this._clearSection();
|
|
||||||
this._queueCreateSection();
|
|
||||||
},
|
|
||||||
|
|
||||||
removeConnection: function(connection) {
|
|
||||||
let pos = this._findConnection(connection.get_uuid());
|
|
||||||
if (pos == -1) {
|
|
||||||
// this connection was never added, nothing to do here
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let obj = this._connections[pos];
|
|
||||||
if (obj.item)
|
|
||||||
obj.item.destroy();
|
|
||||||
this._connections.splice(pos, 1);
|
|
||||||
|
|
||||||
if (this._connections.length <= 1) {
|
|
||||||
// We need to show the automatic connection again
|
|
||||||
// (or in the case of NMDeviceWired, we want to hide
|
|
||||||
// the only explicit connection)
|
|
||||||
this._clearSection();
|
|
||||||
this._queueCreateSection();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
connectionValid: function(connection) {
|
connectionValid: function(connection) {
|
||||||
return this.device.connection_valid(connection);
|
return this.device.connection_valid(connection);
|
||||||
},
|
},
|
||||||
|
|
||||||
_connectionSortFunction: function(one, two) {
|
|
||||||
if (one.timestamp == two.timestamp)
|
|
||||||
return GLib.utf8_collate(one.name, two.name);
|
|
||||||
|
|
||||||
return two.timestamp - one.timestamp;
|
|
||||||
},
|
|
||||||
|
|
||||||
setEnabled: function(enabled) {
|
setEnabled: function(enabled) {
|
||||||
// do nothing by default, we want to keep the conneciton list visible
|
// do nothing by default, we want to keep the conneciton list visible
|
||||||
// in the majority of cases (wired, wwan, vpn)
|
// in the majority of cases (wired, wwan)
|
||||||
},
|
},
|
||||||
|
|
||||||
getStatusLabel: function() {
|
getStatusLabel: function() {
|
||||||
@ -500,15 +517,6 @@ const NMDevice = new Lang.Class({
|
|||||||
throw new TypeError('Invoking pure virtual function NMDevice.createAutomaticConnection');
|
throw new TypeError('Invoking pure virtual function NMDevice.createAutomaticConnection');
|
||||||
},
|
},
|
||||||
|
|
||||||
_findConnection: function(uuid) {
|
|
||||||
for (let i = 0; i < this._connections.length; i++) {
|
|
||||||
let obj = this._connections[i];
|
|
||||||
if (obj.uuid == uuid)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
},
|
|
||||||
|
|
||||||
_queueCreateSection: function() {
|
_queueCreateSection: function() {
|
||||||
this._clearSection();
|
this._clearSection();
|
||||||
Main.queueDeferredWork(this._deferredWorkId);
|
Main.queueDeferredWork(this._deferredWorkId);
|
||||||
@ -652,8 +660,6 @@ const NMDevice = new Lang.Class({
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(NMDevice.prototype);
|
|
||||||
|
|
||||||
|
|
||||||
const NMDeviceWired = new Lang.Class({
|
const NMDeviceWired = new Lang.Class({
|
||||||
Name: 'NMDeviceWired',
|
Name: 'NMDeviceWired',
|
||||||
@ -868,95 +874,6 @@ const NMDeviceBluetooth = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Not a real device, but I save a lot code this way
|
|
||||||
const NMDeviceVPN = new Lang.Class({
|
|
||||||
Name: 'NMDeviceVPN',
|
|
||||||
Extends: NMDevice,
|
|
||||||
|
|
||||||
_init: function(client, device, connections) {
|
|
||||||
// Disable autoconnections
|
|
||||||
this._autoConnectionName = null;
|
|
||||||
this.category = NMConnectionCategory.VPN;
|
|
||||||
|
|
||||||
this.parent(client, null, connections);
|
|
||||||
},
|
|
||||||
|
|
||||||
connectionValid: function(connection) {
|
|
||||||
return connection._type == NetworkManager.SETTING_VPN_SETTING_NAME;
|
|
||||||
},
|
|
||||||
|
|
||||||
get empty() {
|
|
||||||
return this._connections.length == 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
get connected() {
|
|
||||||
if (!this._activeConnection)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return this._activeConnection.vpn_state == NetworkManager.VPNConnectionState.ACTIVATED;
|
|
||||||
},
|
|
||||||
|
|
||||||
setActiveConnection: function(activeConnection) {
|
|
||||||
if (this._stateChangeId)
|
|
||||||
this._activeConnection.disconnect(this._stateChangeId);
|
|
||||||
this._stateChangeId = 0;
|
|
||||||
|
|
||||||
this.parent(activeConnection);
|
|
||||||
|
|
||||||
if (this._activeConnection)
|
|
||||||
this._stateChangeId = this._activeConnection.connect('vpn-state-changed',
|
|
||||||
Lang.bind(this, this._connectionStateChanged));
|
|
||||||
|
|
||||||
this.emit('state-changed');
|
|
||||||
},
|
|
||||||
|
|
||||||
_shouldShowConnectionList: function() {
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
deactivate: function() {
|
|
||||||
if (this._activeConnection)
|
|
||||||
this._client.deactivate_connection(this._activeConnection);
|
|
||||||
},
|
|
||||||
|
|
||||||
getStatusLabel: function() {
|
|
||||||
if (!this._activeConnection) // Same as DISCONNECTED
|
|
||||||
return null;
|
|
||||||
|
|
||||||
switch(this._activeConnection.vpn_state) {
|
|
||||||
case NetworkManager.VPNConnectionState.DISCONNECTED:
|
|
||||||
case NetworkManager.VPNConnectionState.ACTIVATED:
|
|
||||||
return null;
|
|
||||||
case NetworkManager.VPNConnectionState.PREPARE:
|
|
||||||
case NetworkManager.VPNConnectionState.CONNECT:
|
|
||||||
case NetworkManager.VPNConnectionState.IP_CONFIG_GET:
|
|
||||||
return _("connecting...");
|
|
||||||
case NetworkManager.VPNConnectionState.NEED_AUTH:
|
|
||||||
/* Translators: this is for network connections that require some kind of key or password */
|
|
||||||
return _("authentication required");
|
|
||||||
case NetworkManager.VPNConnectionState.FAILED:
|
|
||||||
return _("connection failed");
|
|
||||||
default:
|
|
||||||
log('VPN connection state invalid, is %d'.format(this.device.state));
|
|
||||||
return 'invalid';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_connectionStateChanged: function(connection, newstate, reason) {
|
|
||||||
if (newstate == NetworkManager.VPNConnectionState.FAILED) {
|
|
||||||
// FIXME: if we ever want to show something based on reason,
|
|
||||||
// we need to convert from NetworkManager.VPNConnectionStateReason
|
|
||||||
// to NetworkManager.DeviceStateReason
|
|
||||||
this.emit('activation-failed', reason);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Differently from real NMDevices, there is no need to queue
|
|
||||||
// an update of the menu section, contents wouldn't change anyway
|
|
||||||
this.emit('state-changed');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const NMDeviceWireless = new Lang.Class({
|
const NMDeviceWireless = new Lang.Class({
|
||||||
Name: 'NMDeviceWireless',
|
Name: 'NMDeviceWireless',
|
||||||
Extends: NMDevice,
|
Extends: NMDevice,
|
||||||
@ -1557,6 +1474,151 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const NMVPNSection = new Lang.Class({
|
||||||
|
Name: 'NMVPNSection',
|
||||||
|
Extends: NMConnectionBased,
|
||||||
|
category: NMConnectionCategory.VPN,
|
||||||
|
|
||||||
|
_init: function(client, connections) {
|
||||||
|
this.parent(connections);
|
||||||
|
this._client = client;
|
||||||
|
|
||||||
|
this.section = new PopupMenu.PopupMenuSection();
|
||||||
|
this._deferredWorkId = Main.initializeDeferredWork(this.section.actor, Lang.bind(this, this._createSection));
|
||||||
|
},
|
||||||
|
|
||||||
|
get empty() {
|
||||||
|
return this._connections.length == 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
connectionValid: function(connection) {
|
||||||
|
// filtering is done by NMApplet code
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
getStatusLabel: function(activeConnection) {
|
||||||
|
switch(activeConnection.vpn_state) {
|
||||||
|
case NetworkManager.VPNConnectionState.DISCONNECTED:
|
||||||
|
case NetworkManager.VPNConnectionState.ACTIVATED:
|
||||||
|
return null;
|
||||||
|
case NetworkManager.VPNConnectionState.PREPARE:
|
||||||
|
case NetworkManager.VPNConnectionState.CONNECT:
|
||||||
|
case NetworkManager.VPNConnectionState.IP_CONFIG_GET:
|
||||||
|
return _("connecting...");
|
||||||
|
case NetworkManager.VPNConnectionState.NEED_AUTH:
|
||||||
|
/* Translators: this is for network connections that require some kind of key or password */
|
||||||
|
return _("authentication required");
|
||||||
|
case NetworkManager.VPNConnectionState.FAILED:
|
||||||
|
return _("connection failed");
|
||||||
|
default:
|
||||||
|
log('VPN connection state invalid, is %d'.format(this.device.state));
|
||||||
|
return 'invalid';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
clearActiveConnection: function(activeConnection) {
|
||||||
|
let pos = this._findConnection(activeConnection.uuid);
|
||||||
|
if (pos < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let obj = this._connections[pos];
|
||||||
|
obj.active.disconnect(obj.stateChangedId);
|
||||||
|
obj.active = null;
|
||||||
|
|
||||||
|
if (obj.item) {
|
||||||
|
obj.item.setToggleState(false);
|
||||||
|
obj.item.setStatus(null);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
setActiveConnection: function(activeConnection) {
|
||||||
|
let pos = this._findConnection(activeConnection.uuid);
|
||||||
|
if (pos < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let obj = this._connections[pos];
|
||||||
|
obj.active = activeConnection;
|
||||||
|
obj.stateChangedId = obj.active.connect('vpn-state-changed',
|
||||||
|
Lang.bind(this, this._connectionStateChanged));
|
||||||
|
|
||||||
|
if (obj.item) {
|
||||||
|
obj.item.setToggleState(obj.active.vpn_state ==
|
||||||
|
NetworkManager.VPNConnectionState.ACTIVATED);
|
||||||
|
obj.item.setStatus(this.getStatusLabel(obj.active));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_queueCreateSection: function() {
|
||||||
|
this.section.removeAll();
|
||||||
|
Main.queueDeferredWork(this._deferredWorkId);
|
||||||
|
},
|
||||||
|
|
||||||
|
_createConnectionItem: function(obj) {
|
||||||
|
let menuItem = new PopupMenu.PopupSwitchMenuItem(obj.name, false,
|
||||||
|
{ style_class: 'popup-subtitle-menu-item' });
|
||||||
|
menuItem.connect('toggled', Lang.bind(this, function(menuItem) {
|
||||||
|
if (menuItem.state) {
|
||||||
|
this._client.activate_connection(obj.connection, null, null, null);
|
||||||
|
// Immediately go back to disconnected, until NM tells us to change
|
||||||
|
menuItem.setToggleState(false);
|
||||||
|
} else if (obj.active) {
|
||||||
|
this._client.deactivate_connection(obj.active);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
if (obj.active) {
|
||||||
|
menuItem.setToggleState(obj.active.vpn_state ==
|
||||||
|
NetworkManager.VPNConnectionState.ACTIVATED);
|
||||||
|
menuItem.setStatus(this.getStatusLabel(obj.active));
|
||||||
|
}
|
||||||
|
|
||||||
|
return menuItem;
|
||||||
|
},
|
||||||
|
|
||||||
|
_createSection: function() {
|
||||||
|
if (this._connections.length > 0) {
|
||||||
|
this.section.actor.show();
|
||||||
|
|
||||||
|
for(let j = 0; j < this._connections.length; ++j) {
|
||||||
|
let obj = this._connections[j];
|
||||||
|
obj.item = this._createConnectionItem(obj);
|
||||||
|
|
||||||
|
if (j >= NUM_VISIBLE_NETWORKS) {
|
||||||
|
if (!this._overflowItem) {
|
||||||
|
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
|
||||||
|
this.section.addMenuItem(this._overflowItem);
|
||||||
|
}
|
||||||
|
this._overflowItem.menu.addMenuItem(obj.item);
|
||||||
|
} else
|
||||||
|
this.section.addMenuItem(obj.item);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.section.actor.hide()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_connectionStateChanged: function(vpnConnection, newstate, reason) {
|
||||||
|
if (newstate == NetworkManager.VPNConnectionState.FAILED) {
|
||||||
|
// FIXME: if we ever want to show something based on reason,
|
||||||
|
// we need to convert from NetworkManager.VPNConnectionStateReason
|
||||||
|
// to NetworkManager.DeviceStateReason
|
||||||
|
this.emit('activation-failed', reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
let pos = this._findConnection(vpnConnection.uuid);
|
||||||
|
if (pos >= 0) {
|
||||||
|
let obj = this._connections[pos];
|
||||||
|
if (obj.item) {
|
||||||
|
obj.item.setToggleState(vpnConnection.vpn_state ==
|
||||||
|
NetworkManager.VPNConnectionState.ACTIVATED);
|
||||||
|
obj.item.setStatus(this.getStatusLabel(vpnConnection));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log('Could not find connection for vpn-state-changed handler');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const NMApplet = new Lang.Class({
|
const NMApplet = new Lang.Class({
|
||||||
Name: 'NMApplet',
|
Name: 'NMApplet',
|
||||||
Extends: PanelMenu.SystemStatusButton,
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
@ -1622,15 +1684,9 @@ const NMApplet = new Lang.Class({
|
|||||||
this.menu.addMenuItem(this._devices.wwan.section);
|
this.menu.addMenuItem(this._devices.wwan.section);
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
this._devices.vpn = {
|
this._vpnSection = new NMVPNSection(this._client, this._connections);
|
||||||
section: new PopupMenu.PopupMenuSection(),
|
this._vpnSection.connect('activation-failed', Lang.bind(this, this._onActivationFailed));
|
||||||
device: this._makeWrapperDevice(NMDeviceVPN, null),
|
this.menu.addMenuItem(this._vpnSection.section);
|
||||||
item: new NMWiredSectionTitleMenuItem(_("VPN Connections"))
|
|
||||||
};
|
|
||||||
this._devices.vpn.section.addMenuItem(this._devices.vpn.item);
|
|
||||||
this._devices.vpn.section.addMenuItem(this._devices.vpn.device.section);
|
|
||||||
this._devices.vpn.section.actor.hide();
|
|
||||||
this.menu.addMenuItem(this._devices.vpn.section);
|
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
||||||
|
|
||||||
@ -1699,18 +1755,6 @@ const NMApplet = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_syncSectionTitle: function(category) {
|
_syncSectionTitle: function(category) {
|
||||||
if (category == NMConnectionCategory.VPN) {
|
|
||||||
// Special case VPN: it's only one device (and a fake one
|
|
||||||
// actually), and we don't show it if empty
|
|
||||||
let device = this._devices.vpn.device;
|
|
||||||
let section = this._devices.vpn.section;
|
|
||||||
let item = this._devices.vpn.item;
|
|
||||||
|
|
||||||
section.actor.visible = !device.empty;
|
|
||||||
item.updateForDevice(device);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let devices = this._devices[category].devices;
|
let devices = this._devices[category].devices;
|
||||||
let item = this._devices[category].item;
|
let item = this._devices[category].item;
|
||||||
let section = this._devices[category].section;
|
let section = this._devices[category].section;
|
||||||
@ -1747,10 +1791,9 @@ const NMApplet = new Lang.Class({
|
|||||||
or this._source will be cleared */
|
or this._source will be cleared */
|
||||||
this._ensureSource();
|
this._ensureSource();
|
||||||
|
|
||||||
let icon = new St.Icon({ icon_name: iconName,
|
let gicon = new Gio.ThemedIcon({ name: iconName });
|
||||||
icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
|
|
||||||
device._notification = new MessageTray.Notification(this._source, title, text,
|
device._notification = new MessageTray.Notification(this._source, title, text,
|
||||||
{ icon: icon });
|
{ gicon: gicon });
|
||||||
device._notification.setUrgency(urgency);
|
device._notification.setUrgency(urgency);
|
||||||
device._notification.setTransient(true);
|
device._notification.setTransient(true);
|
||||||
device._notification.connect('destroy', function() {
|
device._notification.connect('destroy', function() {
|
||||||
@ -1759,17 +1802,20 @@ const NMApplet = new Lang.Class({
|
|||||||
this._source.notify(device._notification);
|
this._source.notify(device._notification);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onActivationFailed: function(device, reason) {
|
||||||
|
// XXX: nm-applet has no special text depending on reason
|
||||||
|
// but I'm not sure of this generic message
|
||||||
|
this._notifyForDevice(device, 'network-error-symbolic',
|
||||||
|
_("Connection failed"),
|
||||||
|
_("Activation of network connection failed"),
|
||||||
|
MessageTray.Urgency.HIGH);
|
||||||
|
},
|
||||||
|
|
||||||
_makeWrapperDevice: function(wrapperClass, device) {
|
_makeWrapperDevice: function(wrapperClass, device) {
|
||||||
let wrapper = new wrapperClass(this._client, device, this._connections);
|
let wrapper = new wrapperClass(this._client, device, this._connections);
|
||||||
|
|
||||||
wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) {
|
wrapper._activationFailedId = wrapper.connect('activation-failed',
|
||||||
// XXX: nm-applet has no special text depending on reason
|
Lang.bind(this, this._onActivationFailed));
|
||||||
// but I'm not sure of this generic message
|
|
||||||
this._notifyForDevice(device, 'network-error-symbolic',
|
|
||||||
_("Connection failed"),
|
|
||||||
_("Activation of network connection failed"),
|
|
||||||
MessageTray.Urgency.HIGH);
|
|
||||||
}));
|
|
||||||
wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) {
|
wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) {
|
||||||
this._syncSectionTitle(dev.category);
|
this._syncSectionTitle(dev.category);
|
||||||
}));
|
}));
|
||||||
@ -1852,7 +1898,7 @@ const NMApplet = new Lang.Class({
|
|||||||
for (let i = 0; i < closedConnections.length; i++) {
|
for (let i = 0; i < closedConnections.length; i++) {
|
||||||
let active = closedConnections[i];
|
let active = closedConnections[i];
|
||||||
if (active._primaryDevice) {
|
if (active._primaryDevice) {
|
||||||
active._primaryDevice.setActiveConnection(null);
|
active._primaryDevice.clearActiveConnection(active);
|
||||||
active._primaryDevice = null;
|
active._primaryDevice = null;
|
||||||
}
|
}
|
||||||
if (active._inited) {
|
if (active._inited) {
|
||||||
@ -1919,7 +1965,7 @@ const NMApplet = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
a._primaryDevice = this._devices.vpn.device
|
a._primaryDevice = this._vpnSection;
|
||||||
|
|
||||||
if (a._primaryDevice)
|
if (a._primaryDevice)
|
||||||
a._primaryDevice.setActiveConnection(a);
|
a._primaryDevice.setActiveConnection(a);
|
||||||
@ -2001,8 +2047,7 @@ const NMApplet = new Lang.Class({
|
|||||||
let section = connection._section;
|
let section = connection._section;
|
||||||
|
|
||||||
if (section == NMConnectionCategory.VPN) {
|
if (section == NMConnectionCategory.VPN) {
|
||||||
this._devices.vpn.device.removeConnection(connection);
|
this._vpnSection.removeConnection(connection);
|
||||||
this._syncSectionTitle(section);
|
|
||||||
} else if (section != NMConnectionCategory.INVALID) {
|
} else if (section != NMConnectionCategory.INVALID) {
|
||||||
let devices = this._devices[section].devices;
|
let devices = this._devices[section].devices;
|
||||||
for (let i = 0; i < devices.length; i++)
|
for (let i = 0; i < devices.length; i++)
|
||||||
@ -2025,8 +2070,7 @@ const NMApplet = new Lang.Class({
|
|||||||
if (section == NMConnectionCategory.INVALID)
|
if (section == NMConnectionCategory.INVALID)
|
||||||
return;
|
return;
|
||||||
if (section == NMConnectionCategory.VPN) {
|
if (section == NMConnectionCategory.VPN) {
|
||||||
this._devices.vpn.device.checkConnection(connection);
|
this._vpnSection.checkConnection(connection);
|
||||||
this._syncSectionTitle(section);
|
|
||||||
} else {
|
} else {
|
||||||
let devices = this._devices[section].devices;
|
let devices = this._devices[section].devices;
|
||||||
for (let i = 0; i < devices.length; i++) {
|
for (let i = 0; i < devices.length; i++) {
|
||||||
@ -2052,7 +2096,6 @@ const NMApplet = new Lang.Class({
|
|||||||
this._syncSectionTitle(NMConnectionCategory.WIRED);
|
this._syncSectionTitle(NMConnectionCategory.WIRED);
|
||||||
this._syncSectionTitle(NMConnectionCategory.WIRELESS);
|
this._syncSectionTitle(NMConnectionCategory.WIRELESS);
|
||||||
this._syncSectionTitle(NMConnectionCategory.WWAN);
|
this._syncSectionTitle(NMConnectionCategory.WWAN);
|
||||||
this._syncSectionTitle(NMConnectionCategory.VPN);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncNMState: function() {
|
_syncNMState: function() {
|
||||||
|
@ -96,7 +96,7 @@ const Indicator = new Lang.Class({
|
|||||||
let minutes = time % 60;
|
let minutes = time % 60;
|
||||||
let hours = Math.floor(time / 60);
|
let hours = Math.floor(time / 60);
|
||||||
let timestring;
|
let timestring;
|
||||||
if (time > 60) {
|
if (time >= 60) {
|
||||||
if (minutes == 0) {
|
if (minutes == 0) {
|
||||||
timestring = ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
|
timestring = ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
|
||||||
} else {
|
} else {
|
||||||
|
@ -66,7 +66,21 @@ const VolumeMenu = new Lang.Class({
|
|||||||
this._onControlStateChanged();
|
this._onControlStateChanged();
|
||||||
},
|
},
|
||||||
|
|
||||||
scroll: function(direction) {
|
toggleMute: function(quiet) {
|
||||||
|
let muted = this._output.is_muted;
|
||||||
|
this._output.change_is_muted(!muted);
|
||||||
|
|
||||||
|
if (muted && !quiet)
|
||||||
|
this._notifyVolumeChange();
|
||||||
|
|
||||||
|
if (!muted)
|
||||||
|
return ['audio-volume-muted-symbolic', 0];
|
||||||
|
else
|
||||||
|
return [this._volumeToIcon(this._output.volume),
|
||||||
|
this._output.volume / this._volumeMax];
|
||||||
|
},
|
||||||
|
|
||||||
|
scroll: function(direction, quiet) {
|
||||||
let currentVolume = this._output.volume;
|
let currentVolume = this._output.volume;
|
||||||
|
|
||||||
if (direction == Clutter.ScrollDirection.DOWN) {
|
if (direction == Clutter.ScrollDirection.DOWN) {
|
||||||
@ -85,7 +99,14 @@ const VolumeMenu = new Lang.Class({
|
|||||||
this._output.push_volume();
|
this._output.push_volume();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._notifyVolumeChange();
|
if (!quiet)
|
||||||
|
this._notifyVolumeChange();
|
||||||
|
|
||||||
|
if (this._output.is_muted)
|
||||||
|
return ['audio-volume-muted-symbolic', 0];
|
||||||
|
else
|
||||||
|
return [this._volumeToIcon(this._output.volume),
|
||||||
|
this._output.volume / this._volumeMax];
|
||||||
},
|
},
|
||||||
|
|
||||||
_onControlStateChanged: function() {
|
_onControlStateChanged: function() {
|
||||||
@ -221,14 +242,14 @@ const Indicator = new Lang.Class({
|
|||||||
this.parent('audio-volume-muted-symbolic', _("Volume"));
|
this.parent('audio-volume-muted-symbolic', _("Volume"));
|
||||||
|
|
||||||
this._control = getMixerControl();
|
this._control = getMixerControl();
|
||||||
this._volumeMenu = new VolumeMenu(this._control);
|
this.volumeMenu = new VolumeMenu(this._control);
|
||||||
this._volumeMenu.connect('icon-changed', Lang.bind(this, function(menu, icon) {
|
this.volumeMenu.connect('icon-changed', Lang.bind(this, function(menu, icon) {
|
||||||
this._hasPulseAudio = (icon != null);
|
this._hasPulseAudio = (icon != null);
|
||||||
this.setIcon(icon);
|
this.setIcon(icon);
|
||||||
this._syncVisibility();
|
this._syncVisibility();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this.menu.addMenuItem(this._volumeMenu);
|
this.menu.addMenuItem(this.volumeMenu);
|
||||||
|
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addSettingsAction(_("Sound Settings"), 'gnome-sound-panel.desktop');
|
this.menu.addSettingsAction(_("Sound Settings"), 'gnome-sound-panel.desktop');
|
||||||
@ -242,6 +263,6 @@ const Indicator = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onScrollEvent: function(actor, event) {
|
_onScrollEvent: function(actor, event) {
|
||||||
this._volumeMenu.scroll(event.get_scroll_direction());
|
this.volumeMenu.scroll(event.get_scroll_direction(), false);
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
@ -5,6 +5,7 @@ const Clutter = imports.gi.Clutter;
|
|||||||
const Gdm = imports.gi.Gdm;
|
const Gdm = imports.gi.Gdm;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
|
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
@ -150,6 +151,9 @@ const UnlockDialog = new Lang.Class({
|
|||||||
ShellEntry.addContextMenu(this._promptEntry, { isPassword: true });
|
ShellEntry.addContextMenu(this._promptEntry, { isPassword: true });
|
||||||
this.setInitialKeyFocus(this._promptEntry);
|
this.setInitialKeyFocus(this._promptEntry);
|
||||||
this._promptEntry.clutter_text.connect('activate', Lang.bind(this, this._doUnlock));
|
this._promptEntry.clutter_text.connect('activate', Lang.bind(this, this._doUnlock));
|
||||||
|
this._promptEntry.clutter_text.connect('text-changed', Lang.bind(this, function() {
|
||||||
|
this._updateOkButtonSensitivity(this._promptEntry.text.length > 0);
|
||||||
|
}));
|
||||||
|
|
||||||
this._promptLayout.add(this._promptEntry,
|
this._promptLayout.add(this._promptEntry,
|
||||||
{ expand: true,
|
{ expand: true,
|
||||||
@ -195,23 +199,29 @@ const UnlockDialog = new Lang.Class({
|
|||||||
return false;
|
return false;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._idleMonitor = Shell.IdleMonitor.get();
|
this._idleMonitor = new GnomeDesktop.IdleMonitor();
|
||||||
// this dialog is only created after user activity (curtain drag or
|
|
||||||
// escape key press), so the timeout will fire after IDLE_TIMEOUT seconds of inactivity
|
|
||||||
this._idleWatchId = this._idleMonitor.add_watch(IDLE_TIMEOUT * 1000, Lang.bind(this, this._escape));
|
this._idleWatchId = this._idleMonitor.add_watch(IDLE_TIMEOUT * 1000, Lang.bind(this, this._escape));
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateSensitivity: function(sensitive) {
|
_updateSensitivity: function(sensitive) {
|
||||||
this._promptEntry.reactive = sensitive;
|
this._promptEntry.reactive = sensitive;
|
||||||
this._promptEntry.clutter_text.editable = sensitive;
|
this._promptEntry.clutter_text.editable = sensitive;
|
||||||
|
this._updateOkButtonSensitivity(sensitive && this._promptEntry.text.length > 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateOkButtonSensitivity: function(sensitive) {
|
||||||
this._okButton.button.reactive = sensitive;
|
this._okButton.button.reactive = sensitive;
|
||||||
this._okButton.button.can_focus = sensitive;
|
this._okButton.button.can_focus = sensitive;
|
||||||
},
|
},
|
||||||
|
|
||||||
_showMessage: function(userVerifier, message, styleClass) {
|
_showMessage: function(userVerifier, message, styleClass) {
|
||||||
this._promptMessage.text = message;
|
if (message) {
|
||||||
this._promptMessage.styleClass = styleClass;
|
this._promptMessage.text = message;
|
||||||
GdmUtil.fadeInActor(this._promptMessage);
|
this._promptMessage.styleClass = styleClass;
|
||||||
|
GdmUtil.fadeInActor(this._promptMessage);
|
||||||
|
} else {
|
||||||
|
GdmUtil.fadeOutActor(this._promptMessage);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onAskQuestion: function(verifier, serviceName, question, passwordChar) {
|
_onAskQuestion: function(verifier, serviceName, question, passwordChar) {
|
||||||
@ -279,6 +289,7 @@ const UnlockDialog = new Lang.Class({
|
|||||||
this._currentQuery = null;
|
this._currentQuery = null;
|
||||||
this._firstQuestion = true;
|
this._firstQuestion = true;
|
||||||
|
|
||||||
|
this._promptEntry.text = '';
|
||||||
this._promptEntry.clutter_text.set_password_char('\u25cf');
|
this._promptEntry.clutter_text.set_password_char('\u25cf');
|
||||||
this._promptEntry.menu.isPassword = true;
|
this._promptEntry.menu.isPassword = true;
|
||||||
|
|
||||||
|
@ -9,11 +9,11 @@ const Pango = imports.gi.Pango;
|
|||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const Tp = imports.gi.TelepathyGLib;
|
const Tp = imports.gi.TelepathyGLib;
|
||||||
const UPowerGlib = imports.gi.UPowerGlib;
|
|
||||||
const Atk = imports.gi.Atk;
|
const Atk = imports.gi.Atk;
|
||||||
|
|
||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const GnomeSession = imports.misc.gnomeSession;
|
const GnomeSession = imports.misc.gnomeSession;
|
||||||
|
const LoginManager = imports.misc.loginManager;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
@ -26,6 +26,7 @@ const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
|
|||||||
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
|
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
|
||||||
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
|
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
|
||||||
const LOCK_ENABLED_KEY = 'lock-enabled';
|
const LOCK_ENABLED_KEY = 'lock-enabled';
|
||||||
|
const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out';
|
||||||
|
|
||||||
const DIALOG_ICON_SIZE = 64;
|
const DIALOG_ICON_SIZE = 64;
|
||||||
|
|
||||||
@ -73,11 +74,6 @@ const UserAvatarWidget = new Lang.Class({
|
|||||||
let file = Gio.File.new_for_path(iconFile);
|
let file = Gio.File.new_for_path(iconFile);
|
||||||
this.actor.child = null;
|
this.actor.child = null;
|
||||||
this.actor.style = 'background-image: url("%s");'.format(iconFile);
|
this.actor.style = 'background-image: url("%s");'.format(iconFile);
|
||||||
|
|
||||||
// AccountsService uses a fixed location for avatar images, so
|
|
||||||
// we need to clear out all cached data to pick up image changes,
|
|
||||||
// see https://bugzilla.gnome.org/show_bug.cgi?id=679268
|
|
||||||
this.actor.clear_background_image();
|
|
||||||
} else {
|
} else {
|
||||||
this.actor.style = null;
|
this.actor.style = null;
|
||||||
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
|
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
|
||||||
@ -192,7 +188,7 @@ const IMStatusChooserItem = new Lang.Class({
|
|||||||
item = new IMStatusItem(_("Idle"), 'user-idle-symbolic');
|
item = new IMStatusItem(_("Idle"), 'user-idle-symbolic');
|
||||||
this._combo.addMenuItem(item, IMStatus.IDLE);
|
this._combo.addMenuItem(item, IMStatus.IDLE);
|
||||||
|
|
||||||
item = new IMStatusItem(_("Unavailable"), 'user-offline-symbolic');
|
item = new IMStatusItem(_("Offline"), 'user-offline-symbolic');
|
||||||
this._combo.addMenuItem(item, IMStatus.OFFLINE);
|
this._combo.addMenuItem(item, IMStatus.OFFLINE);
|
||||||
|
|
||||||
this._combo.connect('active-item-changed',
|
this._combo.connect('active-item-changed',
|
||||||
@ -487,10 +483,11 @@ const UserMenuButton = new Lang.Class({
|
|||||||
this._presence = new GnomeSession.Presence();
|
this._presence = new GnomeSession.Presence();
|
||||||
this._session = new GnomeSession.SessionManager();
|
this._session = new GnomeSession.SessionManager();
|
||||||
this._haveShutdown = true;
|
this._haveShutdown = true;
|
||||||
|
this._haveSuspend = true;
|
||||||
|
|
||||||
this._accountMgr = Tp.AccountManager.dup();
|
this._accountMgr = Tp.AccountManager.dup();
|
||||||
|
|
||||||
this._upClient = new UPowerGlib.Client();
|
this._loginManager = LoginManager.getLoginManager();
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
this._iconBox = new St.Bin();
|
this._iconBox = new St.Bin();
|
||||||
@ -570,14 +567,16 @@ const UserMenuButton = new Lang.Class({
|
|||||||
// the lockdown setting changes, which should be close enough.
|
// the lockdown setting changes, which should be close enough.
|
||||||
this.menu.connect('open-state-changed', Lang.bind(this,
|
this.menu.connect('open-state-changed', Lang.bind(this,
|
||||||
function(menu, open) {
|
function(menu, open) {
|
||||||
if (open)
|
if (!open)
|
||||||
this._updateHaveShutdown();
|
return;
|
||||||
|
|
||||||
|
this._updateHaveShutdown();
|
||||||
|
this._updateHaveSuspend();
|
||||||
|
this._updateHaveHibernate();
|
||||||
}));
|
}));
|
||||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
||||||
Lang.bind(this, this._updateHaveShutdown));
|
Lang.bind(this, this._updateHaveShutdown));
|
||||||
|
|
||||||
this._upClient.connect('notify::can-suspend', Lang.bind(this, this._updateSuspendOrPowerOff));
|
|
||||||
|
|
||||||
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
||||||
this._sessionUpdated();
|
this._sessionUpdated();
|
||||||
},
|
},
|
||||||
@ -619,10 +618,13 @@ const UserMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
_updateLogout: function() {
|
_updateLogout: function() {
|
||||||
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
|
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
|
||||||
|
let alwaysShow = global.settings.get_boolean(ALWAYS_SHOW_LOG_OUT_KEY);
|
||||||
|
let systemAccount = this._user.system_account;
|
||||||
|
let localAccount = this._user.local_account;
|
||||||
let multiUser = this._userManager.has_multiple_users;
|
let multiUser = this._userManager.has_multiple_users;
|
||||||
let multiSession = Gdm.get_session_ids().length > 1;
|
let multiSession = Gdm.get_session_ids().length > 1;
|
||||||
|
|
||||||
this._logoutItem.actor.visible = allowLogout && (multiUser || multiSession);
|
this._logoutItem.actor.visible = allowLogout && (alwaysShow || multiUser || multiSession || systemAccount || !localAccount);
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateLockScreen: function() {
|
_updateLockScreen: function() {
|
||||||
@ -646,9 +648,22 @@ const UserMenuButton = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateSuspendOrPowerOff: function() {
|
_updateHaveSuspend: function() {
|
||||||
this._haveSuspend = this._upClient.get_can_suspend();
|
this._loginManager.canSuspend(Lang.bind(this,
|
||||||
|
function(result) {
|
||||||
|
this._haveSuspend = result;
|
||||||
|
this._updateSuspendOrPowerOff();
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateHaveHibernate: function() {
|
||||||
|
this._loginManager.canHibernate(Lang.bind(this,
|
||||||
|
function(result) {
|
||||||
|
this._haveHibernate = result;
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateSuspendOrPowerOff: function() {
|
||||||
if (!this._suspendOrPowerOffItem)
|
if (!this._suspendOrPowerOffItem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -745,7 +760,7 @@ const UserMenuButton = new Lang.Class({
|
|||||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
|
|
||||||
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
item = new PopupMenu.PopupMenuItem(_("Settings"));
|
||||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
this._systemSettings = item;
|
this._systemSettings = item;
|
||||||
@ -759,7 +774,7 @@ const UserMenuButton = new Lang.Class({
|
|||||||
this._loginScreenItem = item;
|
this._loginScreenItem = item;
|
||||||
|
|
||||||
item = new PopupMenu.PopupMenuItem(_("Log Out"));
|
item = new PopupMenu.PopupMenuItem(_("Log Out"));
|
||||||
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
|
item.connect('activate', Lang.bind(this, this.logOut));
|
||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
this._logoutItem = item;
|
this._logoutItem = item;
|
||||||
|
|
||||||
@ -828,7 +843,7 @@ const UserMenuButton = new Lang.Class({
|
|||||||
Gdm.goto_login_session_sync(null);
|
Gdm.goto_login_session_sync(null);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onQuitSessionActivate: function() {
|
logOut: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
this._session.LogoutRemote(0);
|
this._session.LogoutRemote(0);
|
||||||
},
|
},
|
||||||
@ -840,24 +855,60 @@ const UserMenuButton = new Lang.Class({
|
|||||||
this._session.RebootRemote();
|
this._session.RebootRemote();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
shutdown: function() {
|
||||||
|
this._session.ShutdownRemote();
|
||||||
|
},
|
||||||
|
|
||||||
|
suspend: function() {
|
||||||
|
if (!this._haveSuspend)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Ensure we only suspend after locking the screen
|
||||||
|
if (this._screenSaverSettings.get_boolean(LOCK_ENABLED_KEY)) {
|
||||||
|
let tmpId = Main.screenShield.connect('lock-screen-shown', Lang.bind(this, function() {
|
||||||
|
Main.screenShield.disconnect(tmpId);
|
||||||
|
|
||||||
|
this._loginManager.suspend();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.menu.close(BoxPointer.PopupAnimation.NONE);
|
||||||
|
Main.screenShield.lock(true);
|
||||||
|
} else {
|
||||||
|
this._loginManager.suspend();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
hibernate: function() {
|
||||||
|
if (!this._haveHibernate)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Ensure we only suspend after locking the screen
|
||||||
|
if (this._screenSaverSettings.get_boolean(LOCK_ENABLED_KEY)) {
|
||||||
|
let tmpId = Main.screenShield.connect('lock-screen-shown', Lang.bind(this, function() {
|
||||||
|
Main.screenShield.disconnect(tmpId);
|
||||||
|
|
||||||
|
this._loginManager.hibernate();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.menu.close(BoxPointer.PopupAnimation.NONE);
|
||||||
|
Main.screenShield.lock(true);
|
||||||
|
} else {
|
||||||
|
this._loginManager.hibernate();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
_onSuspendOrPowerOffActivate: function() {
|
_onSuspendOrPowerOffActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
|
|
||||||
if (this._haveShutdown &&
|
if (this._haveShutdown &&
|
||||||
this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
|
this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
|
||||||
this._session.ShutdownRemote();
|
this.shutdown();
|
||||||
} else {
|
} else {
|
||||||
if (this._screenSaverSettings.get_boolean(LOCK_ENABLED_KEY)) {
|
this.suspend();
|
||||||
let tmpId = Main.screenShield.connect('lock-screen-shown', Lang.bind(this, function() {
|
|
||||||
Main.screenShield.disconnect(tmpId);
|
|
||||||
|
|
||||||
this._upClient.suspend_sync(null);
|
|
||||||
}));
|
|
||||||
|
|
||||||
Main.screenShield.lock(true);
|
|
||||||
} else {
|
|
||||||
this._upClient.suspend_sync(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
@ -19,6 +20,7 @@ const Tweener = imports.ui.tweener;
|
|||||||
const Wanda = imports.ui.wanda;
|
const Wanda = imports.ui.wanda;
|
||||||
const WorkspacesView = imports.ui.workspacesView;
|
const WorkspacesView = imports.ui.workspacesView;
|
||||||
|
|
||||||
|
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||||
|
|
||||||
const FocusTrap = new Lang.Class({
|
const FocusTrap = new Lang.Class({
|
||||||
Name: 'FocusTrap',
|
Name: 'FocusTrap',
|
||||||
@ -141,6 +143,16 @@ const ViewSelector = new Lang.Class({
|
|||||||
// accessing the properties.
|
// accessing the properties.
|
||||||
this.constrainHeight = new Clutter.BindConstraint({ source: this._pageArea,
|
this.constrainHeight = new Clutter.BindConstraint({ source: this._pageArea,
|
||||||
coordinate: Clutter.BindCoordinate.HEIGHT });
|
coordinate: Clutter.BindCoordinate.HEIGHT });
|
||||||
|
|
||||||
|
global.display.add_keybinding('toggle-application-view',
|
||||||
|
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
|
Meta.KeyBindingFlags.NONE,
|
||||||
|
Lang.bind(this, this._showWithAppsPage));
|
||||||
|
},
|
||||||
|
|
||||||
|
_showWithAppsPage: function() {
|
||||||
|
Main.overview.show();
|
||||||
|
this._showAppsButton.set_checked(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
show: function() {
|
show: function() {
|
||||||
@ -184,7 +196,7 @@ const ViewSelector = new Lang.Class({
|
|||||||
})
|
})
|
||||||
});;
|
});;
|
||||||
this._pageArea.add_actor(page);
|
this._pageArea.add_actor(page);
|
||||||
return page
|
return page;
|
||||||
},
|
},
|
||||||
|
|
||||||
_showPage: function(page) {
|
_showPage: function(page) {
|
||||||
|
@ -39,6 +39,8 @@ const WindowAttentionHandler = new Lang.Class({
|
|||||||
let [title, banner] = this._getTitleAndBanner(app, window);
|
let [title, banner] = this._getTitleAndBanner(app, window);
|
||||||
|
|
||||||
let notification = new MessageTray.Notification(source, title, banner);
|
let notification = new MessageTray.Notification(source, title, banner);
|
||||||
|
notification.setForFeedback(true);
|
||||||
|
|
||||||
source.notify(notification);
|
source.notify(notification);
|
||||||
|
|
||||||
source.signalIDs.push(window.connect('notify::title', Lang.bind(this, function() {
|
source.signalIDs.push(window.connect('notify::title', Lang.bind(this, function() {
|
||||||
|
@ -12,6 +12,7 @@ const AltTab = imports.ui.altTab;
|
|||||||
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
|
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||||
const WINDOW_ANIMATION_TIME = 0.25;
|
const WINDOW_ANIMATION_TIME = 0.25;
|
||||||
@ -101,32 +102,32 @@ const WindowManager = new Lang.Class({
|
|||||||
this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow));
|
this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow));
|
||||||
|
|
||||||
this._workspaceSwitcherPopup = null;
|
this._workspaceSwitcherPopup = null;
|
||||||
Meta.keybindings_set_custom_handler('switch-to-workspace-left',
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-to-workspace-left',
|
||||||
|
Util.wrapKeybinding(Lang.bind(this, this._showWorkspaceSwitcher), true));
|
||||||
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-to-workspace-right',
|
||||||
|
Util.wrapKeybinding(Lang.bind(this, this._showWorkspaceSwitcher), true));
|
||||||
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-to-workspace-up',
|
||||||
|
Util.wrapKeybinding(Lang.bind(this, this._showWorkspaceSwitcher), true));
|
||||||
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-to-workspace-down',
|
||||||
|
Util.wrapKeybinding(Lang.bind(this, this._showWorkspaceSwitcher), true));
|
||||||
|
Meta.keybindings_set_custom_handler('internal-keybinding-move-to-workspace-left',
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('switch-to-workspace-right',
|
Meta.keybindings_set_custom_handler('internal-keybinding-move-to-workspace-right',
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('switch-to-workspace-up',
|
Meta.keybindings_set_custom_handler('internal-keybinding-move-to-workspace-up',
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('switch-to-workspace-down',
|
Meta.keybindings_set_custom_handler('internal-keybinding-move-to-workspace-down',
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('move-to-workspace-left',
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-windows',
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
|
||||||
Meta.keybindings_set_custom_handler('move-to-workspace-right',
|
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
|
||||||
Meta.keybindings_set_custom_handler('move-to-workspace-up',
|
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
|
||||||
Meta.keybindings_set_custom_handler('move-to-workspace-down',
|
|
||||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
|
||||||
Meta.keybindings_set_custom_handler('switch-windows',
|
|
||||||
Lang.bind(this, this._startAppSwitcher));
|
Lang.bind(this, this._startAppSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('switch-group',
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-group',
|
||||||
Lang.bind(this, this._startAppSwitcher));
|
Lang.bind(this, this._startAppSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('switch-windows-backward',
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-windows-backward',
|
||||||
Lang.bind(this, this._startAppSwitcher));
|
Lang.bind(this, this._startAppSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('switch-group-backward',
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-group-backward',
|
||||||
Lang.bind(this, this._startAppSwitcher));
|
Lang.bind(this, this._startAppSwitcher));
|
||||||
Meta.keybindings_set_custom_handler('switch-panels',
|
Meta.keybindings_set_custom_handler('internal-keybinding-switch-panels',
|
||||||
Lang.bind(this, this._startA11ySwitcher));
|
Util.wrapKeybinding(Lang.bind(this, this._startA11ySwitcher), true));
|
||||||
global.display.add_keybinding('open-application-menu',
|
global.display.add_keybinding('open-application-menu',
|
||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
@ -552,30 +553,32 @@ const WindowManager = new Lang.Class({
|
|||||||
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
|
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
|
||||||
if (!tabPopup.show(backwards, binding.get_name(), binding.get_mask()))
|
if (!tabPopup.show(backwards, binding.get_name(), binding.get_mask()))
|
||||||
tabPopup.destroy();
|
tabPopup.destroy();
|
||||||
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_startA11ySwitcher : function(display, screen, window, binding) {
|
_startA11ySwitcher : function(display, screen, window, binding) {
|
||||||
let modifiers = binding.get_modifiers();
|
let modifiers = binding.get_modifiers();
|
||||||
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
|
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
|
||||||
Main.ctrlAltTabManager.popup(backwards, binding.get_mask());
|
Main.ctrlAltTabManager.popup(backwards, binding.get_mask());
|
||||||
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_openAppMenu : function(display, screen, window, event, binding) {
|
_openAppMenu : function(display, screen, window, event, binding) {
|
||||||
Main.panel.openAppMenu();
|
Main.panel.openAppMenu();
|
||||||
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_showWorkspaceSwitcher : function(display, screen, window, binding) {
|
_showWorkspaceSwitcher : function(display, screen, window, binding) {
|
||||||
if (screen.n_workspaces == 1)
|
if (screen.n_workspaces == 1)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
let [action,,,direction] = binding.get_name().split('-');
|
let [,,action,,,direction] = binding.get_name().split('-');
|
||||||
let direction = Meta.MotionDirection[direction.toUpperCase()];
|
let direction = Meta.MotionDirection[direction.toUpperCase()];
|
||||||
let newWs;
|
let newWs;
|
||||||
|
|
||||||
|
|
||||||
if (direction != Meta.MotionDirection.UP &&
|
if (direction != Meta.MotionDirection.UP &&
|
||||||
direction != Meta.MotionDirection.DOWN)
|
direction != Meta.MotionDirection.DOWN)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
if (action == 'switch')
|
if (action == 'switch')
|
||||||
newWs = this.actionMoveWorkspace(direction);
|
newWs = this.actionMoveWorkspace(direction);
|
||||||
@ -591,6 +594,8 @@ const WindowManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
this._workspaceSwitcherPopup.display(direction, newWs.index());
|
this._workspaceSwitcherPopup.display(direction, newWs.index());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
actionMoveWorkspace: function(direction) {
|
actionMoveWorkspace: function(direction) {
|
||||||
|
@ -33,21 +33,13 @@ const DRAGGING_WINDOW_OPACITY = 100;
|
|||||||
const BUTTON_LAYOUT_SCHEMA = 'org.gnome.shell.overrides';
|
const BUTTON_LAYOUT_SCHEMA = 'org.gnome.shell.overrides';
|
||||||
const BUTTON_LAYOUT_KEY = 'button-layout';
|
const BUTTON_LAYOUT_KEY = 'button-layout';
|
||||||
|
|
||||||
// Define a layout scheme for small window counts. For larger
|
// When calculating a layout, we calculate the scale of windows and the percent
|
||||||
// counts we fall back to an algorithm. We need more schemes here
|
// of the available area the new layout uses. If the values for the new layout,
|
||||||
// unless we have a really good algorithm.
|
// when weighted with the values as below, are worse than the previous layout's,
|
||||||
|
// we stop looking for a new layout and use the previous layout.
|
||||||
// Each triplet is [xCenter, yCenter, scale] where the scale
|
// Otherwise, we keep looking for a new layout.
|
||||||
// is relative to the width of the workspace.
|
const LAYOUT_SCALE_WEIGHT = 1;
|
||||||
const POSITIONS = {
|
const LAYOUT_SPACE_WEIGHT = 0.1;
|
||||||
1: [[0.5, 0.5, 0.95]],
|
|
||||||
2: [[0.25, 0.5, 0.48], [0.75, 0.5, 0.48]],
|
|
||||||
3: [[0.25, 0.25, 0.48], [0.75, 0.25, 0.48], [0.5, 0.75, 0.48]],
|
|
||||||
4: [[0.25, 0.25, 0.47], [0.75, 0.25, 0.47], [0.75, 0.75, 0.47], [0.25, 0.75, 0.47]],
|
|
||||||
5: [[0.165, 0.25, 0.32], [0.495, 0.25, 0.32], [0.825, 0.25, 0.32], [0.25, 0.75, 0.32], [0.75, 0.75, 0.32]]
|
|
||||||
};
|
|
||||||
// Used in _orderWindowsPermutations, 5! = 120 which is probably the highest we can go
|
|
||||||
const POSITIONING_PERMUTATIONS_MAX = 5;
|
|
||||||
|
|
||||||
function _interpolate(start, end, step) {
|
function _interpolate(start, end, step) {
|
||||||
return start + (end - start) * step;
|
return start + (end - start) * step;
|
||||||
@ -167,6 +159,24 @@ const WindowClone = new Lang.Class({
|
|||||||
this._selected = false;
|
this._selected = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get slot() {
|
||||||
|
let x, y, w, h;
|
||||||
|
|
||||||
|
if (this.inDrag) {
|
||||||
|
x = this.dragOrigX;
|
||||||
|
y = this.dragOrigY;
|
||||||
|
w = this.actor.width * this.dragOrigScale;
|
||||||
|
h = this.actor.height * this.dragOrigScale;
|
||||||
|
} else {
|
||||||
|
x = this.actor.x;
|
||||||
|
y = this.actor.y;
|
||||||
|
w = this.actor.width * this.actor.scale_x;
|
||||||
|
h = this.actor.height * this.actor.scale_y;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [x, y, w, h];
|
||||||
|
},
|
||||||
|
|
||||||
setStackAbove: function (actor) {
|
setStackAbove: function (actor) {
|
||||||
this._stackAbove = actor;
|
this._stackAbove = actor;
|
||||||
if (this.inDrag || this._zooming)
|
if (this.inDrag || this._zooming)
|
||||||
@ -443,6 +453,11 @@ const WindowOverlay = new Lang.Class({
|
|||||||
this._updateCaptionId = metaWindow.connect('notify::title',
|
this._updateCaptionId = metaWindow.connect('notify::title',
|
||||||
Lang.bind(this, function(w) {
|
Lang.bind(this, function(w) {
|
||||||
this.title.text = w.title;
|
this.title.text = w.title;
|
||||||
|
// we need this for the next call to get_preferred_width
|
||||||
|
// to return useful results
|
||||||
|
this.title.set_size(-1, -1);
|
||||||
|
|
||||||
|
this._repositionSelf();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
let button = new St.Button({ style_class: 'window-close' });
|
let button = new St.Button({ style_class: 'window-close' });
|
||||||
@ -504,15 +519,16 @@ const WindowOverlay = new Lang.Class({
|
|||||||
transition: 'easeOutQuad' });
|
transition: 'easeOutQuad' });
|
||||||
},
|
},
|
||||||
|
|
||||||
chromeWidth: function () {
|
|
||||||
return this.closeButton.width - this.closeButton._overlap;
|
|
||||||
},
|
|
||||||
|
|
||||||
chromeHeights: function () {
|
chromeHeights: function () {
|
||||||
return [this.closeButton.height - this.closeButton._overlap,
|
return [this.closeButton.height - this.closeButton._overlap,
|
||||||
this.title.height + this.title._spacing];
|
this.title.height + this.title._spacing];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_repositionSelf: function() {
|
||||||
|
let [cloneX, cloneY, cloneWidth, cloneHeight] = this._windowClone.slot;
|
||||||
|
this.updatePositions(cloneX, cloneY, cloneWidth, cloneHeight, false);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @cloneX: x position of windowClone
|
* @cloneX: x position of windowClone
|
||||||
* @cloneY: y position of windowClone
|
* @cloneY: y position of windowClone
|
||||||
@ -550,9 +566,8 @@ const WindowOverlay = new Lang.Class({
|
|||||||
else
|
else
|
||||||
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
||||||
|
|
||||||
if (!title.fullWidth)
|
let [titleMinWidth, titleNatWidth] = title.get_preferred_width(-1);
|
||||||
title.fullWidth = title.width;
|
let titleWidth = Math.max(titleMinWidth, Math.min(titleNatWidth, cloneWidth));
|
||||||
let titleWidth = Math.min(title.fullWidth, cloneWidth);
|
|
||||||
|
|
||||||
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
|
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
|
||||||
let titleY = cloneY + cloneHeight + title._spacing;
|
let titleY = cloneY + cloneHeight + title._spacing;
|
||||||
@ -668,6 +683,280 @@ const WindowPositionFlags = {
|
|||||||
ANIMATE: 1 << 1
|
ANIMATE: 1 << 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const LayoutStrategy = new Lang.Class({
|
||||||
|
Name: 'LayoutStrategy',
|
||||||
|
Abstract: true,
|
||||||
|
|
||||||
|
_init: function(monitor, rowSpacing, columnSpacing, bottomPadding) {
|
||||||
|
this._monitor = monitor;
|
||||||
|
this._rowSpacing = rowSpacing;
|
||||||
|
this._columnSpacing = columnSpacing;
|
||||||
|
this._bottomPadding = bottomPadding;
|
||||||
|
},
|
||||||
|
|
||||||
|
_newRow: function() {
|
||||||
|
// Row properties:
|
||||||
|
//
|
||||||
|
// * x, y are the position of row, relative to area
|
||||||
|
//
|
||||||
|
// * width, height are the scaled versions of fullWidth, fullHeight
|
||||||
|
//
|
||||||
|
// * width also has the spacing in between windows. It's not in
|
||||||
|
// fullWidth, as the spacing is constant, whereas fullWidth is
|
||||||
|
// meant to be scaled
|
||||||
|
//
|
||||||
|
// * neither height/fullHeight have any sort of spacing or padding
|
||||||
|
//
|
||||||
|
// * if cellWidth is present, all windows in the row will occupy
|
||||||
|
// the space of cellWidth, centered.
|
||||||
|
return { x: 0, y: 0,
|
||||||
|
width: 0, height: 0,
|
||||||
|
fullWidth: 0, fullHeight: 0,
|
||||||
|
cellWidth: 0,
|
||||||
|
windows: [] };
|
||||||
|
},
|
||||||
|
|
||||||
|
// Compute the size and fancy scale for @window using the
|
||||||
|
// base scale, @scale.
|
||||||
|
//
|
||||||
|
// Returns a list structure: [ scaledWidth, scaledHeight, fancyScale ]
|
||||||
|
// where scaledWidth and scaledHeight are the window's
|
||||||
|
// width and height, scaled by fancyScale for convenience.
|
||||||
|
_computeWindowSizeAndScale: function(window, scale) {
|
||||||
|
let width = window.actor.width;
|
||||||
|
let height = window.actor.height;
|
||||||
|
let ratio;
|
||||||
|
|
||||||
|
if (width > height)
|
||||||
|
ratio = width / this._monitor.width;
|
||||||
|
else
|
||||||
|
ratio = height / this._monitor.height;
|
||||||
|
|
||||||
|
let fancyScale = (2 / (1 + ratio)) * scale;
|
||||||
|
return [width * fancyScale, height * fancyScale, fancyScale];
|
||||||
|
},
|
||||||
|
|
||||||
|
// Compute the size of each row, by assigning to the properties
|
||||||
|
// row.width, row.height, row.fullWidth, row.fullHeight, and
|
||||||
|
// (optionally) row.cellWidth, for each row in @layout.rows.
|
||||||
|
// This method is intended to be called by subclasses.
|
||||||
|
_computeRowSizes: function(layout) {
|
||||||
|
throw new Error('_computeRowSizes not implemented');
|
||||||
|
},
|
||||||
|
|
||||||
|
// Compute strategy-specific window slots for each window in
|
||||||
|
// @windows, given the @layout. The strategy may also use @layout
|
||||||
|
// as strategy-specific storage.
|
||||||
|
//
|
||||||
|
// This must calculate:
|
||||||
|
// * maxColumns - The maximum number of columns used by the layout.
|
||||||
|
// * gridWidth - The total width used by the grid, unscaled, unspaced.
|
||||||
|
// * gridHeight - The totial height used by the grid, unscaled, unspaced.
|
||||||
|
// * rows - A list of rows, which should be instantiated by _newRow.
|
||||||
|
computeLayout: function(windows, layout) {
|
||||||
|
throw new Error('computeLayout not implemented');
|
||||||
|
},
|
||||||
|
|
||||||
|
// Given @layout, compute the overall scale and space of the layout.
|
||||||
|
// The scale is the individual, non-fancy scale of each window, and
|
||||||
|
// the space is the percentage of the available area eventually
|
||||||
|
// used by the layout.
|
||||||
|
|
||||||
|
// This method does not return anything, but instead installs
|
||||||
|
// the properties "scale" and "space" on @layout directly.
|
||||||
|
//
|
||||||
|
// Make sure to call this methods before calling computeWindowSlots(),
|
||||||
|
// as it depends on the scale property installed in @layout here.
|
||||||
|
computeScaleAndSpace: function(layout) {
|
||||||
|
let area = layout.area;
|
||||||
|
|
||||||
|
let hspacing = (layout.maxColumns - 1) * this._columnSpacing;
|
||||||
|
let vspacing = (layout.numRows - 1) * this._rowSpacing + this._bottomPadding;
|
||||||
|
|
||||||
|
let spacedWidth = area.width - hspacing;
|
||||||
|
let spacedHeight = area.height - vspacing;
|
||||||
|
|
||||||
|
let horizontalScale = spacedWidth / layout.gridWidth;
|
||||||
|
let verticalScale = spacedHeight / layout.gridHeight;
|
||||||
|
|
||||||
|
// Thumbnails should be less than 70% of the original size
|
||||||
|
let scale = Math.min(horizontalScale, verticalScale, WINDOW_CLONE_MAXIMUM_SCALE);
|
||||||
|
|
||||||
|
let scaledLayoutWidth = layout.gridWidth * scale + hspacing;
|
||||||
|
let scaledLayoutHeight = layout.gridHeight * scale + vspacing;
|
||||||
|
let space = (scaledLayoutWidth * scaledLayoutHeight) / (area.width * area.height);
|
||||||
|
|
||||||
|
layout.scale = scale;
|
||||||
|
layout.space = space;
|
||||||
|
},
|
||||||
|
|
||||||
|
computeWindowSlots: function(layout, area) {
|
||||||
|
this._computeRowSizes(layout);
|
||||||
|
|
||||||
|
let { rows: rows, scale: scale, state: state } = layout;
|
||||||
|
|
||||||
|
let slots = [];
|
||||||
|
|
||||||
|
let y = 0;
|
||||||
|
for (let i = 0; i < rows.length; i++) {
|
||||||
|
let row = rows[i];
|
||||||
|
row.x = area.x + (area.width - row.width) / 2;
|
||||||
|
row.y = area.y + y;
|
||||||
|
y += row.height + this._rowSpacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
let height = y - this._rowSpacing + this._bottomPadding;
|
||||||
|
let baseY = (area.height - height) / 2;
|
||||||
|
|
||||||
|
for (let i = 0; i < rows.length; i++) {
|
||||||
|
let row = rows[i];
|
||||||
|
row.y += baseY;
|
||||||
|
let baseX = row.x;
|
||||||
|
for (let j = 0; j < row.windows.length; j++) {
|
||||||
|
let window = row.windows[j];
|
||||||
|
|
||||||
|
let [width, height, s] = this._computeWindowSizeAndScale(window, scale);
|
||||||
|
let y = row.y + row.height - height;
|
||||||
|
|
||||||
|
let x = baseX;
|
||||||
|
if (row.cellWidth) {
|
||||||
|
x += (row.cellWidth - width) / 2;
|
||||||
|
width = row.cellWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
slots.push([x, y, s]);
|
||||||
|
baseX += width + this._columnSpacing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return slots;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const UnalignedLayoutStrategy = new Lang.Class({
|
||||||
|
Name: 'UnalignedLayoutStrategy',
|
||||||
|
Extends: LayoutStrategy,
|
||||||
|
|
||||||
|
_computeRowSizes: function(layout) {
|
||||||
|
let { rows: rows, scale: scale } = layout;
|
||||||
|
for (let i = 0; i < rows.length; i++) {
|
||||||
|
let row = rows[i];
|
||||||
|
row.width = row.fullWidth * scale + (row.windows.length - 1) * this._columnSpacing;
|
||||||
|
row.height = row.fullHeight * scale;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_keepSameRow: function(row, window, width, idealRowWidth) {
|
||||||
|
if (row.fullWidth + width <= idealRowWidth)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
let oldRatio = row.fullWidth / idealRowWidth;
|
||||||
|
let newRatio = (row.fullWidth + width) / idealRowWidth;
|
||||||
|
|
||||||
|
if (Math.abs(1 - newRatio) < Math.abs(1 - oldRatio))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
computeLayout: function(windows, layout) {
|
||||||
|
let numRows = layout.numRows;
|
||||||
|
|
||||||
|
let rows = [];
|
||||||
|
let totalWidth = 0;
|
||||||
|
for (let i = 0; i < windows.length; i++) {
|
||||||
|
totalWidth += windows[i].actor.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
let idealRowWidth = totalWidth / numRows;
|
||||||
|
let windowIdx = 0;
|
||||||
|
for (let i = 0; i < numRows; i++) {
|
||||||
|
let col = 0;
|
||||||
|
let row = this._newRow();
|
||||||
|
rows.push(row);
|
||||||
|
|
||||||
|
for (; windowIdx < windows.length; windowIdx++) {
|
||||||
|
let window = windows[windowIdx];
|
||||||
|
let [width, height] = this._computeWindowSizeAndScale(window, 1);
|
||||||
|
row.fullHeight = Math.max(row.fullHeight, height);
|
||||||
|
|
||||||
|
// either new width is < idealWidth or new width is nearer from idealWidth then oldWidth
|
||||||
|
if (this._keepSameRow(row, window, width, idealRowWidth) || (i == numRows - 1)) {
|
||||||
|
row.windows.push(window);
|
||||||
|
row.fullWidth += width;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let gridHeight = 0;
|
||||||
|
let maxRow;
|
||||||
|
for (let i = 0; i < numRows; i++) {
|
||||||
|
let row = rows[i];
|
||||||
|
if (!maxRow || row.fullWidth > maxRow.fullWidth)
|
||||||
|
maxRow = row;
|
||||||
|
gridHeight += row.fullHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
layout.rows = rows;
|
||||||
|
layout.maxColumns = maxRow.windows.length;
|
||||||
|
layout.gridWidth = maxRow.fullWidth;
|
||||||
|
layout.gridHeight = gridHeight;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const GridLayoutStrategy = new Lang.Class({
|
||||||
|
Name: 'GridLayoutStrategy',
|
||||||
|
Extends: LayoutStrategy,
|
||||||
|
|
||||||
|
_computeRowSizes: function(layout) {
|
||||||
|
let { rows: rows, scale: scale } = layout;
|
||||||
|
|
||||||
|
let gridWidth = layout.numColumns * layout.maxWindowWidth;
|
||||||
|
let hspacing = (layout.numColumns - 1) * this._columnSpacing;
|
||||||
|
for (let i = 0; i < rows.length; i++) {
|
||||||
|
let row = rows[i];
|
||||||
|
row.fullWidth = layout.gridWidth;
|
||||||
|
row.fullHeight = layout.maxWindowHeight;
|
||||||
|
|
||||||
|
row.width = row.fullWidth * scale + hspacing;
|
||||||
|
row.height = row.fullHeight * scale;
|
||||||
|
row.cellWidth = layout.maxWindowWidth * scale;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computeLayout: function(windows, layout) {
|
||||||
|
let { numRows: numRows, numColumns: numColumns } = layout;
|
||||||
|
let rows = [];
|
||||||
|
let windowIdx = 0;
|
||||||
|
|
||||||
|
let maxWindowWidth = 0;
|
||||||
|
let maxWindowHeight = 0;
|
||||||
|
for (let i = 0; i < numRows; i++) {
|
||||||
|
let row = this._newRow();
|
||||||
|
rows.push(row);
|
||||||
|
for (; windowIdx < windows.length; windowIdx++) {
|
||||||
|
if (row.windows.length >= numColumns)
|
||||||
|
break;
|
||||||
|
|
||||||
|
let window = windows[windowIdx];
|
||||||
|
row.windows.push(window);
|
||||||
|
|
||||||
|
let [width, height] = this._computeWindowSizeAndScale(window, 1);
|
||||||
|
maxWindowWidth = Math.max(maxWindowWidth, width);
|
||||||
|
maxWindowHeight = Math.max(maxWindowHeight, height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
layout.rows = rows;
|
||||||
|
layout.maxColumns = numColumns;
|
||||||
|
layout.gridWidth = numColumns * maxWindowWidth;
|
||||||
|
layout.gridHeight = numRows * maxWindowHeight;
|
||||||
|
layout.maxWindowWidth = maxWindowWidth;
|
||||||
|
layout.maxWindowHeight = maxWindowHeight;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @metaWorkspace: a #Meta.Workspace, or null
|
* @metaWorkspace: a #Meta.Workspace, or null
|
||||||
*/
|
*/
|
||||||
@ -689,7 +978,7 @@ const Workspace = new Lang.Class({
|
|||||||
// Without this the drop area will be overlapped.
|
// Without this the drop area will be overlapped.
|
||||||
this._windowOverlaysGroup.set_size(0, 0);
|
this._windowOverlaysGroup.set_size(0, 0);
|
||||||
|
|
||||||
this.actor = new Clutter.Group();
|
this.actor = new St.Widget({ style_class: 'window-picker' });
|
||||||
this.actor.set_size(0, 0);
|
this.actor.set_size(0, 0);
|
||||||
|
|
||||||
this._dropRect = new Clutter.Rectangle({ opacity: 0 });
|
this._dropRect = new Clutter.Rectangle({ opacity: 0 });
|
||||||
@ -729,6 +1018,8 @@ const Workspace = new Lang.Class({
|
|||||||
|
|
||||||
this._positionWindowsFlags = 0;
|
this._positionWindowsFlags = 0;
|
||||||
this._positionWindowsId = 0;
|
this._positionWindowsId = 0;
|
||||||
|
|
||||||
|
this._currentLayout = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
setGeometry: function(x, y, width, height) {
|
setGeometry: function(x, y, width, height) {
|
||||||
@ -763,225 +1054,6 @@ const Workspace = new Lang.Class({
|
|||||||
return this._windows.length == 0;
|
return this._windows.length == 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
// Only use this for n <= 20 say
|
|
||||||
_factorial: function(n) {
|
|
||||||
let result = 1;
|
|
||||||
for (let i = 2; i <= n; i++)
|
|
||||||
result *= i;
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _permutation:
|
|
||||||
* @permutationIndex: An integer from [0, list.length!)
|
|
||||||
* @list: (inout): Array of objects to permute; will be modified in place
|
|
||||||
*
|
|
||||||
* Given an integer between 0 and length of array, re-order the array in-place
|
|
||||||
* into a permutation denoted by the index.
|
|
||||||
*/
|
|
||||||
_permutation: function(permutationIndex, list) {
|
|
||||||
for (let j = 2; j <= list.length; j++) {
|
|
||||||
let firstIndex = (permutationIndex % j);
|
|
||||||
let secondIndex = j - 1;
|
|
||||||
// Swap
|
|
||||||
let tmp = list[firstIndex];
|
|
||||||
list[firstIndex] = list[secondIndex];
|
|
||||||
list[secondIndex] = tmp;
|
|
||||||
permutationIndex = Math.floor(permutationIndex / j);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _forEachPermutations:
|
|
||||||
* @list: Array
|
|
||||||
* @func: Function which takes a single array argument
|
|
||||||
*
|
|
||||||
* Call @func with each permutation of @list as an argument.
|
|
||||||
*/
|
|
||||||
_forEachPermutations: function(list, func) {
|
|
||||||
let nCombinations = this._factorial(list.length);
|
|
||||||
for (let i = 0; i < nCombinations; i++) {
|
|
||||||
let listCopy = list.concat();
|
|
||||||
this._permutation(i, listCopy);
|
|
||||||
func(listCopy);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _computeWindowMotion:
|
|
||||||
* @actor: A #WindowClone's #ClutterActor
|
|
||||||
* @slot: An element of #POSITIONS
|
|
||||||
* @slotGeometry: Layout of @slot
|
|
||||||
*
|
|
||||||
* Returns a number corresponding to how much perceived motion
|
|
||||||
* would be involved in moving the window to the given slot.
|
|
||||||
* Currently this is the square of the distance between the
|
|
||||||
* centers.
|
|
||||||
*/
|
|
||||||
_computeWindowMotion: function (actor, slot) {
|
|
||||||
let [xCenter, yCenter, fraction] = slot;
|
|
||||||
let xDelta, yDelta, distanceSquared;
|
|
||||||
let actorWidth, actorHeight;
|
|
||||||
|
|
||||||
let x = actor.x;
|
|
||||||
let y = actor.y;
|
|
||||||
let scale = actor.scale_x;
|
|
||||||
|
|
||||||
if (actor._delegate.inDrag) {
|
|
||||||
x = actor._delegate.dragOrigX;
|
|
||||||
y = actor._delegate.dragOrigY;
|
|
||||||
scale = actor._delegate.dragOrigScale;
|
|
||||||
}
|
|
||||||
|
|
||||||
actorWidth = actor.width * scale;
|
|
||||||
actorHeight = actor.height * scale;
|
|
||||||
xDelta = x + actorWidth / 2.0 - xCenter * this._width - this._x;
|
|
||||||
yDelta = y + actorHeight / 2.0 - yCenter * this._height - this._y;
|
|
||||||
distanceSquared = xDelta * xDelta + yDelta * yDelta;
|
|
||||||
|
|
||||||
return distanceSquared;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _orderWindowsPermutations:
|
|
||||||
*
|
|
||||||
* Iterate over all permutations of the windows, and determine the
|
|
||||||
* permutation which has the least total motion.
|
|
||||||
*/
|
|
||||||
_orderWindowsPermutations: function (clones, slots) {
|
|
||||||
let minimumMotionPermutation = null;
|
|
||||||
let minimumMotion = -1;
|
|
||||||
let permIndex = 0;
|
|
||||||
this._forEachPermutations(clones, Lang.bind(this, function (permutation) {
|
|
||||||
let motion = 0;
|
|
||||||
for (let i = 0; i < permutation.length; i++) {
|
|
||||||
let cloneActor = permutation[i].actor;
|
|
||||||
let slot = slots[i];
|
|
||||||
|
|
||||||
let delta = this._computeWindowMotion(cloneActor, slot);
|
|
||||||
|
|
||||||
motion += delta;
|
|
||||||
|
|
||||||
// Bail out early if we're already larger than the
|
|
||||||
// previous best
|
|
||||||
if (minimumMotionPermutation != null &&
|
|
||||||
motion > minimumMotion)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (minimumMotionPermutation == null || motion < minimumMotion) {
|
|
||||||
minimumMotionPermutation = permutation;
|
|
||||||
minimumMotion = motion;
|
|
||||||
}
|
|
||||||
permIndex++;
|
|
||||||
}));
|
|
||||||
return minimumMotionPermutation;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _orderWindowsGreedy:
|
|
||||||
*
|
|
||||||
* Iterate over available slots in order, placing into each one the window
|
|
||||||
* we find with the smallest motion to that slot.
|
|
||||||
*/
|
|
||||||
_orderWindowsGreedy: function(clones, slots) {
|
|
||||||
let result = [];
|
|
||||||
let slotIndex = 0;
|
|
||||||
// Copy since we mutate below
|
|
||||||
let clonesCopy = clones.concat();
|
|
||||||
for (let i = 0; i < slots.length; i++) {
|
|
||||||
let slot = slots[i];
|
|
||||||
let minimumMotionIndex = -1;
|
|
||||||
let minimumMotion = -1;
|
|
||||||
for (let j = 0; j < clonesCopy.length; j++) {
|
|
||||||
let cloneActor = clonesCopy[j].actor;
|
|
||||||
let delta = this._computeWindowMotion(cloneActor, slot);
|
|
||||||
if (minimumMotionIndex == -1 || delta < minimumMotion) {
|
|
||||||
minimumMotionIndex = j;
|
|
||||||
minimumMotion = delta;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result.push(clonesCopy[minimumMotionIndex]);
|
|
||||||
clonesCopy.splice(minimumMotionIndex, 1);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _orderWindowsByMotionAndStartup:
|
|
||||||
* @windows: Array of #MetaWindow
|
|
||||||
* @slots: Array of slots
|
|
||||||
*
|
|
||||||
* Returns a copy of @windows, ordered in such a way that they require least motion
|
|
||||||
* to move to the final screen coordinates of @slots. Ties are broken in a stable
|
|
||||||
* fashion by the order in which the windows were created.
|
|
||||||
*/
|
|
||||||
_orderWindowsByMotionAndStartup: function(clones, slots) {
|
|
||||||
clones.sort(function(w1, w2) {
|
|
||||||
return w2.metaWindow.get_stable_sequence() - w1.metaWindow.get_stable_sequence();
|
|
||||||
});
|
|
||||||
if (clones.length <= POSITIONING_PERMUTATIONS_MAX)
|
|
||||||
return this._orderWindowsPermutations(clones, slots);
|
|
||||||
else
|
|
||||||
return this._orderWindowsGreedy(clones, slots);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _getSlotGeometry:
|
|
||||||
* @slot: A layout slot
|
|
||||||
*
|
|
||||||
* Returns: the screen-relative [x, y, width, height]
|
|
||||||
* of a given window layout slot.
|
|
||||||
*/
|
|
||||||
_getSlotGeometry: function(slot) {
|
|
||||||
let [xCenter, yCenter, fraction] = slot;
|
|
||||||
|
|
||||||
let width = this._width * fraction;
|
|
||||||
let height = this._height * fraction;
|
|
||||||
|
|
||||||
let x = this._x + xCenter * this._width - width / 2 ;
|
|
||||||
let y = this._y + yCenter * this._height - height / 2;
|
|
||||||
|
|
||||||
return [x, y, width, height];
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _computeWindowLayout:
|
|
||||||
* @metaWindow: A #MetaWindow
|
|
||||||
* @slot: A layout slot
|
|
||||||
*
|
|
||||||
* Given a window and slot to fit it in, compute its
|
|
||||||
* screen-relative [x, y, scale] where scale applies
|
|
||||||
* to both X and Y directions.
|
|
||||||
*/
|
|
||||||
_computeWindowLayout: function(metaWindow, slot) {
|
|
||||||
let [x, y, width, height] = this._getSlotGeometry(slot);
|
|
||||||
|
|
||||||
let rect = metaWindow.get_outer_rect();
|
|
||||||
let buttonOuterHeight, captionHeight;
|
|
||||||
let buttonOuterWidth = 0;
|
|
||||||
|
|
||||||
if (this._windowOverlays[0]) {
|
|
||||||
[buttonOuterHeight, captionHeight] = this._windowOverlays[0].chromeHeights();
|
|
||||||
buttonOuterWidth = this._windowOverlays[0].chromeWidth();
|
|
||||||
} else
|
|
||||||
[buttonOuterHeight, captionHeight] = [0, 0];
|
|
||||||
|
|
||||||
let scale = Math.min((width - buttonOuterWidth) / rect.width,
|
|
||||||
(height - buttonOuterHeight - captionHeight) / rect.height,
|
|
||||||
WINDOW_CLONE_MAXIMUM_SCALE);
|
|
||||||
|
|
||||||
x = Math.floor(x + (width - scale * rect.width) / 2);
|
|
||||||
|
|
||||||
// We want to center the window in case we have just one
|
|
||||||
if (metaWindow.get_workspace().n_windows == 1)
|
|
||||||
y = Math.floor(y + (height - scale * rect.height) / 2);
|
|
||||||
else
|
|
||||||
y = Math.floor(y + height - rect.height * scale - captionHeight);
|
|
||||||
|
|
||||||
return [x, y, scale];
|
|
||||||
},
|
|
||||||
|
|
||||||
setReservedSlot: function(clone) {
|
setReservedSlot: function(clone) {
|
||||||
if (this._reservedSlot == clone)
|
if (this._reservedSlot == clone)
|
||||||
return;
|
return;
|
||||||
@ -990,6 +1062,7 @@ const Workspace = new Lang.Class({
|
|||||||
clone = null;
|
clone = null;
|
||||||
|
|
||||||
this._reservedSlot = clone;
|
this._reservedSlot = clone;
|
||||||
|
this._currentLayout = null;
|
||||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1020,6 +1093,11 @@ const Workspace = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
let clones = this._windows.slice();
|
let clones = this._windows.slice();
|
||||||
|
|
||||||
|
clones.sort(function(a, b) {
|
||||||
|
return a.metaWindow.get_stable_sequence() - b.metaWindow.get_stable_sequence();
|
||||||
|
});
|
||||||
|
|
||||||
if (this._reservedSlot)
|
if (this._reservedSlot)
|
||||||
clones.push(this._reservedSlot);
|
clones.push(this._reservedSlot);
|
||||||
|
|
||||||
@ -1027,8 +1105,7 @@ const Workspace = new Lang.Class({
|
|||||||
let animate = flags & WindowPositionFlags.ANIMATE;
|
let animate = flags & WindowPositionFlags.ANIMATE;
|
||||||
|
|
||||||
// Start the animations
|
// Start the animations
|
||||||
let slots = this._computeAllWindowSlots(clones.length);
|
let slots = this._computeAllWindowSlots(clones);
|
||||||
clones = this._orderWindowsByMotionAndStartup(clones, slots);
|
|
||||||
|
|
||||||
let currentWorkspace = global.screen.get_active_workspace();
|
let currentWorkspace = global.screen.get_active_workspace();
|
||||||
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
|
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
|
||||||
@ -1045,10 +1122,11 @@ const Workspace = new Lang.Class({
|
|||||||
if (clone.inDrag)
|
if (clone.inDrag)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
let [x, y, scale] = this._computeWindowLayout(metaWindow, slot);
|
let [x, y, scale] = slot;
|
||||||
|
|
||||||
if (overlay && initialPositioning)
|
if (overlay && initialPositioning)
|
||||||
overlay.hide();
|
overlay.hide();
|
||||||
|
|
||||||
if (animate && isOnCurrentWorkspace) {
|
if (animate && isOnCurrentWorkspace) {
|
||||||
if (!metaWindow.showing_on_its_workspace()) {
|
if (!metaWindow.showing_on_its_workspace()) {
|
||||||
/* Hidden windows should fade in and grow
|
/* Hidden windows should fade in and grow
|
||||||
@ -1072,6 +1150,8 @@ const Workspace = new Lang.Class({
|
|||||||
|
|
||||||
this._animateClone(clone, overlay, x, y, scale, initialPositioning);
|
this._animateClone(clone, overlay, x, y, scale, initialPositioning);
|
||||||
} else {
|
} else {
|
||||||
|
// cancel any active tweens (otherwise they might override our changes)
|
||||||
|
Tweener.removeTweens(clone.actor);
|
||||||
clone.actor.set_position(x, y);
|
clone.actor.set_position(x, y);
|
||||||
clone.actor.set_scale(scale, scale);
|
clone.actor.set_scale(scale, scale);
|
||||||
this._updateWindowOverlayPositions(clone, overlay, x, y, scale, false);
|
this._updateWindowOverlayPositions(clone, overlay, x, y, scale, false);
|
||||||
@ -1113,11 +1193,11 @@ const Workspace = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updateWindowOverlayPositions: function(clone, overlay, x, y, scale, animate) {
|
_updateWindowOverlayPositions: function(clone, overlay, x, y, scale, animate) {
|
||||||
|
if (!overlay)
|
||||||
|
return;
|
||||||
|
|
||||||
let [cloneWidth, cloneHeight] = clone.actor.get_size();
|
let [cloneWidth, cloneHeight] = clone.actor.get_size();
|
||||||
cloneWidth = scale * cloneWidth;
|
overlay.updatePositions(x, y, cloneWidth * scale, cloneHeight * scale, animate);
|
||||||
cloneHeight = scale * cloneHeight;
|
|
||||||
if (overlay)
|
|
||||||
overlay.updatePositions(x, y, cloneWidth, cloneHeight, animate);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_showWindowOverlay: function(clone, overlay, fade) {
|
_showWindowOverlay: function(clone, overlay, fade) {
|
||||||
@ -1211,6 +1291,7 @@ const Workspace = new Lang.Class({
|
|||||||
this._cursorX = x;
|
this._cursorX = x;
|
||||||
this._cursorY = y;
|
this._cursorY = y;
|
||||||
|
|
||||||
|
this._currentLayout = null;
|
||||||
this._repositionWindowsId = Mainloop.timeout_add(750,
|
this._repositionWindowsId = Mainloop.timeout_add(750,
|
||||||
Lang.bind(this, this._delayedWindowRepositioning));
|
Lang.bind(this, this._delayedWindowRepositioning));
|
||||||
},
|
},
|
||||||
@ -1263,6 +1344,7 @@ const Workspace = new Lang.Class({
|
|||||||
clone.actor.set_position (this._x, this._y);
|
clone.actor.set_position (this._x, this._y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._currentLayout = null;
|
||||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1300,6 +1382,8 @@ const Workspace = new Lang.Class({
|
|||||||
|
|
||||||
// Animate the full-screen to Overview transition.
|
// Animate the full-screen to Overview transition.
|
||||||
zoomToOverview : function() {
|
zoomToOverview : function() {
|
||||||
|
this._currentLayout = null;
|
||||||
|
|
||||||
// Position and scale the windows.
|
// Position and scale the windows.
|
||||||
if (Main.overview.animationInProgress)
|
if (Main.overview.animationInProgress)
|
||||||
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
|
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
|
||||||
@ -1464,29 +1548,108 @@ const Workspace = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_computeWindowSlot : function(windowIndex, numberOfWindows) {
|
_isBetterLayout: function(oldLayout, newLayout) {
|
||||||
if (numberOfWindows in POSITIONS)
|
if (oldLayout.scale === undefined)
|
||||||
return POSITIONS[numberOfWindows][windowIndex];
|
return true;
|
||||||
|
|
||||||
// If we don't have a predefined scheme for this window count,
|
let spacePower = (newLayout.space - oldLayout.space) * LAYOUT_SPACE_WEIGHT;
|
||||||
// arrange the windows in a grid pattern.
|
let scalePower = (newLayout.scale - oldLayout.scale) * LAYOUT_SCALE_WEIGHT;
|
||||||
let gridWidth = Math.ceil(Math.sqrt(numberOfWindows));
|
|
||||||
let gridHeight = Math.ceil(numberOfWindows / gridWidth);
|
|
||||||
|
|
||||||
let fraction = 0.95 * (1. / gridWidth);
|
if (newLayout.scale > oldLayout.scale && newLayout.space > oldLayout.space) {
|
||||||
|
// Win win -- better scale and better space
|
||||||
let xCenter = (.5 / gridWidth) + ((windowIndex) % gridWidth) / gridWidth;
|
return true;
|
||||||
let yCenter = (.5 / gridHeight) + Math.floor((windowIndex / gridWidth)) / gridHeight;
|
} else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) {
|
||||||
|
// Keep new layout only if scale gain outweights aspect space loss
|
||||||
return [xCenter, yCenter, fraction];
|
return scalePower > spacePower;
|
||||||
|
} else if (newLayout.scale <= oldLayout.scale && newLayout.space > oldLayout.space) {
|
||||||
|
// Keep new layout only if aspect space gain outweights scale loss
|
||||||
|
return spacePower > scalePower;
|
||||||
|
} else {
|
||||||
|
// Lose -- worse scale and space
|
||||||
|
return false;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_computeAllWindowSlots: function(totalWindows) {
|
_computeLayout: function(windows, area, rowSpacing, columnSpacing, bottomPadding) {
|
||||||
let slots = [];
|
// We look for the largest scale that allows us to fit the
|
||||||
for (let i = 0; i < totalWindows; i++) {
|
// largest row/tallest column on the workspace.
|
||||||
slots.push(this._computeWindowSlot(i, totalWindows));
|
|
||||||
|
let lastLayout = {};
|
||||||
|
|
||||||
|
for (let numRows = 1; ; numRows++) {
|
||||||
|
let numColumns = Math.ceil(windows.length / numRows);
|
||||||
|
|
||||||
|
// If adding a new row does not change column count just stop
|
||||||
|
// (for instance: 9 windows, with 3 rows -> 3 columns, 4 rows ->
|
||||||
|
// 3 columns as well => just use 3 rows then)
|
||||||
|
if (numColumns == lastLayout.numColumns)
|
||||||
|
break;
|
||||||
|
|
||||||
|
let strategyClass = numRows > 2 ? GridLayoutStrategy : UnalignedLayoutStrategy;
|
||||||
|
let strategy = new strategyClass(this._monitor, rowSpacing, columnSpacing, bottomPadding);
|
||||||
|
|
||||||
|
let layout = { area: area, strategy: strategy, numRows: numRows, numColumns: numColumns };
|
||||||
|
strategy.computeLayout(windows, layout);
|
||||||
|
strategy.computeScaleAndSpace(layout);
|
||||||
|
|
||||||
|
if (!this._isBetterLayout(lastLayout, layout))
|
||||||
|
break;
|
||||||
|
|
||||||
|
lastLayout = layout;
|
||||||
}
|
}
|
||||||
return slots;
|
|
||||||
|
return lastLayout;
|
||||||
|
},
|
||||||
|
|
||||||
|
_rectEqual: function(one, two) {
|
||||||
|
if (one == two)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return (one.x == two.x &&
|
||||||
|
one.y == two.y &&
|
||||||
|
one.width == two.width &&
|
||||||
|
one.height == two.height);
|
||||||
|
},
|
||||||
|
|
||||||
|
_computeAllWindowSlots: function(windows) {
|
||||||
|
let totalWindows = windows.length;
|
||||||
|
let node = this.actor.get_theme_node();
|
||||||
|
|
||||||
|
// Window grid spacing
|
||||||
|
let columnSpacing = node.get_length('-horizontal-spacing');
|
||||||
|
let rowSpacing = node.get_length('-vertical-spacing');
|
||||||
|
|
||||||
|
if (!totalWindows)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
let closeButtonHeight, captionHeight;
|
||||||
|
if (this._windowOverlays.length) {
|
||||||
|
// All of the overlays have the same chrome sizes,
|
||||||
|
// so just pick the first one.
|
||||||
|
let overlay = this._windowOverlays[0];
|
||||||
|
[closeButtonHeight, captionHeight] = overlay.chromeHeights();
|
||||||
|
} else {
|
||||||
|
[closeButtonHeight, captionHeight] = [0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
|
rowSpacing += captionHeight;
|
||||||
|
|
||||||
|
let area = { x: this._x, y: this._y, width: this._width, height: this._height };
|
||||||
|
area.y += closeButtonHeight;
|
||||||
|
area.height -= closeButtonHeight;
|
||||||
|
|
||||||
|
if (!this._currentLayout)
|
||||||
|
this._currentLayout = this._computeLayout(windows, area, rowSpacing, columnSpacing, captionHeight);
|
||||||
|
|
||||||
|
let layout = this._currentLayout;
|
||||||
|
let strategy = layout.strategy;
|
||||||
|
|
||||||
|
if (!this._rectEqual(area, layout.area)) {
|
||||||
|
layout.area = area;
|
||||||
|
strategy.computeScaleAndSpace(layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
return strategy.computeWindowSlots(layout, area);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onCloneSelected : function (clone, time) {
|
_onCloneSelected : function (clone, time) {
|
||||||
|
@ -51,7 +51,6 @@ const WorkspacesView = new Lang.Class({
|
|||||||
this._clipY = 0;
|
this._clipY = 0;
|
||||||
this._clipWidth = 0;
|
this._clipWidth = 0;
|
||||||
this._clipHeight = 0;
|
this._clipHeight = 0;
|
||||||
this._workspaceRatioSpacing = 0;
|
|
||||||
this._spacing = 0;
|
this._spacing = 0;
|
||||||
this._animating = false; // tweening
|
this._animating = false; // tweening
|
||||||
this._scrolling = false; // swipe-scrolling
|
this._scrolling = false; // swipe-scrolling
|
||||||
@ -72,6 +71,7 @@ const WorkspacesView = new Lang.Class({
|
|||||||
this._workspaces[w].actor.reparent(this.actor);
|
this._workspaces[w].actor.reparent(this.actor);
|
||||||
this._workspaces[activeWorkspaceIndex].actor.raise_top();
|
this._workspaces[activeWorkspaceIndex].actor.raise_top();
|
||||||
|
|
||||||
|
this._extraWorkspaces = [];
|
||||||
this._updateExtraWorkspaces();
|
this._updateExtraWorkspaces();
|
||||||
|
|
||||||
// Position/scale the desktop windows and their children after the
|
// Position/scale the desktop windows and their children after the
|
||||||
@ -83,8 +83,6 @@ const WorkspacesView = new Lang.Class({
|
|||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
for (let w = 0; w < this._workspaces.length; w++)
|
for (let w = 0; w < this._workspaces.length; w++)
|
||||||
this._workspaces[w].zoomToOverview();
|
this._workspaces[w].zoomToOverview();
|
||||||
if (!this._extraWorkspaces)
|
|
||||||
return;
|
|
||||||
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
||||||
this._extraWorkspaces[w].zoomToOverview();
|
this._extraWorkspaces[w].zoomToOverview();
|
||||||
}));
|
}));
|
||||||
@ -124,7 +122,6 @@ const WorkspacesView = new Lang.Class({
|
|||||||
if (!this._settings.get_boolean('workspaces-only-on-primary'))
|
if (!this._settings.get_boolean('workspaces-only-on-primary'))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._extraWorkspaces = [];
|
|
||||||
let monitors = Main.layoutManager.monitors;
|
let monitors = Main.layoutManager.monitors;
|
||||||
for (let i = 0; i < monitors.length; i++) {
|
for (let i = 0; i < monitors.length; i++) {
|
||||||
if (i == Main.layoutManager.primaryIndex)
|
if (i == Main.layoutManager.primaryIndex)
|
||||||
@ -139,23 +136,20 @@ const WorkspacesView = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_destroyExtraWorkspaces: function() {
|
_destroyExtraWorkspaces: function() {
|
||||||
if (!this._extraWorkspaces)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (let m = 0; m < this._extraWorkspaces.length; m++)
|
for (let m = 0; m < this._extraWorkspaces.length; m++)
|
||||||
this._extraWorkspaces[m].destroy();
|
this._extraWorkspaces[m].destroy();
|
||||||
this._extraWorkspaces = null;
|
this._extraWorkspaces = [];
|
||||||
},
|
},
|
||||||
|
|
||||||
setGeometry: function(x, y, width, height, spacing) {
|
setGeometry: function(x, y, width, height) {
|
||||||
if (this._x == x && this._y == y &&
|
if (this._x == x && this._y == y &&
|
||||||
this._width == width && this._height == height)
|
this._width == width && this._height == height)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._width = width;
|
this._width = width;
|
||||||
this._height = height;
|
this._height = height;
|
||||||
this._x = x;
|
this._x = x;
|
||||||
this._y = y;
|
this._y = y;
|
||||||
this._workspaceRatioSpacing = spacing;
|
|
||||||
|
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].setGeometry(x, y, width, height);
|
this._workspaces[i].setGeometry(x, y, width, height);
|
||||||
@ -191,8 +185,6 @@ const WorkspacesView = new Lang.Class({
|
|||||||
|
|
||||||
for (let w = 0; w < this._workspaces.length; w++)
|
for (let w = 0; w < this._workspaces.length; w++)
|
||||||
this._workspaces[w].zoomFromOverview();
|
this._workspaces[w].zoomFromOverview();
|
||||||
if (!this._extraWorkspaces)
|
|
||||||
return;
|
|
||||||
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
||||||
this._extraWorkspaces[w].zoomFromOverview();
|
this._extraWorkspaces[w].zoomFromOverview();
|
||||||
},
|
},
|
||||||
@ -204,8 +196,6 @@ const WorkspacesView = new Lang.Class({
|
|||||||
syncStacking: function(stackIndices) {
|
syncStacking: function(stackIndices) {
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].syncStacking(stackIndices);
|
this._workspaces[i].syncStacking(stackIndices);
|
||||||
if (!this._extraWorkspaces)
|
|
||||||
return;
|
|
||||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||||
this._extraWorkspaces[i].syncStacking(stackIndices);
|
this._extraWorkspaces[i].syncStacking(stackIndices);
|
||||||
},
|
},
|
||||||
@ -234,7 +224,7 @@ const WorkspacesView = new Lang.Class({
|
|||||||
|
|
||||||
Tweener.removeTweens(workspace.actor);
|
Tweener.removeTweens(workspace.actor);
|
||||||
|
|
||||||
let y = (w - active) * (this._height + this._spacing + this._workspaceRatioSpacing);
|
let y = (w - active) * (this._height + this._spacing);
|
||||||
|
|
||||||
if (showAnimation) {
|
if (showAnimation) {
|
||||||
let params = { y: y,
|
let params = { y: y,
|
||||||
@ -376,9 +366,6 @@ const WorkspacesView = new Lang.Class({
|
|||||||
this._firstDragMotion = false;
|
this._firstDragMotion = false;
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
this._workspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
||||||
if (!this._extraWorkspaces)
|
|
||||||
return DND.DragMotionResult.CONTINUE;
|
|
||||||
|
|
||||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||||
this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
||||||
}
|
}
|
||||||
@ -392,9 +379,6 @@ const WorkspacesView = new Lang.Class({
|
|||||||
|
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].setReservedSlot(null);
|
this._workspaces[i].setReservedSlot(null);
|
||||||
|
|
||||||
if (!this._extraWorkspaces)
|
|
||||||
return;
|
|
||||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||||
this._extraWorkspaces[i].setReservedSlot(null);
|
this._extraWorkspaces[i].setReservedSlot(null);
|
||||||
},
|
},
|
||||||
@ -541,6 +525,16 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
this._notifyOpacityId = 0;
|
this._notifyOpacityId = 0;
|
||||||
this._swipeScrollBeginId = 0;
|
this._swipeScrollBeginId = 0;
|
||||||
this._swipeScrollEndId = 0;
|
this._swipeScrollEndId = 0;
|
||||||
|
|
||||||
|
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
|
||||||
|
this._settings.connect('changed::dynamic-workspaces',
|
||||||
|
Lang.bind(this, this._updateSwitcherVisibility));
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateSwitcherVisibility: function() {
|
||||||
|
this._thumbnailsBox.actor.visible =
|
||||||
|
this._settings.get_boolean('dynamic-workspaces') ||
|
||||||
|
global.screen.n_workspaces > 1;
|
||||||
},
|
},
|
||||||
|
|
||||||
show: function() {
|
show: function() {
|
||||||
@ -563,6 +557,7 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
|
|
||||||
this._controls.show();
|
this._controls.show();
|
||||||
this._thumbnailsBox.show();
|
this._thumbnailsBox.show();
|
||||||
|
this._updateSwitcherVisibility();
|
||||||
|
|
||||||
this._updateWorkspacesViews();
|
this._updateWorkspacesViews();
|
||||||
|
|
||||||
@ -864,28 +859,23 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
let rtl = (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL);
|
let rtl = (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL);
|
||||||
|
|
||||||
let clipWidth = width - controlsVisible;
|
let clipWidth = width - controlsVisible;
|
||||||
let clipHeight = (fullHeight / fullWidth) * clipWidth;
|
let clipHeight = fullHeight;
|
||||||
let clipX = rtl ? x + controlsVisible : x;
|
let clipX = rtl ? x + controlsVisible : x;
|
||||||
let clipY = y + (fullHeight - clipHeight) / 2;
|
let clipY = y + (fullHeight - clipHeight) / 2;
|
||||||
|
|
||||||
let widthAdjust = this._zoomOut ? controlsNatural : controlsVisible;
|
let widthAdjust = this._zoomOut ? controlsNatural : controlsVisible;
|
||||||
|
widthAdjust += Main.overview._spacing;
|
||||||
width -= widthAdjust;
|
width -= widthAdjust;
|
||||||
if (rtl)
|
if (rtl)
|
||||||
x += widthAdjust;
|
x += widthAdjust;
|
||||||
|
|
||||||
height = (fullHeight / fullWidth) * width;
|
|
||||||
let difference = fullHeight - height;
|
|
||||||
y += difference / 2;
|
|
||||||
|
|
||||||
|
|
||||||
let monitors = Main.layoutManager.monitors;
|
let monitors = Main.layoutManager.monitors;
|
||||||
let m = 0;
|
let m = 0;
|
||||||
for (let i = 0; i < monitors.length; i++) {
|
for (let i = 0; i < monitors.length; i++) {
|
||||||
if (i == this._primaryIndex) {
|
if (i == this._primaryIndex) {
|
||||||
this._workspacesViews[m].setClipRect(clipX, clipY,
|
this._workspacesViews[m].setClipRect(clipX, clipY,
|
||||||
clipWidth, clipHeight);
|
clipWidth, clipHeight);
|
||||||
this._workspacesViews[m].setGeometry(x, y, width, height,
|
this._workspacesViews[m].setGeometry(x, y, width, height);
|
||||||
difference);
|
|
||||||
m++;
|
m++;
|
||||||
} else if (!this._workspacesOnlyOnPrimary) {
|
} else if (!this._workspacesOnlyOnPrimary) {
|
||||||
this._workspacesViews[m].setClipRect(monitors[i].x,
|
this._workspacesViews[m].setClipRect(monitors[i].x,
|
||||||
@ -895,7 +885,7 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
this._workspacesViews[m].setGeometry(monitors[i].x,
|
this._workspacesViews[m].setGeometry(monitors[i].x,
|
||||||
monitors[i].y,
|
monitors[i].y,
|
||||||
monitors[i].width,
|
monitors[i].width,
|
||||||
monitors[i].height, 0);
|
monitors[i].height);
|
||||||
m++;
|
m++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -932,16 +922,17 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
let monitors = Main.layoutManager.monitors;
|
let monitors = Main.layoutManager.monitors;
|
||||||
let m = 0;
|
let m = 0;
|
||||||
for (let i = 0; i < monitors.length; i++) {
|
for (let i = 0; i < monitors.length; i++) {
|
||||||
if (this._workspacesOnlyOnPrimaryChanged &&
|
if (this._workspacesOnlyOnPrimary &&
|
||||||
i != this._primaryIndex)
|
i != this._primaryIndex)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Assume workspaces are only added at the end
|
// Assume workspaces are only added at the end
|
||||||
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
|
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
|
||||||
let metaWorkspace = global.screen.get_workspace_by_index(w);
|
let metaWorkspace = global.screen.get_workspace_by_index(w);
|
||||||
this._workspaces[m++][w] =
|
this._workspaces[m][w] =
|
||||||
new Workspace.Workspace(metaWorkspace, i);
|
new Workspace.Workspace(metaWorkspace, i);
|
||||||
}
|
}
|
||||||
|
m++;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._thumbnailsBox.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
|
this._thumbnailsBox.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
|
||||||
@ -974,6 +965,7 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||||
this._workspacesViews[i].updateWorkspaces(oldNumWorkspaces,
|
this._workspacesViews[i].updateWorkspaces(oldNumWorkspaces,
|
||||||
newNumWorkspaces);
|
newNumWorkspaces);
|
||||||
|
this._updateSwitcherVisibility();
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateZoom : function() {
|
_updateZoom : function() {
|
||||||
|
@ -1 +1,19 @@
|
|||||||
dist_man_MANS = gnome-shell.1
|
XSLTPROC_FLAGS = \
|
||||||
|
--nonet \
|
||||||
|
--stringparam man.output.quietly 1 \
|
||||||
|
--stringparam funcsynopsis.style ansi \
|
||||||
|
--stringparam man.th.extra1.suppress 1 \
|
||||||
|
--stringparam man.authors.section.enabled 0 \
|
||||||
|
--stringparam man.copyright.section.enabled 0
|
||||||
|
|
||||||
|
.xml.1:
|
||||||
|
$(AM_V_GEN) $(XSLTPROC) $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
|
||||||
|
|
||||||
|
man_MANS = \
|
||||||
|
gnome-shell.1
|
||||||
|
|
||||||
|
xml_files = $(man_MANS:.1=.xml)
|
||||||
|
|
||||||
|
EXTRA_DIST = $(xml_files)
|
||||||
|
|
||||||
|
DISTCLEANFILES = $(man_MANS)
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
.\" Copyright (c) 2009, Marcelo Jorge Vieira (metal) <metal@alucinados.com>
|
|
||||||
.\"
|
|
||||||
.\" This is free documentation; you can redistribute it and/or
|
|
||||||
.\" modify it under the terms of the GNU General Public License as
|
|
||||||
.\" published by the Free Software Foundation; either version 2 of
|
|
||||||
.\" the License, or (at your option) any later version.
|
|
||||||
.\"
|
|
||||||
.\" The GNU General Public License's references to "object code"
|
|
||||||
.\" and "executables" are to be interpreted as the output of any
|
|
||||||
.\" document formatting or typesetting system, including
|
|
||||||
.\" intermediate and printed output.
|
|
||||||
.\"
|
|
||||||
.\" This manual is distributed in the hope that it will be useful,
|
|
||||||
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
.\" GNU General Public License for more details.
|
|
||||||
.\"
|
|
||||||
.\" You should have received a copy of the GNU General Public
|
|
||||||
.\" License along with this manual; if not, write to the Free
|
|
||||||
.\" Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
.\" Boston, MA 02111-1301 USA.
|
|
||||||
.TH GNOME-SHELL 1
|
|
||||||
.SH NAME
|
|
||||||
gnome-shell \- Graphical shell for the GNOME desktop
|
|
||||||
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B gnome-shell [options]
|
|
||||||
|
|
||||||
.SH DESCRIPTION
|
|
||||||
GNOME Shell provides core user interface functions for the GNOME 3
|
|
||||||
desktop, like switching to windows and launching applications. GNOME
|
|
||||||
Shell takes advantage of the capabilities of modern graphics hardware
|
|
||||||
and introduces innovative user interface concepts to provide a
|
|
||||||
visually attractive and easy to use experience.
|
|
||||||
|
|
||||||
.SH OPTIONS
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-replace
|
|
||||||
Replace the running window manager
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-sm-disable
|
|
||||||
Disable connection to the session manager
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-sm-client-id=ID
|
|
||||||
Specify session management ID
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-sm-save-file=FILE
|
|
||||||
Initialize session from savefile
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-screen=SCREEN
|
|
||||||
X screen to use
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-d, \-\-display=DISPLAY
|
|
||||||
X display to use
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-sync
|
|
||||||
Make X calls synchronous
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-version
|
|
||||||
Print version and exit
|
|
||||||
.br
|
|
||||||
|
|
||||||
.TP
|
|
||||||
.B \-\-help
|
|
||||||
Display help and exit
|
|
||||||
.br
|
|
||||||
|
|
||||||
.SH BUGS
|
|
||||||
The bug tracker can be reached by visiting the website
|
|
||||||
\fIhttps://bugzilla.gnome.org/buglist.cgi?product=gnome-shell\fR
|
|
||||||
|
|
||||||
Before sending a bug report, please verify that you have the latest
|
|
||||||
version of gnome-shell. Many bugs (major and minor) are fixed at each
|
|
||||||
release, and if yours is out of date, the problem may already have
|
|
||||||
been solved.
|
|
||||||
|
|
||||||
.SH ADDITIONAL INFORMATION
|
|
||||||
|
|
||||||
For further information, visit the website \fIhttp://live.gnome.org/GnomeShell\fR
|
|
159
man/gnome-shell.xml
Normal file
159
man/gnome-shell.xml
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
||||||
|
|
||||||
|
<refentry id="gnome-shell">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gnome-shell</title>
|
||||||
|
<productname>gnome-shell</productname>
|
||||||
|
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>wrote the original gnome-shell man page</contrib>
|
||||||
|
<firstname>Marcelo Jorge</firstname>
|
||||||
|
<surname>Vieira</surname>
|
||||||
|
<email>metal@alucinados.com</email>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gnome-shell</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gnome-shell</refname>
|
||||||
|
<refpurpose>Graphical shell for the GNOME desktop</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gnome-shell <arg choice="opt" rep="repeat">OPTION</arg></command>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>GNOME shell provides core user
|
||||||
|
interface functions for the GNOME 3 desktop, like switching
|
||||||
|
to windows and launching applications. GNOME shell takes
|
||||||
|
advantage of the capabilities of modern graphics hardware
|
||||||
|
and introduces innovative user interface concepts to provide
|
||||||
|
a visually attractive and easy to use experience.</para>
|
||||||
|
|
||||||
|
<para>gnome-shell is a required component of
|
||||||
|
the GNOME desktop, i.e. it is listed in the
|
||||||
|
RequiredComponents field of
|
||||||
|
<filename>/usr/share/gnome-session/sessions/gnome.session</filename>.
|
||||||
|
It is started in the window manager phase of the session.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Options</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-r</option>, <option>--replace</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Replace the running window manager</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--sm-disable</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Disable connection to the session manager</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--sm-client-id=<replaceable>ID</replaceable></option></term>
|
||||||
|
|
||||||
|
<listitem><para>Specify session management <replaceable>ID</replaceable></para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--sm-save-file=<replaceable>FILE</replaceable></option></term>
|
||||||
|
|
||||||
|
<listitem><para>Initialize session from <replaceable>FILE</replaceable></para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--screen=<replaceable>SCREEN</replaceable></option></term>
|
||||||
|
|
||||||
|
<listitem><para>X screen to use</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-d</option>, <option>--display=<replaceable>DISPLAY</replaceable></option></term>
|
||||||
|
|
||||||
|
<listitem><para>X Display to use</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--sync</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Make X calls synchronous</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--version</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Print version and exit</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--help</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Display help and exit</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--mode=<replaceable>MODE</replaceable></option></term>
|
||||||
|
|
||||||
|
<listitem><para>Use a specific mode, e.g. "gdm" for login screen</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--list-modes</option></term>
|
||||||
|
|
||||||
|
<listitem><para>List possible modes and exit</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Files</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<filename>/usr/share/gnome-session/sessions/gnome.session</filename>,
|
||||||
|
<filename>/usr/share/applications/gnome-shell.desktop</filename>.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Bugs</title>
|
||||||
|
|
||||||
|
<para>The bug tracker can be reached by visiting the
|
||||||
|
website <ulink url="https://bugzilla.gnome.org/buglist.cgi?product=gnome-shell">https://bugzilla.gnome.org/buglist.cgi?product=gnome-shell</ulink>.
|
||||||
|
Before sending a bug report, please verify that you have
|
||||||
|
the latest version of gnome-shell. Many bugs (major and
|
||||||
|
minor) are fixed at each release, and if yours is out of
|
||||||
|
date, the problem may already have been solved.</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Additional Information</title>
|
||||||
|
|
||||||
|
<para>For further information, visit the website
|
||||||
|
<ulink url="http://live.gnome.org/GnomeShell">http://live.gnome.org/GnomeShell</ulink>.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
149
po/be.po
149
po/be.po
@ -5,8 +5,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell.master\n"
|
"Project-Id-Version: gnome-shell.master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-26 15:06+0300\n"
|
"PO-Revision-Date: 2012-10-16 12:05+0300\n"
|
||||||
"Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n"
|
"Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n"
|
||||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||||
"Language: be\n"
|
"Language: be\n"
|
||||||
@ -34,6 +34,14 @@ msgstr "Сістэма"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Паказаць абшар апавяшчэнняў"
|
msgstr "Паказаць абшар апавяшчэнняў"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Паказаць усе праграмы"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Адкрыць праграмнае меню"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "Абалонка GNOME"
|
msgstr "Абалонка GNOME"
|
||||||
@ -152,34 +160,43 @@ msgid "Keybinding to open the application menu."
|
|||||||
msgstr "Клавіятурны скарот для адкрыцця праграмнага меню."
|
msgstr "Клавіятурны скарот для адкрыцця праграмнага меню."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Клавіятурны скарот для рэжыму \"Паказаць праграмы\""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
msgid ""
|
||||||
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr "Клавіятурны скарот для рэжыму \"Паказаць праграмы\" у Аглядзе Заняткаў."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Клавіятурны скарот для ўключэння/выключэння абшару апавяшчэнняў"
|
msgstr "Клавіятурны скарот для ўключэння/выключэння абшару апавяшчэнняў"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Клавіятурны скарот для ўключэння/выключэння абшару апавяшчэнняў."
|
msgstr "Клавіятурны скарот для ўключэння/выключэння абшару апавяшчэнняў."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Клавіятурны скарот для ўключэння запісу экрана"
|
msgstr "Клавіятурны скарот для ўключэння запісу экрана"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Клавіятурны скарот для запуску/спынення ўбудаванага запісу экрана."
|
msgstr "Клавіятурны скарот для запуску/спынення ўбудаванага запісу экрана."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Ужываная клавіятура"
|
msgstr "Ужываная клавіятура"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Від ужыванай клавіятуры."
|
msgstr "Від ужыванай клавіятуры."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Частата змены кадраў для запісу скрынкасту."
|
msgstr "Частата змены кадраў для запісу скрынкасту."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -187,11 +204,11 @@ msgstr ""
|
|||||||
"Частата змены кадраў выніковага скрынкасту, запісанага пры дапамозе абалонкі "
|
"Частата змены кадраў выніковага скрынкасту, запісанага пры дапамозе абалонкі "
|
||||||
"GNOME (кадраў на секунду)."
|
"GNOME (кадраў на секунду)."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Канвеер gstreamer для кадавання скрынкастаў"
|
msgstr "Канвеер gstreamer для кадавання скрынкастаў"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -217,11 +234,11 @@ msgstr ""
|
|||||||
"queue ! webmmux\" і запісвае ў WEBM з дапамогай кодэка VP8. %T ўжываецца ў "
|
"queue ! webmmux\" і запісвае ў WEBM з дапамогай кодэка VP8. %T ўжываецца ў "
|
||||||
"якасці замены аптымальнай для сістэмы колькасці ніцяў."
|
"якасці замены аптымальнай для сістэмы колькасці ніцяў."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Пашырэнне файла для захавання скрынкасту"
|
msgstr "Пашырэнне файла для захавання скрынкасту"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -246,11 +263,11 @@ msgstr ""
|
|||||||
"Абярыце пашырэнне, каб настроіць графу з выплыўным спісам, якая знаходзіцца "
|
"Абярыце пашырэнне, каб настроіць графу з выплыўным спісам, якая знаходзіцца "
|
||||||
"вышэй."
|
"вышэй."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Сеанс..."
|
msgstr "Сеанс..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Уваход"
|
msgstr "Уваход"
|
||||||
@ -258,23 +275,23 @@ msgstr "Уваход"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Няма ў спісе?"
|
msgstr "Няма ў спісе?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Скасаваць"
|
msgstr "Скасаваць"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Увайсці"
|
msgstr "Увайсці"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Акно ўваходу"
|
msgstr "Акно ўваходу"
|
||||||
|
|
||||||
@ -283,8 +300,8 @@ msgstr "Акно ўваходу"
|
|||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Праца сістэмы"
|
msgstr "Праца сістэмы"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Прыпыніць камп'ютар"
|
msgstr "Прыпыніць камп'ютар"
|
||||||
|
|
||||||
@ -292,8 +309,8 @@ msgstr "Прыпыніць камп'ютар"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Перазапусціць сістэму"
|
msgstr "Перазапусціць сістэму"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Выключыць камп'ютар"
|
msgstr "Выключыць камп'ютар"
|
||||||
|
|
||||||
@ -344,7 +361,7 @@ msgstr "НАСТРОЙКІ"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Новае акно"
|
msgstr "Новае акно"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Выдаліць са спіса ўпадабанага"
|
msgstr "Выдаліць са спіса ўпадабанага"
|
||||||
|
|
||||||
@ -508,16 +525,16 @@ msgstr "На гэтым тыдні"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "На наступным тыдні"
|
msgstr "На наступным тыдні"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Зменныя прыстасаванні"
|
msgstr "Зменныя прыстасаванні"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Адкрыць у %s"
|
msgstr "Адкрыць у %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Выняць"
|
msgstr "Выняць"
|
||||||
|
|
||||||
@ -888,7 +905,7 @@ msgstr "Рэдагаваць конт"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Невядомая прычына"
|
msgstr "Невядомая прычына"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Паказаць праграмы"
|
msgstr "Паказаць праграмы"
|
||||||
|
|
||||||
@ -896,14 +913,14 @@ msgstr "Паказаць праграмы"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Настройкі даты і часу"
|
msgstr "Настройкі даты і часу"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Адкрыць каляндар"
|
msgstr "Адкрыць каляндар"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e %B, %Y"
|
msgstr "%A, %e %B, %Y"
|
||||||
|
|
||||||
@ -1014,11 +1031,11 @@ msgstr "Усталяваць"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Сцягнуць і ўсталяваць \"%s\" з extensions.gnome.org?"
|
msgstr "Сцягнуць і ўсталяваць \"%s\" з extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "трэй"
|
msgstr "трэй"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Клавіятура"
|
msgstr "Клавіятура"
|
||||||
@ -1071,19 +1088,19 @@ msgstr "Паглядзець выточны код"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Сеціўная старонка"
|
msgstr "Сеціўная старонка"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1081
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Адкрыць"
|
msgstr "Адкрыць"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Выдаліць"
|
msgstr "Выдаліць"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2055
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Абшар апавяшчэнняў"
|
msgstr "Абшар апавяшчэнняў"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2511
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Сістэмная інфармацыя"
|
msgstr "Сістэмная інфармацыя"
|
||||||
|
|
||||||
@ -1147,7 +1164,7 @@ msgstr "Увядзіце загад:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d %B"
|
msgstr "%A, %d %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@ -1155,7 +1172,7 @@ msgstr[0] "%d новае паведамленне"
|
|||||||
msgstr[1] "%d новыя паведамленні"
|
msgstr[1] "%d новыя паведамленні"
|
||||||
msgstr[2] "%d новых паведамленняў"
|
msgstr[2] "%d новых паведамленняў"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1195,7 +1212,7 @@ msgstr "Пароль"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Запомніць пароль"
|
msgstr "Запомніць пароль"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Разблакіраваць"
|
msgstr "Разблакіраваць"
|
||||||
|
|
||||||
@ -1314,7 +1331,7 @@ msgstr "Настройкі клавіятуры"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Настройкі мышы"
|
msgstr "Настройкі мышы"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Настройкі гуку"
|
msgstr "Настройкі гуку"
|
||||||
|
|
||||||
@ -1603,7 +1620,7 @@ msgid "Unknown"
|
|||||||
msgstr "Невядомае"
|
msgstr "Невядомае"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Гучнасць"
|
msgstr "Гучнасць"
|
||||||
|
|
||||||
@ -1611,7 +1628,7 @@ msgstr "Гучнасць"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Мікрафон"
|
msgstr "Мікрафон"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Увайсці іншым карыстальнікам"
|
msgstr "Увайсці іншым карыстальнікам"
|
||||||
|
|
||||||
@ -1639,39 +1656,35 @@ msgstr "Бяздзейны"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Недаступны"
|
msgstr "Недаступны"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Перамяніць карыстальніка"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Перамяніць сеанс"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Апавяшчэнні"
|
msgstr "Апавяшчэнні"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Сістэмныя настройкі"
|
msgstr "Сістэмныя настройкі"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Перамяніць карыстальніка"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Выйсці з сеанса"
|
msgstr "Выйсці з сеанса"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Заблакіраваць"
|
msgstr "Заблакіраваць"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Усталяваць абнаўленні і перазагрузіць камп'ютар"
|
msgstr "Усталяваць абнаўленні і перазагрузіць камп'ютар"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Вам прызначаны стан занятасці для чату"
|
msgstr "Вам прызначаны стан занятасці для чату"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1680,19 +1693,19 @@ msgstr ""
|
|||||||
"сеціўны стан абноўлены інфармацыяй аб тым, што вы можаце не ўбачыць чужых "
|
"сеціўны стан абноўлены інфармацыяй аб тым, што вы можаце не ўбачыць чужых "
|
||||||
"паведамленняў у час."
|
"паведамленняў у час."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Вокны"
|
msgstr "Вокны"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Праграмы"
|
msgstr "Праграмы"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Пошук"
|
msgstr "Пошук"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1701,12 +1714,12 @@ msgstr ""
|
|||||||
"На жаль, на сёння не хапіла мудрасцяў:\n"
|
"На жаль, на сёння не хапіла мудрасцяў:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "Так сказаў Вяшчун %s"
|
msgstr "Так сказаў Вяшчун %s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Ваша ўлюбёнае велікоднае яйка"
|
msgstr "Ваша ўлюбёнае велікоднае яйка"
|
||||||
|
|
||||||
@ -1743,19 +1756,19 @@ msgstr[2] "%u уваходаў"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Сістэмныя гукі"
|
msgstr "Сістэмныя гукі"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Вывесці нумар версіі праграмы"
|
msgstr "Вывесці нумар версіі праграмы"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Рэжым, які выкарыстоўвае GDM для экрана ўваходу"
|
msgstr "Рэжым, які выкарыстоўвае GDM для экрана ўваходу"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "Ужыць асаблівы рэжым, напрыклад, \"gdm\" для экрана ўваходу"
|
msgstr "Ужыць асаблівы рэжым, напрыклад, \"gdm\" для экрана ўваходу"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Вывесці спіс магчымых рэжымаў"
|
msgstr "Вывесці спіс магчымых рэжымаў"
|
||||||
|
|
||||||
|
194
po/de.po
194
po/de.po
@ -19,9 +19,9 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-10-14 16:48+0000\n"
|
"POT-Creation-Date: 2012-11-06 04:39+0000\n"
|
||||||
"PO-Revision-Date: 2012-10-10 23:10+0100\n"
|
"PO-Revision-Date: 2012-11-06 20:04+0100\n"
|
||||||
"Last-Translator: Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>\n"
|
"Last-Translator: Wolfgang Stoeggl <c72578@yahoo.de>\n"
|
||||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -148,56 +148,68 @@ msgstr ""
|
|||||||
"Aufzählung entnommen."
|
"Aufzählung entnommen."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
|
msgstr "Den Menüeintrag »Abmelden« immer im Benutzermenü anzeigen."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
|
msgid ""
|
||||||
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
|
"user, single-session situations."
|
||||||
|
msgstr ""
|
||||||
|
"Dieser Schlüssel überschreibt das automatische Verbergen des Menüeintrags "
|
||||||
|
"»Abmelden« in Einzelbenutzer, Einzelsitzungssituationen."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Wochentag im Kalender anzeigen"
|
msgstr "Wochentag im Kalender anzeigen"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn dieser Wert gesetzt ist, wird der ISO-Wochentag im Kalender angezeigt."
|
"Wenn dieser Wert gesetzt ist, wird der ISO-Wochentag im Kalender angezeigt."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs"
|
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs."
|
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tastenkombination zum Umschalten der Sichtbarkeit des Benachrichtigungsfeldes"
|
"Tastenkombination zum Umschalten der Sichtbarkeit des Benachrichtigungsfeldes"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tastenkombination zum Umschalten der Sichtbarkeit des "
|
"Tastenkombination zum Umschalten der Sichtbarkeit des "
|
||||||
"Benachrichtigungsfeldes."
|
"Benachrichtigungsfeldes."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Tastenkombination zum Umschalten des Bildschirmaufzeichners"
|
msgstr "Tastenkombination zum Umschalten des Bildschirmaufzeichners"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tastenkombination zum Starten/Entfernen des eingebauten "
|
"Tastenkombination zum Starten/Entfernen des eingebauten "
|
||||||
"Bildschirmaufzeichners."
|
"Bildschirmaufzeichners."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Zu verwendende Tastatur"
|
msgstr "Zu verwendende Tastatur"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Der Typ der zu verwendenden Tastatur"
|
msgstr "Der Typ der zu verwendenden Tastatur"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Bildwiederholungsrate zur Aufnahme von Screencasts"
|
msgstr "Bildwiederholungsrate zur Aufnahme von Screencasts"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -206,11 +218,11 @@ msgstr ""
|
|||||||
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
|
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
|
||||||
|
|
||||||
# hmm Enkodieren oder Kodieren?
|
# hmm Enkodieren oder Kodieren?
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
|
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -238,11 +250,11 @@ msgstr ""
|
|||||||
"aufzeichnet. %T wird als Platzhalter für die vermutete optimale Thread-"
|
"aufzeichnet. %T wird als Platzhalter für die vermutete optimale Thread-"
|
||||||
"Anzahl auf dem System verwendet."
|
"Anzahl auf dem System verwendet."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Die Dateiendung zum Speichern des Screencast"
|
msgstr "Die Dateiendung zum Speichern des Screencast"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -303,8 +315,8 @@ msgstr "Anmeldefenster"
|
|||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Ausschalten"
|
msgstr "Ausschalten"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||||
#: ../js/ui/userMenu.js:775
|
#: ../js/ui/userMenu.js:779
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Bereitschaft"
|
msgstr "Bereitschaft"
|
||||||
|
|
||||||
@ -312,8 +324,8 @@ msgstr "Bereitschaft"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Neu starten"
|
msgstr "Neu starten"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||||
#: ../js/ui/userMenu.js:774
|
#: ../js/ui/userMenu.js:778
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Ausschalten"
|
msgstr "Ausschalten"
|
||||||
|
|
||||||
@ -698,35 +710,35 @@ msgstr "Stumm"
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/components/telepathyClient.js:948
|
#: ../js/ui/components/telepathyClient.js:952
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||||
msgstr "Gesendet am <b>%A</b> um <b>%X</b> "
|
msgstr "Gesendet am <b>%A</b> um <b>%X</b> "
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||||
#. shown when you get a chat message in the same year.
|
#. shown when you get a chat message in the same year.
|
||||||
#: ../js/ui/components/telepathyClient.js:954
|
#: ../js/ui/components/telepathyClient.js:958
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||||
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b>"
|
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||||
#. shown when you get a chat message in a different year.
|
#. shown when you get a chat message in a different year.
|
||||||
#: ../js/ui/components/telepathyClient.js:959
|
#: ../js/ui/components/telepathyClient.js:963
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b> %Y"
|
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b> %Y"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/components/telepathyClient.js:988
|
#: ../js/ui/components/telepathyClient.js:992
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s heißt jetzt %s"
|
msgstr "%s heißt jetzt %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1088
|
#: ../js/ui/components/telepathyClient.js:1092
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Einladung zum Betreten von %s"
|
msgstr "Einladung zum Betreten von %s"
|
||||||
@ -734,42 +746,42 @@ msgstr "Einladung zum Betreten von %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. translators: first argument is the name of a contact and the second
|
||||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1096
|
#: ../js/ui/components/telepathyClient.js:1100
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s lädt Sie ein, %s beizutreten"
|
msgstr "%s lädt Sie ein, %s beizutreten"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1098
|
#: ../js/ui/components/telepathyClient.js:1102
|
||||||
#: ../js/ui/components/telepathyClient.js:1177
|
#: ../js/ui/components/telepathyClient.js:1181
|
||||||
#: ../js/ui/components/telepathyClient.js:1240
|
#: ../js/ui/components/telepathyClient.js:1244
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Ablehnen"
|
msgstr "Ablehnen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1099
|
#: ../js/ui/components/telepathyClient.js:1103
|
||||||
#: ../js/ui/components/telepathyClient.js:1178
|
#: ../js/ui/components/telepathyClient.js:1182
|
||||||
#: ../js/ui/components/telepathyClient.js:1241
|
#: ../js/ui/components/telepathyClient.js:1245
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Annehmen"
|
msgstr "Annehmen"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1129
|
#: ../js/ui/components/telepathyClient.js:1133
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Video-Anruf von %s"
|
msgstr "Video-Anruf von %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1132
|
#: ../js/ui/components/telepathyClient.js:1136
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Anruf von %s"
|
msgstr "Anruf von %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1137
|
#: ../js/ui/components/telepathyClient.js:1141
|
||||||
#: ../js/ui/status/bluetooth.js:346
|
#: ../js/ui/status/bluetooth.js:346
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Abweisen"
|
msgstr "Abweisen"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/components/telepathyClient.js:1139
|
#: ../js/ui/components/telepathyClient.js:1143
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Antworten"
|
msgstr "Antworten"
|
||||||
|
|
||||||
@ -778,113 +790,113 @@ msgstr "Antworten"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/components/telepathyClient.js:1171
|
#: ../js/ui/components/telepathyClient.js:1175
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s sendet Ihnen %s"
|
msgstr "%s sendet Ihnen %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/components/telepathyClient.js:1206
|
#: ../js/ui/components/telepathyClient.js:1210
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s bittet um das Recht, Ihre Online-Verfügbarkeit sehen zu dürfen"
|
msgstr "%s bittet um das Recht, Ihre Online-Verfügbarkeit sehen zu dürfen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1298
|
#: ../js/ui/components/telepathyClient.js:1302
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Netzwerkfehler"
|
msgstr "Netzwerkfehler"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1304
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Legitimierung fehlgeschlagen"
|
msgstr "Legitimierung fehlgeschlagen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1302
|
#: ../js/ui/components/telepathyClient.js:1306
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Verschlüsselungsfehler"
|
msgstr "Verschlüsselungsfehler"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1304
|
#: ../js/ui/components/telepathyClient.js:1308
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Zertifikat wurde nicht bereitgestellt"
|
msgstr "Zertifikat wurde nicht bereitgestellt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1306
|
#: ../js/ui/components/telepathyClient.js:1310
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Zertifikat nicht vertrauenswürdig"
|
msgstr "Zertifikat nicht vertrauenswürdig"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1308
|
#: ../js/ui/components/telepathyClient.js:1312
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Zertifikat abgelaufen"
|
msgstr "Zertifikat abgelaufen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1310
|
#: ../js/ui/components/telepathyClient.js:1314
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Zertifikat nicht aktiviert"
|
msgstr "Zertifikat nicht aktiviert"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1312
|
#: ../js/ui/components/telepathyClient.js:1316
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Rechnername des Zertifikats stimmt nicht überein"
|
msgstr "Rechnername des Zertifikats stimmt nicht überein"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1314
|
#: ../js/ui/components/telepathyClient.js:1318
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Fingerabdruck des Zertifikats stimmt nicht überein"
|
msgstr "Fingerabdruck des Zertifikats stimmt nicht überein"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1316
|
#: ../js/ui/components/telepathyClient.js:1320
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Selbstsigniertes Zertifikat"
|
msgstr "Selbstsigniertes Zertifikat"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1318
|
#: ../js/ui/components/telepathyClient.js:1322
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Der Status ist auf »Abgemeldet« gesetzt"
|
msgstr "Der Status ist auf »Abgemeldet« gesetzt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1320
|
#: ../js/ui/components/telepathyClient.js:1324
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Verschlüsselung ist nicht verfügbar"
|
msgstr "Verschlüsselung ist nicht verfügbar"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1322
|
#: ../js/ui/components/telepathyClient.js:1326
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Zertifikat ist ungültig"
|
msgstr "Zertifikat ist ungültig"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1324
|
#: ../js/ui/components/telepathyClient.js:1328
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Verbindungsaufbau wurde verweigert"
|
msgstr "Verbindungsaufbau wurde verweigert"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1326
|
#: ../js/ui/components/telepathyClient.js:1330
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Verbindung kann nicht hergestellt werden"
|
msgstr "Verbindung kann nicht hergestellt werden"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1328
|
#: ../js/ui/components/telepathyClient.js:1332
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Verbindung wurde unterbrochen"
|
msgstr "Verbindung wurde unterbrochen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1330
|
#: ../js/ui/components/telepathyClient.js:1334
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Dieses Konto ist bereits mit dem Server verbunden"
|
msgstr "Dieses Konto ist bereits mit dem Server verbunden"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1332
|
#: ../js/ui/components/telepathyClient.js:1336
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die Verbindung wurde durch eine neue Verbindung mit der gleichen Ressource "
|
"Die Verbindung wurde durch eine neue Verbindung mit der gleichen Ressource "
|
||||||
"ersetzt"
|
"ersetzt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1334
|
#: ../js/ui/components/telepathyClient.js:1338
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Dieses Konto ist bereits auf dem Server vorhanden"
|
msgstr "Dieses Konto ist bereits auf dem Server vorhanden"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1336
|
#: ../js/ui/components/telepathyClient.js:1340
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Der Server ist derzeit überlastet und kann die Verbindung nicht annehmen"
|
"Der Server ist derzeit überlastet und kann die Verbindung nicht annehmen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1338
|
#: ../js/ui/components/telepathyClient.js:1342
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Zertifikat wurde zurückgezogen"
|
msgstr "Zertifikat wurde zurückgezogen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1340
|
#: ../js/ui/components/telepathyClient.js:1344
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das Zertifikat verwendet einen unsicheren Chiffrier-Algorithmus oder ist "
|
"Das Zertifikat verwendet einen unsicheren Chiffrier-Algorithmus oder ist "
|
||||||
"kryptografisch schwach"
|
"kryptografisch schwach"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1342
|
#: ../js/ui/components/telepathyClient.js:1346
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -893,26 +905,26 @@ msgstr ""
|
|||||||
"überschreiten die durch die kryptografische Bibliothek gegebenen "
|
"überschreiten die durch die kryptografische Bibliothek gegebenen "
|
||||||
"Beschränkungen"
|
"Beschränkungen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1344
|
#: ../js/ui/components/telepathyClient.js:1348
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Interner Fehler"
|
msgstr "Interner Fehler"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1358
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "Verbindung zu %s ist fehlgeschlagen"
|
msgstr "Verbindung zu %s ist fehlgeschlagen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1363
|
#: ../js/ui/components/telepathyClient.js:1367
|
||||||
msgid "Reconnect"
|
msgid "Reconnect"
|
||||||
msgstr "Erneut verbinden"
|
msgstr "Erneut verbinden"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1368
|
||||||
msgid "Edit account"
|
msgid "Edit account"
|
||||||
msgstr "Konto bearbeiten"
|
msgstr "Konto bearbeiten"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1409
|
#: ../js/ui/components/telepathyClient.js:1413
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Unbekannter Grund"
|
msgstr "Unbekannter Grund"
|
||||||
|
|
||||||
@ -1095,23 +1107,23 @@ msgstr "Quelle zeigen"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Webseite"
|
msgstr "Webseite"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1081
|
#: ../js/ui/messageTray.js:1084
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Öffnen"
|
msgstr "Öffnen"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1088
|
#: ../js/ui/messageTray.js:1091
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Entfernen"
|
msgstr "Entfernen"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1540
|
#: ../js/ui/messageTray.js:1543
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Benachrichtigungsfeld"
|
msgstr "Benachrichtigungsfeld"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2547
|
#: ../js/ui/messageTray.js:2549
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Systeminformationen"
|
msgstr "Systeminformationen"
|
||||||
|
|
||||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Unbekannt"
|
msgstr "Unbekannt"
|
||||||
@ -1171,18 +1183,18 @@ msgstr "Bitte geben Sie einen Befehl ein:"
|
|||||||
# %B - ausgeschriebener Name des Monats, abhängig von der gesetzten Umgebung
|
# %B - ausgeschriebener Name des Monats, abhängig von der gesetzten Umgebung
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:79
|
#: ../js/ui/screenShield.js:80
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d. %B"
|
msgstr "%A, %d. %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:143
|
#: ../js/ui/screenShield.js:144
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d neue Nachricht"
|
msgstr[0] "%d neue Nachricht"
|
||||||
msgstr[1] "%d neue Nachrichten"
|
msgstr[1] "%d neue Nachrichten"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:145
|
#: ../js/ui/screenShield.js:146
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1638,59 +1650,59 @@ msgstr "Mikrofon"
|
|||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Als anderer Benutzer anmelden"
|
msgstr "Als anderer Benutzer anmelden"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:180
|
#: ../js/ui/userMenu.js:181
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Verfügbar"
|
msgstr "Verfügbar"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:183
|
#: ../js/ui/userMenu.js:184
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Beschäftigt"
|
msgstr "Beschäftigt"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:186
|
#: ../js/ui/userMenu.js:187
|
||||||
msgid "Invisible"
|
msgid "Invisible"
|
||||||
msgstr "Unsichtbar"
|
msgstr "Unsichtbar"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:189
|
#: ../js/ui/userMenu.js:190
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Abwesend"
|
msgstr "Abwesend"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:192
|
#: ../js/ui/userMenu.js:193
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Untätig"
|
msgstr "Untätig"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:195
|
#: ../js/ui/userMenu.js:196
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Nicht verfügbar"
|
msgstr "Nicht verfügbar"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:740
|
#: ../js/ui/userMenu.js:744
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Benachrichtigungen"
|
msgstr "Benachrichtigungen"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:748
|
#: ../js/ui/userMenu.js:752
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Systemeinstellungen"
|
msgstr "Systemeinstellungen"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:756
|
#: ../js/ui/userMenu.js:760
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Benutzer wechseln"
|
msgstr "Benutzer wechseln"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:761
|
#: ../js/ui/userMenu.js:765
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Abmelden"
|
msgstr "Abmelden"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:766
|
#: ../js/ui/userMenu.js:770
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Sperren"
|
msgstr "Sperren"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:781
|
#: ../js/ui/userMenu.js:785
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Aktualisierungen installieren und neustarten"
|
msgstr "Aktualisierungen installieren und neustarten"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:799
|
#: ../js/ui/userMenu.js:803
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Ihr Anwesenheitsstatus wird auf »Beschäftigt« gesetzt"
|
msgstr "Ihr Anwesenheitsstatus wird auf »Beschäftigt« gesetzt"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:800
|
#: ../js/ui/userMenu.js:804
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1777,7 +1789,7 @@ msgstr ""
|
|||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Die möglichen Modi auflisten"
|
msgstr "Die möglichen Modi auflisten"
|
||||||
|
|
||||||
#: ../src/shell-app.c:621
|
#: ../src/shell-app.c:622
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "»%s« konnte nicht gestartet werden"
|
msgstr "»%s« konnte nicht gestartet werden"
|
||||||
|
135
po/el.po
135
po/el.po
@ -4,8 +4,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell.po.master\n"
|
"Project-Id-Version: gnome-shell.po.master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
"POT-Creation-Date: 2012-10-16 20:41+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-25 11:15+0200\n"
|
"PO-Revision-Date: 2012-10-23 15:39+0200\n"
|
||||||
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
|
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
|
||||||
"Language-Team: team@gnome.gr\n"
|
"Language-Team: team@gnome.gr\n"
|
||||||
"Language: el\n"
|
"Language: el\n"
|
||||||
@ -23,7 +23,7 @@ msgstr "Στιγμιότυπα οθόνης"
|
|||||||
|
|
||||||
#: ../data/50-gnome-shell-screenshot.xml.in.h:2
|
#: ../data/50-gnome-shell-screenshot.xml.in.h:2
|
||||||
msgid "Record a screencast"
|
msgid "Record a screencast"
|
||||||
msgstr "Καταγραφή ενός βίντεο παρουσίασης"
|
msgstr "Καταγραφή ενός βίντεο οθόνης"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||||
msgid "System"
|
msgid "System"
|
||||||
@ -182,21 +182,21 @@ msgstr "Ο τύπος του πληκτρολογίου που θα χρησιμ
|
|||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ο ρυθμός καρέ που θα χρησιμοποιηθεί για την καταγραφή του βίντεο παρουσίασης."
|
"Ο ρυθμός καρέ που θα χρησιμοποιηθεί για την καταγραφή του βίντεο οθόνης."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ο ρυθμός καρέ του στιγμιότυπου που παράγεται από τον εγγραφέα βίντεο "
|
"Ο ρυθμός καρέ του στιγμιότυπου που παράγεται από τον εγγραφέα βίντεο οθόνης "
|
||||||
"παρουσίασης του GNOME Shell σε καρέ ανά δευτερόλεπτο."
|
"του GNOME Shell σε καρέ ανά δευτερόλεπτο."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ο δίαυλος του gstreamer που χρησιμοποιήθηκε για την κωδικοποίηση του βίντεο "
|
"Ο δίαυλος του gstreamer που χρησιμοποιήθηκε για την κωδικοποίηση του βίντεο "
|
||||||
"παρουσίασης"
|
"οθόνης"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
@ -229,8 +229,7 @@ msgstr ""
|
|||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Επέκταση αρχείου που θα χρησιμοποιηθεί για την αποθήκευση του βίντεο "
|
"Επέκταση αρχείου που θα χρησιμοποιηθεί για την αποθήκευση του βίντεο οθόνης"
|
||||||
"παρουσίασης"
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -238,7 +237,7 @@ msgid ""
|
|||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
"a different container format."
|
"a different container format."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Το όνομα αρχείου για τα καταγεγραμμένα βίντεο παρουσίασης θα είναι μοναδικό, "
|
"Το όνομα αρχείου για τα καταγεγραμμένα βίντεο οθόνης θα είναι μοναδικό, "
|
||||||
"βασισμένο στην τρέχουσα ημερομηνία και θα χρησιμοποιεί αυτή την επέκταση. Θα "
|
"βασισμένο στην τρέχουσα ημερομηνία και θα χρησιμοποιεί αυτή την επέκταση. Θα "
|
||||||
"πρέπει να αλλάζει όταν γίνεται εγγραφή σε διαφορετικό πρότυπο περιέκτη."
|
"πρέπει να αλλάζει όταν γίνεται εγγραφή σε διαφορετικό πρότυπο περιέκτη."
|
||||||
|
|
||||||
@ -259,11 +258,11 @@ msgstr ""
|
|||||||
"Επιλέξτε μια επέκταση για να την ρυθμίσετε χρησιμοποιώντας το πλαίσιο "
|
"Επιλέξτε μια επέκταση για να την ρυθμίσετε χρησιμοποιώντας το πλαίσιο "
|
||||||
"πολλαπλών επιλογών."
|
"πολλαπλών επιλογών."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Συνεδρία..."
|
msgstr "Συνεδρία..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Σύνδεση"
|
msgstr "Σύνδεση"
|
||||||
@ -271,34 +270,33 @@ msgstr "Σύνδεση"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Δεν είστε στη λίστα;"
|
msgstr "Δεν είστε στη λίστα;"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Ακύρωση"
|
msgstr "Ακύρωση"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Σύνδεση"
|
msgstr "Σύνδεση"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Παράθυρο σύνδεσης"
|
msgstr "Παράθυρο σύνδεσης"
|
||||||
|
|
||||||
#. Translators: accessible name of the power menu in the login screen
|
#. Translators: accessible name of the power menu in the login screen
|
||||||
#: ../js/gdm/powerMenu.js:35
|
#: ../js/gdm/powerMenu.js:35
|
||||||
#| msgid "Power Off"
|
|
||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Ενέργεια"
|
msgstr "Ενέργεια"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Αναστολή"
|
msgstr "Αναστολή"
|
||||||
|
|
||||||
@ -306,10 +304,10 @@ msgstr "Αναστολή"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Επανεκκίνηση"
|
msgstr "Επανεκκίνηση"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Τερματισμός"
|
msgstr "Απενεργοποίηση"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:148
|
#: ../js/gdm/util.js:148
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
@ -358,7 +356,7 @@ msgstr "ΡΥΘΜΙΣΕΙΣ"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Νέο παράθυρο"
|
msgstr "Νέο παράθυρο"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Αφαίρεση από τα αγαπημένα"
|
msgstr "Αφαίρεση από τα αγαπημένα"
|
||||||
|
|
||||||
@ -522,16 +520,16 @@ msgstr "Αυτή η εβδομάδα"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Επόμενη εβδομάδα"
|
msgstr "Επόμενη εβδομάδα"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Αφαιρούμενες συσκευές"
|
msgstr "Αφαιρούμενες συσκευές"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Άνοιγμα με %s"
|
msgstr "Άνοιγμα με %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Εξαγωγή"
|
msgstr "Εξαγωγή"
|
||||||
|
|
||||||
@ -651,7 +649,7 @@ msgstr "Συγνώμη, αυτό δεν λειτούργησε. Παρακαλώ
|
|||||||
#: ../js/ui/components/recorder.js:44
|
#: ../js/ui/components/recorder.js:44
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Screencast from %d %t"
|
msgid "Screencast from %d %t"
|
||||||
msgstr "Βίντεο παρουσίαση από %d %t"
|
msgstr "Βίντεο οθόνης από %d %t"
|
||||||
|
|
||||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||||
#. system-users for now as Empathy does.
|
#. system-users for now as Empathy does.
|
||||||
@ -905,7 +903,7 @@ msgstr "Επεξεργασία λογαριασμού"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Άγνωστος λόγος"
|
msgstr "Άγνωστος λόγος"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Προβολή εφαρμογών"
|
msgstr "Προβολή εφαρμογών"
|
||||||
|
|
||||||
@ -913,14 +911,14 @@ msgstr "Προβολή εφαρμογών"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Ρυθμίσεις ώρας και ημερομηνίας"
|
msgstr "Ρυθμίσεις ώρας και ημερομηνίας"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Άνοιγμα ημερολογίου"
|
msgstr "Άνοιγμα ημερολογίου"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A %B %e, %Y"
|
msgstr "%A %B %e, %Y"
|
||||||
|
|
||||||
@ -967,13 +965,13 @@ msgstr "Αποσύνδεση"
|
|||||||
#: ../js/ui/endSessionDialog.js:81
|
#: ../js/ui/endSessionDialog.js:81
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Τερματισμός"
|
msgstr "Απενεργοποίηση"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:82
|
#: ../js/ui/endSessionDialog.js:82
|
||||||
msgid "Click Power Off to quit these applications and power off the system."
|
msgid "Click Power Off to quit these applications and power off the system."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Πατήστε Τερματισμός για να κλείσετε αυτές τις εφαρμογές και να "
|
"Πατήστε Απενεργοποίηση για να κλείσετε αυτές τις εφαρμογές και να "
|
||||||
"απενεργοποιήσετε το σύστημα."
|
"τερματίσετε το σύστημα."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:84
|
#: ../js/ui/endSessionDialog.js:84
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -994,7 +992,7 @@ msgstr "Επανεκκίνηση"
|
|||||||
#: ../js/ui/endSessionDialog.js:92
|
#: ../js/ui/endSessionDialog.js:92
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Τερματισμός"
|
msgstr "Απενεργοποίηση"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:98
|
#: ../js/ui/endSessionDialog.js:98
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
@ -1027,11 +1025,11 @@ msgstr "Εγκατάσταση"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Λήψη και εγκατάσταση '%s' από το extensions.gnome.org ;"
|
msgstr "Λήψη και εγκατάσταση '%s' από το extensions.gnome.org ;"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "περιοχή"
|
msgstr "περιοχή"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Πληκτρολόγιο"
|
msgstr "Πληκτρολόγιο"
|
||||||
@ -1084,19 +1082,19 @@ msgstr "Προβολή πηγής"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Ιστοσελίδα"
|
msgstr "Ιστοσελίδα"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1081
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Άνοιγμα"
|
msgstr "Άνοιγμα"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Αφαίρεση"
|
msgstr "Αφαίρεση"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2055
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Περιοχή ειδοποιήσεων"
|
msgstr "Περιοχή ειδοποιήσεων"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2511
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Πληροφορίες συστήματος"
|
msgstr "Πληροφορίες συστήματος"
|
||||||
|
|
||||||
@ -1160,14 +1158,14 @@ msgstr "Παρακαλώ πληκτρολογήστε μία εντολή:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %B %d"
|
msgstr "%A, %B %d"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d νέο μήνυμα"
|
msgstr[0] "%d νέο μήνυμα"
|
||||||
msgstr[1] "%d νέα μηνύματα"
|
msgstr[1] "%d νέα μηνύματα"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1206,7 +1204,7 @@ msgstr "Κωδικός"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Απομνημόνευση κωδικού"
|
msgstr "Απομνημόνευση κωδικού"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Ξεκλείδωμα"
|
msgstr "Ξεκλείδωμα"
|
||||||
|
|
||||||
@ -1325,7 +1323,7 @@ msgstr "Ρυθμίσεις πληκτρολογίου"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Ρυθμίσεις ποντικιού"
|
msgstr "Ρυθμίσεις ποντικιού"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Ρυθμίσεις ήχου"
|
msgstr "Ρυθμίσεις ήχου"
|
||||||
|
|
||||||
@ -1610,7 +1608,7 @@ msgid "Unknown"
|
|||||||
msgstr "Άγνωστο"
|
msgstr "Άγνωστο"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Ένταση ήχου"
|
msgstr "Ένταση ήχου"
|
||||||
|
|
||||||
@ -1618,7 +1616,7 @@ msgstr "Ένταση ήχου"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Μικρόφωνο"
|
msgstr "Μικρόφωνο"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Είσοδος ως άλλος χρήστης"
|
msgstr "Είσοδος ως άλλος χρήστης"
|
||||||
|
|
||||||
@ -1646,39 +1644,35 @@ msgstr "Αδρανής"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Μη διαθέσιμος-η"
|
msgstr "Μη διαθέσιμος-η"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Αλλαγή χρήστη"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Αλλαγή συνεδρίας"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Ειδοποιήσεις"
|
msgstr "Ειδοποιήσεις"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Ρυθμίσεις συστήματος"
|
msgstr "Ρυθμίσεις συστήματος"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Αλλαγή χρήστη"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Αποσύνδεση"
|
msgstr "Αποσύνδεση"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Κλείδωμα"
|
msgstr "Κλείδωμα"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Εγκατάσταση ενημερώσεων & επανεκκίνηση"
|
msgstr "Εγκατάσταση ενημερώσεων & επανεκκίνηση"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Η κατάσταση συνομιλίας σας θα ορισθεί σε απασχολημένος"
|
msgstr "Η κατάσταση συνομιλίας σας θα ορισθεί σε απασχολημένος"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1699,7 +1693,7 @@ msgstr "Εφαρμογές"
|
|||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Αναζήτηση"
|
msgstr "Αναζήτηση"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1708,12 +1702,12 @@ msgstr ""
|
|||||||
"Συγγνώμη, κανένα απόφθεγμα για εσάς σήμερα:\n"
|
"Συγγνώμη, κανένα απόφθεγμα για εσάς σήμερα:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "%s ο Προφήτης λέει"
|
msgstr "%s ο Προφήτης λέει"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Το αγαπημένο σας Easter Egg"
|
msgstr "Το αγαπημένο σας Easter Egg"
|
||||||
|
|
||||||
@ -1748,20 +1742,20 @@ msgstr[1] "%u είσοδοι"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Ήχοι συστήματος"
|
msgstr "Ήχοι συστήματος"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Εκτύπωση έκδοσης"
|
msgstr "Εκτύπωση έκδοσης"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Λειτουργία που απαιτείται από το GDM για την οθόνη σύνδεσης"
|
msgstr "Λειτουργία που απαιτείται από το GDM για την οθόνη σύνδεσης"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Χρησιμοποιήστε μια συγκεκριμένη λειτουργία, π.χ \"gdm\" για την οθόνη εισόδου"
|
"Χρησιμοποιήστε μια συγκεκριμένη λειτουργία, π.χ \"gdm\" για την οθόνη εισόδου"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Λίστα πιθανών λειτουργιών"
|
msgstr "Λίστα πιθανών λειτουργιών"
|
||||||
|
|
||||||
@ -1790,6 +1784,9 @@ msgstr "Προεπιλογή"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Το παράθυρο πιστοποίησης έκλεισε από τον χρήστη"
|
msgstr "Το παράθυρο πιστοποίησης έκλεισε από τον χρήστη"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "Αλλαγή συνεδρίας"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "απενεργοποιημένοι πάροχοι OpenSearch"
|
#~ msgstr "απενεργοποιημένοι πάροχοι OpenSearch"
|
||||||
|
|
||||||
|
159
po/es.po
159
po/es.po
@ -10,8 +10,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell.master\n"
|
"Project-Id-Version: gnome-shell.master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-25 10:26+0200\n"
|
"PO-Revision-Date: 2012-10-16 11:06+0200\n"
|
||||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
@ -37,6 +37,16 @@ msgstr "Sistema"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Mostrar la bandeja de mensajes"
|
msgstr "Mostrar la bandeja de mensajes"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
#| msgid "Show Applications"
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Mostrar todas las aplicaciones"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
#| msgid "Keybinding to open the application menu"
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Abrir el menú de la aplicación"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "GNOME Shell"
|
msgstr "GNOME Shell"
|
||||||
@ -155,34 +165,47 @@ msgid "Keybinding to open the application menu."
|
|||||||
msgstr "Asociación de teclas para abrir el menú de la aplicación."
|
msgstr "Asociación de teclas para abrir el menú de la aplicación."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
#| msgid "Keybinding to open the application menu"
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Asociación de teclas para la vista «Mostrar aplicaciones»"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
#| msgid "Keybinding to open the application menu."
|
||||||
|
msgid ""
|
||||||
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr ""
|
||||||
|
"Asociación de teclas para abrir la vista «Mostrar aplicaciones» de la vista "
|
||||||
|
"de actividades."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes"
|
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes."
|
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Asociación de teclas cambiar el grabador de pantalla"
|
msgstr "Asociación de teclas cambiar el grabador de pantalla"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Asociación de teclas para iniciar/detener el grabador de pantalla."
|
msgstr "Asociación de teclas para iniciar/detener el grabador de pantalla."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Qué teclado usar"
|
msgstr "Qué teclado usar"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "El tipo de teclado que usar."
|
msgstr "El tipo de teclado que usar."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Tasa de fotogramas usada para grabar «screencast»."
|
msgstr "Tasa de fotogramas usada para grabar «screencast»."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -190,11 +213,11 @@ msgstr ""
|
|||||||
"La tasa de fotogramas de la grabación resultante grabada por el grabador de "
|
"La tasa de fotogramas de la grabación resultante grabada por el grabador de "
|
||||||
"«screencast» de GNOME Shell, en fotogramas por segundo."
|
"«screencast» de GNOME Shell, en fotogramas por segundo."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "La tubería de gstreamer usada para codificar el «screencast»"
|
msgstr "La tubería de gstreamer usada para codificar el «screencast»"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -220,11 +243,11 @@ msgstr ""
|
|||||||
"threads=%T ! queue ! webmmux» y graba en WEBM usando el códec VP8. Se usa %T "
|
"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."
|
"como marcador de posición para el número de hilos óptimos en el sistema."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Extensión de archivo que usar para almacenar los «screencast»"
|
msgstr "Extensión de archivo que usar para almacenar los «screencast»"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -248,11 +271,11 @@ msgid "Select an extension to configure using the combobox above."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Seleccione una extensión que configurar usando la caja combinada de arriba."
|
"Seleccione una extensión que configurar usando la caja combinada de arriba."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Sesión…"
|
msgstr "Sesión…"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Iniciar sesión"
|
msgstr "Iniciar sesión"
|
||||||
@ -260,34 +283,33 @@ msgstr "Iniciar sesión"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "¿No está en la lista?"
|
msgstr "¿No está en la lista?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Iniciar sesión"
|
msgstr "Iniciar sesión"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Ventana de inicio de sesión"
|
msgstr "Ventana de inicio de sesión"
|
||||||
|
|
||||||
#. Translators: accessible name of the power menu in the login screen
|
#. Translators: accessible name of the power menu in the login screen
|
||||||
#: ../js/gdm/powerMenu.js:35
|
#: ../js/gdm/powerMenu.js:35
|
||||||
#| msgid "Power Off"
|
|
||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Energía"
|
msgstr "Energía"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspender"
|
msgstr "Suspender"
|
||||||
|
|
||||||
@ -295,8 +317,8 @@ msgstr "Suspender"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Reiniciar"
|
msgstr "Reiniciar"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Apagar"
|
msgstr "Apagar"
|
||||||
|
|
||||||
@ -347,7 +369,7 @@ msgstr "CONFIGURACIÓN"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Ventana nueva"
|
msgstr "Ventana nueva"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Quitar de los favoritos"
|
msgstr "Quitar de los favoritos"
|
||||||
|
|
||||||
@ -511,16 +533,16 @@ msgstr "Esta semana"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "La semana que viene"
|
msgstr "La semana que viene"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Dispositivos extraíbles"
|
msgstr "Dispositivos extraíbles"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Abrir con %s"
|
msgstr "Abrir con %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Expulsar"
|
msgstr "Expulsar"
|
||||||
|
|
||||||
@ -894,7 +916,7 @@ msgstr "Editar cuenta"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Razón desconocida"
|
msgstr "Razón desconocida"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Mostrar aplicaciones"
|
msgstr "Mostrar aplicaciones"
|
||||||
|
|
||||||
@ -902,14 +924,14 @@ msgstr "Mostrar aplicaciones"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Ajustes de hora y fecha"
|
msgstr "Ajustes de hora y fecha"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Abrir calendario"
|
msgstr "Abrir calendario"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e de %B de %Y"
|
msgstr "%A, %e de %B de %Y"
|
||||||
|
|
||||||
@ -1013,11 +1035,11 @@ msgstr "Instalar"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
|
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "bandeja"
|
msgstr "bandeja"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Teclado"
|
msgstr "Teclado"
|
||||||
@ -1070,19 +1092,19 @@ msgstr "Ver fuente"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Página web"
|
msgstr "Página web"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1081
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Abrir"
|
msgstr "Abrir"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Quitar"
|
msgstr "Quitar"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2055
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Bandeja de mensajes"
|
msgstr "Bandeja de mensajes"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2511
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Información del sistema"
|
msgstr "Información del sistema"
|
||||||
|
|
||||||
@ -1146,14 +1168,14 @@ msgstr "Introduzca un comando:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d de %B"
|
msgstr "%A, %d de %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d mensaje nuevo"
|
msgstr[0] "%d mensaje nuevo"
|
||||||
msgstr[1] "%d mensajes nuevos"
|
msgstr[1] "%d mensajes nuevos"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1192,7 +1214,7 @@ msgstr "Contraseña"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Recordar contraseña"
|
msgstr "Recordar contraseña"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Desbloquear"
|
msgstr "Desbloquear"
|
||||||
|
|
||||||
@ -1310,7 +1332,7 @@ msgstr "Configuración del teclado"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Ajustes del ratón…"
|
msgstr "Ajustes del ratón…"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Configuración del sonido"
|
msgstr "Configuración del sonido"
|
||||||
|
|
||||||
@ -1595,7 +1617,7 @@ msgid "Unknown"
|
|||||||
msgstr "Desconocido"
|
msgstr "Desconocido"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volumen"
|
msgstr "Volumen"
|
||||||
|
|
||||||
@ -1603,7 +1625,7 @@ msgstr "Volumen"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Micrófono"
|
msgstr "Micrófono"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Iniciar sesión como otro usuario"
|
msgstr "Iniciar sesión como otro usuario"
|
||||||
|
|
||||||
@ -1631,39 +1653,35 @@ msgstr "Inactivo"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "No disponible"
|
msgstr "No disponible"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Cambiar de usuario"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Cambiar de sesión"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Notificaciones"
|
msgstr "Notificaciones"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Configuración del sistema"
|
msgstr "Configuración del sistema"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Cambiar de usuario"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Cerrar la sesión"
|
msgstr "Cerrar la sesión"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Bloquear"
|
msgstr "Bloquear"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Instalar actualizaciones y reiniciar"
|
msgstr "Instalar actualizaciones y reiniciar"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Su estado del chat se establecerá a «ocupado»"
|
msgstr "Su estado del chat se establecerá a «ocupado»"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1672,19 +1690,19 @@ msgstr ""
|
|||||||
"chat. Su estado en línea se ha ajustado para que otros sepan que puede no "
|
"chat. Su estado en línea se ha ajustado para que otros sepan que puede no "
|
||||||
"leer sus mensajes."
|
"leer sus mensajes."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Ventanas"
|
msgstr "Ventanas"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicaciones"
|
msgstr "Aplicaciones"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Buscar"
|
msgstr "Buscar"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1693,12 +1711,12 @@ msgstr ""
|
|||||||
"Hoy no tiene ningún mensaje:\n"
|
"Hoy no tiene ningún mensaje:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "%s el oráculo dice"
|
msgstr "%s el oráculo dice"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Su mensaje oculto favorito"
|
msgstr "Su mensaje oculto favorito"
|
||||||
|
|
||||||
@ -1733,21 +1751,21 @@ msgstr[1] "%u entradas"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sonidos del sistema"
|
msgstr "Sonidos del sistema"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Imprimir versión"
|
msgstr "Imprimir versión"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Modo usado por GDM para la pantalla de inicio"
|
msgstr "Modo usado por GDM para la pantalla de inicio"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Usar un modo específico, por ejemplo, «gdm» para la pantalla de inicio de "
|
"Usar un modo específico, por ejemplo, «gdm» para la pantalla de inicio de "
|
||||||
"sesión"
|
"sesión"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Listar los modos posibles"
|
msgstr "Listar los modos posibles"
|
||||||
|
|
||||||
@ -1776,6 +1794,9 @@ msgstr "Predeterminada"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "El usuario rechazó el diálogo de autenticación"
|
msgstr "El usuario rechazó el diálogo de autenticación"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "Cambiar de sesión"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "proveedores OpenSearch desactivados"
|
#~ msgstr "proveedores OpenSearch desactivados"
|
||||||
|
|
||||||
|
22
po/fa.po
22
po/fa.po
@ -708,7 +708,7 @@ msgstr "ارسال در <b>%A</b>, <b>%B %d</b>, %Y"
|
|||||||
#: ../js/ui/components/telepathyClient.js:988
|
#: ../js/ui/components/telepathyClient.js:988
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s با عنوان %s شناخته میشود"
|
msgstr "%s با عنوان %s شناخته میشود"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
@ -723,7 +723,7 @@ msgstr "دعوتنامه به %s"
|
|||||||
#: ../js/ui/components/telepathyClient.js:1096
|
#: ../js/ui/components/telepathyClient.js:1096
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s از شما دعوت میکند که به %s بپیوندید"
|
msgstr "%s از شما دعوت میکند که به %s بپیوندید"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1098
|
#: ../js/ui/components/telepathyClient.js:1098
|
||||||
#: ../js/ui/components/telepathyClient.js:1177
|
#: ../js/ui/components/telepathyClient.js:1177
|
||||||
@ -767,13 +767,13 @@ msgstr "پاسخگویی"
|
|||||||
#: ../js/ui/components/telepathyClient.js:1171
|
#: ../js/ui/components/telepathyClient.js:1171
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s در حال ارسال %s به شما است"
|
msgstr "%s در حال ارسال %s به شما است"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/components/telepathyClient.js:1206
|
#: ../js/ui/components/telepathyClient.js:1206
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s اجازه دسترسی برای دیدن زمانهایی که شما برخط هستید را دارد"
|
msgstr "%s اجازه دسترسی برای دیدن زمانهایی که شما برخط هستید را دارد"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1298
|
#: ../js/ui/components/telepathyClient.js:1298
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
@ -938,8 +938,8 @@ msgstr ""
|
|||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s will be logged out automatically in %d second."
|
msgid "%s will be logged out automatically in %d second."
|
||||||
msgid_plural "%s will be logged out automatically in %d seconds."
|
msgid_plural "%s will be logged out automatically in %d seconds."
|
||||||
msgstr[0] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
|
msgstr[0] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
|
||||||
msgstr[1] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
|
msgstr[1] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:70
|
#: ../js/ui/endSessionDialog.js:70
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -1698,7 +1698,7 @@ msgstr ""
|
|||||||
#: ../js/ui/wanda.js:121
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "%s پیشگو میگوید"
|
msgstr "%s پیشگو میگوید"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:162
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
@ -1852,16 +1852,16 @@ msgstr "محاوره تایید هویت از طرف کاربر رد شد"
|
|||||||
#~ msgstr "شبکه"
|
#~ msgstr "شبکه"
|
||||||
|
|
||||||
#~ msgid "%s is online."
|
#~ msgid "%s is online."
|
||||||
#~ msgstr "%s بر خط است."
|
#~ msgstr "%s بر خط است."
|
||||||
|
|
||||||
#~ msgid "%s is offline."
|
#~ msgid "%s is offline."
|
||||||
#~ msgstr "%s برون خط است."
|
#~ msgstr "%s برون خط است."
|
||||||
|
|
||||||
#~ msgid "%s is away."
|
#~ msgid "%s is away."
|
||||||
#~ msgstr "%s غایب است."
|
#~ msgstr "%s غایب است."
|
||||||
|
|
||||||
#~ msgid "%s is busy."
|
#~ msgid "%s is busy."
|
||||||
#~ msgstr "%s مشغول است."
|
#~ msgstr "%s مشغول است."
|
||||||
|
|
||||||
#~ msgid "Hidden"
|
#~ msgid "Hidden"
|
||||||
#~ msgstr "نامرئی"
|
#~ msgstr "نامرئی"
|
||||||
|
146
po/gl.po
146
po/gl.po
@ -11,8 +11,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-09-25 10:47+0200\n"
|
"POT-Creation-Date: 2012-10-16 13:35+0200\n"
|
||||||
"PO-Revision-Date: 2012-09-25 10:48+0200\n"
|
"PO-Revision-Date: 2012-10-16 14:22+0200\n"
|
||||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||||
"Language-Team: gnome-l10n-gl@gnome.org\n"
|
"Language-Team: gnome-l10n-gl@gnome.org\n"
|
||||||
"Language: gl\n"
|
"Language: gl\n"
|
||||||
@ -39,6 +39,14 @@ msgstr "Sistema"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Mostrar a bandexa de mensaxes"
|
msgstr "Mostrar a bandexa de mensaxes"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Mostrar todos os aplicativos"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Abrir o menú de aplicativo"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "GNOME Shell"
|
msgstr "GNOME Shell"
|
||||||
@ -156,35 +164,46 @@ msgid "Keybinding to open the application menu."
|
|||||||
msgstr "Combinación de teclas para abrir o menú de aplicativo."
|
msgstr "Combinación de teclas para abrir o menú de aplicativo."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Combinación de teclas para abrir a vista «Mostrar aplicativos»"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
msgid ""
|
||||||
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr ""
|
||||||
|
"Combinación de teclas para abrir a vista \"Mostrar aplicativos\" da Vista xera "
|
||||||
|
"de Actividades."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes"
|
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes."
|
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Combinación de teclas para trocar a gravadora de pantalla"
|
msgstr "Combinación de teclas para trocar a gravadora de pantalla"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Combinación de teclas para iniciar/deter a gravadora de pantalla incrustada."
|
"Combinación de teclas para iniciar/deter a gravadora de pantalla incrustada."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Que teclado usar"
|
msgstr "Que teclado usar"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "O tipo de teclado a usar."
|
msgstr "O tipo de teclado a usar."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Taxa de marcos usada para gravar «screencast»."
|
msgstr "Taxa de marcos usada para gravar «screencast»."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -192,11 +211,11 @@ msgstr ""
|
|||||||
"A taxa de marcos da grabación resultante grabada polo grabador de "
|
"A taxa de marcos da grabación resultante grabada polo grabador de "
|
||||||
"«screencast» de GNOME Shell, en marcos por segundo."
|
"«screencast» de GNOME Shell, en marcos por segundo."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "A tubería de gstreamer usada para codificar o «screenast»."
|
msgstr "A tubería de gstreamer usada para codificar o «screenast»."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -222,11 +241,11 @@ msgstr ""
|
|||||||
"queue ! webmmux» e grava en WEBM usando o códec VP8. Úsase %T como marcador "
|
"queue ! webmmux» e grava en WEBM usando o códec VP8. Úsase %T como marcador "
|
||||||
"de posición para o número de fillos óptimos no sistema."
|
"de posición para o número de fillos óptimos no sistema."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Extensión de ficheiro que usar para almacenar os «screencast»"
|
msgstr "Extensión de ficheiro que usar para almacenar os «screencast»"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -250,11 +269,11 @@ msgid "Select an extension to configure using the combobox above."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Seleccione unha extensión que configurar usando a caixa combinada de arriba."
|
"Seleccione unha extensión que configurar usando a caixa combinada de arriba."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Sesión…"
|
msgstr "Sesión…"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Iniciar sesión"
|
msgstr "Iniciar sesión"
|
||||||
@ -262,23 +281,23 @@ msgstr "Iniciar sesión"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Non está na lista?"
|
msgstr "Non está na lista?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Iniciar sesión"
|
msgstr "Iniciar sesión"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Xanela de inicio de sesión"
|
msgstr "Xanela de inicio de sesión"
|
||||||
|
|
||||||
@ -287,8 +306,8 @@ msgstr "Xanela de inicio de sesión"
|
|||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Apagar"
|
msgstr "Apagar"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspender"
|
msgstr "Suspender"
|
||||||
|
|
||||||
@ -296,8 +315,8 @@ msgstr "Suspender"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Reiniciar"
|
msgstr "Reiniciar"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Apagar"
|
msgstr "Apagar"
|
||||||
|
|
||||||
@ -348,7 +367,7 @@ msgstr "CONFIGURACIÓN"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Xanela nova"
|
msgstr "Xanela nova"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Retirar dos marcadores"
|
msgstr "Retirar dos marcadores"
|
||||||
|
|
||||||
@ -512,16 +531,16 @@ msgstr "Esta semana"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "A vindeira semana"
|
msgstr "A vindeira semana"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Dispositivos extraíbeis"
|
msgstr "Dispositivos extraíbeis"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Abrir con %s"
|
msgstr "Abrir con %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Expulsar"
|
msgstr "Expulsar"
|
||||||
|
|
||||||
@ -895,7 +914,7 @@ msgstr "Editar conta"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Razón descoñecida"
|
msgstr "Razón descoñecida"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Mostrar aplicativos"
|
msgstr "Mostrar aplicativos"
|
||||||
|
|
||||||
@ -903,14 +922,14 @@ msgstr "Mostrar aplicativos"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Preferencias de data e hora"
|
msgstr "Preferencias de data e hora"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Abrir o calendario"
|
msgstr "Abrir o calendario"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%a, %e de %B, %Y"
|
msgstr "%a, %e de %B, %Y"
|
||||||
|
|
||||||
@ -1078,11 +1097,11 @@ msgstr "Abrir"
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Retirar"
|
msgstr "Retirar"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2088
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Bandexa de mensaxes"
|
msgstr "Bandexa de mensaxes"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2551
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Información do sistema"
|
msgstr "Información do sistema"
|
||||||
|
|
||||||
@ -1146,14 +1165,14 @@ msgstr "Escriba unha orde:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d de %B"
|
msgstr "%A, %d de %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d mensaxe nova"
|
msgstr[0] "%d mensaxe nova"
|
||||||
msgstr[1] "%d mensaxes novas"
|
msgstr[1] "%d mensaxes novas"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1192,7 +1211,7 @@ msgstr "Contrasinal"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Lembrar o contrasinal"
|
msgstr "Lembrar o contrasinal"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Desbloquear"
|
msgstr "Desbloquear"
|
||||||
|
|
||||||
@ -1310,7 +1329,7 @@ msgstr "Preferencias do teclado"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Preferencias do rato"
|
msgstr "Preferencias do rato"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Preferencias do son"
|
msgstr "Preferencias do son"
|
||||||
|
|
||||||
@ -1595,7 +1614,7 @@ msgid "Unknown"
|
|||||||
msgstr "Descoñecido"
|
msgstr "Descoñecido"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volume"
|
msgstr "Volume"
|
||||||
|
|
||||||
@ -1603,7 +1622,7 @@ msgstr "Volume"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Micrófono"
|
msgstr "Micrófono"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Iniciar sesión como outro usuario"
|
msgstr "Iniciar sesión como outro usuario"
|
||||||
|
|
||||||
@ -1631,39 +1650,35 @@ msgstr "Inactivo"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Non dispoñíbel"
|
msgstr "Non dispoñíbel"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Cambiar de usuario"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Cambiar de sesión"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Notificacións"
|
msgstr "Notificacións"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Preferencias do sistema"
|
msgstr "Preferencias do sistema"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Cambiar de usuario"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Saír da sesión"
|
msgstr "Saír da sesión"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Bloquear"
|
msgstr "Bloquear"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Instalar actualizacións e reiniciar"
|
msgstr "Instalar actualizacións e reiniciar"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "O seu estado de conversa definirase como «ocupado»"
|
msgstr "O seu estado de conversa definirase como «ocupado»"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1672,19 +1687,19 @@ msgstr ""
|
|||||||
"conversa. O seu estado de conexión axustouse para que outros saiban que non "
|
"conversa. O seu estado de conexión axustouse para que outros saiban que non "
|
||||||
"quere ver as súas mensaxes."
|
"quere ver as súas mensaxes."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Xanelas"
|
msgstr "Xanelas"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicativos"
|
msgstr "Aplicativos"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Buscar"
|
msgstr "Buscar"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1693,12 +1708,12 @@ msgstr ""
|
|||||||
"Hoxe non ten ningunha mensaxe:\n"
|
"Hoxe non ten ningunha mensaxe:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "%s o oráculo dí"
|
msgstr "%s o oráculo dí"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "A súa mensaxe oculta favorita"
|
msgstr "A súa mensaxe oculta favorita"
|
||||||
|
|
||||||
@ -1733,21 +1748,21 @@ msgstr[1] "%u entradas"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sons do sistema"
|
msgstr "Sons do sistema"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Imprimir versión"
|
msgstr "Imprimir versión"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Modo usado por GDM para a pantalla de inicio"
|
msgstr "Modo usado por GDM para a pantalla de inicio"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de "
|
"Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de "
|
||||||
"sesión"
|
"sesión"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Listar os modos posíbeis"
|
msgstr "Listar os modos posíbeis"
|
||||||
|
|
||||||
@ -1776,6 +1791,9 @@ msgstr "Predeterminado"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "O usuario rexeitou o diálogo de autenticación"
|
msgstr "O usuario rexeitou o diálogo de autenticación"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "Cambiar de sesión"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "fornecedores OpenSearch desactivados"
|
#~ msgstr "fornecedores OpenSearch desactivados"
|
||||||
|
|
||||||
|
154
po/id.po
154
po/id.po
@ -10,8 +10,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-25 09:53+0700\n"
|
"PO-Revision-Date: 2012-10-16 07:11+0700\n"
|
||||||
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
|
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
|
||||||
"Language-Team: Indonesian <gnome@i15n.org>\n"
|
"Language-Team: Indonesian <gnome@i15n.org>\n"
|
||||||
"Language: id\n"
|
"Language: id\n"
|
||||||
@ -20,7 +20,7 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
"X-Generator: Poedit 1.5.3\n"
|
"X-Generator: Poedit 1.5.4\n"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
|
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
|
||||||
msgid "Screenshots"
|
msgid "Screenshots"
|
||||||
@ -38,6 +38,14 @@ msgstr "Sistem"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Tampilkan baki pesan"
|
msgstr "Tampilkan baki pesan"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Tampilkan semua aplikasi"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Buka menu aplikasi"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "GNOME Shell"
|
msgstr "GNOME Shell"
|
||||||
@ -155,34 +163,45 @@ msgid "Keybinding to open the application menu."
|
|||||||
msgstr "Kombinasi tombol untuk membuka menu aplikasi."
|
msgstr "Kombinasi tombol untuk membuka menu aplikasi."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Kombinasi tombol untuk membuka tilikan \"Tampilkan Aplikasi\""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
msgid ""
|
||||||
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr ""
|
||||||
|
"Kombinasi tombol untuk membuka tilikan Ringkasan Aktivitas \"Tampilkan "
|
||||||
|
"Aplikasi\"."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Kombinasi tombol untuk kenampakan baki pesan"
|
msgstr "Kombinasi tombol untuk kenampakan baki pesan"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Kombinasi tombol untuk kenampakan baki pesan."
|
msgstr "Kombinasi tombol untuk kenampakan baki pesan."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Kombinasi tombol untuk perekaman layar"
|
msgstr "Kombinasi tombol untuk perekaman layar"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Kombinasi tombol mulai/menghentikan perekam layar bawaan."
|
msgstr "Kombinasi tombol mulai/menghentikan perekam layar bawaan."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Papan tik mana yang akan dipakai"
|
msgstr "Papan tik mana yang akan dipakai"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Jenis papan tik yang akan dipakai."
|
msgstr "Jenis papan tik yang akan dipakai."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Laju gambar untuk menyimpan tangkapan layar."
|
msgstr "Laju gambar untuk menyimpan tangkapan layar."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -190,11 +209,11 @@ msgstr ""
|
|||||||
"Laju frame dari hasil screencast yang direkam oleh perekam screencast GNOME "
|
"Laju frame dari hasil screencast yang direkam oleh perekam screencast GNOME "
|
||||||
"Shell dalam frame per detik."
|
"Shell dalam frame per detik."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Jalur pipa gstreamer yang dipakai untuk mengode screencast"
|
msgstr "Jalur pipa gstreamer yang dipakai untuk mengode screencast"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -220,11 +239,11 @@ msgstr ""
|
|||||||
"dan merekam ke WEBM memakai kodek VP8. %T digunakan sebagai pewakil untuk "
|
"dan merekam ke WEBM memakai kodek VP8. %T digunakan sebagai pewakil untuk "
|
||||||
"perkiraan jumlah thread optimal pada sistem."
|
"perkiraan jumlah thread optimal pada sistem."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Ekstensi berkas untuk menyimpan tangkapan layar"
|
msgstr "Ekstensi berkas untuk menyimpan tangkapan layar"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -247,11 +266,11 @@ msgstr "Ekstensi"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "Pilih ekstensi yang ingin dikonfigurasi pada kotak di atas."
|
msgstr "Pilih ekstensi yang ingin dikonfigurasi pada kotak di atas."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Sesi..."
|
msgstr "Sesi..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Masuk"
|
msgstr "Masuk"
|
||||||
@ -259,34 +278,33 @@ msgstr "Masuk"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Tak masuk daftar?"
|
msgstr "Tak masuk daftar?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Batal"
|
msgstr "Batal"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Masuk"
|
msgstr "Masuk"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Jendela Log Masuk"
|
msgstr "Jendela Log Masuk"
|
||||||
|
|
||||||
#. Translators: accessible name of the power menu in the login screen
|
#. Translators: accessible name of the power menu in the login screen
|
||||||
#: ../js/gdm/powerMenu.js:35
|
#: ../js/gdm/powerMenu.js:35
|
||||||
#| msgid "Power Off"
|
|
||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Daya"
|
msgstr "Daya"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspensi"
|
msgstr "Suspensi"
|
||||||
|
|
||||||
@ -294,8 +312,8 @@ msgstr "Suspensi"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Nyalakan Ulang"
|
msgstr "Nyalakan Ulang"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Matikan"
|
msgstr "Matikan"
|
||||||
|
|
||||||
@ -346,7 +364,7 @@ msgstr "PENGATURAN"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Jendela Baru"
|
msgstr "Jendela Baru"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Hapus dari Favorit"
|
msgstr "Hapus dari Favorit"
|
||||||
|
|
||||||
@ -510,16 +528,16 @@ msgstr "Minggu ini"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Minggu depan"
|
msgstr "Minggu depan"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Perangkat Yang Dapat Dicabut"
|
msgstr "Perangkat Yang Dapat Dicabut"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Buka dengan %s"
|
msgstr "Buka dengan %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Keluarkan"
|
msgstr "Keluarkan"
|
||||||
|
|
||||||
@ -891,7 +909,7 @@ msgstr "Sunting Akun"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Alasan yang tidak diketahui"
|
msgstr "Alasan yang tidak diketahui"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Tampilkan Aplikasi"
|
msgstr "Tampilkan Aplikasi"
|
||||||
|
|
||||||
@ -899,14 +917,14 @@ msgstr "Tampilkan Aplikasi"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Pengaturan Waktu dan Tanggal"
|
msgstr "Pengaturan Waktu dan Tanggal"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Buka Kalender"
|
msgstr "Buka Kalender"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e %B %Y"
|
msgstr "%A, %e %B %Y"
|
||||||
|
|
||||||
@ -1005,11 +1023,11 @@ msgstr "Pasang"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Unduh dan pasang '%s' dari extensions.gnome.org?"
|
msgstr "Unduh dan pasang '%s' dari extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "baki"
|
msgstr "baki"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Papan Ketik"
|
msgstr "Papan Ketik"
|
||||||
@ -1062,19 +1080,19 @@ msgstr "Tilik Sumber"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Halaman Web"
|
msgstr "Halaman Web"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1081
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Buka"
|
msgstr "Buka"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Hapus"
|
msgstr "Hapus"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2055
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Baki Pesan"
|
msgstr "Baki Pesan"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2511
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informasi Sistem"
|
msgstr "Informasi Sistem"
|
||||||
|
|
||||||
@ -1139,13 +1157,13 @@ msgstr "Ketikkan perintah:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d %B"
|
msgstr "%A, %d %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d pesan baru"
|
msgstr[0] "%d pesan baru"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1183,7 +1201,7 @@ msgstr "Sandi"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Ingat Sandi"
|
msgstr "Ingat Sandi"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Buka Kunci"
|
msgstr "Buka Kunci"
|
||||||
|
|
||||||
@ -1301,7 +1319,7 @@ msgstr "Pengaturan Papan Ketik"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Pengaturan Tetikus"
|
msgstr "Pengaturan Tetikus"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Pengaturan Suara"
|
msgstr "Pengaturan Suara"
|
||||||
|
|
||||||
@ -1582,7 +1600,7 @@ msgid "Unknown"
|
|||||||
msgstr "Tak Dikenal"
|
msgstr "Tak Dikenal"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volume"
|
msgstr "Volume"
|
||||||
|
|
||||||
@ -1590,7 +1608,7 @@ msgstr "Volume"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Masuk sebagai pengguna lain"
|
msgstr "Masuk sebagai pengguna lain"
|
||||||
|
|
||||||
@ -1618,39 +1636,35 @@ msgstr "Menganggur"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Tak tersedia"
|
msgstr "Tak tersedia"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Ganti Pengguna"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Pindah Sesi"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Pemberitahuan"
|
msgstr "Pemberitahuan"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Pengaturan Sistem"
|
msgstr "Pengaturan Sistem"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Ganti Pengguna"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Keluar"
|
msgstr "Keluar"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Kunci"
|
msgstr "Kunci"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Pasang Pemutakhiran & Jalankan Ulang"
|
msgstr "Pasang Pemutakhiran & Jalankan Ulang"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Status obrolan Anda akan ditata ke sibuk"
|
msgstr "Status obrolan Anda akan ditata ke sibuk"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1659,19 +1673,19 @@ msgstr ""
|
|||||||
"telah disesuaikan untuk memberitahu pihak lain bahwa Anda mungkin tak "
|
"telah disesuaikan untuk memberitahu pihak lain bahwa Anda mungkin tak "
|
||||||
"melihat pesan mereka."
|
"melihat pesan mereka."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Jendela"
|
msgstr "Jendela"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplikasi"
|
msgstr "Aplikasi"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Cari"
|
msgstr "Cari"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1680,12 +1694,12 @@ msgstr ""
|
|||||||
"Maaf, tidak ada kata-kata bijak bagi Anda hari ini:\n"
|
"Maaf, tidak ada kata-kata bijak bagi Anda hari ini:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "%s sang Peramal berkata"
|
msgstr "%s sang Peramal berkata"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Easter Egg kesukaan Anda"
|
msgstr "Easter Egg kesukaan Anda"
|
||||||
|
|
||||||
@ -1718,19 +1732,19 @@ msgstr[0] "%u Masukan"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Suara Sistem"
|
msgstr "Suara Sistem"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Versi Cetak"
|
msgstr "Versi Cetak"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Mode yang dipakai oleh layar log masuk GDM"
|
msgstr "Mode yang dipakai oleh layar log masuk GDM"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
|
msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Menampilkan mode yang mungkin"
|
msgstr "Menampilkan mode yang mungkin"
|
||||||
|
|
||||||
|
153
po/ja.po
153
po/ja.po
@ -12,9 +12,9 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
"POT-Creation-Date: 2012-10-16 12:22+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-25 09:10+0900\n"
|
"PO-Revision-Date: 2012-10-16 10:53+0900\n"
|
||||||
"Last-Translator: Jiro Matsuzawa <jmatsuzawa@gnome.org>\n"
|
"Last-Translator: Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>\n"
|
||||||
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
|
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -39,6 +39,14 @@ msgstr "システム"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "メッセージトレイを表示する"
|
msgstr "メッセージトレイを表示する"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "すべてのアプリケーションを表示"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "アプリケーションメニューを開く"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "GNOME Shell"
|
msgstr "GNOME Shell"
|
||||||
@ -121,51 +129,59 @@ msgid "Keybinding to open the application menu."
|
|||||||
msgstr "アプリケーションメニューを開くためのキーバインドです。"
|
msgstr "アプリケーションメニューを開くためのキーバインドです。"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "「アプリケーションの表示」のビューを開くキーバインド"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr "アクティビティで「アプリケーションの表示」のビューを開くキーバインドです。"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "メッセージトレイの表示・非表示を切り替えるキーバインド"
|
msgstr "メッセージトレイの表示・非表示を切り替えるキーバインド"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "メッセージトレイを表示したり非表示にしたりするのを切り替えるキーバインドです。"
|
msgstr "メッセージトレイを表示したり非表示にしたりするのを切り替えるキーバインドです。"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "スクリーンレコーダー切り替えのキーバインド"
|
msgstr "スクリーンレコーダー切り替えのキーバインド"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "内蔵のスクリーンレコーダーを起動したり止めたりするキーバインドです。"
|
msgstr "内蔵のスクリーンレコーダーを起動したり止めたりするキーバインドです。"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "使いたいキーボードの種類"
|
msgstr "使いたいキーボードの種類"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "使いたいキーボードの種類です。"
|
msgstr "使いたいキーボードの種類です。"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "スクリーンキャスト録画のフレームレート"
|
msgstr "スクリーンキャスト録画のフレームレート"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
||||||
msgstr "GNOME Shell のスクリーンキャストレコーダーで録画するスクリーンキャストの 1秒あたりのフレーム数です。"
|
msgstr "GNOME Shell のスクリーンキャストレコーダーで録画するスクリーンキャストの 1秒あたりのフレーム数です。"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "スクリーンキャストのエンコードに使用する Gstreamer パイプライン"
|
msgstr "スクリーンキャストのエンコードに使用する Gstreamer パイプライン"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, 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 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
|
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
|
||||||
msgstr "録画したものをエンコードするための Gstreamer パイプラインを設定します。構文は gst-launch のものに準拠します。パイプラインは未接続の録画用 sink pad を持つようにしてください。パイプラインは通常未接続の source pad を持ち、ファイルへ出力データを書き込みますが、出力方法については独自に定義することもできます。shout2send プラグインやその類似プラグインを経由して icecast サーバーへ出力データを送信するときは、この方法をとります。値が設定されていないか、空の場合は、既定のパイプライン 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' が使用され、VP8 コーデックを使用した WebM 形式で録画します。 '%T' はシステムの最適スレッド数の推量値を示すプレースホルダーです。"
|
msgstr "録画したものをエンコードするための Gstreamer パイプラインを設定します。構文は gst-launch のものに準拠します。パイプラインは未接続の録画用 sink pad を持つようにしてください。パイプラインは通常未接続の source pad を持ち、ファイルへ出力データを書き込みますが、出力方法については独自に定義することもできます。shout2send プラグインやその類似プラグインを経由して icecast サーバーへ出力データを送信するときは、この方法をとります。値が設定されていないか、空の場合は、既定のパイプライン 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' が使用され、VP8 コーデックを使用した WebM 形式で録画します。 '%T' はシステムの最適スレッド数の推量値を示すプレースホルダーです。"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "ファイルに保存するスクリーンキャストのファイル拡張子"
|
msgstr "ファイルに保存するスクリーンキャストのファイル拡張子"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
||||||
msgstr "録画したスクリーンキャストをファイルに保存する際は、日付を基にした固有の名前とこの拡張子をファイル名として使用します。異なる形式で録画するときは拡張子を変更する必要があります。"
|
msgstr "録画したスクリーンキャストをファイルに保存する際は、日付を基にした固有の名前とこの拡張子をファイル名として使用します。異なる形式で録画するときは拡張子を変更する必要があります。"
|
||||||
|
|
||||||
@ -182,11 +198,11 @@ msgstr "拡張機能"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "設定する拡張機能を上部のコンボボックスから選択してください。"
|
msgstr "設定する拡張機能を上部のコンボボックスから選択してください。"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "セッション..."
|
msgstr "セッション..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "サインイン"
|
msgstr "サインイン"
|
||||||
@ -194,23 +210,23 @@ msgstr "サインイン"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "アカウントが見つかりませんか?"
|
msgstr "アカウントが見つかりませんか?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "キャンセル"
|
msgstr "キャンセル"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "サインイン"
|
msgstr "サインイン"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "ログインウィンドウ"
|
msgstr "ログインウィンドウ"
|
||||||
|
|
||||||
@ -219,8 +235,8 @@ msgstr "ログインウィンドウ"
|
|||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "電源"
|
msgstr "電源"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "サスペンド"
|
msgstr "サスペンド"
|
||||||
|
|
||||||
@ -228,8 +244,8 @@ msgstr "サスペンド"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "再起動"
|
msgstr "再起動"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "電源オフ"
|
msgstr "電源オフ"
|
||||||
|
|
||||||
@ -280,7 +296,7 @@ msgstr "設定"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "新しいウィンドウで開く"
|
msgstr "新しいウィンドウで開く"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "お気に入りから削除"
|
msgstr "お気に入りから削除"
|
||||||
|
|
||||||
@ -444,16 +460,16 @@ msgstr "今週"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "来週"
|
msgstr "来週"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "リムーバブルデバイス"
|
msgstr "リムーバブルデバイス"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "%s で開く"
|
msgstr "%s で開く"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "取り出し"
|
msgstr "取り出し"
|
||||||
|
|
||||||
@ -814,7 +830,7 @@ msgstr "アカウントの編集"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "原因不明"
|
msgstr "原因不明"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "アプリケーションの表示"
|
msgstr "アプリケーションの表示"
|
||||||
|
|
||||||
@ -822,14 +838,14 @@ msgstr "アプリケーションの表示"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "日時の設定"
|
msgstr "日時の設定"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "カレンダーを開く"
|
msgstr "カレンダーを開く"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%Y年%B%e日 (%a)"
|
msgstr "%Y年%B%e日 (%a)"
|
||||||
|
|
||||||
@ -926,11 +942,11 @@ msgstr "インストール"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "extensions.gnome.org から '%s' をダウンロードしてインストールしますか?"
|
msgstr "extensions.gnome.org から '%s' をダウンロードしてインストールしますか?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "トレイ"
|
msgstr "トレイ"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "キーボード"
|
msgstr "キーボード"
|
||||||
@ -983,19 +999,19 @@ msgstr "ソースの表示"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "ウェブページ"
|
msgstr "ウェブページ"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1081
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "開く"
|
msgstr "開く"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "削除"
|
msgstr "削除"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2055
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "メッセージトレイ"
|
msgstr "メッセージトレイ"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2511
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "システム情報"
|
msgstr "システム情報"
|
||||||
|
|
||||||
@ -1059,13 +1075,13 @@ msgstr "コマンド:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%B%d日 %A"
|
msgstr "%B%d日 %A"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d 件の新しいメッセージ"
|
msgstr[0] "%d 件の新しいメッセージ"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1103,7 +1119,7 @@ msgstr "パスワード"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "パスワードを保存"
|
msgstr "パスワードを保存"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "ロック解除"
|
msgstr "ロック解除"
|
||||||
|
|
||||||
@ -1221,7 +1237,7 @@ msgstr "キーボードの設定"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "マウスの設定"
|
msgstr "マウスの設定"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "サウンドの設定"
|
msgstr "サウンドの設定"
|
||||||
|
|
||||||
@ -1502,7 +1518,7 @@ msgid "Unknown"
|
|||||||
msgstr "不明なデバイス"
|
msgstr "不明なデバイス"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "音量"
|
msgstr "音量"
|
||||||
|
|
||||||
@ -1510,7 +1526,7 @@ msgstr "音量"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "マイク"
|
msgstr "マイク"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "他のユーザーでログイン"
|
msgstr "他のユーザーでログイン"
|
||||||
|
|
||||||
@ -1538,55 +1554,51 @@ msgstr "待機中"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "オフライン"
|
msgstr "オフライン"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "ユーザーの切り替え"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "セッションの切り替え"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "通知"
|
msgstr "通知"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "システム設定"
|
msgstr "システム設定"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "ユーザーの切り替え"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "ログアウト"
|
msgstr "ログアウト"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "ロック"
|
msgstr "ロック"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "更新のインストールと再起動"
|
msgstr "更新のインストールと再起動"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "取り込み中に設定されます"
|
msgstr "取り込み中に設定されます"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
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."
|
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 "チャットなどの通知メッセージが表示されなくなります。オンライン状態が変更され、あなたがメッセージに目を通せない状態にあることを、他の人が知ることができます。"
|
msgstr "チャットなどの通知メッセージが表示されなくなります。オンライン状態が変更され、あなたがメッセージに目を通せない状態にあることを、他の人が知ることができます。"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "ウィンドウ"
|
msgstr "ウィンドウ"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "アプリケーション"
|
msgstr "アプリケーション"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "検索"
|
msgstr "検索"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1595,12 +1607,12 @@ msgstr ""
|
|||||||
"すまない、今日は賢言がないのだ:\n"
|
"すまない、今日は賢言がないのだ:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "預言者 %s 曰く"
|
msgstr "預言者 %s 曰く"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "あなたの好きなイースターエッグ"
|
msgstr "あなたの好きなイースターエッグ"
|
||||||
|
|
||||||
@ -1633,19 +1645,19 @@ msgstr[0] "入力数: %u"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "システムのサウンド"
|
msgstr "システムのサウンド"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "バージョンを表示"
|
msgstr "バージョンを表示"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "ログイン画面で GDM が使用するモード"
|
msgstr "ログイン画面で GDM が使用するモード"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "指定したモードを使用する (例: ログイン画面用の \"gdm\")"
|
msgstr "指定したモードを使用する (例: ログイン画面用の \"gdm\")"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "使用可能なモードを一覧表示する"
|
msgstr "使用可能なモードを一覧表示する"
|
||||||
|
|
||||||
@ -1674,6 +1686,9 @@ msgstr "既定"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "認証ダイアログはユーザーに拒否されました"
|
msgstr "認証ダイアログはユーザーに拒否されました"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "セッションの切り替え"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "OpenSearch プロバイダーを無効にする"
|
#~ msgstr "OpenSearch プロバイダーを無効にする"
|
||||||
|
|
||||||
|
419
po/nb.po
419
po/nb.po
@ -6,10 +6,10 @@
|
|||||||
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
|
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell 3.5.x\n"
|
"Project-Id-Version: gnome-shell 3.7.x\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-10-11 20:24+0200\n"
|
"POT-Creation-Date: 2012-11-05 19:06+0100\n"
|
||||||
"PO-Revision-Date: 2012-10-11 20:25+0200\n"
|
"PO-Revision-Date: 2012-11-05 19:10+0100\n"
|
||||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
@ -34,6 +34,14 @@ msgstr "System"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Vis meldingstrau"
|
msgstr "Vis meldingstrau"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Vis alle programmer"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Åpne programmenyen"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "GNOME Shell"
|
msgstr "GNOME Shell"
|
||||||
@ -128,50 +136,71 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
|
msgid ""
|
||||||
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
|
"user, single-session situations."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Vis dato for uken i kalender"
|
msgstr "Vis dato for uken i kalender"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "Viser ISO-ukedato i kalenderen hvis «true»."
|
msgstr "Viser ISO-ukedato i kalenderen hvis «true»."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Tastaturbinding som åpner programmenyen"
|
msgstr "Tastaturbinding som åpner programmenyen"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Tastaturbinding som åpner programmenyen."
|
msgstr "Tastaturbinding som åpner programmenyen."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Tastaturbinding som åpner programmenyen"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr "Tastaturbinding som åpner programmenyen."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrau"
|
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrau"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrauet."
|
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrauet."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Tastaturbinding som slår av/på skjermopptak"
|
msgstr "Tastaturbinding som slår av/på skjermopptak"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Tastaturbinding som starter/stopper innebygget opptak av skjerm."
|
msgstr "Tastaturbinding som starter/stopper innebygget opptak av skjerm."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Tastatur som skal brukes"
|
msgstr "Tastatur som skal brukes"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Type tastatur som skal brukes."
|
msgstr "Type tastatur som skal brukes."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
|
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -179,11 +208,11 @@ msgstr ""
|
|||||||
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
|
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
|
||||||
"skjermvideoopptaker i bilder per sekund."
|
"skjermvideoopptaker i bilder per sekund."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
|
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
#, fuzzy, no-c-format
|
#, fuzzy, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -200,11 +229,11 @@ msgstr ""
|
|||||||
"Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som "
|
"Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som "
|
||||||
"brukes for gst-launch. Røret må ha en..."
|
"brukes for gst-launch. Røret må ha en..."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Filendelse i bruk ved lagring av skjermvideo"
|
msgstr "Filendelse i bruk ved lagring av skjermvideo"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -214,6 +243,37 @@ msgstr ""
|
|||||||
"og bruke denne filendelsen. Den bør endres når du gjør opptak til et nytt "
|
"og bruke denne filendelsen. Den bør endres når du gjør opptak til et nytt "
|
||||||
"oppbevaringsformat."
|
"oppbevaringsformat."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||||
|
msgid "Attach modal dialog to the parent window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
|
msgid ""
|
||||||
|
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||||
|
msgid "Arrangement of buttons on the titlebar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
|
msgid ""
|
||||||
|
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
||||||
|
"GNOME Shell."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||||
|
msgid "Workspaces are managed dynamically"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||||
|
msgid "Workspaces only on primary monitor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:124
|
#: ../js/extensionPrefs/main.js:124
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
@ -227,11 +287,11 @@ msgstr "Utvidelse"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "Velg en utvidelse som skal konfigureres med komboboksen over."
|
msgstr "Velg en utvidelse som skal konfigureres med komboboksen over."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:529
|
#: ../js/gdm/loginDialog.js:560
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Økt …"
|
msgstr "Økt …"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:677
|
#: ../js/gdm/loginDialog.js:704
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Logg inn"
|
msgstr "Logg inn"
|
||||||
@ -239,56 +299,56 @@ msgstr "Logg inn"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:736
|
#: ../js/gdm/loginDialog.js:764
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Ikke listet?"
|
msgstr "Ikke listet?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:906 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:171
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Avbryt"
|
msgstr "Avbryt"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:894
|
#: ../js/gdm/loginDialog.js:911
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Logg inn"
|
msgstr "Logg inn"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1215
|
#: ../js/gdm/loginDialog.js:1237
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Innloggingsvindu"
|
msgstr "Innloggingsvindu"
|
||||||
|
|
||||||
#. Translators: accessible name of the power menu in the login screen
|
#. Translators: accessible name of the power menu in the login screen
|
||||||
#: ../js/gdm/powerMenu.js:35
|
#: ../js/gdm/powerMenu.js:36
|
||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Strøm"
|
msgstr "Strøm"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:667 ../js/ui/userMenu.js:671
|
||||||
#: ../js/ui/userMenu.js:775
|
#: ../js/ui/userMenu.js:782
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Hvilemodus"
|
msgstr "Hvilemodus"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:94
|
#: ../js/gdm/powerMenu.js:98
|
||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Start på nytt"
|
msgstr "Start på nytt"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:669
|
||||||
#: ../js/ui/userMenu.js:774
|
#: ../js/ui/userMenu.js:671 ../js/ui/userMenu.js:781
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Slå av"
|
msgstr "Slå av"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:148
|
#: ../js/gdm/util.js:151
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
msgstr "Autentiseringsfeil"
|
msgstr "Autentiseringsfeil"
|
||||||
|
|
||||||
#. Translators: this message is shown below the password entry field
|
#. Translators: this message is shown below the password entry field
|
||||||
#. to indicate the user can swipe their finger instead
|
#. to indicate the user can swipe their finger instead
|
||||||
#: ../js/gdm/util.js:265
|
#: ../js/gdm/util.js:268
|
||||||
msgid "(or swipe finger)"
|
msgid "(or swipe finger)"
|
||||||
msgstr "(eller dra finger)"
|
msgstr "(eller dra finger)"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:290
|
#: ../js/gdm/util.js:293
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(f.eks. bruker eller %s)"
|
msgstr "(f.eks. bruker eller %s)"
|
||||||
@ -338,7 +398,7 @@ msgstr "Legg til i favoritter"
|
|||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "%s ble lagt til i dine favoritter."
|
msgstr "%s ble lagt til i dine favoritter."
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:118
|
#: ../js/ui/appFavorites.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s ble fjernet fra dine favoritter."
|
msgstr "%s ble fjernet fra dine favoritter."
|
||||||
@ -457,48 +517,48 @@ msgid "S"
|
|||||||
msgstr "Lø"
|
msgstr "Lø"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events
|
#. Translators: Text to show if there are no events
|
||||||
#: ../js/ui/calendar.js:699
|
#: ../js/ui/calendar.js:700
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Ingenting planlagt"
|
msgstr "Ingenting planlagt"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
#: ../js/ui/calendar.js:715
|
#: ../js/ui/calendar.js:716
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A %B %d"
|
msgstr "%A %B %d"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
#: ../js/ui/calendar.js:718
|
#: ../js/ui/calendar.js:719
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A %B %d, %Y"
|
msgstr "%A %B %d, %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:728
|
#: ../js/ui/calendar.js:729
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "I dag"
|
msgstr "I dag"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:732
|
#: ../js/ui/calendar.js:733
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "I morgen"
|
msgstr "I morgen"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:743
|
#: ../js/ui/calendar.js:744
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "Denne uken"
|
msgstr "Denne uken"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:751
|
#: ../js/ui/calendar.js:752
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Neste uke"
|
msgstr "Neste uke"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:297
|
#: ../js/ui/components/autorunManager.js:295
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Avtagbare enheter"
|
msgstr "Avtagbare enheter"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:594
|
#: ../js/ui/components/autorunManager.js:591
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Åpne med %s"
|
msgstr "Åpne med %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:620
|
#: ../js/ui/components/autorunManager.js:617
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Løs ut"
|
msgstr "Løs ut"
|
||||||
|
|
||||||
@ -652,38 +712,42 @@ msgstr "Fjern demping"
|
|||||||
msgid "Mute"
|
msgid "Mute"
|
||||||
msgstr "Demp"
|
msgstr "Demp"
|
||||||
|
|
||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#: ../js/ui/components/telepathyClient.js:945
|
||||||
#. locale, without seconds.
|
|
||||||
#: ../js/ui/components/telepathyClient.js:948
|
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
msgid "<b>%H:%M</b> on Yesterday"
|
||||||
msgstr "Sendt <b>%X</b> på <b>%A</b>"
|
msgstr "<b>%H.%M</b> i går"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
#. Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday
|
||||||
#. shown when you get a chat message in the same year.
|
#: ../js/ui/components/telepathyClient.js:951
|
||||||
#: ../js/ui/components/telepathyClient.js:954
|
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
msgid "<b>%H:%M</b> on <b>%A</b>"
|
||||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>"
|
msgstr "<b>%H.%M</b> på <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
#. Translators: this is a time format in the style of "14:30 on Wednesday, May 25",
|
||||||
#. shown when you get a chat message in a different year.
|
#. shown when you get a chat message in the same year
|
||||||
#: ../js/ui/components/telepathyClient.js:959
|
#: ../js/ui/components/telepathyClient.js:957
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>"
|
||||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>, %Y"
|
msgstr "<b>%H.%M</b>, <b>%A</b>, <b>%B</b> <b>%d</b>"
|
||||||
|
|
||||||
|
#. Translators: this is a time format in the style of "14:30 on Wednesday, May 25, 2012",
|
||||||
|
#. shown when you get a chat message in a different year
|
||||||
|
#: ../js/ui/components/telepathyClient.js:962
|
||||||
|
#, no-c-format
|
||||||
|
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>, %Y"
|
||||||
|
msgstr "<b>%H.%M</b>, <b>%A</b>, <b>%B</b> <b>%d</b>, %Y"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/components/telepathyClient.js:988
|
#: ../js/ui/components/telepathyClient.js:990
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s er nå kjent som %s"
|
msgstr "%s er nå kjent som %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1088
|
#: ../js/ui/components/telepathyClient.js:1089
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Invitasjon til %s"
|
msgstr "Invitasjon til %s"
|
||||||
@ -691,42 +755,42 @@ msgstr "Invitasjon til %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. translators: first argument is the name of a contact and the second
|
||||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1096
|
#: ../js/ui/components/telepathyClient.js:1097
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s inviterer deg til å bli med i %s"
|
msgstr "%s inviterer deg til å bli med i %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1098
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1177
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1240
|
|
||||||
msgid "Decline"
|
|
||||||
msgstr "Avslå"
|
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1099
|
#: ../js/ui/components/telepathyClient.js:1099
|
||||||
#: ../js/ui/components/telepathyClient.js:1178
|
#: ../js/ui/components/telepathyClient.js:1178
|
||||||
#: ../js/ui/components/telepathyClient.js:1241
|
#: ../js/ui/components/telepathyClient.js:1241
|
||||||
|
msgid "Decline"
|
||||||
|
msgstr "Avslå"
|
||||||
|
|
||||||
|
#: ../js/ui/components/telepathyClient.js:1100
|
||||||
|
#: ../js/ui/components/telepathyClient.js:1179
|
||||||
|
#: ../js/ui/components/telepathyClient.js:1242
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Godta"
|
msgstr "Godta"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1129
|
#: ../js/ui/components/telepathyClient.js:1130
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Videosamtale fra %s"
|
msgstr "Videosamtale fra %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1132
|
#: ../js/ui/components/telepathyClient.js:1133
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Samtale fra %s"
|
msgstr "Samtale fra %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1137
|
#: ../js/ui/components/telepathyClient.js:1138
|
||||||
#: ../js/ui/status/bluetooth.js:346
|
#: ../js/ui/status/bluetooth.js:346
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Avvis"
|
msgstr "Avvis"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/components/telepathyClient.js:1139
|
#: ../js/ui/components/telepathyClient.js:1140
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Svar"
|
msgstr "Svar"
|
||||||
|
|
||||||
@ -735,110 +799,110 @@ msgstr "Svar"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/components/telepathyClient.js:1171
|
#: ../js/ui/components/telepathyClient.js:1172
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s sender deg %s"
|
msgstr "%s sender deg %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/components/telepathyClient.js:1206
|
#: ../js/ui/components/telepathyClient.js:1207
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
|
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1298
|
#: ../js/ui/components/telepathyClient.js:1299
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Nettverksfeil"
|
msgstr "Nettverksfeil"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1301
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Autentisering feilet"
|
msgstr "Autentisering feilet"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1302
|
#: ../js/ui/components/telepathyClient.js:1303
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Feil ved kryptering"
|
msgstr "Feil ved kryptering"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1304
|
#: ../js/ui/components/telepathyClient.js:1305
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Sertifikat ikke oppgitt"
|
msgstr "Sertifikat ikke oppgitt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1306
|
#: ../js/ui/components/telepathyClient.js:1307
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Stoler ikke på sertifikatet"
|
msgstr "Stoler ikke på sertifikatet"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1308
|
#: ../js/ui/components/telepathyClient.js:1309
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Sertifikatet er utløpt"
|
msgstr "Sertifikatet er utløpt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1310
|
#: ../js/ui/components/telepathyClient.js:1311
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Sertifikatet er ikke aktivert"
|
msgstr "Sertifikatet er ikke aktivert"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1312
|
#: ../js/ui/components/telepathyClient.js:1313
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Feil vertsnavn for sertifikat"
|
msgstr "Feil vertsnavn for sertifikat"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1314
|
#: ../js/ui/components/telepathyClient.js:1315
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Feil fingeravtrykk for sertifikat"
|
msgstr "Feil fingeravtrykk for sertifikat"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1316
|
#: ../js/ui/components/telepathyClient.js:1317
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Sertifikatet er selvsignert"
|
msgstr "Sertifikatet er selvsignert"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1318
|
#: ../js/ui/components/telepathyClient.js:1319
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Status er satt til frakoblet"
|
msgstr "Status er satt til frakoblet"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1320
|
#: ../js/ui/components/telepathyClient.js:1321
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Kryptering er ikke tilgjengelig"
|
msgstr "Kryptering er ikke tilgjengelig"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1322
|
#: ../js/ui/components/telepathyClient.js:1323
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Sertifikatet er ugyldig"
|
msgstr "Sertifikatet er ugyldig"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1324
|
#: ../js/ui/components/telepathyClient.js:1325
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Tilkobling ble nektet"
|
msgstr "Tilkobling ble nektet"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1326
|
#: ../js/ui/components/telepathyClient.js:1327
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Tilkobling kan ikke etableres"
|
msgstr "Tilkobling kan ikke etableres"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1328
|
#: ../js/ui/components/telepathyClient.js:1329
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Tilkobling tapt"
|
msgstr "Tilkobling tapt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1330
|
#: ../js/ui/components/telepathyClient.js:1331
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Denne kontoen er allerede koblet til tjeneren"
|
msgstr "Denne kontoen er allerede koblet til tjeneren"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1332
|
#: ../js/ui/components/telepathyClient.js:1333
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
|
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1334
|
#: ../js/ui/components/telepathyClient.js:1335
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Kontoen eksisterer allerede på tjeneren"
|
msgstr "Kontoen eksisterer allerede på tjeneren"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1336
|
#: ../js/ui/components/telepathyClient.js:1337
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
|
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1338
|
#: ../js/ui/components/telepathyClient.js:1339
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Sertifikatet er tilbaketrukket"
|
msgstr "Sertifikatet er tilbaketrukket"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1340
|
#: ../js/ui/components/telepathyClient.js:1341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
|
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1342
|
#: ../js/ui/components/telepathyClient.js:1343
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -846,26 +910,26 @@ msgstr ""
|
|||||||
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
|
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
|
||||||
"kryptografibiblioteket"
|
"kryptografibiblioteket"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1344
|
#: ../js/ui/components/telepathyClient.js:1345
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Intern feil"
|
msgstr "Intern feil"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1355
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "Tilkobling til %s feilet"
|
msgstr "Tilkobling til %s feilet"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1363
|
#: ../js/ui/components/telepathyClient.js:1364
|
||||||
msgid "Reconnect"
|
msgid "Reconnect"
|
||||||
msgstr "Koble til på nytt"
|
msgstr "Koble til på nytt"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1365
|
||||||
msgid "Edit account"
|
msgid "Edit account"
|
||||||
msgstr "Rediger konto"
|
msgstr "Rediger konto"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1409
|
#: ../js/ui/components/telepathyClient.js:1410
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Ukjent årsak"
|
msgstr "Ukjent årsak"
|
||||||
|
|
||||||
@ -884,7 +948,7 @@ msgstr "Åpne kalender"
|
|||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:190
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%a %e %B, %Y"
|
msgstr "%a %e %B, %Y"
|
||||||
|
|
||||||
@ -989,11 +1053,11 @@ msgstr "Installer"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
|
msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:337
|
#: ../js/ui/keyboard.js:308
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "varslingsområde"
|
msgstr "varslingsområde"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:555 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastatur"
|
msgstr "Tastatur"
|
||||||
@ -1046,32 +1110,32 @@ msgstr "Vis kildekode"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Nettside"
|
msgstr "Nettside"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1081
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Åpne"
|
msgstr "Åpne"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1088
|
#: ../js/ui/messageTray.js:1095
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Fjern"
|
msgstr "Fjern"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1540
|
#: ../js/ui/messageTray.js:1539
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Meldingstrau"
|
msgstr "Meldingstrau"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2547
|
#: ../js/ui/messageTray.js:2563
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Systeminformasjon"
|
msgstr "Systeminformasjon"
|
||||||
|
|
||||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
#: ../js/ui/notificationDaemon.js:504 ../src/shell-app.c:374
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Ukjent"
|
msgstr "Ukjent"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:82
|
#: ../js/ui/overview.js:89
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Angre"
|
msgstr "Angre"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:127
|
#: ../js/ui/overview.js:133
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Oversikt"
|
msgstr "Oversikt"
|
||||||
|
|
||||||
@ -1079,27 +1143,27 @@ msgstr "Oversikt"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/overview.js:201
|
#: ../js/ui/overview.js:207
|
||||||
msgid "Type to search..."
|
msgid "Type to search..."
|
||||||
msgstr "Skriv for å søke …"
|
msgstr "Skriv for å søke …"
|
||||||
|
|
||||||
#. Translators: this is the name of the dock/favorites area on
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
#. the left of the overview
|
#. the left of the overview
|
||||||
#: ../js/ui/overview.js:222
|
#: ../js/ui/overview.js:228
|
||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Favoritter"
|
msgstr "Favoritter"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:567
|
#: ../js/ui/panel.js:581
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Avslutt"
|
msgstr "Avslutt"
|
||||||
|
|
||||||
#. Translators: If there is no suitable word for "Activities"
|
#. Translators: If there is no suitable word for "Activities"
|
||||||
#. in your language, you can use the word for "Overview".
|
#. in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:599
|
#: ../js/ui/panel.js:613
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktiviteter"
|
msgstr "Aktiviteter"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:965
|
#: ../js/ui/panel.js:980
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Topp-panel"
|
msgstr "Topp-panel"
|
||||||
|
|
||||||
@ -1113,23 +1177,27 @@ msgid "toggle-switch-us"
|
|||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:205
|
#: ../js/ui/runDialog.js:205
|
||||||
msgid "Please enter a command:"
|
msgid "Enter a Command"
|
||||||
msgstr "Oppgi en kommando:"
|
msgstr "Oppgi en kommando"
|
||||||
|
|
||||||
|
#: ../js/ui/runDialog.js:241
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Lukk"
|
||||||
|
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:79
|
#: ../js/ui/screenShield.js:80
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %B %d"
|
msgstr "%A, %B %d"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:143
|
#: ../js/ui/screenShield.js:144
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d ny melding"
|
msgstr[0] "%d ny melding"
|
||||||
msgstr[1] "%d nye meldinger"
|
msgstr[1] "%d nye meldinger"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:145
|
#: ../js/ui/screenShield.js:146
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1168,7 +1236,7 @@ msgstr "Passord"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Husk passord"
|
msgstr "Husk passord"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:174
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Lås opp"
|
msgstr "Lås opp"
|
||||||
|
|
||||||
@ -1223,7 +1291,7 @@ msgstr "Stor tekst"
|
|||||||
#: ../js/ui/status/bluetooth.js:27 ../js/ui/status/bluetooth.js:31
|
#: ../js/ui/status/bluetooth.js:27 ../js/ui/status/bluetooth.js:31
|
||||||
#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/bluetooth.js:304
|
#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/bluetooth.js:304
|
||||||
#: ../js/ui/status/bluetooth.js:335 ../js/ui/status/bluetooth.js:371
|
#: ../js/ui/status/bluetooth.js:335 ../js/ui/status/bluetooth.js:371
|
||||||
#: ../js/ui/status/bluetooth.js:400 ../js/ui/status/network.js:867
|
#: ../js/ui/status/bluetooth.js:400 ../js/ui/status/network.js:873
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bluetooth"
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
@ -1252,12 +1320,12 @@ msgstr "maskinvare slått av"
|
|||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr "Tilkobling"
|
msgstr "Tilkobling"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:207 ../js/ui/status/network.js:458
|
#: ../js/ui/status/bluetooth.js:207 ../js/ui/status/network.js:475
|
||||||
msgid "disconnecting..."
|
msgid "disconnecting..."
|
||||||
msgstr "kobler fra …"
|
msgstr "kobler fra …"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:220 ../js/ui/status/network.js:464
|
#: ../js/ui/status/bluetooth.js:220 ../js/ui/status/network.js:481
|
||||||
#: ../js/ui/status/network.js:934
|
#: ../js/ui/status/network.js:1507
|
||||||
msgid "connecting..."
|
msgid "connecting..."
|
||||||
msgstr "kobler til …"
|
msgstr "kobler til …"
|
||||||
|
|
||||||
@ -1367,109 +1435,106 @@ msgstr "slått av"
|
|||||||
|
|
||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||||
#: ../js/ui/status/network.js:456
|
#: ../js/ui/status/network.js:473
|
||||||
msgid "unmanaged"
|
msgid "unmanaged"
|
||||||
msgstr "ikke håndtert"
|
msgstr "ikke håndtert"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password
|
#. Translators: this is for network connections that require some kind of key or password
|
||||||
#: ../js/ui/status/network.js:467 ../js/ui/status/network.js:937
|
#: ../js/ui/status/network.js:484 ../js/ui/status/network.js:1510
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "autentisering kreves"
|
msgstr "autentisering kreves"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing
|
#. module, which is missing
|
||||||
#: ../js/ui/status/network.js:477
|
#: ../js/ui/status/network.js:494
|
||||||
msgid "firmware missing"
|
msgid "firmware missing"
|
||||||
msgstr "fastvare mangler"
|
msgstr "fastvare mangler"
|
||||||
|
|
||||||
#. Translators: this is for wired network devices that are physically disconnected
|
#. Translators: this is for wired network devices that are physically disconnected
|
||||||
#: ../js/ui/status/network.js:484
|
#: ../js/ui/status/network.js:501
|
||||||
msgid "cable unplugged"
|
msgid "cable unplugged"
|
||||||
msgstr "kabel koblet fra"
|
msgstr "kabel koblet fra"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage
|
#. is disabled by rfkill, or it has no coverage
|
||||||
#: ../js/ui/status/network.js:489
|
#: ../js/ui/status/network.js:506
|
||||||
msgid "unavailable"
|
msgid "unavailable"
|
||||||
msgstr "ikke tilgjengelig"
|
msgstr "ikke tilgjengelig"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:491 ../js/ui/status/network.js:939
|
#: ../js/ui/status/network.js:508 ../js/ui/status/network.js:1512
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "tilkobling feilet"
|
msgstr "tilkobling feilet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:552 ../js/ui/status/network.js:1529
|
#: ../js/ui/status/network.js:560 ../js/ui/status/network.js:1446
|
||||||
|
#: ../js/ui/status/network.js:1588
|
||||||
msgid "More..."
|
msgid "More..."
|
||||||
msgstr "Mer …"
|
msgstr "Mer …"
|
||||||
|
|
||||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||||
#. and we cannot access its settings (including the name)
|
#. and we cannot access its settings (including the name)
|
||||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1459
|
#: ../js/ui/status/network.js:596 ../js/ui/status/network.js:1376
|
||||||
msgid "Connected (private)"
|
msgid "Connected (private)"
|
||||||
msgstr "Tilkoblet (privat)"
|
msgstr "Tilkoblet (privat)"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:663
|
#: ../js/ui/status/network.js:669
|
||||||
msgid "Auto Ethernet"
|
msgid "Auto Ethernet"
|
||||||
msgstr "Automatisk Ethernet"
|
msgstr "Automatisk Ethernet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:721
|
#: ../js/ui/status/network.js:727
|
||||||
msgid "Auto broadband"
|
msgid "Auto broadband"
|
||||||
msgstr "Automatisk bredbånd"
|
msgstr "Automatisk bredbånd"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:724
|
#: ../js/ui/status/network.js:730
|
||||||
msgid "Auto dial-up"
|
msgid "Auto dial-up"
|
||||||
msgstr "Automatisk oppringt"
|
msgstr "Automatisk oppringt"
|
||||||
|
|
||||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||||
#: ../js/ui/status/network.js:853 ../js/ui/status/network.js:1476
|
#: ../js/ui/status/network.js:859 ../js/ui/status/network.js:1393
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Auto %s"
|
msgid "Auto %s"
|
||||||
msgstr "Automatisk %s"
|
msgstr "Automatisk %s"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:855
|
#: ../js/ui/status/network.js:861
|
||||||
msgid "Auto bluetooth"
|
msgid "Auto bluetooth"
|
||||||
msgstr "Automatisk Bluetooth"
|
msgstr "Automatisk Bluetooth"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1478
|
#: ../js/ui/status/network.js:1395
|
||||||
msgid "Auto wireless"
|
msgid "Auto wireless"
|
||||||
msgstr "Automatisk trådløst"
|
msgstr "Automatisk trådløst"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1575
|
#: ../js/ui/status/network.js:1637
|
||||||
msgid "Enable networking"
|
msgid "Enable networking"
|
||||||
msgstr "Slå på nettverk"
|
msgstr "Slå på nettverk"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1597
|
#: ../js/ui/status/network.js:1659
|
||||||
msgid "Wired"
|
msgid "Wired"
|
||||||
msgstr "Kablet"
|
msgstr "Kablet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1608
|
#: ../js/ui/status/network.js:1670
|
||||||
msgid "Wireless"
|
msgid "Wireless"
|
||||||
msgstr "Trådløst"
|
msgstr "Trådløst"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1618
|
#: ../js/ui/status/network.js:1680
|
||||||
msgid "Mobile broadband"
|
msgid "Mobile broadband"
|
||||||
msgstr "Mobilt bredbånd"
|
msgstr "Mobilt bredbånd"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1628
|
#: ../js/ui/status/network.js:1691
|
||||||
msgid "VPN Connections"
|
|
||||||
msgstr "VPN-tilkoblinger"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1635
|
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Innstillinger for nettverk"
|
msgstr "Innstillinger for nettverk"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1679
|
#: ../js/ui/status/network.js:1735
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Nettverkshåndtering"
|
msgstr "Nettverkshåndtering"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1769
|
#: ../js/ui/status/network.js:1809
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Tilkobling feilet"
|
msgstr "Tilkobling feilet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1770
|
#: ../js/ui/status/network.js:1810
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Aktivering av nettverkstilkobling feilet"
|
msgstr "Aktivering av nettverkstilkobling feilet"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:2065
|
#: ../js/ui/status/network.js:2108
|
||||||
msgid "Networking is disabled"
|
msgid "Networking is disabled"
|
||||||
msgstr "Nettverk er slått av"
|
msgstr "Nettverk er slått av"
|
||||||
|
|
||||||
@ -1579,63 +1644,63 @@ msgstr "Volum"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:181
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Logg inn som en annen bruker"
|
msgstr "Logg inn som en annen bruker"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:180
|
#: ../js/ui/userMenu.js:176
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Tilgjengelig"
|
msgstr "Tilgjengelig"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:183
|
#: ../js/ui/userMenu.js:179
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Opptatt"
|
msgstr "Opptatt"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:186
|
#: ../js/ui/userMenu.js:182
|
||||||
msgid "Invisible"
|
msgid "Invisible"
|
||||||
msgstr "Usynlig"
|
msgstr "Usynlig"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:189
|
#: ../js/ui/userMenu.js:185
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Borte"
|
msgstr "Borte"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:192
|
#: ../js/ui/userMenu.js:188
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Ledig"
|
msgstr "Ledig"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:195
|
#: ../js/ui/userMenu.js:191
|
||||||
msgid "Unavailable"
|
msgid "Offline"
|
||||||
msgstr "Ikke tilgjengelig"
|
msgstr "Frakoblet"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:740
|
#: ../js/ui/userMenu.js:747
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Varslinger"
|
msgstr "Varslinger"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:748
|
#: ../js/ui/userMenu.js:755
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Systeminnstillinger"
|
msgstr "Systeminnstillinger"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:756
|
#: ../js/ui/userMenu.js:763
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Bytt bruker"
|
msgstr "Bytt bruker"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:761
|
#: ../js/ui/userMenu.js:768
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Logg ut"
|
msgstr "Logg ut"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:766
|
#: ../js/ui/userMenu.js:773
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Lås"
|
msgstr "Lås"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:781
|
#: ../js/ui/userMenu.js:788
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Installer oppdateringer og start på nytt"
|
msgstr "Installer oppdateringer og start på nytt"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:799
|
#: ../js/ui/userMenu.js:806
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Din pratestatus vil bli satt til opptatt"
|
msgstr "Din pratestatus vil bli satt til opptatt"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:800
|
#: ../js/ui/userMenu.js:807
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1644,15 +1709,15 @@ msgstr ""
|
|||||||
"tilkoblingsstatus er justert for å la andre vite at du kanskje ikke ser "
|
"tilkoblingsstatus er justert for å la andre vite at du kanskje ikke ser "
|
||||||
"deres meldinger."
|
"deres meldinger."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Vinduer"
|
msgstr "Vinduer"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Programmer"
|
msgstr "Programmer"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Søk"
|
msgstr "Søk"
|
||||||
|
|
||||||
@ -1721,7 +1786,7 @@ msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm"
|
|||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Vis mulige modi"
|
msgstr "Vis mulige modi"
|
||||||
|
|
||||||
#: ../src/shell-app.c:621
|
#: ../src/shell-app.c:622
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "Klarte ikke å starte «%s»"
|
msgstr "Klarte ikke å starte «%s»"
|
||||||
|
244
po/pl.po
244
po/pl.po
@ -11,8 +11,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-09-25 15:12+0200\n"
|
"POT-Creation-Date: 2012-10-31 19:12+0100\n"
|
||||||
"PO-Revision-Date: 2012-09-25 15:13+0200\n"
|
"PO-Revision-Date: 2012-10-31 19:13+0100\n"
|
||||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||||
"Language-Team: Polish <gnomepl@aviary.pl>\n"
|
"Language-Team: Polish <gnomepl@aviary.pl>\n"
|
||||||
"Language: pl\n"
|
"Language: pl\n"
|
||||||
@ -142,62 +142,74 @@ msgstr ""
|
|||||||
"użytkownika. Wartość pochodzi ze spisu GsmPresenceStatus."
|
"użytkownika. Wartość pochodzi ze spisu GsmPresenceStatus."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
|
msgstr "Wyświetlanie elementu menu \"Wyloguj się\" w menu użytkownika."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
|
msgid ""
|
||||||
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
|
"user, single-session situations."
|
||||||
|
msgstr ""
|
||||||
|
"Ten klucz zastępuje automatyczne ukrywanie elementu menu \"Wyloguj się\" w "
|
||||||
|
"sytuacji, gdy istnieje tylko jeden użytkownik i jedna sesja."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Wyświetlanie dnia tygodnia w kalendarzu"
|
msgstr "Wyświetlanie dnia tygodnia w kalendarzu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Jeśli jest ustawione na \"true\", to wyświetla w kalendarzu dzień tygodnia w "
|
"Jeśli jest ustawione na \"true\", to wyświetla w kalendarzu dzień tygodnia w "
|
||||||
"formacie ISO."
|
"formacie ISO."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Skrót do otwarcia menu programu"
|
msgstr "Skrót do otwarcia menu programu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Skrót do otwarcia menu programu."
|
msgstr "Skrót do otwarcia menu programu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania"
|
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania."
|
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Skrót do przełączenia nagrywania ekranu"
|
msgstr "Skrót do przełączenia nagrywania ekranu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Skrót do uruchomienia/zatrzymania wbudowanego nagrywania ekranu."
|
msgstr "Skrót do uruchomienia/zatrzymania wbudowanego nagrywania ekranu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Której klawiatury używać"
|
msgstr "Której klawiatury używać"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Typ używanej klawiatury."
|
msgstr "Typ używanej klawiatury."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Liczba klatek na sekundę do nagrywania ekranu."
|
msgstr "Liczba klatek na sekundę do nagrywania ekranu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
msgstr "Liczba klatek na sekundę wynikowego nagrania ekranu."
|
msgstr "Liczba klatek na sekundę wynikowego nagrania ekranu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Potok biblioteki GStreamer używany do zakodowania nagrania ekranu"
|
msgstr "Potok biblioteki GStreamer używany do zakodowania nagrania ekranu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -222,11 +234,11 @@ msgstr ""
|
|||||||
"i nagrywa do formatu WebM używając kodeka VP8. %T jest zamieniane na "
|
"i nagrywa do formatu WebM używając kodeka VP8. %T jest zamieniane na "
|
||||||
"odgadniętą optymalną liczbę wątków dla komputera."
|
"odgadniętą optymalną liczbę wątków dla komputera."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Rozszerzenie pliku używane do przechowywania nagrań ekranu"
|
msgstr "Rozszerzenie pliku używane do przechowywania nagrań ekranu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -252,11 +264,11 @@ msgstr ""
|
|||||||
"Proszę wybrać rozszerzenie do skonfigurowania używając powyższego pola "
|
"Proszę wybrać rozszerzenie do skonfigurowania używając powyższego pola "
|
||||||
"wyboru."
|
"wyboru."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:528
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Sesja..."
|
msgstr "Sesja..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:676
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Proszę się zalogować"
|
msgstr "Proszę się zalogować"
|
||||||
@ -264,23 +276,23 @@ msgstr "Proszę się zalogować"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:743
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Inny użytkownik?"
|
msgstr "Inny użytkownik?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:896 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Anuluj"
|
msgstr "Anuluj"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:901
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Zaloguj"
|
msgstr "Zaloguj"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1240
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Okno logowania"
|
msgstr "Okno logowania"
|
||||||
|
|
||||||
@ -289,8 +301,8 @@ msgstr "Okno logowania"
|
|||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Zasilanie"
|
msgstr "Zasilanie"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:779
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Uśpij"
|
msgstr "Uśpij"
|
||||||
|
|
||||||
@ -298,8 +310,8 @@ msgstr "Uśpij"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Uruchom ponownie"
|
msgstr "Uruchom ponownie"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:778
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Wyłącz komputer"
|
msgstr "Wyłącz komputer"
|
||||||
|
|
||||||
@ -350,7 +362,7 @@ msgstr "Ustawienia"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nowe okno"
|
msgstr "Nowe okno"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Usuń z ulubionych"
|
msgstr "Usuń z ulubionych"
|
||||||
|
|
||||||
@ -514,16 +526,16 @@ msgstr "Ten tydzień"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Następny tydzień"
|
msgstr "Następny tydzień"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Urządzenia wymienne"
|
msgstr "Urządzenia wymienne"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Otwórz za pomocą %s"
|
msgstr "Otwórz za pomocą %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Wysuń"
|
msgstr "Wysuń"
|
||||||
|
|
||||||
@ -680,35 +692,35 @@ msgstr "Wycisz"
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/components/telepathyClient.js:948
|
#: ../js/ui/components/telepathyClient.js:950
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||||
msgstr "Wysłano w dniu <b>%e %b</b> o godzinie <b>%H:%M</b>"
|
msgstr "Wysłano w dniu <b>%e %b</b> o godzinie <b>%H:%M</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||||
#. shown when you get a chat message in the same year.
|
#. shown when you get a chat message in the same year.
|
||||||
#: ../js/ui/components/telepathyClient.js:954
|
#: ../js/ui/components/telepathyClient.js:956
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||||
msgstr "Wysłano w dniu <b>%d %B</b>, <b>%A</b>"
|
msgstr "Wysłano w dniu <b>%d %B</b>, <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||||
#. shown when you get a chat message in a different year.
|
#. shown when you get a chat message in a different year.
|
||||||
#: ../js/ui/components/telepathyClient.js:959
|
#: ../js/ui/components/telepathyClient.js:961
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
msgstr "Wysłano w dniu <b>%d %B</b> %Y, <b>%A</b>"
|
msgstr "Wysłano w dniu <b>%d %B</b> %Y, <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/components/telepathyClient.js:988
|
#: ../js/ui/components/telepathyClient.js:990
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "Użytkownik %s jest teraz znany jako %s"
|
msgstr "Użytkownik %s jest teraz znany jako %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1088
|
#: ../js/ui/components/telepathyClient.js:1090
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Zaproszenie do pokoju %s"
|
msgstr "Zaproszenie do pokoju %s"
|
||||||
@ -716,42 +728,42 @@ msgstr "Zaproszenie do pokoju %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. translators: first argument is the name of a contact and the second
|
||||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1096
|
#: ../js/ui/components/telepathyClient.js:1098
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "Użytkownik %s zaprasza do dołączenia do pokoju %s"
|
msgstr "Użytkownik %s zaprasza do dołączenia do pokoju %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1098
|
#: ../js/ui/components/telepathyClient.js:1100
|
||||||
#: ../js/ui/components/telepathyClient.js:1177
|
#: ../js/ui/components/telepathyClient.js:1179
|
||||||
#: ../js/ui/components/telepathyClient.js:1240
|
#: ../js/ui/components/telepathyClient.js:1242
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Odmów"
|
msgstr "Odmów"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1099
|
#: ../js/ui/components/telepathyClient.js:1101
|
||||||
#: ../js/ui/components/telepathyClient.js:1178
|
#: ../js/ui/components/telepathyClient.js:1180
|
||||||
#: ../js/ui/components/telepathyClient.js:1241
|
#: ../js/ui/components/telepathyClient.js:1243
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Zaakceptuj"
|
msgstr "Zaakceptuj"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1129
|
#: ../js/ui/components/telepathyClient.js:1131
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Wideorozmowa z użytkownikiem %s"
|
msgstr "Wideorozmowa z użytkownikiem %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1132
|
#: ../js/ui/components/telepathyClient.js:1134
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Rozmowa z użytkownikiem %s"
|
msgstr "Rozmowa z użytkownikiem %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1137
|
#: ../js/ui/components/telepathyClient.js:1139
|
||||||
#: ../js/ui/status/bluetooth.js:346
|
#: ../js/ui/status/bluetooth.js:346
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Odrzuć"
|
msgstr "Odrzuć"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/components/telepathyClient.js:1139
|
#: ../js/ui/components/telepathyClient.js:1141
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Odbierz"
|
msgstr "Odbierz"
|
||||||
|
|
||||||
@ -760,111 +772,111 @@ msgstr "Odbierz"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/components/telepathyClient.js:1171
|
#: ../js/ui/components/telepathyClient.js:1173
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "Użytkownik %s przysyła plik %s"
|
msgstr "Użytkownik %s przysyła plik %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/components/telepathyClient.js:1206
|
#: ../js/ui/components/telepathyClient.js:1208
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "Użytkownik %s prosi o uprawnienie do wyświetlania stanu"
|
msgstr "Użytkownik %s prosi o uprawnienie do wyświetlania stanu"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1298
|
#: ../js/ui/components/telepathyClient.js:1300
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Błąd sieci"
|
msgstr "Błąd sieci"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1302
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Uwierzytelnienie się nie powiodło"
|
msgstr "Uwierzytelnienie się nie powiodło"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1302
|
#: ../js/ui/components/telepathyClient.js:1304
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Błąd szyfrowania"
|
msgstr "Błąd szyfrowania"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1304
|
#: ../js/ui/components/telepathyClient.js:1306
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Nie podano certyfikatu"
|
msgstr "Nie podano certyfikatu"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1306
|
#: ../js/ui/components/telepathyClient.js:1308
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Certyfikat jest niezaufany"
|
msgstr "Certyfikat jest niezaufany"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1308
|
#: ../js/ui/components/telepathyClient.js:1310
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Certyfikat wygasł"
|
msgstr "Certyfikat wygasł"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1310
|
#: ../js/ui/components/telepathyClient.js:1312
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Certyfikat nie został aktywowany"
|
msgstr "Certyfikat nie został aktywowany"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1312
|
#: ../js/ui/components/telepathyClient.js:1314
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Nazwa komputera certyfikatu się nie zgadza"
|
msgstr "Nazwa komputera certyfikatu się nie zgadza"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1314
|
#: ../js/ui/components/telepathyClient.js:1316
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Odcisk palca certyfikatu się nie zgadza"
|
msgstr "Odcisk palca certyfikatu się nie zgadza"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1316
|
#: ../js/ui/components/telepathyClient.js:1318
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Certyfikat został samodzielnie podpisany"
|
msgstr "Certyfikat został samodzielnie podpisany"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1318
|
#: ../js/ui/components/telepathyClient.js:1320
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Stan jest ustawiony na offline"
|
msgstr "Stan jest ustawiony na offline"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1320
|
#: ../js/ui/components/telepathyClient.js:1322
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Szyfrowanie jest niedostępne"
|
msgstr "Szyfrowanie jest niedostępne"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1322
|
#: ../js/ui/components/telepathyClient.js:1324
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Certyfikat jest nieprawidłowy"
|
msgstr "Certyfikat jest nieprawidłowy"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1324
|
#: ../js/ui/components/telepathyClient.js:1326
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Odrzucono połączenie"
|
msgstr "Odrzucono połączenie"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1326
|
#: ../js/ui/components/telepathyClient.js:1328
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Nie można nawiązać połączenia"
|
msgstr "Nie można nawiązać połączenia"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1328
|
#: ../js/ui/components/telepathyClient.js:1330
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Utracono połączenie"
|
msgstr "Utracono połączenie"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1330
|
#: ../js/ui/components/telepathyClient.js:1332
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "To konto jest już połączone z serwerem"
|
msgstr "To konto jest już połączone z serwerem"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1332
|
#: ../js/ui/components/telepathyClient.js:1334
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Połączenie zostało zastąpione nowym z wykorzystaniem tego samego zasobu"
|
"Połączenie zostało zastąpione nowym z wykorzystaniem tego samego zasobu"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1334
|
#: ../js/ui/components/telepathyClient.js:1336
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Konto już istnieje na serwerze"
|
msgstr "Konto już istnieje na serwerze"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1336
|
#: ../js/ui/components/telepathyClient.js:1338
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Serwer jest obecnie zbyt zajęty, aby obsłużyć połączenie"
|
msgstr "Serwer jest obecnie zbyt zajęty, aby obsłużyć połączenie"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1338
|
#: ../js/ui/components/telepathyClient.js:1340
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Certyfikat został unieważniony"
|
msgstr "Certyfikat został unieważniony"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1340
|
#: ../js/ui/components/telepathyClient.js:1342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Certyfikat używa niezabezpieczonego algorytmu szyfrowania lub jest "
|
"Certyfikat używa niezabezpieczonego algorytmu szyfrowania lub jest "
|
||||||
"kryptograficznie słaby"
|
"kryptograficznie słaby"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1342
|
#: ../js/ui/components/telepathyClient.js:1344
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -872,30 +884,30 @@ msgstr ""
|
|||||||
"Długość certyfikatu serwera lub głębokość jego łańcucha przekracza "
|
"Długość certyfikatu serwera lub głębokość jego łańcucha przekracza "
|
||||||
"ograniczenia nałożone przez bibliotekę kryptograficzną"
|
"ograniczenia nałożone przez bibliotekę kryptograficzną"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1344
|
#: ../js/ui/components/telepathyClient.js:1346
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Błąd wewnętrzny"
|
msgstr "Błąd wewnętrzny"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1356
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "Połączenie z kontem %s się nie powiodło"
|
msgstr "Połączenie z kontem %s się nie powiodło"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1363
|
#: ../js/ui/components/telepathyClient.js:1365
|
||||||
msgid "Reconnect"
|
msgid "Reconnect"
|
||||||
msgstr "Połącz ponownie"
|
msgstr "Połącz ponownie"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1366
|
||||||
msgid "Edit account"
|
msgid "Edit account"
|
||||||
msgstr "Modyfikuj konto"
|
msgstr "Modyfikuj konto"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1409
|
#: ../js/ui/components/telepathyClient.js:1411
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Nieznana przyczyna"
|
msgstr "Nieznana przyczyna"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Wyświetl programy"
|
msgstr "Wyświetl programy"
|
||||||
|
|
||||||
@ -903,14 +915,14 @@ msgstr "Wyświetl programy"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Ustawienia daty i czasu"
|
msgstr "Ustawienia daty i czasu"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Otwórz kalendarz"
|
msgstr "Otwórz kalendarz"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e %B %Y"
|
msgstr "%A, %e %B %Y"
|
||||||
|
|
||||||
@ -1075,23 +1087,23 @@ msgstr "Wyświetl źródło"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Strona WWW"
|
msgstr "Strona WWW"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1081
|
#: ../js/ui/messageTray.js:1084
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Otwórz"
|
msgstr "Otwórz"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1088
|
#: ../js/ui/messageTray.js:1091
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Usuń"
|
msgstr "Usuń"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2088
|
#: ../js/ui/messageTray.js:1543
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Obszar powiadamiania"
|
msgstr "Obszar powiadamiania"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2551
|
#: ../js/ui/messageTray.js:2549
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informacje systemowe"
|
msgstr "Informacje systemowe"
|
||||||
|
|
||||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Nieznany"
|
msgstr "Nieznany"
|
||||||
@ -1147,7 +1159,7 @@ msgstr "Proszę wprowadzić polecenie:"
|
|||||||
|
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:79
|
#: ../js/ui/screenShield.js:80
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %e %B"
|
msgstr "%A, %e %B"
|
||||||
|
|
||||||
@ -1199,7 +1211,7 @@ msgstr "Hasło"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Zapamiętanie hasła"
|
msgstr "Zapamiętanie hasła"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Odblokuj"
|
msgstr "Odblokuj"
|
||||||
|
|
||||||
@ -1614,67 +1626,63 @@ msgstr "Głośność"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Zaloguj jako inny użytkownik"
|
msgstr "Zaloguj jako inny użytkownik"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:180
|
#: ../js/ui/userMenu.js:181
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Dostępny"
|
msgstr "Dostępny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:183
|
#: ../js/ui/userMenu.js:184
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Zajęty"
|
msgstr "Zajęty"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:186
|
#: ../js/ui/userMenu.js:187
|
||||||
msgid "Invisible"
|
msgid "Invisible"
|
||||||
msgstr "Niewidoczny"
|
msgstr "Niewidoczny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:189
|
#: ../js/ui/userMenu.js:190
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Nieobecny"
|
msgstr "Nieobecny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:192
|
#: ../js/ui/userMenu.js:193
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Bezczynny"
|
msgstr "Bezczynny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:195
|
#: ../js/ui/userMenu.js:196
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Niedostępny"
|
msgstr "Niedostępny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:744
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Przełącz użytkownika"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Przełącz sesję"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Powiadomienia"
|
msgstr "Powiadomienia"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:752
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Ustawienia systemu"
|
msgstr "Ustawienia systemu"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:760
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Przełącz użytkownika"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:765
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Wyloguj się"
|
msgstr "Wyloguj się"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:770
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Zablokuj ekran"
|
msgstr "Zablokuj ekran"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:785
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Zaktualizuj i uruchom ponownie"
|
msgstr "Zaktualizuj i uruchom ponownie"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:803
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Stan komunikatora zostanie ustawiony na \"zajęty\""
|
msgstr "Stan komunikatora zostanie ustawiony na \"zajęty\""
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:804
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1696,7 +1704,7 @@ msgstr "Programy"
|
|||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Wyszukiwanie"
|
msgstr "Wyszukiwanie"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1705,12 +1713,12 @@ msgstr ""
|
|||||||
"Nic mądrego na dzisiaj:\n"
|
"Nic mądrego na dzisiaj:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "Wyrocznia %s przemawia"
|
msgstr "Wyrocznia %s przemawia"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Twój ulubiony żart"
|
msgstr "Twój ulubiony żart"
|
||||||
|
|
||||||
@ -1747,23 +1755,23 @@ msgstr[2] "%u wejść"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Dźwięki systemowe"
|
msgstr "Dźwięki systemowe"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Wyświetla wersję"
|
msgstr "Wyświetla wersję"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Tryb używany przez GDM dla ekranu logowania"
|
msgstr "Tryb używany przez GDM dla ekranu logowania"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "Używa podanego trybu, np. \"gdm\" dla ekranu logowania"
|
msgstr "Używa podanego trybu, np. \"gdm\" dla ekranu logowania"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Wyświetla listę możliwych trybów"
|
msgstr "Wyświetla listę możliwych trybów"
|
||||||
|
|
||||||
#: ../src/shell-app.c:621
|
#: ../src/shell-app.c:622
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "Uruchomienie \"%s\" się nie powiodło"
|
msgstr "Uruchomienie \"%s\" się nie powiodło"
|
||||||
|
256
po/ru.po
256
po/ru.po
@ -15,8 +15,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
"POT-Creation-Date: 2012-10-31 16:48+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-27 16:38+0400\n"
|
"PO-Revision-Date: 2012-11-04 20:48+0400\n"
|
||||||
"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
|
"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
|
||||||
"Language-Team: русский <gnome-cyr@gnome.org>\n"
|
"Language-Team: русский <gnome-cyr@gnome.org>\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@ -141,51 +141,63 @@ msgstr ""
|
|||||||
"Данное значение берётся из перечисления GsmPresenceStatus."
|
"Данное значение берётся из перечисления GsmPresenceStatus."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
|
msgstr "Всегда показывать в меню пункт «Завершить сеанс»."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
|
msgid ""
|
||||||
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
|
"user, single-session situations."
|
||||||
|
msgstr ""
|
||||||
|
"Этот ключ переопределяет автоматическое скрытие пункта «Завершить сеанс» при "
|
||||||
|
"использовании одиночного сеанса."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Показывать в часах дату недели"
|
msgstr "Показывать в часах дату недели"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "Если установлено, календарь будет показывать неделю в формате ISO."
|
msgstr "Если установлено, календарь будет показывать неделю в формате ISO."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Комбинация клавиш для открытия меню приложения"
|
msgstr "Комбинация клавиш для открытия меню приложения"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Комбинация клавиш для открытия меню приложения."
|
msgstr "Комбинация клавиш для открытия меню приложения."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Комбинация клавиш для переключения видимости панели сообщений"
|
msgstr "Комбинация клавиш для переключения видимости панели сообщений"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Комбинация клавиш для переключения видимости панели сообщений."
|
msgstr "Комбинация клавиш для переключения видимости панели сообщений."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Комбинация клавиш для переключения записи экрана"
|
msgstr "Комбинация клавиш для переключения записи экрана"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Комбинация клавиш для запуска/остановки встроенного средства записи экрана."
|
"Комбинация клавиш для запуска/остановки встроенного средства записи экрана."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Какую клавиатуру использовать"
|
msgstr "Какую клавиатуру использовать"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Тип используемой клавиатуры."
|
msgstr "Тип используемой клавиатуры."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Частота смены кадров для записи скринкастов."
|
msgstr "Частота смены кадров для записи скринкастов."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -193,11 +205,11 @@ msgstr ""
|
|||||||
"Частота смены кадров в скринкасте, записанном с помощью GNOME Shell (кадров/"
|
"Частота смены кадров в скринкасте, записанном с помощью GNOME Shell (кадров/"
|
||||||
"сек)."
|
"сек)."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Конвейер gstreamer, используемый для кодирования скринкастов"
|
msgstr "Конвейер gstreamer, используемый для кодирования скринкастов"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -224,11 +236,11 @@ msgstr ""
|
|||||||
"используется как заполнитель для определения оптимального количества потоков "
|
"используется как заполнитель для определения оптимального количества потоков "
|
||||||
"в системе."
|
"в системе."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Расширение файла, использующееся для хранения скринкастов"
|
msgstr "Расширение файла, использующееся для хранения скринкастов"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -251,11 +263,11 @@ msgstr "Расширение"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "Выберите расширение из выпадающего списка."
|
msgstr "Выберите расширение из выпадающего списка."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Сеанс…"
|
msgstr "Сеанс…"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Вход в систему"
|
msgstr "Вход в систему"
|
||||||
@ -263,34 +275,33 @@ msgstr "Вход в систему"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Нет в списке?"
|
msgstr "Нет в списке?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Отмена"
|
msgstr "Отмена"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Войти"
|
msgstr "Войти"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Окно входа в систему"
|
msgstr "Окно входа в систему"
|
||||||
|
|
||||||
#. Translators: accessible name of the power menu in the login screen
|
#. Translators: accessible name of the power menu in the login screen
|
||||||
#: ../js/gdm/powerMenu.js:35
|
#: ../js/gdm/powerMenu.js:35
|
||||||
#| msgid "Power Off"
|
|
||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Питание"
|
msgstr "Питание"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:779
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Ждущий режим"
|
msgstr "Ждущий режим"
|
||||||
|
|
||||||
@ -298,8 +309,8 @@ msgstr "Ждущий режим"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Перезапустить"
|
msgstr "Перезапустить"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:778
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Выключить"
|
msgstr "Выключить"
|
||||||
|
|
||||||
@ -350,7 +361,7 @@ msgstr "НАСТРОЙКИ"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Новое окно"
|
msgstr "Новое окно"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Удалить из избранного"
|
msgstr "Удалить из избранного"
|
||||||
|
|
||||||
@ -514,16 +525,16 @@ msgstr "Эта неделя"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Следующая неделя"
|
msgstr "Следующая неделя"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Cъёмные устройства"
|
msgstr "Cъёмные устройства"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Открыть с помощью %s"
|
msgstr "Открыть с помощью %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Извлечь"
|
msgstr "Извлечь"
|
||||||
|
|
||||||
@ -679,35 +690,35 @@ msgstr "Приглушить звук"
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/components/telepathyClient.js:948
|
#: ../js/ui/components/telepathyClient.js:950
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||||
msgstr "Отправлено в <b>%X</b> в <b>%A</b>"
|
msgstr "Отправлено в <b>%X</b> в <b>%A</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||||
#. shown when you get a chat message in the same year.
|
#. shown when you get a chat message in the same year.
|
||||||
#: ../js/ui/components/telepathyClient.js:954
|
#: ../js/ui/components/telepathyClient.js:956
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||||
msgstr "Отправлено в <b>%A</b>, <b>%B %d</b>"
|
msgstr "Отправлено в <b>%A</b>, <b>%B %d</b>"
|
||||||
|
|
||||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||||
#. shown when you get a chat message in a different year.
|
#. shown when you get a chat message in a different year.
|
||||||
#: ../js/ui/components/telepathyClient.js:959
|
#: ../js/ui/components/telepathyClient.js:961
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
msgstr "Отправлено в <b>%A</b>, <b>%B %d</b>, %Y"
|
msgstr "Отправлено в <b>%A</b>, <b>%B %d</b>, %Y"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/components/telepathyClient.js:988
|
#: ../js/ui/components/telepathyClient.js:990
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s теперь известен как %s"
|
msgstr "%s теперь известен как %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1088
|
#: ../js/ui/components/telepathyClient.js:1090
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Приглашение в %s"
|
msgstr "Приглашение в %s"
|
||||||
@ -715,42 +726,42 @@ msgstr "Приглашение в %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. translators: first argument is the name of a contact and the second
|
||||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1096
|
#: ../js/ui/components/telepathyClient.js:1098
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s приглашает вас присоединиться к %s"
|
msgstr "%s приглашает вас присоединиться к %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1098
|
#: ../js/ui/components/telepathyClient.js:1100
|
||||||
#: ../js/ui/components/telepathyClient.js:1177
|
#: ../js/ui/components/telepathyClient.js:1179
|
||||||
#: ../js/ui/components/telepathyClient.js:1240
|
#: ../js/ui/components/telepathyClient.js:1242
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Отказаться"
|
msgstr "Отказаться"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1099
|
#: ../js/ui/components/telepathyClient.js:1101
|
||||||
#: ../js/ui/components/telepathyClient.js:1178
|
#: ../js/ui/components/telepathyClient.js:1180
|
||||||
#: ../js/ui/components/telepathyClient.js:1241
|
#: ../js/ui/components/telepathyClient.js:1243
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Принять"
|
msgstr "Принять"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1129
|
#: ../js/ui/components/telepathyClient.js:1131
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Вас вызывает %s по видео"
|
msgstr "Вас вызывает %s по видео"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1132
|
#: ../js/ui/components/telepathyClient.js:1134
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Вас вызывает %s"
|
msgstr "Вас вызывает %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1137
|
#: ../js/ui/components/telepathyClient.js:1139
|
||||||
#: ../js/ui/status/bluetooth.js:346
|
#: ../js/ui/status/bluetooth.js:346
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Отклонить"
|
msgstr "Отклонить"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/components/telepathyClient.js:1139
|
#: ../js/ui/components/telepathyClient.js:1141
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Ответить"
|
msgstr "Ответить"
|
||||||
|
|
||||||
@ -759,111 +770,111 @@ msgstr "Ответить"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/components/telepathyClient.js:1171
|
#: ../js/ui/components/telepathyClient.js:1173
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s отправляет вам %s"
|
msgstr "%s отправляет вам %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/components/telepathyClient.js:1206
|
#: ../js/ui/components/telepathyClient.js:1208
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s хотел бы получить разрешение видеть, когда вы в сети"
|
msgstr "%s хотел бы получить разрешение видеть, когда вы в сети"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1298
|
#: ../js/ui/components/telepathyClient.js:1300
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Ошибка сети"
|
msgstr "Ошибка сети"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1302
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Ошибка аутентификации"
|
msgstr "Ошибка аутентификации"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1302
|
#: ../js/ui/components/telepathyClient.js:1304
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Ошибка шифрования"
|
msgstr "Ошибка шифрования"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1304
|
#: ../js/ui/components/telepathyClient.js:1306
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Сертификат не предоставляется"
|
msgstr "Сертификат не предоставляется"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1306
|
#: ../js/ui/components/telepathyClient.js:1308
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Недоверенный сертификат"
|
msgstr "Недоверенный сертификат"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1308
|
#: ../js/ui/components/telepathyClient.js:1310
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Срок действия сертификата истёк"
|
msgstr "Срок действия сертификата истёк"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1310
|
#: ../js/ui/components/telepathyClient.js:1312
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Сертификат не активирован"
|
msgstr "Сертификат не активирован"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1312
|
#: ../js/ui/components/telepathyClient.js:1314
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Имя узла сертификата не совпадает"
|
msgstr "Имя узла сертификата не совпадает"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1314
|
#: ../js/ui/components/telepathyClient.js:1316
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Отпечаток сертификата не совпадает"
|
msgstr "Отпечаток сертификата не совпадает"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1316
|
#: ../js/ui/components/telepathyClient.js:1318
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Самоподписанный сертификат"
|
msgstr "Самоподписанный сертификат"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1318
|
#: ../js/ui/components/telepathyClient.js:1320
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Установлен статус «не в сети»"
|
msgstr "Установлен статус «не в сети»"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1320
|
#: ../js/ui/components/telepathyClient.js:1322
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Шифрование недоступно"
|
msgstr "Шифрование недоступно"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1322
|
#: ../js/ui/components/telepathyClient.js:1324
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Недействительный сертификат"
|
msgstr "Недействительный сертификат"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1324
|
#: ../js/ui/components/telepathyClient.js:1326
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "В соединении отказано"
|
msgstr "В соединении отказано"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1326
|
#: ../js/ui/components/telepathyClient.js:1328
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Соединение не может быть установлено"
|
msgstr "Соединение не может быть установлено"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1328
|
#: ../js/ui/components/telepathyClient.js:1330
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Соединение потеряно"
|
msgstr "Соединение потеряно"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1330
|
#: ../js/ui/components/telepathyClient.js:1332
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Эта учётная запись уже подключена к серверу"
|
msgstr "Эта учётная запись уже подключена к серверу"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1332
|
#: ../js/ui/components/telepathyClient.js:1334
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr "Соединение было заменено новым, используя тот же источник"
|
msgstr "Соединение было заменено новым, используя тот же источник"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1334
|
#: ../js/ui/components/telepathyClient.js:1336
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Учётная запись уже существует на сервере"
|
msgstr "Учётная запись уже существует на сервере"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1336
|
#: ../js/ui/components/telepathyClient.js:1338
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Сервер в настоящее время сильно перегружен, чтобы обработать соединение"
|
"Сервер в настоящее время сильно перегружен, чтобы обработать соединение"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1338
|
#: ../js/ui/components/telepathyClient.js:1340
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Сертификат аннулирован"
|
msgstr "Сертификат аннулирован"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1340
|
#: ../js/ui/components/telepathyClient.js:1342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Сертификат использует небезопасный алгоритм шифрования или он "
|
"Сертификат использует небезопасный алгоритм шифрования или он "
|
||||||
"криптографически нестоек"
|
"криптографически нестоек"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1342
|
#: ../js/ui/components/telepathyClient.js:1344
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -871,30 +882,30 @@ msgstr ""
|
|||||||
"Длина сертификата сервера, или глубина цепочки сертификатов сервера, "
|
"Длина сертификата сервера, или глубина цепочки сертификатов сервера, "
|
||||||
"превышает пределы, установленные библиотекой криптографии"
|
"превышает пределы, установленные библиотекой криптографии"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1344
|
#: ../js/ui/components/telepathyClient.js:1346
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Внутренняя ошибка"
|
msgstr "Внутренняя ошибка"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1356
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Connection to %s failed"
|
msgid "Connection to %s failed"
|
||||||
msgstr "Сбой подключения к %s"
|
msgstr "Сбой подключения к %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1363
|
#: ../js/ui/components/telepathyClient.js:1365
|
||||||
msgid "Reconnect"
|
msgid "Reconnect"
|
||||||
msgstr "Переподключиться"
|
msgstr "Переподключиться"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1366
|
||||||
msgid "Edit account"
|
msgid "Edit account"
|
||||||
msgstr "Изменить учётную запись"
|
msgstr "Изменить учётную запись"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1409
|
#: ../js/ui/components/telepathyClient.js:1411
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Неизвестная причина"
|
msgstr "Неизвестная причина"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Показать приложения"
|
msgstr "Показать приложения"
|
||||||
|
|
||||||
@ -902,14 +913,14 @@ msgstr "Показать приложения"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Настроить дату и время"
|
msgstr "Настроить дату и время"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Открыть календарь"
|
msgstr "Открыть календарь"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e %B, %Y"
|
msgstr "%A, %e %B, %Y"
|
||||||
|
|
||||||
@ -1019,11 +1030,11 @@ msgstr "Установить"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Загрузить и установить расширение «%s» с extensions.gnome.org?"
|
msgstr "Загрузить и установить расширение «%s» с extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "лоток"
|
msgstr "лоток"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Клавиатура"
|
msgstr "Клавиатура"
|
||||||
@ -1076,23 +1087,23 @@ msgstr "Показать код"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Веб-страница"
|
msgstr "Веб-страница"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1084
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Открыть"
|
msgstr "Открыть"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1091
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Удалить"
|
msgstr "Удалить"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2055
|
#: ../js/ui/messageTray.js:1543
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Панель сообщений"
|
msgstr "Панель сообщений"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2511
|
#: ../js/ui/messageTray.js:2549
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Системная информация"
|
msgstr "Системная информация"
|
||||||
|
|
||||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Неизвестно"
|
msgstr "Неизвестно"
|
||||||
@ -1148,7 +1159,7 @@ msgstr "Введите команду:"
|
|||||||
|
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:79
|
#: ../js/ui/screenShield.js:80
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%d %B, %A"
|
msgstr "%d %B, %A"
|
||||||
|
|
||||||
@ -1200,7 +1211,7 @@ msgstr "Пароль"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Запомнить пароль"
|
msgstr "Запомнить пароль"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Разблокировать"
|
msgstr "Разблокировать"
|
||||||
|
|
||||||
@ -1318,7 +1329,7 @@ msgstr "Настроить клавиатуру"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Настроить мышь"
|
msgstr "Настроить мышь"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Настроить звук"
|
msgstr "Настроить звук"
|
||||||
|
|
||||||
@ -1607,7 +1618,7 @@ msgid "Unknown"
|
|||||||
msgstr "Неизвестно"
|
msgstr "Неизвестно"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Громкость"
|
msgstr "Громкость"
|
||||||
|
|
||||||
@ -1615,67 +1626,63 @@ msgstr "Громкость"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Микрофон"
|
msgstr "Микрофон"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Войти от имени другого пользователя"
|
msgstr "Войти от имени другого пользователя"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:180
|
#: ../js/ui/userMenu.js:181
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Доступен"
|
msgstr "Доступен"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:183
|
#: ../js/ui/userMenu.js:184
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Занят"
|
msgstr "Занят"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:186
|
#: ../js/ui/userMenu.js:187
|
||||||
msgid "Invisible"
|
msgid "Invisible"
|
||||||
msgstr "Невидим"
|
msgstr "Невидим"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:189
|
#: ../js/ui/userMenu.js:190
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Отошёл"
|
msgstr "Отошёл"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:192
|
#: ../js/ui/userMenu.js:193
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Бездействует"
|
msgstr "Бездействует"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:195
|
#: ../js/ui/userMenu.js:196
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Недоступен"
|
msgstr "Недоступен"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:744
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Сменить пользователя"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Переключить сеанс"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Уведомления"
|
msgstr "Уведомления"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:752
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Системные параметры"
|
msgstr "Системные параметры"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:760
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Сменить пользователя"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:765
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Выйти из системы"
|
msgstr "Выйти из системы"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:770
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Заблокировать"
|
msgstr "Заблокировать"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:785
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Установить обновления и выполнить перезагрузку"
|
msgstr "Установить обновления и выполнить перезагрузку"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:803
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Будет установлен статус «не беспокоить»"
|
msgstr "Будет установлен статус «не беспокоить»"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:804
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1695,7 +1702,7 @@ msgstr "Приложения"
|
|||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Поиск"
|
msgstr "Поиск"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1704,12 +1711,12 @@ msgstr ""
|
|||||||
"Извините, на сегодня нет никаких советов:\n"
|
"Извините, на сегодня нет никаких советов:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "Оракул говорит: «%s»"
|
msgstr "Оракул говорит: «%s»"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Ваше любимое «пасхальное яйцо»"
|
msgstr "Ваше любимое «пасхальное яйцо»"
|
||||||
|
|
||||||
@ -1746,24 +1753,24 @@ msgstr[2] "%u входов"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Системные звуки"
|
msgstr "Системные звуки"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Показать номер версии"
|
msgstr "Показать номер версии"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Режим, используемый GDM для окна входа в систему"
|
msgstr "Режим, используемый GDM для окна входа в систему"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Использовать для экрана входа в систему определённый режим, например «gdm»"
|
"Использовать для экрана входа в систему определённый режим, например «gdm»"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Список возможных режимов"
|
msgstr "Список возможных режимов"
|
||||||
|
|
||||||
#: ../src/shell-app.c:621
|
#: ../src/shell-app.c:622
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "Не удалось запустить «%s»"
|
msgstr "Не удалось запустить «%s»"
|
||||||
@ -1788,6 +1795,9 @@ msgstr "По умолчанию"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Пользователь отклонил диалог аутентификации"
|
msgstr "Пользователь отклонил диалог аутентификации"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "Переключить сеанс"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "отключённые провайдеры OpenSearch"
|
#~ msgstr "отключённые провайдеры OpenSearch"
|
||||||
|
|
||||||
|
150
po/sl.po
150
po/sl.po
@ -8,8 +8,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 06:44+0000\n"
|
"POT-Creation-Date: 2012-10-16 00:16+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-25 08:56+0100\n"
|
"PO-Revision-Date: 2012-10-16 07:53+0100\n"
|
||||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||||
"Language: Slovenian\n"
|
"Language: Slovenian\n"
|
||||||
@ -37,6 +37,14 @@ msgstr "Sistem"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Pokaži sporočilno vrstico"
|
msgstr "Pokaži sporočilno vrstico"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Pokaži vse programe"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Odpri meni programov"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "Gnome lupina"
|
msgstr "Gnome lupina"
|
||||||
@ -119,51 +127,59 @@ msgid "Keybinding to open the application menu."
|
|||||||
msgstr "Tipkovna bližnjica, ki odpre meni programov."
|
msgstr "Tipkovna bližnjica, ki odpre meni programov."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Tipkovna bližnjica, ki odpre pogled \"Pokaži programe\""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr "Tipkovna bližnjica, ki odpre pogled \"Pokaži programe\" v pregledu dejavnosti."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Tipkovna bližnjica za preklop vidnosti vrstice sporočanja"
|
msgstr "Tipkovna bližnjica za preklop vidnosti vrstice sporočanja"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Tipkovna bližnjica za preklop vidnosti vrstice sporočanja."
|
msgstr "Tipkovna bližnjica za preklop vidnosti vrstice sporočanja."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Tipkovna bližnjica za preklop snemalnika zaslona"
|
msgstr "Tipkovna bližnjica za preklop snemalnika zaslona"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Tipkovna bližnjica za začetek in ustavitev vgrajenega snemalnika zaslona"
|
msgstr "Tipkovna bližnjica za začetek in ustavitev vgrajenega snemalnika zaslona"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Katera tipkovnica naj bo uporabljena?"
|
msgstr "Katera tipkovnica naj bo uporabljena?"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Vrsta tipkovnice za uporabo."
|
msgstr "Vrsta tipkovnice za uporabo."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Hitrost sličic uporabljena za snemanje zaslonskega posnetka."
|
msgstr "Hitrost sličic uporabljena za snemanje zaslonskega posnetka."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
||||||
msgstr "Hitrost sličic shranjenega končnega zaslonskega posnetka v sličicah na sekundo."
|
msgstr "Hitrost sličic shranjenega končnega zaslonskega posnetka v sličicah na sekundo."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Uporabljen GStreamer cevovod za kodiranje zaslonskega posnetka."
|
msgstr "Uporabljen GStreamer cevovod za kodiranje zaslonskega posnetka."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, 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 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
|
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 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 "Nastavi cevovod programa GStreamer, ki se uporablja za kodiranje posnetkov. Ta sledi skladnji, ki se uporablja za program 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 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' in omogoča snemanje v zapis WEBM z uporabo kodeka VP8. Vrednost %T se uporablja kot ročnik za ugibanje najustreznejšega števila niti na sistemu."
|
msgstr "Nastavi cevovod programa GStreamer, ki se uporablja za kodiranje posnetkov. Ta sledi skladnji, ki se uporablja za program 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 'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' in omogoča snemanje v zapis WEBM z uporabo kodeka VP8. Vrednost %T se uporablja kot ročnik za ugibanje najustreznejšega števila niti na sistemu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Pripona datoteke uporabljene za shranjevanje zaslonskih posnetkov"
|
msgstr "Pripona datoteke uporabljene za shranjevanje zaslonskih posnetkov"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
||||||
msgstr "Ime datoteke zaslonskega posnetka bo enoznačno ime, kateremu bo dodan datum in določena pripona. Pripona mora ustrezati zapisu zabojnika."
|
msgstr "Ime datoteke zaslonskega posnetka bo enoznačno ime, kateremu bo dodan datum in določena pripona. Pripona mora ustrezati zapisu zabojnika."
|
||||||
|
|
||||||
@ -180,11 +196,11 @@ msgstr "Pripona"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "Razširitev za nastavljanje je mogoče izbrati iz spustnega seznama zgoraj."
|
msgstr "Razširitev za nastavljanje je mogoče izbrati iz spustnega seznama zgoraj."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Seja ..."
|
msgstr "Seja ..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Prijava"
|
msgstr "Prijava"
|
||||||
@ -192,27 +208,27 @@ msgstr "Prijava"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Ali je ni na seznamu?"
|
msgstr "Ali je ni na seznamu?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895
|
#: ../js/gdm/loginDialog.js:889
|
||||||
#: ../js/ui/components/networkAgent.js:137
|
#: ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162
|
#: ../js/ui/components/polkitAgent.js:162
|
||||||
#: ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195
|
#: ../js/ui/extensionDownloader.js:195
|
||||||
#: ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427
|
#: ../js/ui/status/bluetooth.js:427
|
||||||
#: ../js/ui/unlockDialog.js:166
|
#: ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Prekliči"
|
msgstr "Prekliči"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Prijava"
|
msgstr "Prijava"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Prijavno okno"
|
msgstr "Prijavno okno"
|
||||||
|
|
||||||
@ -222,9 +238,9 @@ msgid "Power"
|
|||||||
msgstr "Napajanje"
|
msgstr "Napajanje"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89
|
#: ../js/gdm/powerMenu.js:89
|
||||||
#: ../js/ui/userMenu.js:663
|
#: ../js/ui/userMenu.js:660
|
||||||
#: ../js/ui/userMenu.js:667
|
#: ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Zaustavi"
|
msgstr "Zaustavi"
|
||||||
|
|
||||||
@ -233,9 +249,9 @@ msgid "Restart"
|
|||||||
msgstr "Zaženi znova"
|
msgstr "Zaženi znova"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99
|
#: ../js/gdm/powerMenu.js:99
|
||||||
#: ../js/ui/userMenu.js:665
|
#: ../js/ui/userMenu.js:662
|
||||||
#: ../js/ui/userMenu.js:667
|
#: ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Izklop"
|
msgstr "Izklop"
|
||||||
|
|
||||||
@ -287,7 +303,7 @@ msgid "New Window"
|
|||||||
msgstr "Novo okno"
|
msgstr "Novo okno"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678
|
#: ../js/ui/appDisplay.js:678
|
||||||
#: ../js/ui/dash.js:271
|
#: ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Odstrani iz priljubljenih"
|
msgstr "Odstrani iz priljubljenih"
|
||||||
|
|
||||||
@ -451,16 +467,16 @@ msgstr "Ta teden"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Naslednji teden"
|
msgstr "Naslednji teden"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Odstranljive naprave"
|
msgstr "Odstranljive naprave"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Odpri s programom %s"
|
msgstr "Odpri s programom %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Izvrzi"
|
msgstr "Izvrzi"
|
||||||
|
|
||||||
@ -821,8 +837,8 @@ msgstr "Uredi račun"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Neznan vzrok"
|
msgstr "Neznan vzrok"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245
|
#: ../js/ui/dash.js:253
|
||||||
#: ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Pokaži programe"
|
msgstr "Pokaži programe"
|
||||||
|
|
||||||
@ -830,14 +846,14 @@ msgstr "Pokaži programe"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Nastavitve časa in datuma"
|
msgstr "Nastavitve časa in datuma"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Odpri koledar"
|
msgstr "Odpri koledar"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%a, %e. %b., %R"
|
msgstr "%a, %e. %b., %R"
|
||||||
|
|
||||||
@ -1015,11 +1031,11 @@ msgstr "Odpri"
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Odstrani"
|
msgstr "Odstrani"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2088
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Vrstica sporočanja"
|
msgstr "Vrstica sporočanja"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2551
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Podrobnosti sistema"
|
msgstr "Podrobnosti sistema"
|
||||||
|
|
||||||
@ -1084,7 +1100,7 @@ msgstr "Vnos ukaza:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d. %m."
|
msgstr "%A, %d. %m."
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@ -1093,7 +1109,7 @@ msgstr[1] "%d novo sporočilo"
|
|||||||
msgstr[2] "%d novi sporočili"
|
msgstr[2] "%d novi sporočili"
|
||||||
msgstr[3] "%d nova sporočila"
|
msgstr[3] "%d nova sporočila"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1135,7 +1151,7 @@ msgid "Remember Password"
|
|||||||
msgstr "Zapomni si geslo"
|
msgstr "Zapomni si geslo"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400
|
#: ../js/ui/shellMountOperation.js:400
|
||||||
#: ../js/ui/unlockDialog.js:169
|
#: ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Odkleni"
|
msgstr "Odkleni"
|
||||||
|
|
||||||
@ -1261,7 +1277,7 @@ msgid "Mouse Settings"
|
|||||||
msgstr "Nastavitve miške"
|
msgstr "Nastavitve miške"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269
|
#: ../js/ui/status/bluetooth.js:269
|
||||||
#: ../js/ui/status/volume.js:236
|
#: ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Nastavitve zvoka"
|
msgstr "Nastavitve zvoka"
|
||||||
|
|
||||||
@ -1562,7 +1578,7 @@ msgstr "Neznano"
|
|||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47
|
#: ../js/ui/status/volume.js:47
|
||||||
#: ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Glasnost"
|
msgstr "Glasnost"
|
||||||
|
|
||||||
@ -1570,7 +1586,7 @@ msgstr "Glasnost"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Prijava kot drug uporabnik"
|
msgstr "Prijava kot drug uporabnik"
|
||||||
|
|
||||||
@ -1598,56 +1614,51 @@ msgstr "Nedejavno"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Nedostopno"
|
msgstr "Nedostopno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618
|
#: ../js/ui/userMenu.js:740
|
||||||
#: ../js/ui/userMenu.js:759
|
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Preklopi uporabnika"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Preklopi sejo"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Obvestila"
|
msgstr "Obvestila"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Sistemske nastavitve"
|
msgstr "Sistemske nastavitve"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Preklopi uporabnika"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Odjava"
|
msgstr "Odjava"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Zakleni"
|
msgstr "Zakleni"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Namesti posodobitve in ponovno zaženi"
|
msgstr "Namesti posodobitve in ponovno zaženi"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
|
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
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."
|
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."
|
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."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Okna"
|
msgstr "Okna"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Programi"
|
msgstr "Programi"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Poišči"
|
msgstr "Poišči"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1656,12 +1667,12 @@ msgstr ""
|
|||||||
"Za danes ni modrosti:\n"
|
"Za danes ni modrosti:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "Riba %s pravi"
|
msgstr "Riba %s pravi"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Vaše priljubljeno velikonočno jajce"
|
msgstr "Vaše priljubljeno velikonočno jajce"
|
||||||
|
|
||||||
@ -1700,19 +1711,19 @@ msgstr[3] "%u dovodi naprave"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sistemski zvoki"
|
msgstr "Sistemski zvoki"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Izpiši različico"
|
msgstr "Izpiši različico"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Način uporabljen v GDM za prijavni naslov"
|
msgstr "Način uporabljen v GDM za prijavni naslov"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "Uporabi poseben način, npr.: \"gdm\" za prijavni zaslon"
|
msgstr "Uporabi poseben način, npr.: \"gdm\" za prijavni zaslon"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Seznam mogočih načinov"
|
msgstr "Seznam mogočih načinov"
|
||||||
|
|
||||||
@ -1741,6 +1752,9 @@ msgstr "Privzeto"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Uporabnik je zavrnil pogovorno okno overitve"
|
msgstr "Uporabnik je zavrnil pogovorno okno overitve"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "Preklopi sejo"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "ponudniki OpenSearch so bili onemogočeni"
|
#~ msgstr "ponudniki OpenSearch so bili onemogočeni"
|
||||||
|
|
||||||
|
161
po/sr.po
161
po/sr.po
@ -8,8 +8,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-27 05:24+0200\n"
|
"PO-Revision-Date: 2012-10-16 20:23+0200\n"
|
||||||
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
|
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
|
||||||
"Language-Team: Serbian <gnom@prevod.org>\n"
|
"Language-Team: Serbian <gnom@prevod.org>\n"
|
||||||
"Language: sr\n"
|
"Language: sr\n"
|
||||||
@ -36,6 +36,16 @@ msgstr "Систем"
|
|||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Прикажите фиоку порука"
|
msgstr "Прикажите фиоку порука"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
#| msgid "Show Applications"
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Прикажи све програме"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
#| msgid "Keybinding to open the application menu"
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Отворите изборник програма"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "Гномова шкољка"
|
msgstr "Гномова шкољка"
|
||||||
@ -143,41 +153,52 @@ msgstr "Ако је изабрано, приказује ИСО дан у нед
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Свеза тастера за отварање изборника програма"
|
msgstr "Пречица за отварање изборника програма"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Свеза тастера за отварање изборника програма."
|
msgstr "Пречица за отварање изборника програма."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
#| msgid "Keybinding to open the application menu"
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Пречица за отварање прегледа „Прикажи програме“"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
#| msgid "Keybinding to open the application menu."
|
||||||
|
msgid ""
|
||||||
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr "Пречица за отварање прегледа „Прикажи програме“ у прегледу активности."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Пречица за окидање видљивости фиоке порука"
|
msgstr "Пречица за окидање видљивости фиоке порука"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Пречица за окидање видљивости фиоке порука."
|
msgstr "Пречица за окидање видљивости фиоке порука."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Пречица за окидање читача екрана"
|
msgstr "Пречица за окидање читача екрана"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Пречица за покретање/заустављање уграђеног снимача екрана."
|
msgstr "Пречица за покретање/заустављање уграђеног снимача екрана."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Која ће тастатура бити коришћена"
|
msgstr "Која ће тастатура бити коришћена"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Врста тастатуре за употребу."
|
msgstr "Врста тастатуре за употребу."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Учестаност кадрова за видео снимак екрана."
|
msgstr "Учестаност кадрова за видео снимак екрана."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -185,11 +206,11 @@ msgstr ""
|
|||||||
"Учестаност кадрова снимка снимљених помоћу Гномове шкољке у кадровима по "
|
"Учестаност кадрова снимка снимљених помоћу Гномове шкољке у кадровима по "
|
||||||
"секунди."
|
"секунди."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Процесни ланац Гстримера коришћен за кодирање видео снимка екрана"
|
msgstr "Процесни ланац Гстримера коришћен за кодирање видео снимка екрана"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@ -216,11 +237,11 @@ msgstr ""
|
|||||||
"ВП8 кодек. „%T“ се користи као носилац за откривање при оптималном прорачуну "
|
"ВП8 кодек. „%T“ се користи као носилац за откривање при оптималном прорачуну "
|
||||||
"нити на систему."
|
"нити на систему."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Проширење датотеке за чување видео снимака екрана"
|
msgstr "Проширење датотеке за чување видео снимака екрана"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -243,11 +264,11 @@ msgstr "Проширење"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "Изаберите проширење за подешавање користећи прозорче за избор."
|
msgstr "Изаберите проширење за подешавање користећи прозорче за избор."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:527
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Сесија..."
|
msgstr "Сесија..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:675
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Пријавите се"
|
msgstr "Пријавите се"
|
||||||
@ -255,34 +276,33 @@ msgstr "Пријавите се"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:742
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Није на списку?"
|
msgstr "Није на списку?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Откажи"
|
msgstr "Откажи"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:900
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Пријави ме"
|
msgstr "Пријави ме"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1239
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Прозор за пријављивање"
|
msgstr "Прозор за пријављивање"
|
||||||
|
|
||||||
#. Translators: accessible name of the power menu in the login screen
|
#. Translators: accessible name of the power menu in the login screen
|
||||||
#: ../js/gdm/powerMenu.js:35
|
#: ../js/gdm/powerMenu.js:35
|
||||||
#| msgid "Power Off"
|
|
||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Угаси"
|
msgstr "Угаси"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Обустави"
|
msgstr "Обустави"
|
||||||
|
|
||||||
@ -290,8 +310,8 @@ msgstr "Обустави"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Поново покрени"
|
msgstr "Поново покрени"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:777
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Угаси"
|
msgstr "Угаси"
|
||||||
|
|
||||||
@ -342,7 +362,7 @@ msgstr "ПОДЕШАВАЊА"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Нови прозор"
|
msgstr "Нови прозор"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Уклони из омиљених"
|
msgstr "Уклони из омиљених"
|
||||||
|
|
||||||
@ -506,16 +526,16 @@ msgstr "Ове недеље"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Следеће недеље"
|
msgstr "Следеће недеље"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Уклоњиви уређаји"
|
msgstr "Уклоњиви уређаји"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Отвори програмом %s"
|
msgstr "Отвори програмом %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Избаци"
|
msgstr "Избаци"
|
||||||
|
|
||||||
@ -884,7 +904,7 @@ msgstr "Уреди налог"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Непознат разлог"
|
msgstr "Непознат разлог"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Прикажи програме"
|
msgstr "Прикажи програме"
|
||||||
|
|
||||||
@ -892,14 +912,14 @@ msgstr "Прикажи програме"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Подешавања датума и времена"
|
msgstr "Подешавања датума и времена"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Отвори календар"
|
msgstr "Отвори календар"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e. %b, %R"
|
msgstr "%A, %e. %b, %R"
|
||||||
|
|
||||||
@ -1012,11 +1032,11 @@ msgstr "Инсталирај"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Да преузмем и да инсталирам „%s“ са extensions.gnome.org?"
|
msgstr "Да преузмем и да инсталирам „%s“ са extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "фиока"
|
msgstr "фиока"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Тастатура"
|
msgstr "Тастатура"
|
||||||
@ -1069,19 +1089,19 @@ msgstr "Прикажи код"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Веб страница"
|
msgstr "Веб страница"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1081
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Отвори"
|
msgstr "Отвори"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Уклони"
|
msgstr "Уклони"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2055
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Фиока порука"
|
msgstr "Фиока порука"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2511
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Подаци о систему"
|
msgstr "Подаци о систему"
|
||||||
|
|
||||||
@ -1145,7 +1165,7 @@ msgstr "Унесите наредбу:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d. %B"
|
msgstr "%A, %d. %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@ -1154,7 +1174,7 @@ msgstr[1] "%d нове поруке"
|
|||||||
msgstr[2] "%d нових порука"
|
msgstr[2] "%d нових порука"
|
||||||
msgstr[3] "Једна нова порука"
|
msgstr[3] "Једна нова порука"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1195,7 +1215,7 @@ msgstr "Лозинка"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Запамти лозинку"
|
msgstr "Запамти лозинку"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Откључај"
|
msgstr "Откључај"
|
||||||
|
|
||||||
@ -1313,7 +1333,7 @@ msgstr "Подешавања тастатуре"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Подешавања миша"
|
msgstr "Подешавања миша"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Подешавања звука"
|
msgstr "Подешавања звука"
|
||||||
|
|
||||||
@ -1606,7 +1626,7 @@ msgid "Unknown"
|
|||||||
msgstr "Непознат"
|
msgstr "Непознат"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Јачина звука"
|
msgstr "Јачина звука"
|
||||||
|
|
||||||
@ -1614,7 +1634,7 @@ msgstr "Јачина звука"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Микрофон"
|
msgstr "Микрофон"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Пријавите се као други корсник"
|
msgstr "Пријавите се као други корсник"
|
||||||
|
|
||||||
@ -1642,39 +1662,35 @@ msgstr "Мирује"
|
|||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Недоступан"
|
msgstr "Недоступан"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Промени корисника"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:619
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Промени сесију"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:743
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Обавештења"
|
msgstr "Обавештења"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:751
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Подешавања система"
|
msgstr "Подешавања система"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Промени корисника"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Одјави ме"
|
msgstr "Одјави ме"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:769
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Закључај"
|
msgstr "Закључај"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:784
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Инсталирај ажурирања и поново покрени"
|
msgstr "Инсталирај ажурирања и поново покрени"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:802
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Ваше стање ћаскања ће бити постављено на заузето"
|
msgstr "Ваше стање ћаскања ће бити постављено на заузето"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:803
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1683,19 +1699,19 @@ msgstr ""
|
|||||||
"мрежи је подешено тако да ће остали знати да ви не можете видети њихове "
|
"мрежи је подешено тако да ће остали знати да ви не можете видети њихове "
|
||||||
"поруке."
|
"поруке."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Прозори"
|
msgstr "Прозори"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Програми"
|
msgstr "Програми"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Тражи"
|
msgstr "Тражи"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1704,12 +1720,12 @@ msgstr ""
|
|||||||
"Извините, данас за вас нема мудрости:\n"
|
"Извините, данас за вас нема мудрости:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "Пророк је рекао %s"
|
msgstr "Пророк је рекао %s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Ваше омиљено ускршње јаје"
|
msgstr "Ваше омиљено ускршње јаје"
|
||||||
|
|
||||||
@ -1748,19 +1764,19 @@ msgstr[3] "Један улаз"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Системски звуци"
|
msgstr "Системски звуци"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Исписује издање"
|
msgstr "Исписује издање"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Који режим користи ГДМ за екран пријављивања"
|
msgstr "Који режим користи ГДМ за екран пријављивања"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "Користи нарочит режим, нпр. „gdm“ за екран пријављивања"
|
msgstr "Користи нарочит режим, нпр. „gdm“ за екран пријављивања"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Исписује могуће режиме"
|
msgstr "Исписује могуће режиме"
|
||||||
|
|
||||||
@ -1789,6 +1805,9 @@ msgstr "Основно"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Корисник је одбацио прозорче за потврђивање идентитета"
|
msgstr "Корисник је одбацио прозорче за потврђивање идентитета"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "Промени сесију"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "искључени „OpenSearch“ достављачи"
|
#~ msgstr "искључени „OpenSearch“ достављачи"
|
||||||
|
|
||||||
|
207
po/sr@latin.po
207
po/sr@latin.po
@ -8,8 +8,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-09-19 11:02+0000\n"
|
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||||
"PO-Revision-Date: 2012-09-20 20:20+0200\n"
|
"PO-Revision-Date: 2012-10-16 20:23+0200\n"
|
||||||
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
|
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
|
||||||
"Language-Team: Serbian <gnom@prevod.org>\n"
|
"Language-Team: Serbian <gnom@prevod.org>\n"
|
||||||
"Language: sr\n"
|
"Language: sr\n"
|
||||||
@ -29,15 +29,23 @@ msgid "Record a screencast"
|
|||||||
msgstr "Snimite radni tok ekrana"
|
msgstr "Snimite radni tok ekrana"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||||
#| msgid "File System"
|
|
||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr "Sistem"
|
msgstr "Sistem"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:2
|
#: ../data/50-gnome-shell-system.xml.in.h:2
|
||||||
#| msgid "Message Tray"
|
|
||||||
msgid "Show the message tray"
|
msgid "Show the message tray"
|
||||||
msgstr "Prikažite fioku poruka"
|
msgstr "Prikažite fioku poruka"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||||
|
#| msgid "Show Applications"
|
||||||
|
msgid "Show all applications"
|
||||||
|
msgstr "Prikaži sve programe"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
#| msgid "Keybinding to open the application menu"
|
||||||
|
msgid "Open the application menu"
|
||||||
|
msgstr "Otvorite izbornik programa"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
msgstr "Gnomova školjka"
|
msgstr "Gnomova školjka"
|
||||||
@ -145,41 +153,52 @@ msgstr "Ako je izabrano, prikazuje ISO dan u nedelji u kalendaru."
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Sveza tastera za otvaranje izbornika programa"
|
msgstr "Prečica za otvaranje izbornika programa"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Sveza tastera za otvaranje izbornika programa."
|
msgstr "Prečica za otvaranje izbornika programa."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
|
#| msgid "Keybinding to open the application menu"
|
||||||
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
|
msgstr "Prečica za otvaranje pregleda „Prikaži programe“"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
|
#| msgid "Keybinding to open the application menu."
|
||||||
|
msgid ""
|
||||||
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
|
msgstr "Prečica za otvaranje pregleda „Prikaži programe“ u pregledu aktivnosti."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Prečica za okidanje vidljivosti fioke poruka"
|
msgstr "Prečica za okidanje vidljivosti fioke poruka"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Prečica za okidanje vidljivosti fioke poruka."
|
msgstr "Prečica za okidanje vidljivosti fioke poruka."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Prečica za okidanje čitača ekrana"
|
msgstr "Prečica za okidanje čitača ekrana"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Prečica za pokretanje/zaustavljanje ugrađenog snimača ekrana."
|
msgstr "Prečica za pokretanje/zaustavljanje ugrađenog snimača ekrana."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Koja će tastatura biti korišćena"
|
msgstr "Koja će tastatura biti korišćena"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Vrsta tastature za upotrebu."
|
msgstr "Vrsta tastature za upotrebu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Učestanost kadrova za video snimak ekrana."
|
msgstr "Učestanost kadrova za video snimak ekrana."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -187,23 +206,12 @@ msgstr ""
|
|||||||
"Učestanost kadrova snimka snimljenih pomoću Gnomove školjke u kadrovima po "
|
"Učestanost kadrova snimka snimljenih pomoću Gnomove školjke u kadrovima po "
|
||||||
"sekundi."
|
"sekundi."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Procesni lanac Gstrimera korišćen za kodiranje video snimka ekrana"
|
msgstr "Procesni lanac Gstrimera korišćen za kodiranje video snimka ekrana"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
#, no-c-format
|
#, 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 '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."
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -221,19 +229,19 @@ msgstr ""
|
|||||||
"da ima jedan nepovezani padiljon sinhronizacije za čuvanje snimljenog videa. "
|
"da ima jedan nepovezani padiljon sinhronizacije za čuvanje snimljenog videa. "
|
||||||
"Normalno će imati nepovezan padiljon izvora; izlaz sa ovog padiljona će biti "
|
"Normalno će imati nepovezan padiljon izvora; izlaz sa ovog padiljona će biti "
|
||||||
"zapisivan u izlaznu datoteku. Ipak procesni lanac može da radi sa sopstvenim "
|
"zapisivan u izlaznu datoteku. Ipak procesni lanac može da radi sa sopstvenim "
|
||||||
"izlazom — ovo može biti korišćeno za slanje izlaza na ajskast server preko "
|
"izlazom — ovo može biti korišćeno za slanje izlaza na ajskast server preko d"
|
||||||
"d„shout2sen“ ili slične naredbe. Kada ova opcija nije postavljena ili je "
|
"„shout2sen“ ili slične naredbe. Kada ova opcija nije postavljena ili je "
|
||||||
"postavljena na neku praznu vrednost, biće korišćen podrazumevani procesni "
|
"postavljena na neku praznu vrednost, biće korišćen podrazumevani procesni "
|
||||||
"lanac. A to je trenutno „vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 "
|
"lanac. A to je trenutno „vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 "
|
||||||
"deadline=1000000 threads=%T ! queue ! webmmux“ i zapisuje u „WEBM“ "
|
"deadline=1000000 threads=%T ! queue ! webmmux“ i zapisuje u „WEBM“ koristeći "
|
||||||
"koristeći VP8 kodek. „%T“ se koristi kao nosilac za otkrivanje pri optimalnom "
|
"VP8 kodek. „%T“ se koristi kao nosilac za otkrivanje pri optimalnom proračunu "
|
||||||
"proračunu niti na sistemu."
|
"niti na sistemu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Proširenje datoteke za čuvanje video snimaka ekrana"
|
msgstr "Proširenje datoteke za čuvanje video snimaka ekrana"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -256,11 +264,11 @@ msgstr "Proširenje"
|
|||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr "Izaberite proširenje za podešavanje koristeći prozorče za izbor."
|
msgstr "Izaberite proširenje za podešavanje koristeći prozorče za izbor."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:526
|
#: ../js/gdm/loginDialog.js:529
|
||||||
msgid "Session..."
|
msgid "Session..."
|
||||||
msgstr "Sesija..."
|
msgstr "Sesija..."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:674
|
#: ../js/gdm/loginDialog.js:677
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Prijavite se"
|
msgstr "Prijavite se"
|
||||||
@ -268,42 +276,46 @@ msgstr "Prijavite se"
|
|||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:741
|
#: ../js/gdm/loginDialog.js:736
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Nije na spisku?"
|
msgstr "Nije na spisku?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:894 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Otkaži"
|
msgstr "Otkaži"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:899
|
#: ../js/gdm/loginDialog.js:894
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Prijavi me"
|
msgstr "Prijavi me"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1238
|
#: ../js/gdm/loginDialog.js:1215
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Prozor za prijavljivanje"
|
msgstr "Prozor za prijavljivanje"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:88 ../js/ui/userMenu.js:658 ../js/ui/userMenu.js:662
|
#. Translators: accessible name of the power menu in the login screen
|
||||||
#: ../js/ui/userMenu.js:773
|
#: ../js/gdm/powerMenu.js:35
|
||||||
|
msgid "Power"
|
||||||
|
msgstr "Ugasi"
|
||||||
|
|
||||||
|
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||||
|
#: ../js/ui/userMenu.js:775
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Obustavi"
|
msgstr "Obustavi"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:93
|
#: ../js/gdm/powerMenu.js:94
|
||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Ponovo pokreni"
|
msgstr "Ponovo pokreni"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:98 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:662
|
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||||
#: ../js/ui/userMenu.js:772
|
#: ../js/ui/userMenu.js:774
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Ugasi"
|
msgstr "Ugasi"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:148
|
#: ../js/gdm/util.js:148
|
||||||
#| msgid "Authentication Required"
|
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
msgstr "Greška potvrđivanja identiteta"
|
msgstr "Greška potvrđivanja identiteta"
|
||||||
|
|
||||||
@ -350,7 +362,7 @@ msgstr "PODEŠAVANJA"
|
|||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Novi prozor"
|
msgstr "Novi prozor"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Ukloni iz omiljenih"
|
msgstr "Ukloni iz omiljenih"
|
||||||
|
|
||||||
@ -514,16 +526,16 @@ msgstr "Ove nedelje"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Sledeće nedelje"
|
msgstr "Sledeće nedelje"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:278
|
#: ../js/ui/components/autorunManager.js:297
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Uklonjivi uređaji"
|
msgstr "Uklonjivi uređaji"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:575
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Otvori programom %s"
|
msgstr "Otvori programom %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:601
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Izbaci"
|
msgstr "Izbaci"
|
||||||
|
|
||||||
@ -892,7 +904,7 @@ msgstr "Uredi nalog"
|
|||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Nepoznat razlog"
|
msgstr "Nepoznat razlog"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Prikaži programe"
|
msgstr "Prikaži programe"
|
||||||
|
|
||||||
@ -900,14 +912,14 @@ msgstr "Prikaži programe"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Podešavanja datuma i vremena"
|
msgstr "Podešavanja datuma i vremena"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:109
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Otvori kalendar"
|
msgstr "Otvori kalendar"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:201
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e. %b, %R"
|
msgstr "%A, %e. %b, %R"
|
||||||
|
|
||||||
@ -1020,11 +1032,11 @@ msgstr "Instaliraj"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Da preuzmem i da instaliram „%s“ sa extensions.gnome.org?"
|
msgstr "Da preuzmem i da instaliram „%s“ sa extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:327
|
#: ../js/ui/keyboard.js:337
|
||||||
msgid "tray"
|
msgid "tray"
|
||||||
msgstr "fioka"
|
msgstr "fioka"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:194
|
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||||
#: ../js/ui/status/power.js:205
|
#: ../js/ui/status/power.js:205
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastatura"
|
msgstr "Tastatura"
|
||||||
@ -1077,19 +1089,19 @@ msgstr "Prikaži kod"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Veb stranica"
|
msgstr "Veb stranica"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1080
|
#: ../js/ui/messageTray.js:1081
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Otvori"
|
msgstr "Otvori"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1087
|
#: ../js/ui/messageTray.js:1088
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Ukloni"
|
msgstr "Ukloni"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2052
|
#: ../js/ui/messageTray.js:1540
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Fioka poruka"
|
msgstr "Fioka poruka"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2508
|
#: ../js/ui/messageTray.js:2547
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Podaci o sistemu"
|
msgstr "Podaci o sistemu"
|
||||||
|
|
||||||
@ -1153,7 +1165,7 @@ msgstr "Unesite naredbu:"
|
|||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d. %B"
|
msgstr "%A, %d. %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:144
|
#: ../js/ui/screenShield.js:143
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@ -1162,7 +1174,7 @@ msgstr[1] "%d nove poruke"
|
|||||||
msgstr[2] "%d novih poruka"
|
msgstr[2] "%d novih poruka"
|
||||||
msgstr[3] "Jedna nova poruka"
|
msgstr[3] "Jedna nova poruka"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:146
|
#: ../js/ui/screenShield.js:145
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@ -1203,7 +1215,7 @@ msgstr "Lozinka"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Zapamti lozinku"
|
msgstr "Zapamti lozinku"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Otključaj"
|
msgstr "Otključaj"
|
||||||
|
|
||||||
@ -1321,7 +1333,7 @@ msgstr "Podešavanja tastature"
|
|||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Podešavanja miša"
|
msgstr "Podešavanja miša"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Podešavanja zvuka"
|
msgstr "Podešavanja zvuka"
|
||||||
|
|
||||||
@ -1379,11 +1391,11 @@ msgstr "Molim unesite PIN naznačen na uređaju."
|
|||||||
msgid "OK"
|
msgid "OK"
|
||||||
msgstr "U redu"
|
msgstr "U redu"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:227
|
#: ../js/ui/status/keyboard.js:228
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Prikaži raspored tastature"
|
msgstr "Prikaži raspored tastature"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:232
|
#: ../js/ui/status/keyboard.js:233
|
||||||
msgid "Region and Language Settings"
|
msgid "Region and Language Settings"
|
||||||
msgstr "Podešavanja regiona i jezika"
|
msgstr "Podešavanja regiona i jezika"
|
||||||
|
|
||||||
@ -1614,7 +1626,7 @@ msgid "Unknown"
|
|||||||
msgstr "Nepoznat"
|
msgstr "Nepoznat"
|
||||||
|
|
||||||
#. Translators: This is the label for audio volume
|
#. Translators: This is the label for audio volume
|
||||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Jačina zvuka"
|
msgstr "Jačina zvuka"
|
||||||
|
|
||||||
@ -1622,67 +1634,63 @@ msgstr "Jačina zvuka"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:176
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Prijavite se kao drugi korsnik"
|
msgstr "Prijavite se kao drugi korsnik"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:175
|
#: ../js/ui/userMenu.js:180
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Dostupan"
|
msgstr "Dostupan"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:178
|
#: ../js/ui/userMenu.js:183
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Zauzet"
|
msgstr "Zauzet"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:181
|
#: ../js/ui/userMenu.js:186
|
||||||
msgid "Invisible"
|
msgid "Invisible"
|
||||||
msgstr "Nevidljiv"
|
msgstr "Nevidljiv"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:184
|
#: ../js/ui/userMenu.js:189
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Odsutan"
|
msgstr "Odsutan"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:187
|
#: ../js/ui/userMenu.js:192
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Miruje"
|
msgstr "Miruje"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:190
|
#: ../js/ui/userMenu.js:195
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Nedostupan"
|
msgstr "Nedostupan"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:613 ../js/ui/userMenu.js:754
|
#: ../js/ui/userMenu.js:740
|
||||||
msgid "Switch User"
|
|
||||||
msgstr "Promeni korisnika"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:614
|
|
||||||
msgid "Switch Session"
|
|
||||||
msgstr "Promeni sesiju"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:738
|
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Obaveštenja"
|
msgstr "Obaveštenja"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:746
|
#: ../js/ui/userMenu.js:748
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Podešavanja sistema"
|
msgstr "Podešavanja sistema"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:759
|
#: ../js/ui/userMenu.js:756
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Promeni korisnika"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:761
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Odjavi me"
|
msgstr "Odjavi me"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:766
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Zaključaj"
|
msgstr "Zaključaj"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:779
|
#: ../js/ui/userMenu.js:781
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Instaliraj ažuriranja i ponovo pokreni"
|
msgstr "Instaliraj ažuriranja i ponovo pokreni"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:797
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Vaše stanje ćaskanja će biti postavljeno na zauzeto"
|
msgstr "Vaše stanje ćaskanja će biti postavljeno na zauzeto"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:798
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@ -1691,19 +1699,19 @@ msgstr ""
|
|||||||
"mreži je podešeno tako da će ostali znati da vi ne možete videti njihove "
|
"mreži je podešeno tako da će ostali znati da vi ne možete videti njihove "
|
||||||
"poruke."
|
"poruke."
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:87
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Prozori"
|
msgstr "Prozori"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:89
|
#: ../js/ui/viewSelector.js:91
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Programi"
|
msgstr "Programi"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:93
|
#: ../js/ui/viewSelector.js:95
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Traži"
|
msgstr "Traži"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:119
|
#: ../js/ui/wanda.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sorry, no wisdom for you today:\n"
|
"Sorry, no wisdom for you today:\n"
|
||||||
@ -1712,12 +1720,12 @@ msgstr ""
|
|||||||
"Izvinite, danas za vas nema mudrosti:\n"
|
"Izvinite, danas za vas nema mudrosti:\n"
|
||||||
"%s"
|
"%s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:123
|
#: ../js/ui/wanda.js:121
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s the Oracle says"
|
msgid "%s the Oracle says"
|
||||||
msgstr "Prorok je rekao %s"
|
msgstr "Prorok je rekao %s"
|
||||||
|
|
||||||
#: ../js/ui/wanda.js:164
|
#: ../js/ui/wanda.js:162
|
||||||
msgid "Your favorite Easter Egg"
|
msgid "Your favorite Easter Egg"
|
||||||
msgstr "Vaše omiljeno uskršnje jaje"
|
msgstr "Vaše omiljeno uskršnje jaje"
|
||||||
|
|
||||||
@ -1756,19 +1764,19 @@ msgstr[3] "Jedan ulaz"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sistemski zvuci"
|
msgstr "Sistemski zvuci"
|
||||||
|
|
||||||
#: ../src/main.c:330
|
#: ../src/main.c:332
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Ispisuje izdanje"
|
msgstr "Ispisuje izdanje"
|
||||||
|
|
||||||
#: ../src/main.c:336
|
#: ../src/main.c:338
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Koji režim koristi GDM za ekran prijavljivanja"
|
msgstr "Koji režim koristi GDM za ekran prijavljivanja"
|
||||||
|
|
||||||
#: ../src/main.c:342
|
#: ../src/main.c:344
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "Koristi naročit režim, npr. „gdm“ za ekran prijavljivanja"
|
msgstr "Koristi naročit režim, npr. „gdm“ za ekran prijavljivanja"
|
||||||
|
|
||||||
#: ../src/main.c:348
|
#: ../src/main.c:350
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Ispisuje moguće režime"
|
msgstr "Ispisuje moguće režime"
|
||||||
|
|
||||||
@ -1797,6 +1805,9 @@ msgstr "Osnovno"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Korisnik je odbacio prozorče za potvrđivanje identiteta"
|
msgstr "Korisnik je odbacio prozorče za potvrđivanje identiteta"
|
||||||
|
|
||||||
|
#~ msgid "Switch Session"
|
||||||
|
#~ msgstr "Promeni sesiju"
|
||||||
|
|
||||||
#~ msgid "disabled OpenSearch providers"
|
#~ msgid "disabled OpenSearch providers"
|
||||||
#~ msgstr "isključeni „OpenSearch“ dostavljači"
|
#~ msgstr "isključeni „OpenSearch“ dostavljači"
|
||||||
|
|
||||||
|
24
po/ug.po
24
po/ug.po
@ -218,12 +218,12 @@ msgstr "يىغقۇچقا قوش"
|
|||||||
#: ../js/ui/appFavorites.js:91
|
#: ../js/ui/appFavorites.js:91
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "%s يىغقۇچىڭىزغا قوشۇلدى."
|
msgstr "%s يىغقۇچىڭىزغا قوشۇلدى."
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:122
|
#: ../js/ui/appFavorites.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s يىغقۇچىڭىزدىن چىقىرىۋېتىلىدۇ."
|
msgstr "%s يىغقۇچىڭىزدىن چىقىرىۋېتىلىدۇ."
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
@ -437,7 +437,7 @@ msgstr "يېقىنقى تۈرلەر"
|
|||||||
#: ../js/ui/endSessionDialog.js:63
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Log Out %s"
|
msgid "Log Out %s"
|
||||||
msgstr "%s تىزىمدىن چىقىش"
|
msgstr "%s تىزىمدىن چىقىش"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -452,7 +452,7 @@ msgstr ""
|
|||||||
#: ../js/ui/endSessionDialog.js:66
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s will be logged out automatically in %d seconds."
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
msgstr "%s تىزىمدىن %d سېكۇنتتىن كېيىن ئۆزلۈكىدىن چىقىسىز."
|
msgstr "%s تىزىمدىن %d سېكۇنتتىن كېيىن ئۆزلۈكىدىن چىقىسىز."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:67
|
#: ../js/ui/endSessionDialog.js:67
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -566,7 +566,7 @@ msgstr "سىزىقچە"
|
|||||||
#: ../js/ui/panel.js:533
|
#: ../js/ui/panel.js:533
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "%s چېكىن"
|
msgstr "%s چېكىن"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. Button on the left side of the panel.
|
||||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
@ -799,7 +799,7 @@ msgstr "رەت قىل"
|
|||||||
#: ../js/ui/status/bluetooth.js:408
|
#: ../js/ui/status/bluetooth.js:408
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing confirmation for %s"
|
msgid "Pairing confirmation for %s"
|
||||||
msgstr "%s نىڭ جەزملىشىنى جۈپلەشتۈرۈۋاتىدۇ"
|
msgstr "%s نىڭ جەزملىشىنى جۈپلەشتۈرۈۋاتىدۇ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -823,7 +823,7 @@ msgstr "ماسلاشمىدى"
|
|||||||
#: ../js/ui/status/bluetooth.js:441
|
#: ../js/ui/status/bluetooth.js:441
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing request for %s"
|
msgid "Pairing request for %s"
|
||||||
msgstr "%s دىن كەلگەن جۈپلەش ئىلتىماسى"
|
msgstr "%s دىن كەلگەن جۈپلەش ئىلتىماسى"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:449
|
#: ../js/ui/status/bluetooth.js:449
|
||||||
msgid "Please enter the PIN mentioned on the device."
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
@ -1074,22 +1074,22 @@ msgstr "مىكروفون"
|
|||||||
#: ../js/ui/telepathyClient.js:335
|
#: ../js/ui/telepathyClient.js:335
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s توردا."
|
msgstr "%s توردا."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:340
|
#: ../js/ui/telepathyClient.js:340
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr "%s توردا يوق."
|
msgstr "%s توردا يوق."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:343
|
#: ../js/ui/telepathyClient.js:343
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr "%s يوق."
|
msgstr "%s يوق."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:346
|
#: ../js/ui/telepathyClient.js:346
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr "%s ئالدىراش."
|
msgstr "%s ئالدىراش."
|
||||||
|
|
||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
@ -1114,7 +1114,7 @@ msgstr "ئىزدە"
|
|||||||
#: ../js/ui/windowAttentionHandler.js:42
|
#: ../js/ui/windowAttentionHandler.js:42
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has finished starting"
|
msgid "%s has finished starting"
|
||||||
msgstr "%s باشلاشنى تاماملىدى"
|
msgstr "%s باشلاشنى تاماملىدى"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:44
|
#: ../js/ui/windowAttentionHandler.js:44
|
||||||
#, c-format
|
#, c-format
|
||||||
|
@ -113,7 +113,6 @@ shell_public_headers_h = \
|
|||||||
shell-generic-container.h \
|
shell-generic-container.h \
|
||||||
shell-gtk-embed.h \
|
shell-gtk-embed.h \
|
||||||
shell-global.h \
|
shell-global.h \
|
||||||
shell-idle-monitor.h \
|
|
||||||
shell-invert-lightness-effect.h \
|
shell-invert-lightness-effect.h \
|
||||||
shell-mobile-providers.h \
|
shell-mobile-providers.h \
|
||||||
shell-mount-operation.h \
|
shell-mount-operation.h \
|
||||||
@ -158,7 +157,6 @@ libgnome_shell_la_SOURCES = \
|
|||||||
shell-generic-container.c \
|
shell-generic-container.c \
|
||||||
shell-gtk-embed.c \
|
shell-gtk-embed.c \
|
||||||
shell-global.c \
|
shell-global.c \
|
||||||
shell-idle-monitor.c \
|
|
||||||
shell-invert-lightness-effect.c \
|
shell-invert-lightness-effect.c \
|
||||||
shell-keyring-prompt.h \
|
shell-keyring-prompt.h \
|
||||||
shell-keyring-prompt.c \
|
shell-keyring-prompt.c \
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#define HANDLE_LIBICAL_MEMORY
|
#define HANDLE_LIBICAL_MEMORY
|
||||||
#include <libecal/libecal.h>
|
#include <libecal/libecal.h>
|
||||||
#include <libedataserverui/libedataserverui.h>
|
|
||||||
|
|
||||||
#undef CALENDAR_ENABLE_DEBUG
|
#undef CALENDAR_ENABLE_DEBUG
|
||||||
#include "calendar-debug.h"
|
#include "calendar-debug.h"
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define HANDLE_LIBICAL_MEMORY
|
#define HANDLE_LIBICAL_MEMORY
|
||||||
#include <libecal/libecal.h>
|
#include <libecal/libecal.h>
|
||||||
@ -985,9 +984,11 @@ on_name_lost (GDBusConnection *connection,
|
|||||||
const gchar *name,
|
const gchar *name,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
GMainLoop *main_loop = user_data;
|
||||||
|
|
||||||
g_print ("gnome-shell-calendar-server[%d]: Lost (or failed to acquire) the name " BUS_NAME " - exiting\n",
|
g_print ("gnome-shell-calendar-server[%d]: Lost (or failed to acquire) the name " BUS_NAME " - exiting\n",
|
||||||
(gint) getpid ());
|
(gint) getpid ());
|
||||||
gtk_main_quit ();
|
g_main_loop_quit (main_loop);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1003,11 +1004,13 @@ stdin_channel_io_func (GIOChannel *source,
|
|||||||
GIOCondition condition,
|
GIOCondition condition,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
|
GMainLoop *main_loop = data;
|
||||||
|
|
||||||
if (condition & G_IO_HUP)
|
if (condition & G_IO_HUP)
|
||||||
{
|
{
|
||||||
g_debug ("gnome-shell-calendar-server[%d]: Got HUP on stdin - exiting\n",
|
g_debug ("gnome-shell-calendar-server[%d]: Got HUP on stdin - exiting\n",
|
||||||
(gint) getpid ());
|
(gint) getpid ());
|
||||||
gtk_main_quit ();
|
g_main_loop_quit (main_loop);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1022,6 +1025,7 @@ main (int argc,
|
|||||||
{
|
{
|
||||||
GError *error;
|
GError *error;
|
||||||
GOptionContext *opt_context;
|
GOptionContext *opt_context;
|
||||||
|
GMainLoop *main_loop;
|
||||||
gint ret;
|
gint ret;
|
||||||
guint name_owner_id;
|
guint name_owner_id;
|
||||||
GIOChannel *stdin_channel;
|
GIOChannel *stdin_channel;
|
||||||
@ -1031,9 +1035,7 @@ main (int argc,
|
|||||||
name_owner_id = 0;
|
name_owner_id = 0;
|
||||||
stdin_channel = NULL;
|
stdin_channel = NULL;
|
||||||
|
|
||||||
/* We need to initialize GTK+ since evolution-data-server may decide to use
|
g_type_init ();
|
||||||
* GTK+ to pop up a dialog box */
|
|
||||||
gtk_init (&argc, &argv);
|
|
||||||
|
|
||||||
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
|
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
|
||||||
g_assert (introspection_data != NULL);
|
g_assert (introspection_data != NULL);
|
||||||
@ -1048,11 +1050,15 @@ main (int argc,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main_loop = g_main_loop_new (NULL, FALSE);
|
||||||
|
|
||||||
stdin_channel = g_io_channel_unix_new (STDIN_FILENO);
|
stdin_channel = g_io_channel_unix_new (STDIN_FILENO);
|
||||||
g_io_add_watch (stdin_channel,
|
g_io_add_watch_full (stdin_channel,
|
||||||
G_IO_HUP,
|
G_PRIORITY_DEFAULT,
|
||||||
stdin_channel_io_func,
|
G_IO_HUP,
|
||||||
NULL);
|
stdin_channel_io_func,
|
||||||
|
g_main_loop_ref (main_loop),
|
||||||
|
(GDestroyNotify) g_main_loop_unref);
|
||||||
|
|
||||||
name_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
|
name_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
|
||||||
BUS_NAME,
|
BUS_NAME,
|
||||||
@ -1061,10 +1067,12 @@ main (int argc,
|
|||||||
on_bus_acquired,
|
on_bus_acquired,
|
||||||
on_name_acquired,
|
on_name_acquired,
|
||||||
on_name_lost,
|
on_name_lost,
|
||||||
NULL,
|
g_main_loop_ref (main_loop),
|
||||||
NULL);
|
(GDestroyNotify) g_main_loop_unref);
|
||||||
|
|
||||||
gtk_main ();
|
g_main_loop_run (main_loop);
|
||||||
|
|
||||||
|
g_main_loop_unref (main_loop);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ def show_version(option, opt_str, value, parser):
|
|||||||
def wait_for_dbus_name(wait_name):
|
def wait_for_dbus_name(wait_name):
|
||||||
loop = GLib.MainLoop()
|
loop = GLib.MainLoop()
|
||||||
|
|
||||||
def on_name_appeared(connection, name, name_owner, *args):
|
def on_name_appeared(connection, name, new_owner, *args):
|
||||||
if not (name == wait_name and new_owner != ''):
|
if not (name == wait_name and new_owner != ''):
|
||||||
return
|
return
|
||||||
loop.quit()
|
loop.quit()
|
||||||
@ -60,13 +60,18 @@ def start_perf_helper():
|
|||||||
wait_for_dbus_name (PERF_HELPER_NAME)
|
wait_for_dbus_name (PERF_HELPER_NAME)
|
||||||
|
|
||||||
def stop_perf_helper():
|
def stop_perf_helper():
|
||||||
proxy = Gio.DBusProxy(g_bus_type=Gio.BusType.SESSION,
|
bus = Gio.bus_get_sync(Gio.BusType.SESSION, None)
|
||||||
g_name=PERF_HELPER_NAME,
|
|
||||||
g_interface=PERF_HELPER_IFACE,
|
proxy = Gio.DBusProxy.new_sync(bus,
|
||||||
g_object_path=PERF_HELPER_PATH)
|
Gio.DBusProxyFlags.NONE,
|
||||||
|
None,
|
||||||
|
PERF_HELPER_NAME,
|
||||||
|
PERF_HELPER_PATH,
|
||||||
|
PERF_HELPER_IFACE,
|
||||||
|
None)
|
||||||
proxy.Exit()
|
proxy.Exit()
|
||||||
|
|
||||||
def start_shell(extra_args, perf_output=None):
|
def start_shell(perf_output=None):
|
||||||
# Set up environment
|
# Set up environment
|
||||||
env = dict(os.environ)
|
env = dict(os.environ)
|
||||||
env['SHELL_PERF_MODULE'] = options.perf
|
env['SHELL_PERF_MODULE'] = options.perf
|
||||||
@ -76,19 +81,21 @@ def start_shell(extra_args, perf_output=None):
|
|||||||
env['SHELL_PERF_OUTPUT'] = perf_output
|
env['SHELL_PERF_OUTPUT'] = perf_output
|
||||||
|
|
||||||
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||||
|
args = []
|
||||||
args.append(os.path.join(self_dir, 'gnome-shell'))
|
args.append(os.path.join(self_dir, 'gnome-shell'))
|
||||||
# pass on any additional arguments
|
|
||||||
args += extra_args
|
if options.replace:
|
||||||
|
args.append('--replace')
|
||||||
|
|
||||||
return subprocess.Popen(args, env=env)
|
return subprocess.Popen(args, env=env)
|
||||||
|
|
||||||
def run_shell(args, perf_output=None):
|
def run_shell(perf_output=None):
|
||||||
# we do no additional supervision of gnome-shell,
|
# we do no additional supervision of gnome-shell,
|
||||||
# beyond that of wait
|
# beyond that of wait
|
||||||
# in particular, we don't kill the shell upon
|
# in particular, we don't kill the shell upon
|
||||||
# receving a KeyboardInterrupt, as we expect to be
|
# receving a KeyboardInterrupt, as we expect to be
|
||||||
# in the same process group
|
# in the same process group
|
||||||
shell = start_shell(extra_args, perf_output=perf_output)
|
shell = start_shell(perf_output=perf_output)
|
||||||
shell.wait()
|
shell.wait()
|
||||||
return shell.returncode == 0
|
return shell.returncode == 0
|
||||||
|
|
||||||
@ -173,7 +180,7 @@ def upload_performance_report(report_text):
|
|||||||
print "Performance report upload failed with status %d" % response.status
|
print "Performance report upload failed with status %d" % response.status
|
||||||
print response.read()
|
print response.read()
|
||||||
|
|
||||||
def run_performance_test(args):
|
def run_performance_test():
|
||||||
iters = options.perf_iters
|
iters = options.perf_iters
|
||||||
if options.perf_warmup:
|
if options.perf_warmup:
|
||||||
iters += 1
|
iters += 1
|
||||||
@ -192,7 +199,7 @@ def run_performance_test(args):
|
|||||||
# Run the performance test and collect the output as JSON
|
# Run the performance test and collect the output as JSON
|
||||||
normal_exit = False
|
normal_exit = False
|
||||||
try:
|
try:
|
||||||
normal_exit = run_shell(args, perf_output=output_file)
|
normal_exit = run_shell(perf_output=output_file)
|
||||||
except:
|
except:
|
||||||
stop_perf_helper()
|
stop_perf_helper()
|
||||||
raise
|
raise
|
||||||
@ -288,7 +295,8 @@ def run_performance_test(args):
|
|||||||
|
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
parser.add_option("", "--perf", metavar="PERF_MODULE",
|
parser.add_option("", "--perf", metavar="PERF_MODULE",
|
||||||
help="Specify the name of a performance module to run")
|
help="Specify the name of a performance module to run",
|
||||||
|
default="core")
|
||||||
parser.add_option("", "--perf-iters", type="int", metavar="ITERS",
|
parser.add_option("", "--perf-iters", type="int", metavar="ITERS",
|
||||||
help="Numbers of iterations of performance module to run",
|
help="Numbers of iterations of performance module to run",
|
||||||
default=1)
|
default=1)
|
||||||
@ -301,9 +309,16 @@ parser.add_option("", "--perf-upload", action="store_true",
|
|||||||
parser.add_option("", "--version", action="callback", callback=show_version,
|
parser.add_option("", "--version", action="callback", callback=show_version,
|
||||||
help="Display version and exit")
|
help="Display version and exit")
|
||||||
|
|
||||||
|
parser.add_option("-r", "--replace", action="store_true",
|
||||||
|
help="Replace the running window manager")
|
||||||
|
|
||||||
options, args = parser.parse_args()
|
options, args = parser.parse_args()
|
||||||
|
|
||||||
normal_exit = run_performance_test(args)
|
if args:
|
||||||
|
parser.print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
normal_exit = run_performance_test()
|
||||||
if normal_exit:
|
if normal_exit:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
else:
|
else:
|
||||||
|
@ -240,8 +240,6 @@ main (int argc,
|
|||||||
{
|
{
|
||||||
guint name_owner_id;
|
guint name_owner_id;
|
||||||
|
|
||||||
g_type_init ();
|
|
||||||
|
|
||||||
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
|
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
|
||||||
g_assert (introspection_data != NULL);
|
g_assert (introspection_data != NULL);
|
||||||
|
|
||||||
|
@ -361,8 +361,6 @@ main (int argc, char **argv)
|
|||||||
int ecode;
|
int ecode;
|
||||||
TpDebugSender *sender;
|
TpDebugSender *sender;
|
||||||
|
|
||||||
g_type_init ();
|
|
||||||
|
|
||||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||||
textdomain (GETTEXT_PACKAGE);
|
textdomain (GETTEXT_PACKAGE);
|
||||||
|
@ -92,7 +92,6 @@ main(int argc, char **argv)
|
|||||||
g_error ("option parsing failed: %s", error->message);
|
g_error ("option parsing failed: %s", error->message);
|
||||||
|
|
||||||
setlocale (LC_ALL, "");
|
setlocale (LC_ALL, "");
|
||||||
g_type_init ();
|
|
||||||
|
|
||||||
_shell_global_init (NULL);
|
_shell_global_init (NULL);
|
||||||
global = shell_global_get ();
|
global = shell_global_get ();
|
||||||
|
@ -73,6 +73,7 @@ struct _ShellApp
|
|||||||
char *window_id_string;
|
char *window_id_string;
|
||||||
|
|
||||||
char *casefolded_name;
|
char *casefolded_name;
|
||||||
|
char *casefolded_generic_name;
|
||||||
char *name_collation_key;
|
char *name_collation_key;
|
||||||
char *casefolded_exec;
|
char *casefolded_exec;
|
||||||
char **casefolded_keywords;
|
char **casefolded_keywords;
|
||||||
@ -1310,6 +1311,7 @@ static void
|
|||||||
shell_app_init_search_data (ShellApp *app)
|
shell_app_init_search_data (ShellApp *app)
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
|
const char *generic_name;
|
||||||
const char *exec;
|
const char *exec;
|
||||||
const char * const *keywords;
|
const char * const *keywords;
|
||||||
char *normalized_exec;
|
char *normalized_exec;
|
||||||
@ -1319,6 +1321,12 @@ shell_app_init_search_data (ShellApp *app)
|
|||||||
name = g_app_info_get_name (G_APP_INFO (appinfo));
|
name = g_app_info_get_name (G_APP_INFO (appinfo));
|
||||||
app->casefolded_name = shell_util_normalize_and_casefold (name);
|
app->casefolded_name = shell_util_normalize_and_casefold (name);
|
||||||
|
|
||||||
|
generic_name = g_desktop_app_info_get_generic_name (appinfo);
|
||||||
|
if (generic_name)
|
||||||
|
app->casefolded_generic_name = shell_util_normalize_and_casefold (generic_name);
|
||||||
|
else
|
||||||
|
app->casefolded_generic_name = NULL;
|
||||||
|
|
||||||
exec = g_app_info_get_executable (G_APP_INFO (appinfo));
|
exec = g_app_info_get_executable (G_APP_INFO (appinfo));
|
||||||
normalized_exec = shell_util_normalize_and_casefold (exec);
|
normalized_exec = shell_util_normalize_and_casefold (exec);
|
||||||
app->casefolded_exec = trim_exec_line (normalized_exec);
|
app->casefolded_exec = trim_exec_line (normalized_exec);
|
||||||
@ -1388,6 +1396,18 @@ _shell_app_match_search_terms (ShellApp *app,
|
|||||||
current_match = MATCH_SUBSTRING;
|
current_match = MATCH_SUBSTRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (app->casefolded_generic_name)
|
||||||
|
{
|
||||||
|
p = strstr (app->casefolded_generic_name, term);
|
||||||
|
if (p != NULL)
|
||||||
|
{
|
||||||
|
if (p == app->casefolded_generic_name || *(p - 1) == ' ')
|
||||||
|
current_match = MATCH_PREFIX;
|
||||||
|
else if (current_match < MATCH_PREFIX)
|
||||||
|
current_match = MATCH_SUBSTRING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (app->casefolded_exec)
|
if (app->casefolded_exec)
|
||||||
{
|
{
|
||||||
p = strstr (app->casefolded_exec, term);
|
p = strstr (app->casefolded_exec, term);
|
||||||
@ -1497,6 +1517,7 @@ shell_app_finalize (GObject *object)
|
|||||||
g_free (app->window_id_string);
|
g_free (app->window_id_string);
|
||||||
|
|
||||||
g_free (app->casefolded_name);
|
g_free (app->casefolded_name);
|
||||||
|
g_free (app->casefolded_generic_name);
|
||||||
g_free (app->name_collation_key);
|
g_free (app->name_collation_key);
|
||||||
g_free (app->casefolded_exec);
|
g_free (app->casefolded_exec);
|
||||||
g_strfreev (app->casefolded_keywords);
|
g_strfreev (app->casefolded_keywords);
|
||||||
|
@ -1693,43 +1693,3 @@ shell_global_get_session_mode (ShellGlobal *global)
|
|||||||
|
|
||||||
return global->session_mode;
|
return global->session_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* shell_global_create_xrootpmap_texture:
|
|
||||||
* @global: The #ShellGlobal
|
|
||||||
*
|
|
||||||
* This returns the _XROOTPMAP_ID pixmap that gdm should have stuffed
|
|
||||||
* in the root window. The goal here is to allow a smooth fade between
|
|
||||||
* plymouth and the shell greeter. This is also a workaround for gjs not
|
|
||||||
* supporting raw xlib types.
|
|
||||||
*
|
|
||||||
* Returns: (transfer floating): A #ClutterActor that represents the
|
|
||||||
* _XROOTPMAP_ID pixmap property from the root window.
|
|
||||||
*/
|
|
||||||
ClutterActor *
|
|
||||||
shell_global_create_xrootpmap_texture (ShellGlobal *global)
|
|
||||||
{
|
|
||||||
Atom res_type;
|
|
||||||
int res_format;
|
|
||||||
unsigned long res_nitems, bytesafter;
|
|
||||||
unsigned char *data;
|
|
||||||
Pixmap root_pixmap_id = None;
|
|
||||||
|
|
||||||
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
|
|
||||||
|
|
||||||
if (XGetWindowProperty (global->xdisplay,
|
|
||||||
DefaultRootWindow (global->xdisplay),
|
|
||||||
XInternAtom (global->xdisplay, "_XROOTPMAP_ID", False),
|
|
||||||
0, G_MAXLONG, False, XA_PIXMAP,
|
|
||||||
&res_type, &res_format, &res_nitems, &bytesafter, &data) == Success)
|
|
||||||
{
|
|
||||||
if (res_type == XA_PIXMAP && res_format == 32 && res_nitems == 1)
|
|
||||||
root_pixmap_id = * (Pixmap *) data;
|
|
||||||
XFree (data);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (root_pixmap_id != None)
|
|
||||||
return clutter_x11_texture_pixmap_new_with_pixmap (root_pixmap_id);
|
|
||||||
else
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
@ -136,8 +136,6 @@ void shell_global_reexec_self (ShellGlobal *global);
|
|||||||
|
|
||||||
const char * shell_global_get_session_mode (ShellGlobal *global);
|
const char * shell_global_get_session_mode (ShellGlobal *global);
|
||||||
|
|
||||||
ClutterActor * shell_global_create_xrootpmap_texture (ShellGlobal *global);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_GLOBAL_H__ */
|
#endif /* __SHELL_GLOBAL_H__ */
|
||||||
|
@ -1,429 +0,0 @@
|
|||||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
|
||||||
*
|
|
||||||
* Adapted from gnome-session/gnome-session/gs-idle-monitor.c
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Authors: William Jon McCann <mccann@jhu.edu>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <time.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
#include <X11/extensions/sync.h>
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gdk/gdkx.h>
|
|
||||||
#include <gdk/gdk.h>
|
|
||||||
|
|
||||||
#include "shell-idle-monitor.h"
|
|
||||||
|
|
||||||
#define SHELL_IDLE_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitorPrivate))
|
|
||||||
|
|
||||||
struct ShellIdleMonitorPrivate
|
|
||||||
{
|
|
||||||
Display *display;
|
|
||||||
|
|
||||||
GHashTable *watches;
|
|
||||||
int sync_event_base;
|
|
||||||
XSyncCounter counter;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
Display *display;
|
|
||||||
guint id;
|
|
||||||
XSyncValue interval;
|
|
||||||
ShellIdleMonitorWatchFunc callback;
|
|
||||||
gpointer user_data;
|
|
||||||
GDestroyNotify notify;
|
|
||||||
XSyncAlarm xalarm_positive;
|
|
||||||
XSyncAlarm xalarm_negative;
|
|
||||||
} ShellIdleMonitorWatch;
|
|
||||||
|
|
||||||
static guint32 watch_serial = 1;
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (ShellIdleMonitor, shell_idle_monitor, G_TYPE_OBJECT)
|
|
||||||
|
|
||||||
static gint64
|
|
||||||
_xsyncvalue_to_int64 (XSyncValue value)
|
|
||||||
{
|
|
||||||
return ((guint64) XSyncValueHigh32 (value)) << 32
|
|
||||||
| (guint64) XSyncValueLow32 (value);
|
|
||||||
}
|
|
||||||
|
|
||||||
static XSyncValue
|
|
||||||
_int64_to_xsyncvalue (gint64 value)
|
|
||||||
{
|
|
||||||
XSyncValue ret;
|
|
||||||
|
|
||||||
XSyncIntsToValue (&ret, value, ((guint64)value) >> 32);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
shell_idle_monitor_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
ShellIdleMonitor *monitor;
|
|
||||||
|
|
||||||
monitor = SHELL_IDLE_MONITOR (object);
|
|
||||||
|
|
||||||
if (monitor->priv->watches != NULL) {
|
|
||||||
g_hash_table_destroy (monitor->priv->watches);
|
|
||||||
monitor->priv->watches = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (shell_idle_monitor_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
_find_alarm (gpointer key,
|
|
||||||
ShellIdleMonitorWatch *watch,
|
|
||||||
XSyncAlarm *alarm)
|
|
||||||
{
|
|
||||||
/* g_debug ("Searching for %d in %d,%d", (int)*alarm, (int)watch->xalarm_positive, (int)watch->xalarm_negative); */
|
|
||||||
if (watch->xalarm_positive == *alarm
|
|
||||||
|| watch->xalarm_negative == *alarm) {
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ShellIdleMonitorWatch *
|
|
||||||
find_watch_for_alarm (ShellIdleMonitor *monitor,
|
|
||||||
XSyncAlarm alarm)
|
|
||||||
{
|
|
||||||
ShellIdleMonitorWatch *watch;
|
|
||||||
|
|
||||||
watch = g_hash_table_find (monitor->priv->watches,
|
|
||||||
(GHRFunc)_find_alarm,
|
|
||||||
&alarm);
|
|
||||||
return watch;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
handle_alarm_notify_event (ShellIdleMonitor *monitor,
|
|
||||||
XSyncAlarmNotifyEvent *alarm_event)
|
|
||||||
{
|
|
||||||
ShellIdleMonitorWatch *watch;
|
|
||||||
gboolean condition;
|
|
||||||
|
|
||||||
if (alarm_event->state == XSyncAlarmDestroyed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
watch = find_watch_for_alarm (monitor, alarm_event->alarm);
|
|
||||||
|
|
||||||
if (watch == NULL) {
|
|
||||||
/* g_debug ("Unable to find watch for alarm %d", (int)alarm_event->alarm); */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* g_debug ("Watch %d fired, idle time = %" G_GINT64_FORMAT,
|
|
||||||
watch->id,
|
|
||||||
_xsyncvalue_to_int64 (alarm_event->counter_value)); */
|
|
||||||
|
|
||||||
if (alarm_event->alarm == watch->xalarm_positive) {
|
|
||||||
condition = TRUE;
|
|
||||||
} else {
|
|
||||||
condition = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (watch->callback != NULL) {
|
|
||||||
watch->callback (monitor,
|
|
||||||
watch->id,
|
|
||||||
condition,
|
|
||||||
watch->user_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GdkFilterReturn
|
|
||||||
xevent_filter (GdkXEvent *xevent,
|
|
||||||
GdkEvent *event,
|
|
||||||
ShellIdleMonitor *monitor)
|
|
||||||
{
|
|
||||||
XEvent *ev;
|
|
||||||
XSyncAlarmNotifyEvent *alarm_event;
|
|
||||||
|
|
||||||
ev = xevent;
|
|
||||||
if (ev->xany.type != monitor->priv->sync_event_base + XSyncAlarmNotify) {
|
|
||||||
return GDK_FILTER_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
alarm_event = xevent;
|
|
||||||
|
|
||||||
handle_alarm_notify_event (monitor, alarm_event);
|
|
||||||
|
|
||||||
return GDK_FILTER_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
init_xsync (ShellIdleMonitor *monitor)
|
|
||||||
{
|
|
||||||
int sync_error_base;
|
|
||||||
int res;
|
|
||||||
int major;
|
|
||||||
int minor;
|
|
||||||
int i;
|
|
||||||
int ncounters;
|
|
||||||
XSyncSystemCounter *counters;
|
|
||||||
|
|
||||||
res = XSyncQueryExtension (monitor->priv->display,
|
|
||||||
&monitor->priv->sync_event_base,
|
|
||||||
&sync_error_base);
|
|
||||||
if (! res) {
|
|
||||||
g_warning ("ShellIdleMonitor: Sync extension not present");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = XSyncInitialize (monitor->priv->display, &major, &minor);
|
|
||||||
if (! res) {
|
|
||||||
g_warning ("ShellIdleMonitor: Unable to initialize Sync extension");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
counters = XSyncListSystemCounters (monitor->priv->display, &ncounters);
|
|
||||||
for (i = 0; i < ncounters; i++) {
|
|
||||||
if (counters[i].name != NULL
|
|
||||||
&& strcmp (counters[i].name, "IDLETIME") == 0) {
|
|
||||||
monitor->priv->counter = counters[i].counter;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
XSyncFreeSystemCounterList (counters);
|
|
||||||
|
|
||||||
if (monitor->priv->counter == None) {
|
|
||||||
g_warning ("ShellIdleMonitor: IDLETIME counter not found");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gdk_window_add_filter (NULL, (GdkFilterFunc)xevent_filter, monitor);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GObject *
|
|
||||||
shell_idle_monitor_constructor (GType type,
|
|
||||||
guint n_construct_properties,
|
|
||||||
GObjectConstructParam *construct_properties)
|
|
||||||
{
|
|
||||||
ShellIdleMonitor *monitor;
|
|
||||||
|
|
||||||
monitor = SHELL_IDLE_MONITOR (G_OBJECT_CLASS (shell_idle_monitor_parent_class)->constructor (type,
|
|
||||||
n_construct_properties,
|
|
||||||
construct_properties));
|
|
||||||
|
|
||||||
monitor->priv->display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
|
||||||
|
|
||||||
if (! init_xsync (monitor)) {
|
|
||||||
g_object_unref (monitor);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return G_OBJECT (monitor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
shell_idle_monitor_class_init (ShellIdleMonitorClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
|
|
||||||
object_class->dispose = shell_idle_monitor_dispose;
|
|
||||||
object_class->constructor = shell_idle_monitor_constructor;
|
|
||||||
|
|
||||||
g_type_class_add_private (klass, sizeof (ShellIdleMonitorPrivate));
|
|
||||||
}
|
|
||||||
|
|
||||||
static guint32
|
|
||||||
get_next_watch_serial (void)
|
|
||||||
{
|
|
||||||
guint32 serial;
|
|
||||||
|
|
||||||
serial = watch_serial++;
|
|
||||||
|
|
||||||
if ((gint32)watch_serial < 0) {
|
|
||||||
watch_serial = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: make sure it isn't in the hash */
|
|
||||||
|
|
||||||
return serial;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ShellIdleMonitorWatch *
|
|
||||||
idle_monitor_watch_new (guint interval)
|
|
||||||
{
|
|
||||||
ShellIdleMonitorWatch *watch;
|
|
||||||
|
|
||||||
watch = g_slice_new0 (ShellIdleMonitorWatch);
|
|
||||||
watch->interval = _int64_to_xsyncvalue ((gint64)interval);
|
|
||||||
watch->id = get_next_watch_serial ();
|
|
||||||
watch->xalarm_positive = None;
|
|
||||||
watch->xalarm_negative = None;
|
|
||||||
|
|
||||||
return watch;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
idle_monitor_watch_free (ShellIdleMonitorWatch *watch)
|
|
||||||
{
|
|
||||||
if (watch == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (watch->notify != NULL) {
|
|
||||||
watch->notify (watch->user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (watch->xalarm_positive != None) {
|
|
||||||
XSyncDestroyAlarm (watch->display, watch->xalarm_positive);
|
|
||||||
}
|
|
||||||
if (watch->xalarm_negative != None) {
|
|
||||||
XSyncDestroyAlarm (watch->display, watch->xalarm_negative);
|
|
||||||
}
|
|
||||||
g_slice_free (ShellIdleMonitorWatch, watch);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
shell_idle_monitor_init (ShellIdleMonitor *monitor)
|
|
||||||
{
|
|
||||||
monitor->priv = SHELL_IDLE_MONITOR_GET_PRIVATE (monitor);
|
|
||||||
|
|
||||||
monitor->priv->watches = g_hash_table_new_full (NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(GDestroyNotify)idle_monitor_watch_free);
|
|
||||||
|
|
||||||
monitor->priv->counter = None;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* shell_idle_monitor_get:
|
|
||||||
*
|
|
||||||
* Returns: (transfer none): the global #ShellIdleMonitor.
|
|
||||||
*/
|
|
||||||
ShellIdleMonitor *
|
|
||||||
shell_idle_monitor_get (void)
|
|
||||||
{
|
|
||||||
static ShellIdleMonitor *idle_monitor;
|
|
||||||
|
|
||||||
if (G_UNLIKELY (idle_monitor == NULL))
|
|
||||||
idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
return idle_monitor;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
_xsync_alarm_set (ShellIdleMonitor *monitor,
|
|
||||||
ShellIdleMonitorWatch *watch)
|
|
||||||
{
|
|
||||||
XSyncAlarmAttributes attr;
|
|
||||||
XSyncValue delta;
|
|
||||||
guint flags;
|
|
||||||
|
|
||||||
flags = XSyncCACounter
|
|
||||||
| XSyncCAValueType
|
|
||||||
| XSyncCATestType
|
|
||||||
| XSyncCAValue
|
|
||||||
| XSyncCADelta
|
|
||||||
| XSyncCAEvents;
|
|
||||||
|
|
||||||
XSyncIntToValue (&delta, 0);
|
|
||||||
attr.trigger.counter = monitor->priv->counter;
|
|
||||||
attr.trigger.value_type = XSyncAbsolute;
|
|
||||||
attr.trigger.wait_value = watch->interval;
|
|
||||||
attr.delta = delta;
|
|
||||||
attr.events = TRUE;
|
|
||||||
|
|
||||||
attr.trigger.test_type = XSyncPositiveTransition;
|
|
||||||
if (watch->xalarm_positive != None) {
|
|
||||||
/* g_debug ("ShellIdleMonitor: updating alarm for positive transition wait=%" G_GINT64_FORMAT,
|
|
||||||
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
|
|
||||||
XSyncChangeAlarm (monitor->priv->display, watch->xalarm_positive, flags, &attr);
|
|
||||||
} else {
|
|
||||||
/* g_debug ("ShellIdleMonitor: creating new alarm for positive transition wait=%" G_GINT64_FORMAT,
|
|
||||||
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
|
|
||||||
watch->xalarm_positive = XSyncCreateAlarm (monitor->priv->display, flags, &attr);
|
|
||||||
}
|
|
||||||
|
|
||||||
attr.trigger.wait_value = _int64_to_xsyncvalue (_xsyncvalue_to_int64 (watch->interval) - 1);
|
|
||||||
attr.trigger.test_type = XSyncNegativeTransition;
|
|
||||||
if (watch->xalarm_negative != None) {
|
|
||||||
/* g_debug ("ShellIdleMonitor: updating alarm for negative transition wait=%" G_GINT64_FORMAT,
|
|
||||||
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
|
|
||||||
XSyncChangeAlarm (monitor->priv->display, watch->xalarm_negative, flags, &attr);
|
|
||||||
} else {
|
|
||||||
/* g_debug ("ShellIdleMonitor: creating new alarm for negative transition wait=%" G_GINT64_FORMAT,
|
|
||||||
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
|
|
||||||
watch->xalarm_negative = XSyncCreateAlarm (monitor->priv->display, flags, &attr);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
guint
|
|
||||||
shell_idle_monitor_add_watch (ShellIdleMonitor *monitor,
|
|
||||||
guint interval,
|
|
||||||
ShellIdleMonitorWatchFunc callback,
|
|
||||||
gpointer user_data,
|
|
||||||
GDestroyNotify notify)
|
|
||||||
{
|
|
||||||
ShellIdleMonitorWatch *watch;
|
|
||||||
|
|
||||||
g_return_val_if_fail (SHELL_IS_IDLE_MONITOR (monitor), 0);
|
|
||||||
g_return_val_if_fail (callback != NULL, 0);
|
|
||||||
|
|
||||||
watch = idle_monitor_watch_new (interval);
|
|
||||||
watch->display = monitor->priv->display;
|
|
||||||
watch->callback = callback;
|
|
||||||
watch->user_data = user_data;
|
|
||||||
watch->notify = notify;
|
|
||||||
|
|
||||||
_xsync_alarm_set (monitor, watch);
|
|
||||||
|
|
||||||
g_hash_table_insert (monitor->priv->watches,
|
|
||||||
GUINT_TO_POINTER (watch->id),
|
|
||||||
watch);
|
|
||||||
return watch->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
shell_idle_monitor_remove_watch (ShellIdleMonitor *monitor,
|
|
||||||
guint id)
|
|
||||||
{
|
|
||||||
g_return_if_fail (SHELL_IS_IDLE_MONITOR (monitor));
|
|
||||||
|
|
||||||
g_hash_table_remove (monitor->priv->watches,
|
|
||||||
GUINT_TO_POINTER (id));
|
|
||||||
}
|
|
||||||
|
|
||||||
gint64
|
|
||||||
shell_idle_monitor_get_idletime (ShellIdleMonitor *monitor)
|
|
||||||
{
|
|
||||||
XSyncValue value;
|
|
||||||
|
|
||||||
if (!XSyncQueryCounter (monitor->priv->display, monitor->priv->counter, &value))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return _xsyncvalue_to_int64 (value);
|
|
||||||
}
|
|
@ -1,74 +0,0 @@
|
|||||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
|
||||||
*
|
|
||||||
* Adapted from gnome-session/gnome-session/gs-idle-monitor.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Authors: William Jon McCann <mccann@jhu.edu>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SHELL_IDLE_MONITOR_H
|
|
||||||
#define __SHELL_IDLE_MONITOR_H
|
|
||||||
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define SHELL_TYPE_IDLE_MONITOR (shell_idle_monitor_get_type ())
|
|
||||||
#define SHELL_IDLE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitor))
|
|
||||||
#define SHELL_IDLE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitorClass))
|
|
||||||
#define SHELL_IS_IDLE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_IDLE_MONITOR))
|
|
||||||
#define SHELL_IS_IDLE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_IDLE_MONITOR))
|
|
||||||
#define SHELL_IDLE_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitorClass))
|
|
||||||
|
|
||||||
typedef struct ShellIdleMonitorPrivate ShellIdleMonitorPrivate;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
GObject parent;
|
|
||||||
ShellIdleMonitorPrivate *priv;
|
|
||||||
} ShellIdleMonitor;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
GObjectClass parent_class;
|
|
||||||
} ShellIdleMonitorClass;
|
|
||||||
|
|
||||||
typedef void (*ShellIdleMonitorWatchFunc) (ShellIdleMonitor *monitor,
|
|
||||||
guint id,
|
|
||||||
gboolean condition,
|
|
||||||
gpointer user_data);
|
|
||||||
|
|
||||||
GType shell_idle_monitor_get_type (void);
|
|
||||||
|
|
||||||
ShellIdleMonitor * shell_idle_monitor_get (void);
|
|
||||||
|
|
||||||
guint shell_idle_monitor_add_watch (ShellIdleMonitor *monitor,
|
|
||||||
guint interval,
|
|
||||||
ShellIdleMonitorWatchFunc callback,
|
|
||||||
gpointer user_data,
|
|
||||||
GDestroyNotify notify);
|
|
||||||
|
|
||||||
void shell_idle_monitor_remove_watch (ShellIdleMonitor *monitor,
|
|
||||||
guint id);
|
|
||||||
|
|
||||||
gint64 shell_idle_monitor_get_idletime (ShellIdleMonitor *monitor);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __SHELL_IDLE_MONITOR_H */
|
|
@ -37,10 +37,11 @@
|
|||||||
|
|
||||||
#define ISO_3166_COUNTRY_CODES DATADIR "/zoneinfo/iso3166.tab"
|
#define ISO_3166_COUNTRY_CODES DATADIR "/zoneinfo/iso3166.tab"
|
||||||
|
|
||||||
|
static ShellCountryMobileProvider *country_mobile_provider_new (const char *country_code,
|
||||||
|
const gchar *country_name);
|
||||||
|
|
||||||
static GHashTable *
|
static GHashTable *
|
||||||
read_country_codes (void)
|
read_country_codes (const gchar *country_codes)
|
||||||
{
|
{
|
||||||
GHashTable *table;
|
GHashTable *table;
|
||||||
GIOChannel *channel;
|
GIOChannel *channel;
|
||||||
@ -48,18 +49,21 @@ read_country_codes (void)
|
|||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
GIOStatus status;
|
GIOStatus status;
|
||||||
|
|
||||||
channel = g_io_channel_new_file (ISO_3166_COUNTRY_CODES, "r", &error);
|
channel = g_io_channel_new_file (country_codes, "r", &error);
|
||||||
if (!channel) {
|
if (!channel) {
|
||||||
if (error) {
|
if (error) {
|
||||||
g_warning ("Could not read " ISO_3166_COUNTRY_CODES ": %s", error->message);
|
g_warning ("Could not read %s: %s", country_codes, error->message);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
} else
|
} else
|
||||||
g_warning ("Could not read " ISO_3166_COUNTRY_CODES ": Unknown error");
|
g_warning ("Could not read %s: Unknown error", country_codes);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
table = g_hash_table_new_full (g_str_hash,
|
||||||
|
g_str_equal,
|
||||||
|
g_free,
|
||||||
|
(GDestroyNotify)shell_country_mobile_provider_unref);
|
||||||
buffer = g_string_sized_new (32);
|
buffer = g_string_sized_new (32);
|
||||||
|
|
||||||
status = G_IO_STATUS_NORMAL;
|
status = G_IO_STATUS_NORMAL;
|
||||||
@ -69,6 +73,7 @@ read_country_codes (void)
|
|||||||
switch (status) {
|
switch (status) {
|
||||||
case G_IO_STATUS_NORMAL:
|
case G_IO_STATUS_NORMAL:
|
||||||
if (buffer->str[0] != '#') {
|
if (buffer->str[0] != '#') {
|
||||||
|
ShellCountryMobileProvider *country_provider;
|
||||||
char **pieces;
|
char **pieces;
|
||||||
|
|
||||||
pieces = g_strsplit (buffer->str, "\t", 2);
|
pieces = g_strsplit (buffer->str, "\t", 2);
|
||||||
@ -80,7 +85,8 @@ read_country_codes (void)
|
|||||||
pieces[1] = g_strdup (_("United Kingdom"));
|
pieces[1] = g_strdup (_("United Kingdom"));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_hash_table_insert (table, pieces[0], pieces[1]);
|
country_provider = country_mobile_provider_new (pieces[0], pieces[1]);
|
||||||
|
g_hash_table_insert (table, pieces[0], country_provider);
|
||||||
g_free (pieces);
|
g_free (pieces);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +123,6 @@ typedef enum {
|
|||||||
} MobileContextState;
|
} MobileContextState;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GHashTable *country_codes;
|
|
||||||
GHashTable *table;
|
GHashTable *table;
|
||||||
|
|
||||||
char *current_country;
|
char *current_country;
|
||||||
@ -276,6 +281,86 @@ shell_mobile_provider_get_type (void)
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ShellCountryMobileProvider *
|
||||||
|
country_mobile_provider_new (const char *country_code,
|
||||||
|
const gchar *country_name)
|
||||||
|
{
|
||||||
|
ShellCountryMobileProvider *country_provider;
|
||||||
|
|
||||||
|
country_provider = g_slice_new0 (ShellCountryMobileProvider);
|
||||||
|
country_provider->refs = 1;
|
||||||
|
country_provider->country_code = g_strdup (country_code);
|
||||||
|
country_provider->country_name = g_strdup (country_name);
|
||||||
|
return country_provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShellCountryMobileProvider *
|
||||||
|
shell_country_mobile_provider_ref (ShellCountryMobileProvider *country_provider)
|
||||||
|
{
|
||||||
|
country_provider->refs++;
|
||||||
|
|
||||||
|
return country_provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
shell_country_mobile_provider_unref (ShellCountryMobileProvider *country_provider)
|
||||||
|
{
|
||||||
|
if (--country_provider->refs == 0) {
|
||||||
|
g_free (country_provider->country_code);
|
||||||
|
g_free (country_provider->country_name);
|
||||||
|
g_slist_free_full (country_provider->providers,
|
||||||
|
(GDestroyNotify) shell_mobile_provider_unref);
|
||||||
|
g_slice_free (ShellCountryMobileProvider, country_provider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_country_mobile_provider_get_country_code:
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): the code of the country.
|
||||||
|
*/
|
||||||
|
const gchar *
|
||||||
|
shell_country_mobile_provider_get_country_code (ShellCountryMobileProvider *country_provider)
|
||||||
|
{
|
||||||
|
return country_provider->country_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_country_mobile_provider_get_country_name:
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): the name of the country.
|
||||||
|
*/
|
||||||
|
const gchar *
|
||||||
|
shell_country_mobile_provider_get_country_name (ShellCountryMobileProvider *country_provider)
|
||||||
|
{
|
||||||
|
return country_provider->country_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_country_mobile_provider_get_providers:
|
||||||
|
*
|
||||||
|
* Returns: (element-type Shell.MobileProvider) (transfer none): the
|
||||||
|
* list of #ShellMobileProvider this country exposes.
|
||||||
|
*/
|
||||||
|
GSList *
|
||||||
|
shell_country_mobile_provider_get_providers (ShellCountryMobileProvider *country_provider)
|
||||||
|
{
|
||||||
|
return country_provider->providers;
|
||||||
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
shell_country_mobile_provider_get_type (void)
|
||||||
|
{
|
||||||
|
static GType type = 0;
|
||||||
|
|
||||||
|
if (G_UNLIKELY (type == 0)) {
|
||||||
|
type = g_boxed_type_register_static ("ShellCountryMobileProvider",
|
||||||
|
(GBoxedCopyFunc) shell_country_mobile_provider_ref,
|
||||||
|
(GBoxedFreeFunc) shell_country_mobile_provider_unref);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
provider_list_free (gpointer data)
|
provider_list_free (gpointer data)
|
||||||
{
|
{
|
||||||
@ -310,15 +395,17 @@ parser_toplevel_start (MobileParser *parser,
|
|||||||
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
||||||
if (!strcmp (attribute_names[i], "code")) {
|
if (!strcmp (attribute_names[i], "code")) {
|
||||||
char *country_code;
|
char *country_code;
|
||||||
char *country;
|
ShellCountryMobileProvider *country_provider;
|
||||||
|
|
||||||
country_code = g_ascii_strup (attribute_values[i], -1);
|
country_code = g_ascii_strup (attribute_values[i], -1);
|
||||||
country = g_hash_table_lookup (parser->country_codes, country_code);
|
country_provider = g_hash_table_lookup (parser->table, country_code);
|
||||||
if (country) {
|
/* Ensure we have a country provider for this country code */
|
||||||
parser->current_country = g_strdup (country);
|
if (!country_provider) {
|
||||||
g_free (country_code);
|
g_warning ("%s: adding providers for unknown country '%s'", __func__, country_code);
|
||||||
} else
|
country_provider = country_mobile_provider_new (country_code, NULL);
|
||||||
parser->current_country = country_code;
|
g_hash_table_insert (parser->table, country_code, country_provider);
|
||||||
|
}
|
||||||
|
parser->current_country = country_code;
|
||||||
|
|
||||||
parser->state = PARSER_COUNTRY;
|
parser->state = PARSER_COUNTRY;
|
||||||
break;
|
break;
|
||||||
@ -455,7 +542,13 @@ parser_country_end (MobileParser *parser,
|
|||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
if (!strcmp (name, "country")) {
|
if (!strcmp (name, "country")) {
|
||||||
g_hash_table_insert (parser->table, parser->current_country, parser->current_providers);
|
ShellCountryMobileProvider *country_provider;
|
||||||
|
|
||||||
|
country_provider = g_hash_table_lookup (parser->table, parser->current_country);
|
||||||
|
if (country_provider)
|
||||||
|
/* Store providers for this country */
|
||||||
|
country_provider->providers = parser->current_providers;
|
||||||
|
|
||||||
parser->current_country = NULL;
|
parser->current_country = NULL;
|
||||||
parser->current_providers = NULL;
|
parser->current_providers = NULL;
|
||||||
parser->text_buffer = NULL;
|
parser->text_buffer = NULL;
|
||||||
@ -616,15 +709,16 @@ static const GMarkupParser mobile_parser = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* shell_mobile_providers_parse:
|
* shell_mobile_providers_parse:
|
||||||
* @out_ccs: (out) (allow-none): (element-type utf8 utf8): a #GHashTable containing
|
* @country_codes: (allow-none) File with the list of country codes.
|
||||||
* country codes
|
* @service_providers: (allow-none) File with the list of service providers.
|
||||||
*
|
*
|
||||||
* Returns: (element-type utf8 GList) (transfer container): a
|
* Returns: (element-type utf8 Shell.CountryMobileProvider) (transfer full): a
|
||||||
* hash table where keys are country names #gchar, values are a #GSList
|
* hash table where keys are country names #gchar and values are #ShellCountryMobileProvider.
|
||||||
* of #ShellMobileProvider. Everything is destroyed with g_hash_table_destroy().
|
* Everything is destroyed with g_hash_table_destroy().
|
||||||
*/
|
*/
|
||||||
GHashTable *
|
GHashTable *
|
||||||
shell_mobile_providers_parse (GHashTable **out_ccs)
|
shell_mobile_providers_parse (const gchar *country_codes,
|
||||||
|
const gchar *service_providers)
|
||||||
{
|
{
|
||||||
GMarkupParseContext *ctx;
|
GMarkupParseContext *ctx;
|
||||||
GIOChannel *channel;
|
GIOChannel *channel;
|
||||||
@ -634,24 +728,29 @@ shell_mobile_providers_parse (GHashTable **out_ccs)
|
|||||||
GIOStatus status;
|
GIOStatus status;
|
||||||
gsize len = 0;
|
gsize len = 0;
|
||||||
|
|
||||||
|
/* Use default paths if none given */
|
||||||
|
if (!country_codes)
|
||||||
|
country_codes = ISO_3166_COUNTRY_CODES;
|
||||||
|
if (!service_providers)
|
||||||
|
service_providers = MOBILE_BROADBAND_PROVIDER_INFO;
|
||||||
|
|
||||||
memset (&parser, 0, sizeof (MobileParser));
|
memset (&parser, 0, sizeof (MobileParser));
|
||||||
|
|
||||||
parser.country_codes = read_country_codes ();
|
parser.table = read_country_codes (country_codes);
|
||||||
if (!parser.country_codes)
|
if (!parser.table)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
channel = g_io_channel_new_file (MOBILE_BROADBAND_PROVIDER_INFO, "r", &error);
|
channel = g_io_channel_new_file (service_providers, "r", &error);
|
||||||
if (!channel) {
|
if (!channel) {
|
||||||
if (error) {
|
if (error) {
|
||||||
g_warning ("Could not read " MOBILE_BROADBAND_PROVIDER_INFO ": %s", error->message);
|
g_warning ("Could not read %s: %s", service_providers, error->message);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
} else
|
} else
|
||||||
g_warning ("Could not read " MOBILE_BROADBAND_PROVIDER_INFO ": Unknown error");
|
g_warning ("Could not read %s: Unknown error", service_providers);
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
parser.table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, provider_list_free);
|
|
||||||
parser.state = PARSER_TOPLEVEL;
|
parser.state = PARSER_TOPLEVEL;
|
||||||
|
|
||||||
ctx = g_markup_parse_context_new (&mobile_parser, 0, &parser, NULL);
|
ctx = g_markup_parse_context_new (&mobile_parser, 0, &parser, NULL);
|
||||||
@ -696,13 +795,7 @@ shell_mobile_providers_parse (GHashTable **out_ccs)
|
|||||||
g_free (parser.current_country);
|
g_free (parser.current_country);
|
||||||
g_free (parser.text_buffer);
|
g_free (parser.text_buffer);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (parser.country_codes) {
|
|
||||||
if (out_ccs)
|
|
||||||
*out_ccs = parser.country_codes;
|
|
||||||
else
|
|
||||||
g_hash_table_destroy (parser.country_codes);
|
|
||||||
}
|
|
||||||
|
|
||||||
return parser.table;
|
return parser.table;
|
||||||
}
|
}
|
||||||
@ -744,12 +837,17 @@ dump_gsm (ShellMobileAccessMethod *method)
|
|||||||
static void
|
static void
|
||||||
dump_country (gpointer key, gpointer value, gpointer user_data)
|
dump_country (gpointer key, gpointer value, gpointer user_data)
|
||||||
{
|
{
|
||||||
GSList *citer, *miter;
|
GSList *miter, *citer;
|
||||||
|
ShellCountryMobileProvider *country_provider = value;
|
||||||
|
|
||||||
for (citer = value; citer; citer = g_slist_next (citer)) {
|
g_print ("Country: %s (%s)\n",
|
||||||
|
country_provider->country_code,
|
||||||
|
country_provider->country_name);
|
||||||
|
|
||||||
|
for (citer = country_provider->providers; citer; citer = g_slist_next (citer)) {
|
||||||
ShellMobileProvider *provider = citer->data;
|
ShellMobileProvider *provider = citer->data;
|
||||||
|
|
||||||
g_print ("Provider: %s (%s)\n", provider->name, (const char *) key);
|
g_print (" Provider: %s (%s)\n", provider->name, (const char *) key);
|
||||||
for (miter = provider->methods; miter; miter = g_slist_next (miter)) {
|
for (miter = provider->methods; miter; miter = g_slist_next (miter)) {
|
||||||
ShellMobileAccessMethod *method = miter->data;
|
ShellMobileAccessMethod *method = miter->data;
|
||||||
GSList *liter;
|
GSList *liter;
|
||||||
@ -779,10 +877,10 @@ dump_country (gpointer key, gpointer value, gpointer user_data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
shell_mobile_providers_dump (GHashTable *providers)
|
shell_mobile_providers_dump (GHashTable *country_providers)
|
||||||
{
|
{
|
||||||
g_return_if_fail (providers != NULL);
|
g_return_if_fail (country_providers != NULL);
|
||||||
g_hash_table_foreach (providers, dump_country, NULL);
|
g_hash_table_foreach (country_providers, dump_country, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* All the following don't exist in nm-applet, because C doesn't need
|
/* All the following don't exist in nm-applet, because C doesn't need
|
||||||
|
@ -76,10 +76,19 @@ typedef struct {
|
|||||||
gint refs;
|
gint refs;
|
||||||
} ShellMobileProvider;
|
} ShellMobileProvider;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *country_code;
|
||||||
|
char *country_name;
|
||||||
|
GSList *providers;
|
||||||
|
|
||||||
|
gint refs;
|
||||||
|
} ShellCountryMobileProvider;
|
||||||
|
|
||||||
|
|
||||||
GType shell_gsm_mcc_mnc_get_type (void); /* added in porting */
|
GType shell_gsm_mcc_mnc_get_type (void); /* added in porting */
|
||||||
GType shell_mobile_provider_get_type (void);
|
|
||||||
GType shell_mobile_access_method_get_type (void);
|
GType shell_mobile_access_method_get_type (void);
|
||||||
|
GType shell_mobile_provider_get_type (void);
|
||||||
|
GType shell_country_mobile_provider_get_type (void);
|
||||||
|
|
||||||
ShellMobileProvider *shell_mobile_provider_ref (ShellMobileProvider *provider);
|
ShellMobileProvider *shell_mobile_provider_ref (ShellMobileProvider *provider);
|
||||||
void shell_mobile_provider_unref (ShellMobileProvider *provider);
|
void shell_mobile_provider_unref (ShellMobileProvider *provider);
|
||||||
@ -89,8 +98,14 @@ GSList * shell_mobile_provider_get_cdma_sid (ShellMobileProvider *pr
|
|||||||
ShellMobileAccessMethod *shell_mobile_access_method_ref (ShellMobileAccessMethod *method);
|
ShellMobileAccessMethod *shell_mobile_access_method_ref (ShellMobileAccessMethod *method);
|
||||||
void shell_mobile_access_method_unref (ShellMobileAccessMethod *method);
|
void shell_mobile_access_method_unref (ShellMobileAccessMethod *method);
|
||||||
|
|
||||||
GHashTable *shell_mobile_providers_parse (GHashTable **out_ccs);
|
ShellCountryMobileProvider *shell_country_mobile_provider_ref (ShellCountryMobileProvider *country_provider);
|
||||||
|
void shell_country_mobile_provider_unref (ShellCountryMobileProvider *country_provider);
|
||||||
|
const gchar *shell_country_mobile_provider_get_country_code (ShellCountryMobileProvider *country_provider);
|
||||||
|
const gchar *shell_country_mobile_provider_get_country_name (ShellCountryMobileProvider *country_provider);
|
||||||
|
GSList *shell_country_mobile_provider_get_providers (ShellCountryMobileProvider *country_provider);
|
||||||
|
|
||||||
void shell_mobile_providers_dump (GHashTable *providers);
|
GHashTable *shell_mobile_providers_parse (const gchar *country_codes,
|
||||||
|
const gchar *service_providers);
|
||||||
|
void shell_mobile_providers_dump (GHashTable *country_providers);
|
||||||
|
|
||||||
#endif /* SHELL_MOBILE_PROVIDERS_H */
|
#endif /* SHELL_MOBILE_PROVIDERS_H */
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
#define GST_USE_UNSTABLE_API
|
#define GST_USE_UNSTABLE_API
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include "shell-recorder-src.h"
|
#include "shell-recorder-src.h"
|
||||||
#include "shell-recorder.h"
|
#include "shell-recorder.h"
|
||||||
#include "shell-screen-grabber.h"
|
#include "shell-screen-grabber.h"
|
||||||
@ -65,7 +67,7 @@ struct _ShellRecorder {
|
|||||||
|
|
||||||
int framerate;
|
int framerate;
|
||||||
char *pipeline_description;
|
char *pipeline_description;
|
||||||
char *filename;
|
char *file_template;
|
||||||
|
|
||||||
/* We might have multiple pipelines that are finishing encoding
|
/* We might have multiple pipelines that are finishing encoding
|
||||||
* to go along with the current pipeline where we are recording.
|
* to go along with the current pipeline where we are recording.
|
||||||
@ -90,6 +92,7 @@ struct _RecorderPipeline
|
|||||||
GstElement *pipeline;
|
GstElement *pipeline;
|
||||||
GstElement *src;
|
GstElement *src;
|
||||||
int outfile;
|
int outfile;
|
||||||
|
char *filename;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void recorder_set_stage (ShellRecorder *recorder,
|
static void recorder_set_stage (ShellRecorder *recorder,
|
||||||
@ -98,8 +101,8 @@ static void recorder_set_framerate (ShellRecorder *recorder,
|
|||||||
int framerate);
|
int framerate);
|
||||||
static void recorder_set_pipeline (ShellRecorder *recorder,
|
static void recorder_set_pipeline (ShellRecorder *recorder,
|
||||||
const char *pipeline);
|
const char *pipeline);
|
||||||
static void recorder_set_filename (ShellRecorder *recorder,
|
static void recorder_set_file_template (ShellRecorder *recorder,
|
||||||
const char *filename);
|
const char *file_template);
|
||||||
|
|
||||||
static void recorder_pipeline_set_caps (RecorderPipeline *pipeline);
|
static void recorder_pipeline_set_caps (RecorderPipeline *pipeline);
|
||||||
static void recorder_pipeline_closed (RecorderPipeline *pipeline);
|
static void recorder_pipeline_closed (RecorderPipeline *pipeline);
|
||||||
@ -109,7 +112,7 @@ enum {
|
|||||||
PROP_STAGE,
|
PROP_STAGE,
|
||||||
PROP_FRAMERATE,
|
PROP_FRAMERATE,
|
||||||
PROP_PIPELINE,
|
PROP_PIPELINE,
|
||||||
PROP_FILENAME
|
PROP_FILE_TEMPLATE
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
|
G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
|
||||||
@ -269,18 +272,6 @@ static void
|
|||||||
shell_recorder_finalize (GObject *object)
|
shell_recorder_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
ShellRecorder *recorder = SHELL_RECORDER (object);
|
ShellRecorder *recorder = SHELL_RECORDER (object);
|
||||||
GSList *l;
|
|
||||||
|
|
||||||
for (l = recorder->pipelines; l; l = l->next)
|
|
||||||
{
|
|
||||||
RecorderPipeline *pipeline = l->data;
|
|
||||||
|
|
||||||
/* Remove the back-reference. The pipeline will be freed
|
|
||||||
* when it finishes. (Or when the process exits, but that's
|
|
||||||
* out of our control.)
|
|
||||||
*/
|
|
||||||
pipeline->recorder = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (recorder->update_memory_used_timeout)
|
if (recorder->update_memory_used_timeout)
|
||||||
g_source_remove (recorder->update_memory_used_timeout);
|
g_source_remove (recorder->update_memory_used_timeout);
|
||||||
@ -290,7 +281,7 @@ shell_recorder_finalize (GObject *object)
|
|||||||
|
|
||||||
recorder_set_stage (recorder, NULL);
|
recorder_set_stage (recorder, NULL);
|
||||||
recorder_set_pipeline (recorder, NULL);
|
recorder_set_pipeline (recorder, NULL);
|
||||||
recorder_set_filename (recorder, NULL);
|
recorder_set_file_template (recorder, NULL);
|
||||||
|
|
||||||
g_object_unref (recorder->grabber);
|
g_object_unref (recorder->grabber);
|
||||||
|
|
||||||
@ -917,22 +908,22 @@ recorder_set_pipeline (ShellRecorder *recorder,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
recorder_set_filename (ShellRecorder *recorder,
|
recorder_set_file_template (ShellRecorder *recorder,
|
||||||
const char *filename)
|
const char *file_template)
|
||||||
{
|
{
|
||||||
if (filename == recorder->filename ||
|
if (file_template == recorder->file_template ||
|
||||||
(filename && recorder->filename && strcmp (recorder->filename, filename) == 0))
|
(file_template && recorder->file_template && strcmp (recorder->file_template, file_template) == 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (recorder->current_pipeline)
|
if (recorder->current_pipeline)
|
||||||
shell_recorder_close (recorder);
|
shell_recorder_close (recorder);
|
||||||
|
|
||||||
if (recorder->filename)
|
if (recorder->file_template)
|
||||||
g_free (recorder->filename);
|
g_free (recorder->file_template);
|
||||||
|
|
||||||
recorder->filename = g_strdup (filename);
|
recorder->file_template = g_strdup (file_template);
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (recorder), "filename");
|
g_object_notify (G_OBJECT (recorder), "file-template");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -954,8 +945,8 @@ shell_recorder_set_property (GObject *object,
|
|||||||
case PROP_PIPELINE:
|
case PROP_PIPELINE:
|
||||||
recorder_set_pipeline (recorder, g_value_get_string (value));
|
recorder_set_pipeline (recorder, g_value_get_string (value));
|
||||||
break;
|
break;
|
||||||
case PROP_FILENAME:
|
case PROP_FILE_TEMPLATE:
|
||||||
recorder_set_filename (recorder, g_value_get_string (value));
|
recorder_set_file_template (recorder, g_value_get_string (value));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -982,8 +973,8 @@ shell_recorder_get_property (GObject *object,
|
|||||||
case PROP_PIPELINE:
|
case PROP_PIPELINE:
|
||||||
g_value_set_string (value, recorder->pipeline_description);
|
g_value_set_string (value, recorder->pipeline_description);
|
||||||
break;
|
break;
|
||||||
case PROP_FILENAME:
|
case PROP_FILE_TEMPLATE:
|
||||||
g_value_set_string (value, recorder->filename);
|
g_value_set_string (value, recorder->file_template);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -1027,9 +1018,9 @@ shell_recorder_class_init (ShellRecorderClass *klass)
|
|||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class,
|
||||||
PROP_FILENAME,
|
PROP_FILE_TEMPLATE,
|
||||||
g_param_spec_string ("filename",
|
g_param_spec_string ("file-template",
|
||||||
"Filename",
|
"File Template",
|
||||||
"The filename template to use for output files",
|
"The filename template to use for output files",
|
||||||
NULL,
|
NULL,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
@ -1149,13 +1140,14 @@ get_absolute_path (char *maybe_relative)
|
|||||||
* be opened.
|
* be opened.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
recorder_open_outfile (ShellRecorder *recorder)
|
recorder_open_outfile (ShellRecorder *recorder,
|
||||||
|
char **outfilename)
|
||||||
{
|
{
|
||||||
const char *pattern;
|
const char *pattern;
|
||||||
int flags;
|
int flags;
|
||||||
int outfile = -1;
|
int outfile = -1;
|
||||||
|
|
||||||
pattern = recorder->filename;
|
pattern = recorder->file_template;
|
||||||
if (!pattern)
|
if (!pattern)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -1230,8 +1222,12 @@ recorder_open_outfile (ShellRecorder *recorder)
|
|||||||
{
|
{
|
||||||
g_printerr ("Recording to %s\n", path);
|
g_printerr ("Recording to %s\n", path);
|
||||||
|
|
||||||
|
if (outfilename != NULL)
|
||||||
|
*outfilename = path;
|
||||||
|
else
|
||||||
|
g_free (path);
|
||||||
g_string_free (filename, TRUE);
|
g_string_free (filename, TRUE);
|
||||||
g_free (path);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1269,7 +1265,8 @@ recorder_pipeline_add_sink (RecorderPipeline *pipeline)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
pipeline->outfile = recorder_open_outfile (pipeline->recorder);
|
pipeline->outfile = recorder_open_outfile (pipeline->recorder,
|
||||||
|
&pipeline->filename);
|
||||||
if (pipeline->outfile == -1)
|
if (pipeline->outfile == -1)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@ -1344,6 +1341,10 @@ recorder_pipeline_free (RecorderPipeline *pipeline)
|
|||||||
if (pipeline->outfile != -1)
|
if (pipeline->outfile != -1)
|
||||||
close (pipeline->outfile);
|
close (pipeline->outfile);
|
||||||
|
|
||||||
|
g_free (pipeline->filename);
|
||||||
|
|
||||||
|
g_clear_object (&pipeline->recorder);
|
||||||
|
|
||||||
g_free (pipeline);
|
g_free (pipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1393,6 +1394,10 @@ recorder_pipeline_closed (RecorderPipeline *pipeline)
|
|||||||
|
|
||||||
if (pipeline->recorder)
|
if (pipeline->recorder)
|
||||||
{
|
{
|
||||||
|
GtkRecentManager *recent_manager;
|
||||||
|
GFile *file;
|
||||||
|
char *uri;
|
||||||
|
|
||||||
ShellRecorder *recorder = pipeline->recorder;
|
ShellRecorder *recorder = pipeline->recorder;
|
||||||
if (pipeline == recorder->current_pipeline)
|
if (pipeline == recorder->current_pipeline)
|
||||||
{
|
{
|
||||||
@ -1401,6 +1406,15 @@ recorder_pipeline_closed (RecorderPipeline *pipeline)
|
|||||||
shell_recorder_close (recorder);
|
shell_recorder_close (recorder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
recent_manager = gtk_recent_manager_get_default ();
|
||||||
|
|
||||||
|
file = g_file_new_for_path (pipeline->filename);
|
||||||
|
uri = g_file_get_uri (file);
|
||||||
|
gtk_recent_manager_add_item (recent_manager,
|
||||||
|
uri);
|
||||||
|
g_free (uri);
|
||||||
|
g_object_unref (file);
|
||||||
|
|
||||||
recorder->pipelines = g_slist_remove (recorder->pipelines, pipeline);
|
recorder->pipelines = g_slist_remove (recorder->pipelines, pipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1452,7 +1466,7 @@ recorder_open_pipeline (ShellRecorder *recorder)
|
|||||||
GstBus *bus;
|
GstBus *bus;
|
||||||
|
|
||||||
pipeline = g_new0(RecorderPipeline, 1);
|
pipeline = g_new0(RecorderPipeline, 1);
|
||||||
pipeline->recorder = recorder;
|
pipeline->recorder = g_object_ref (recorder);
|
||||||
pipeline->outfile = - 1;
|
pipeline->outfile = - 1;
|
||||||
|
|
||||||
pipeline_description = recorder->pipeline_description;
|
pipeline_description = recorder->pipeline_description;
|
||||||
@ -1555,10 +1569,10 @@ shell_recorder_set_framerate (ShellRecorder *recorder,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shell_recorder_set_filename:
|
* shell_recorder_set_file_template:
|
||||||
* @recorder: the #ShellRecorder
|
* @recorder: the #ShellRecorder
|
||||||
* @filename: the filename template to use for output files,
|
* @file_template: the filename template to use for output files,
|
||||||
* or %NULL for the defalt value.
|
* or %NULL for the defalt value.
|
||||||
*
|
*
|
||||||
* Sets the filename that will be used when creating output
|
* Sets the filename that will be used when creating output
|
||||||
* files. This is only used if the configured pipeline has an
|
* files. This is only used if the configured pipeline has an
|
||||||
@ -1573,12 +1587,12 @@ shell_recorder_set_framerate (ShellRecorder *recorder,
|
|||||||
* The default value is 'shell-%d%u-%c.ogg'.
|
* The default value is 'shell-%d%u-%c.ogg'.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
shell_recorder_set_filename (ShellRecorder *recorder,
|
shell_recorder_set_file_template (ShellRecorder *recorder,
|
||||||
const char *filename)
|
const char *file_template)
|
||||||
{
|
{
|
||||||
g_return_if_fail (SHELL_IS_RECORDER (recorder));
|
g_return_if_fail (SHELL_IS_RECORDER (recorder));
|
||||||
|
|
||||||
recorder_set_filename (recorder, filename);
|
recorder_set_file_template (recorder, file_template);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1593,7 +1607,7 @@ shell_recorder_set_filename (ShellRecorder *recorder,
|
|||||||
* should have an unconnected sink pad where the recorded
|
* should have an unconnected sink pad where the recorded
|
||||||
* video is recorded. It will normally have a unconnected
|
* video is recorded. It will normally have a unconnected
|
||||||
* source pad; output from that pad will be written into the
|
* source pad; output from that pad will be written into the
|
||||||
* output file. (See shell_recorder_set_filename().) However
|
* output file. (See shell_recorder_set_file_template().) However
|
||||||
* the pipeline can also take care of its own output - this
|
* the pipeline can also take care of its own output - this
|
||||||
* might be used to send the output to an icecast server
|
* might be used to send the output to an icecast server
|
||||||
* via shout2send or similar.
|
* via shout2send or similar.
|
||||||
|
@ -32,8 +32,8 @@ ShellRecorder *shell_recorder_new (ClutterStage *stage);
|
|||||||
|
|
||||||
void shell_recorder_set_framerate (ShellRecorder *recorder,
|
void shell_recorder_set_framerate (ShellRecorder *recorder,
|
||||||
int framerate);
|
int framerate);
|
||||||
void shell_recorder_set_filename (ShellRecorder *recorder,
|
void shell_recorder_set_file_template (ShellRecorder *recorder,
|
||||||
const char *filename);
|
const char *file_template);
|
||||||
void shell_recorder_set_pipeline (ShellRecorder *recorder,
|
void shell_recorder_set_pipeline (ShellRecorder *recorder,
|
||||||
const char *pipeline);
|
const char *pipeline);
|
||||||
gboolean shell_recorder_record (ShellRecorder *recorder);
|
gboolean shell_recorder_record (ShellRecorder *recorder);
|
||||||
|
@ -65,6 +65,10 @@
|
|||||||
#include "st-clipboard.h"
|
#include "st-clipboard.h"
|
||||||
#include "st-private.h"
|
#include "st-private.h"
|
||||||
|
|
||||||
|
#include <clutter/x11/clutter-x11.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/cursorfont.h>
|
||||||
|
|
||||||
#include "st-widget-accessible.h"
|
#include "st-widget-accessible.h"
|
||||||
|
|
||||||
#define HAS_FOCUS(actor) (clutter_actor_get_stage (actor) && clutter_stage_get_key_focus ((ClutterStage *) clutter_actor_get_stage (actor)) == actor)
|
#define HAS_FOCUS(actor) (clutter_actor_get_stage (actor) && clutter_stage_get_key_focus ((ClutterStage *) clutter_actor_get_stage (actor)) == actor)
|
||||||
@ -613,6 +617,38 @@ st_entry_key_focus_in (ClutterActor *actor)
|
|||||||
clutter_actor_grab_key_focus (priv->entry);
|
clutter_actor_grab_key_focus (priv->entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_entry_set_cursor (StEntry *entry,
|
||||||
|
gboolean use_ibeam)
|
||||||
|
{
|
||||||
|
Display *dpy;
|
||||||
|
ClutterActor *stage, *actor = CLUTTER_ACTOR (entry);
|
||||||
|
Window wid;
|
||||||
|
static Cursor ibeam = None;
|
||||||
|
|
||||||
|
dpy = clutter_x11_get_default_display ();
|
||||||
|
stage = clutter_actor_get_stage (actor);
|
||||||
|
wid = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
|
||||||
|
|
||||||
|
if (ibeam == None)
|
||||||
|
ibeam = XCreateFontCursor (dpy, XC_xterm);
|
||||||
|
|
||||||
|
if (use_ibeam)
|
||||||
|
XDefineCursor (dpy, wid, ibeam);
|
||||||
|
else
|
||||||
|
XUndefineCursor (dpy, wid);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
st_entry_crossing_event (ClutterActor *actor,
|
||||||
|
ClutterCrossingEvent *event)
|
||||||
|
{
|
||||||
|
if (event->source == ST_ENTRY (actor)->priv->entry && event->related != NULL)
|
||||||
|
st_entry_set_cursor (ST_ENTRY (actor), (event->type == CLUTTER_ENTER));
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_entry_class_init (StEntryClass *klass)
|
st_entry_class_init (StEntryClass *klass)
|
||||||
{
|
{
|
||||||
@ -635,6 +671,9 @@ st_entry_class_init (StEntryClass *klass)
|
|||||||
actor_class->key_press_event = st_entry_key_press_event;
|
actor_class->key_press_event = st_entry_key_press_event;
|
||||||
actor_class->key_focus_in = st_entry_key_focus_in;
|
actor_class->key_focus_in = st_entry_key_focus_in;
|
||||||
|
|
||||||
|
actor_class->enter_event = st_entry_crossing_event;
|
||||||
|
actor_class->leave_event = st_entry_crossing_event;
|
||||||
|
|
||||||
widget_class->style_changed = st_entry_style_changed;
|
widget_class->style_changed = st_entry_style_changed;
|
||||||
widget_class->navigate_focus = st_entry_navigate_focus;
|
widget_class->navigate_focus = st_entry_navigate_focus;
|
||||||
widget_class->get_accessible_type = st_entry_accessible_get_type;
|
widget_class->get_accessible_type = st_entry_accessible_get_type;
|
||||||
|
@ -42,6 +42,9 @@ struct _StTextureCachePrivate
|
|||||||
|
|
||||||
/* Presently this is used to de-duplicate requests for GIcons and async URIs. */
|
/* Presently this is used to de-duplicate requests for GIcons and async URIs. */
|
||||||
GHashTable *outstanding_requests; /* char * -> AsyncTextureLoadData * */
|
GHashTable *outstanding_requests; /* char * -> AsyncTextureLoadData * */
|
||||||
|
|
||||||
|
/* File monitors to evict cache data on changes */
|
||||||
|
GHashTable *file_monitors; /* char * -> GFileMonitor * */
|
||||||
};
|
};
|
||||||
|
|
||||||
static void st_texture_cache_dispose (GObject *object);
|
static void st_texture_cache_dispose (GObject *object);
|
||||||
@ -50,6 +53,7 @@ static void st_texture_cache_finalize (GObject *object);
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
ICON_THEME_CHANGED,
|
ICON_THEME_CHANGED,
|
||||||
|
TEXTURE_FILE_CHANGED,
|
||||||
|
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
@ -92,33 +96,14 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
|
|||||||
0, /* no default handler slot */
|
0, /* no default handler slot */
|
||||||
NULL, NULL, NULL,
|
NULL, NULL, NULL,
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
signals[TEXTURE_FILE_CHANGED] =
|
||||||
* st_texture_cache_clear_uri:
|
g_signal_new ("texture-file-changed",
|
||||||
* @cache: A #StTextureCache
|
G_TYPE_FROM_CLASS (klass),
|
||||||
* @uri: URI of cached object
|
G_SIGNAL_RUN_LAST,
|
||||||
*
|
0, /* no default handler slot */
|
||||||
* If the given @uri is known to have been modified
|
NULL, NULL, NULL,
|
||||||
* externally, this function may be used to invalidate
|
G_TYPE_NONE, 1, G_TYPE_STRING);
|
||||||
* the in-memory cache.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
st_texture_cache_clear_uri (StTextureCache *cache,
|
|
||||||
const char *uri)
|
|
||||||
{
|
|
||||||
char *key;
|
|
||||||
|
|
||||||
g_return_if_fail (ST_IS_TEXTURE_CACHE (cache));
|
|
||||||
g_return_if_fail (uri != NULL);
|
|
||||||
|
|
||||||
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
|
|
||||||
g_hash_table_remove (cache->priv->keyed_cache, key);
|
|
||||||
g_free (key);
|
|
||||||
|
|
||||||
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
|
|
||||||
g_hash_table_remove (cache->priv->keyed_cache, key);
|
|
||||||
g_free (key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Evicts all cached textures for named icons */
|
/* Evicts all cached textures for named icons */
|
||||||
@ -164,6 +149,9 @@ st_texture_cache_init (StTextureCache *self)
|
|||||||
g_free, cogl_handle_unref);
|
g_free, cogl_handle_unref);
|
||||||
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
|
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
g_free, NULL);
|
g_free, NULL);
|
||||||
|
self->priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
|
g_object_unref, g_object_unref);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -179,13 +167,9 @@ st_texture_cache_dispose (GObject *object)
|
|||||||
self->priv->icon_theme = NULL;
|
self->priv->icon_theme = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->priv->keyed_cache)
|
g_clear_pointer (&self->priv->keyed_cache, g_hash_table_destroy);
|
||||||
g_hash_table_destroy (self->priv->keyed_cache);
|
g_clear_pointer (&self->priv->outstanding_requests, g_hash_table_destroy);
|
||||||
self->priv->keyed_cache = NULL;
|
g_clear_pointer (&self->priv->file_monitors, g_hash_table_destroy);
|
||||||
|
|
||||||
if (self->priv->outstanding_requests)
|
|
||||||
g_hash_table_destroy (self->priv->outstanding_requests);
|
|
||||||
self->priv->outstanding_requests = NULL;
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (st_texture_cache_parent_class)->dispose (object);
|
G_OBJECT_CLASS (st_texture_cache_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
@ -1039,6 +1023,52 @@ load_from_pixbuf (GdkPixbuf *pixbuf)
|
|||||||
return CLUTTER_ACTOR (texture);
|
return CLUTTER_ACTOR (texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
file_changed_cb (GFileMonitor *monitor,
|
||||||
|
GFile *file,
|
||||||
|
GFile *other,
|
||||||
|
GFileMonitorEvent event_type,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
StTextureCache *cache = user_data;
|
||||||
|
char *uri, *key;
|
||||||
|
|
||||||
|
if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
|
||||||
|
return;
|
||||||
|
|
||||||
|
uri = g_file_get_uri (file);
|
||||||
|
|
||||||
|
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
|
||||||
|
g_hash_table_remove (cache->priv->keyed_cache, key);
|
||||||
|
g_free (key);
|
||||||
|
|
||||||
|
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
|
||||||
|
g_hash_table_remove (cache->priv->keyed_cache, key);
|
||||||
|
g_free (key);
|
||||||
|
|
||||||
|
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, uri);
|
||||||
|
|
||||||
|
g_free (uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ensure_monitor_for_uri (StTextureCache *cache,
|
||||||
|
const gchar *uri)
|
||||||
|
{
|
||||||
|
StTextureCachePrivate *priv = cache->priv;
|
||||||
|
GFile *file = g_file_new_for_uri (uri);
|
||||||
|
|
||||||
|
if (g_hash_table_lookup (priv->file_monitors, uri) == NULL)
|
||||||
|
{
|
||||||
|
GFileMonitor *monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE,
|
||||||
|
NULL, NULL);
|
||||||
|
g_signal_connect (monitor, "changed",
|
||||||
|
G_CALLBACK (file_changed_cb), cache);
|
||||||
|
g_hash_table_insert (priv->file_monitors, g_strdup (uri), monitor);
|
||||||
|
}
|
||||||
|
g_object_unref (file);
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gchar *path;
|
gchar *path;
|
||||||
gint grid_width, grid_height;
|
gint grid_width, grid_height;
|
||||||
@ -1161,41 +1191,6 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
|||||||
return actor;
|
return actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* st_texture_cache_load_icon_name:
|
|
||||||
* @cache: The texture cache instance
|
|
||||||
* @theme_node: (allow-none): a #StThemeNode
|
|
||||||
* @name: Name of a themed icon
|
|
||||||
* @size: Size of themed icon
|
|
||||||
*
|
|
||||||
* Load a themed icon into a texture. The colors used for symbolic
|
|
||||||
* icons are derived from @theme_node.
|
|
||||||
*
|
|
||||||
* Return Value: (transfer none): A new #ClutterTexture for the icon
|
|
||||||
*/
|
|
||||||
ClutterActor *
|
|
||||||
st_texture_cache_load_icon_name (StTextureCache *cache,
|
|
||||||
StThemeNode *theme_node,
|
|
||||||
const char *name,
|
|
||||||
gint size)
|
|
||||||
{
|
|
||||||
ClutterActor *texture;
|
|
||||||
GIcon *themed;
|
|
||||||
|
|
||||||
themed = g_themed_icon_new_with_default_fallbacks (name);
|
|
||||||
texture = load_gicon_with_colors (cache, themed, size,
|
|
||||||
theme_node ? st_theme_node_get_icon_colors (theme_node) : NULL);
|
|
||||||
g_object_unref (themed);
|
|
||||||
|
|
||||||
if (texture == NULL)
|
|
||||||
{
|
|
||||||
texture = (ClutterActor *) create_default_texture ();
|
|
||||||
clutter_actor_set_size (texture, size, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return texture;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_texture_cache_load_uri_async:
|
* st_texture_cache_load_uri_async:
|
||||||
* @cache: The texture cache instance
|
* @cache: The texture cache instance
|
||||||
@ -1246,6 +1241,8 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
|
|||||||
load_texture_async (cache, request);
|
load_texture_async (cache, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ensure_monitor_for_uri (cache, uri);
|
||||||
|
|
||||||
return CLUTTER_ACTOR (texture);
|
return CLUTTER_ACTOR (texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1283,6 +1280,8 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
|
|||||||
else
|
else
|
||||||
cogl_handle_ref (texdata);
|
cogl_handle_ref (texdata);
|
||||||
|
|
||||||
|
ensure_monitor_for_uri (cache, uri);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
g_free (key);
|
g_free (key);
|
||||||
return texdata;
|
return texdata;
|
||||||
@ -1322,6 +1321,8 @@ st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache,
|
|||||||
else
|
else
|
||||||
cairo_surface_reference (surface);
|
cairo_surface_reference (surface);
|
||||||
|
|
||||||
|
ensure_monitor_for_uri (cache, uri);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
g_free (key);
|
g_free (key);
|
||||||
return surface;
|
return surface;
|
||||||
|
@ -68,9 +68,6 @@ GType st_texture_cache_get_type (void) G_GNUC_CONST;
|
|||||||
|
|
||||||
StTextureCache* st_texture_cache_get_default (void);
|
StTextureCache* st_texture_cache_get_default (void);
|
||||||
|
|
||||||
void st_texture_cache_clear_uri (StTextureCache *cache,
|
|
||||||
const gchar *uri);
|
|
||||||
|
|
||||||
ClutterActor *
|
ClutterActor *
|
||||||
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||||
const gchar *path,
|
const gchar *path,
|
||||||
@ -81,11 +78,6 @@ ClutterActor *st_texture_cache_bind_pixbuf_property (StTextureCache *cache,
|
|||||||
GObject *object,
|
GObject *object,
|
||||||
const char *property_name);
|
const char *property_name);
|
||||||
|
|
||||||
ClutterActor *st_texture_cache_load_icon_name (StTextureCache *cache,
|
|
||||||
StThemeNode *theme_node,
|
|
||||||
const char *name,
|
|
||||||
gint size);
|
|
||||||
|
|
||||||
ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
|
ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
|
||||||
StThemeNode *theme_node,
|
StThemeNode *theme_node,
|
||||||
GIcon *icon,
|
GIcon *icon,
|
||||||
|
@ -450,26 +450,26 @@ static gboolean
|
|||||||
string_in_list (GString *stryng,
|
string_in_list (GString *stryng,
|
||||||
const char *list)
|
const char *list)
|
||||||
{
|
{
|
||||||
const char *cur;
|
char *cur;
|
||||||
|
char *l = g_strdup (list);
|
||||||
|
char *temp;
|
||||||
|
gboolean found = FALSE;
|
||||||
|
|
||||||
for (cur = list; *cur;)
|
cur = strtok_r (l, " \t\f\r\n", &temp);
|
||||||
|
while (cur != NULL)
|
||||||
{
|
{
|
||||||
while (*cur && cr_utils_is_white_space (*cur))
|
if (!strqcmp (cur, stryng->str, stryng->len))
|
||||||
cur++;
|
|
||||||
|
|
||||||
if (strncmp (cur, stryng->str, stryng->len) == 0)
|
|
||||||
{
|
{
|
||||||
cur += stryng->len;
|
found = TRUE;
|
||||||
if ((!*cur) || cr_utils_is_white_space (*cur))
|
goto out;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* skip to next whitespace character */
|
cur = strtok_r (NULL, " \t\f\r\n", &temp);
|
||||||
while (*cur && !cr_utils_is_white_space (*cur))
|
|
||||||
cur++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
out:
|
||||||
|
g_free (l);
|
||||||
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -1018,6 +1018,7 @@ _st_theme_resolve_url (StTheme *theme,
|
|||||||
const char *base_filename = NULL;
|
const char *base_filename = NULL;
|
||||||
char *dirname;
|
char *dirname;
|
||||||
char *filename;
|
char *filename;
|
||||||
|
char *canonicalized_path;
|
||||||
|
|
||||||
/* Handle absolute file:/ URLs */
|
/* Handle absolute file:/ URLs */
|
||||||
if (g_str_has_prefix (url, "file:") ||
|
if (g_str_has_prefix (url, "file:") ||
|
||||||
@ -1034,7 +1035,7 @@ _st_theme_resolve_url (StTheme *theme,
|
|||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Guard against http:/ URLs */
|
/* Guard against http:/ URLs */
|
||||||
@ -1050,7 +1051,19 @@ _st_theme_resolve_url (StTheme *theme,
|
|||||||
/* Assume anything else is a relative URL, and "resolve" it
|
/* Assume anything else is a relative URL, and "resolve" it
|
||||||
*/
|
*/
|
||||||
if (url[0] == '/')
|
if (url[0] == '/')
|
||||||
return g_strdup (url);
|
{
|
||||||
|
canonicalized_path = realpath (url, NULL);
|
||||||
|
if (g_mem_is_system_malloc ())
|
||||||
|
{
|
||||||
|
filename = canonicalized_path;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
filename = g_strdup (canonicalized_path);
|
||||||
|
free (canonicalized_path);
|
||||||
|
}
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet);
|
base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet);
|
||||||
|
|
||||||
@ -1062,7 +1075,19 @@ _st_theme_resolve_url (StTheme *theme,
|
|||||||
|
|
||||||
dirname = g_path_get_dirname (base_filename);
|
dirname = g_path_get_dirname (base_filename);
|
||||||
filename = g_build_filename (dirname, url, NULL);
|
filename = g_build_filename (dirname, url, NULL);
|
||||||
|
canonicalized_path = realpath (filename, NULL);
|
||||||
g_free (dirname);
|
g_free (dirname);
|
||||||
|
g_free (filename);
|
||||||
|
|
||||||
|
if (g_mem_is_system_malloc ())
|
||||||
|
{
|
||||||
|
filename = canonicalized_path;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
filename = g_strdup (canonicalized_path);
|
||||||
|
free (canonicalized_path);
|
||||||
|
}
|
||||||
|
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
@ -269,6 +269,39 @@ st_widget_remove_transition (StWidget *widget)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_widget_texture_cache_changed (StTextureCache *cache,
|
||||||
|
const char *uri,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
StWidget *actor = ST_WIDGET (user_data);
|
||||||
|
StThemeNode *node = actor->priv->theme_node;
|
||||||
|
StBorderImage *border_image;
|
||||||
|
char *path;
|
||||||
|
gboolean changed;
|
||||||
|
|
||||||
|
if (node == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
path = g_filename_from_uri (uri, NULL, NULL);
|
||||||
|
|
||||||
|
changed = g_strcmp0 (st_theme_node_get_background_image (node), path) == 0;
|
||||||
|
|
||||||
|
border_image = st_theme_node_get_border_image (node);
|
||||||
|
if (!changed && border_image)
|
||||||
|
changed = strcmp (st_border_image_get_filename (border_image), path) == 0;
|
||||||
|
|
||||||
|
g_free (path);
|
||||||
|
|
||||||
|
if (!changed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
st_theme_node_invalidate_paint_state (node);
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
|
||||||
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_widget_dispose (GObject *gobject)
|
st_widget_dispose (GObject *gobject)
|
||||||
{
|
{
|
||||||
@ -302,6 +335,10 @@ st_widget_dispose (GObject *gobject)
|
|||||||
priv->label_actor = NULL;
|
priv->label_actor = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_signal_handlers_disconnect_by_func (st_texture_cache_get_default (),
|
||||||
|
st_widget_texture_cache_changed,
|
||||||
|
actor);
|
||||||
|
|
||||||
g_clear_object (&priv->prev_first_child);
|
g_clear_object (&priv->prev_first_child);
|
||||||
g_clear_object (&priv->prev_last_child);
|
g_clear_object (&priv->prev_last_child);
|
||||||
|
|
||||||
@ -1470,6 +1507,8 @@ st_widget_init (StWidget *actor)
|
|||||||
|
|
||||||
g_signal_connect (actor, "notify::first-child", G_CALLBACK (st_widget_first_child_notify), NULL);
|
g_signal_connect (actor, "notify::first-child", G_CALLBACK (st_widget_first_child_notify), NULL);
|
||||||
g_signal_connect (actor, "notify::last-child", G_CALLBACK (st_widget_last_child_notify), NULL);
|
g_signal_connect (actor, "notify::last-child", G_CALLBACK (st_widget_last_child_notify), NULL);
|
||||||
|
g_signal_connect (st_texture_cache_get_default (), "texture-file-changed",
|
||||||
|
G_CALLBACK (st_widget_texture_cache_changed), actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -2760,38 +2799,3 @@ st_widget_get_focus_chain (StWidget *widget)
|
|||||||
{
|
{
|
||||||
return ST_WIDGET_GET_CLASS (widget)->get_focus_chain (widget);
|
return ST_WIDGET_GET_CLASS (widget)->get_focus_chain (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* st_widget_clear_background_image:
|
|
||||||
* @widget: An #StWidget
|
|
||||||
*
|
|
||||||
* Force a reload of the background-image property. Usually properties
|
|
||||||
* are cached heavily to avoid unnecessary work on paint, this method
|
|
||||||
* will force the cache to be recreated.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
st_widget_clear_background_image (StWidget *actor)
|
|
||||||
{
|
|
||||||
GFile *file;
|
|
||||||
const char *path;
|
|
||||||
char *uri;
|
|
||||||
|
|
||||||
if (actor->priv->theme_node == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
path = st_theme_node_get_background_image (actor->priv->theme_node);
|
|
||||||
if (path == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
file = g_file_new_for_path (path);
|
|
||||||
uri = g_file_get_uri (file);
|
|
||||||
|
|
||||||
st_texture_cache_clear_uri (st_texture_cache_get_default (), uri);
|
|
||||||
st_theme_node_invalidate_paint_state (actor->priv->theme_node);
|
|
||||||
|
|
||||||
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
|
|
||||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
|
|
||||||
|
|
||||||
g_object_unref (file);
|
|
||||||
g_free (uri);
|
|
||||||
}
|
|
||||||
|
@ -142,8 +142,6 @@ ClutterActor * st_widget_get_label_actor (StWidget *widg
|
|||||||
void st_widget_set_label_actor (StWidget *widget,
|
void st_widget_set_label_actor (StWidget *widget,
|
||||||
ClutterActor *label);
|
ClutterActor *label);
|
||||||
|
|
||||||
void st_widget_clear_background_image (StWidget *widget);
|
|
||||||
|
|
||||||
/* Only to be used by sub-classes of StWidget */
|
/* Only to be used by sub-classes of StWidget */
|
||||||
void st_widget_style_changed (StWidget *widget);
|
void st_widget_style_changed (StWidget *widget);
|
||||||
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#define GST_USE_UNSTABLE_API
|
#define GST_USE_UNSTABLE_API
|
||||||
#include "shell-recorder.h"
|
#include "shell-recorder.h"
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
|
|
||||||
/* Very simple test of the ShellRecorder class; shows some text strings
|
/* Very simple test of the ShellRecorder class; shows some text strings
|
||||||
@ -11,23 +12,34 @@
|
|||||||
static ShellRecorder *recorder = NULL;
|
static ShellRecorder *recorder = NULL;
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
stop_recording_timeout (gpointer data)
|
stop_recording_timeout (ClutterActor *stage)
|
||||||
{
|
{
|
||||||
if (recorder)
|
if (recorder)
|
||||||
{
|
{
|
||||||
shell_recorder_close (recorder);
|
shell_recorder_close (recorder);
|
||||||
|
|
||||||
|
/* quit when the recorder finishes closing
|
||||||
|
*/
|
||||||
|
g_object_weak_ref (G_OBJECT (recorder),
|
||||||
|
(GWeakNotify)
|
||||||
|
clutter_actor_destroy,
|
||||||
|
stage);
|
||||||
|
|
||||||
g_object_unref (recorder);
|
g_object_unref (recorder);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
clutter_main_quit ();
|
{
|
||||||
|
clutter_actor_destroy (stage);
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_animation_completed (ClutterAnimation *animation)
|
on_animation_completed (ClutterAnimation *animation,
|
||||||
|
ClutterStage *stage)
|
||||||
{
|
{
|
||||||
g_timeout_add (1000, stop_recording_timeout, NULL);
|
g_timeout_add (1000, (GSourceFunc) stop_recording_timeout, stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -35,7 +47,7 @@ on_stage_realized (ClutterActor *stage,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
recorder = shell_recorder_new (CLUTTER_STAGE (stage));
|
recorder = shell_recorder_new (CLUTTER_STAGE (stage));
|
||||||
shell_recorder_set_filename (recorder, "test-recorder.ogg");
|
shell_recorder_set_file_template (recorder, "test-recorder.ogg");
|
||||||
shell_recorder_record (recorder);
|
shell_recorder_record (recorder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,6 +58,7 @@ int main (int argc, char **argv)
|
|||||||
ClutterAnimation *animation;
|
ClutterAnimation *animation;
|
||||||
ClutterColor red, green, blue;
|
ClutterColor red, green, blue;
|
||||||
|
|
||||||
|
gtk_init (&argc, &argv);
|
||||||
gst_init (&argc, &argv);
|
gst_init (&argc, &argv);
|
||||||
if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
|
if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
|
||||||
return 1;
|
return 1;
|
||||||
@ -69,7 +82,7 @@ int main (int argc, char **argv)
|
|||||||
"y", 240.0,
|
"y", 240.0,
|
||||||
NULL);
|
NULL);
|
||||||
g_signal_connect (animation, "completed",
|
g_signal_connect (animation, "completed",
|
||||||
G_CALLBACK (on_animation_completed), NULL);
|
G_CALLBACK (on_animation_completed), stage);
|
||||||
|
|
||||||
text = g_object_new (CLUTTER_TYPE_TEXT,
|
text = g_object_new (CLUTTER_TYPE_TEXT,
|
||||||
"text", "Blue",
|
"text", "Blue",
|
||||||
@ -110,7 +123,5 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
clutter_main ();
|
clutter_main ();
|
||||||
|
|
||||||
g_object_unref (stage);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ TEST_JS = \
|
|||||||
interactive/scrolling.js \
|
interactive/scrolling.js \
|
||||||
interactive/scroll-view-sizing.js \
|
interactive/scroll-view-sizing.js \
|
||||||
interactive/table.js \
|
interactive/table.js \
|
||||||
|
interactive/test-title.js \
|
||||||
interactive/transitions.js \
|
interactive/transitions.js \
|
||||||
testcommon/100-200.svg \
|
testcommon/100-200.svg \
|
||||||
testcommon/200-100.svg \
|
testcommon/200-100.svg \
|
||||||
@ -25,11 +26,14 @@ TEST_JS = \
|
|||||||
testcommon/border-image.png \
|
testcommon/border-image.png \
|
||||||
testcommon/face-plain.png \
|
testcommon/face-plain.png \
|
||||||
testcommon/ui.js \
|
testcommon/ui.js \
|
||||||
|
testcommon/iso3166-test.tab \
|
||||||
|
testcommon/serviceproviders-test.xml \
|
||||||
unit/format.js \
|
unit/format.js \
|
||||||
unit/insertSorted.js \
|
unit/insertSorted.js \
|
||||||
unit/markup.js \
|
unit/markup.js \
|
||||||
unit/jsParse.js \
|
unit/jsParse.js \
|
||||||
unit/url.js
|
unit/url.js \
|
||||||
|
unit/mobileProviders.js
|
||||||
EXTRA_DIST += $(TEST_JS)
|
EXTRA_DIST += $(TEST_JS)
|
||||||
|
|
||||||
TEST_MISC = \
|
TEST_MISC = \
|
||||||
|
34
tests/interactive/test-title.js
Executable file
34
tests/interactive/test-title.js
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env gjs
|
||||||
|
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
|
||||||
|
function nextTitle() {
|
||||||
|
let length = Math.random() * 20;
|
||||||
|
let str = '';
|
||||||
|
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
// 97 == 'a'
|
||||||
|
str += String.fromCharCode(97 + Math.random() * 26);
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
Gtk.init(null);
|
||||||
|
|
||||||
|
let win = new Gtk.Window({ title: nextTitle() });
|
||||||
|
win.connect('destroy', Gtk.main_quit);
|
||||||
|
win.present();
|
||||||
|
|
||||||
|
Mainloop.timeout_add(5000, function() {
|
||||||
|
win.title = nextTitle();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
Gtk.main();
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user