Compare commits
204 Commits
3.6.2
...
3.7.2.1-br
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b45b241ce8 | ||
|
|
4233ca2983 | ||
|
|
5200da6eec | ||
|
|
b0523860d9 | ||
|
|
1a1215527f | ||
|
|
360c018c9e | ||
|
|
7bed964ab2 | ||
|
|
989d0a5682 | ||
|
|
b121c25184 | ||
|
|
e0d127b3e4 | ||
|
|
a0c56c74e1 | ||
|
|
f4b61a7f24 | ||
|
|
b2400fb883 | ||
|
|
f25832d1b6 | ||
|
|
cf363171aa | ||
|
|
38c8569d16 | ||
|
|
9791d15f39 | ||
|
|
80e7f5832b | ||
|
|
6e46ddaad3 | ||
|
|
8499e4aab2 | ||
|
|
5eae1851a1 | ||
|
|
c48a246ccb | ||
|
|
f084011a61 | ||
|
|
bd40cf194c | ||
|
|
2434af7e8a | ||
|
|
ced7fa9f01 | ||
|
|
28b559e812 | ||
|
|
76d776245b | ||
|
|
0d9f70492e | ||
|
|
b58f502dd6 | ||
|
|
5f367248c5 | ||
|
|
c2065cc3e2 | ||
|
|
034408971d | ||
|
|
490206b5b2 | ||
|
|
d8540819af | ||
|
|
d1a9aec526 | ||
|
|
e4b681a5a5 | ||
|
|
52036871d1 | ||
|
|
4fc6a804f5 | ||
|
|
08d2ca300a | ||
|
|
dc2ec0a8f9 | ||
|
|
2cfed952bb | ||
|
|
a7da137778 | ||
|
|
5ae2f87ce9 | ||
|
|
c4f6619fbd | ||
|
|
65edbc1424 | ||
|
|
1f2d7fa28f | ||
|
|
2407a0c4e2 | ||
|
|
7f8bfcc939 | ||
|
|
fae4cb9e56 | ||
|
|
063bbb02f2 | ||
|
|
15e1470c50 | ||
|
|
f602993aa9 | ||
|
|
271508c0a8 | ||
|
|
50f96d1c9c | ||
|
|
809544800b | ||
|
|
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 |
109
NEWS
109
NEWS
@@ -1,34 +1,99 @@
|
||||
3.6.2
|
||||
3.7.2.1
|
||||
=======
|
||||
* Revert 490206b to not depend on NMGTK-0.9.7, which hasn't been released yet
|
||||
|
||||
3.7.2
|
||||
=====
|
||||
* Implement org.gnome.ScreenSaver.GetActiveTime [Giovanni; #686064]
|
||||
* Explicitly load gnome-screensaver when not running GDM [Tim; #683060]
|
||||
* Set Empathy as preferred handler when delegating channels [Xavier; #686296]
|
||||
* Enforce RTL in he for messages that might end up as LTR [Florian; #686630]
|
||||
* gdm: Move logo into the panel [Florian; #685852]
|
||||
* Hide notifications when closed button is clicked [Jasper, Florian; #682237]
|
||||
* Tweak screenShield animations [Rui; #686745]
|
||||
* Restore Fittsability of summary items in message tray [Florian; #686474]
|
||||
* Save screencasts as recent item [Ray; #680647]
|
||||
* overview: Resize window captions on content change [Giovanni, Alex; #620874]
|
||||
* App search: Match GenericName too [Matthias; #687121]
|
||||
* Add setting to force log out menuitem [Matthias; #686057]
|
||||
* Fix auto-scroll to bottom in chat notifications [Sjoerd; #686571]
|
||||
* Update man page [Matthias; #680601]
|
||||
* Hide notifications when closed button is clicked [Jasper, Florian; #682237]
|
||||
* Fix screenshots on Big Endian [Owen; #685915]
|
||||
* runDialog: Better match style of other modal dialogs [Florian, Allan; #687127]
|
||||
* Improve the button insensitive style [Stéphane; #687110]
|
||||
* network: Don't use a global switch for all VPN connections [Giovanni; #682929]
|
||||
* appMenu: Update on icon theme changes [Florian; #687224]
|
||||
* Show 'Log out' in more situations [Matthias; #686736]
|
||||
* Add a setting to force the 'Log out' menuitem [Matthias; #686057]
|
||||
* overview: Improve styling of search box [Stéphane; #686479]
|
||||
* Implement 'disable-user-list' in login screen [Ray; #660660]
|
||||
* Misc bugfixes [Jasper, Florian, Giovanni, Matthew, Matthias, Alejandro,
|
||||
Sebastian; #686233, #686484, #686487, #686630, #686728, #686574, #686574,
|
||||
#686574, #686879, #686763, #685239, #687189, #686736, #686583, #687132,
|
||||
#687958, #687020, #687708, #686888, #686530, #684810, #688181]
|
||||
* Fix auto-scroll to bottom in chat notifications [Sjoerd; #686571]
|
||||
* Show feedback notifications when user is busy [Stéphane; #662900]
|
||||
* Disable login button when there is no input [Stéphane; #687112]
|
||||
* Use non-linear overview shade for background [Giovanni, Pierre-Eric; #669798]
|
||||
* Reduce blocking in compositor thread [Simon, Jasper; #687465]
|
||||
* network: new country-specific type to gather providers [Aleksander; #687356]
|
||||
* Update man page [Matthias; #680601]
|
||||
* st-entry: Change the pointer cursor on enter/leave events [Thomas; #687130]
|
||||
* screenShield: Blur and desaturate the background [Giovanni, Cosimo; #682536]
|
||||
* Change height of chat notifications to have more context [Carlos; #665255]
|
||||
* screenShield: Account for motion velocity when hiding [Giovanni; #682537]
|
||||
* screenShield: hide the cursor while the lock screen is on [Giovanni; #682535]
|
||||
* Support remote search provider settings [Cosimo; #687491]
|
||||
* unlockDialog: Improve label of confirmation button [Stéphane; #687656]
|
||||
* userMenu: Rename "System Settings" item to "Settings" [Elad; #687738]
|
||||
* messageTray: Add keybinding to focus current notification [Stéphane; #652082]
|
||||
* Remove shell-screen-grabber [Neil; #685915]
|
||||
* main: Stop using Metacity's keybinding files [Florian; #687672]
|
||||
* Bluetooth: Remove ObexFTP functionality [Bastien; #688160]
|
||||
* a11y: Also set WM theme when HighContrast is switched on [Cosimo; #688256]
|
||||
* network: Rework multiple NIC support [Giovanni; #677142]
|
||||
* Rework keybindings to allow selective blocking/processing [Florian; #688202]
|
||||
* recorder: Show indicator on primary monitor [Adel; #688470]
|
||||
* recorder: Set frame duration to fix broken video headers [Adel; #688487]
|
||||
* Misc. bugfixes and cleanups [Florian, Jasper, Giovanni, Matthew, Stéphane,
|
||||
Allan, Daiki, Owen, Alejandro, Jean-François, Cosimo, Sebastian, Adel, Alban;
|
||||
#686484, #686728, #686805, #686574, #686763, #682428, #687132, #685239,
|
||||
#687189, #687226, #658091, #670687, #687457, #687242, #687287, #687020,
|
||||
#686583, #661194, #687491, #657315, #687958, #683986, #688089, #687708,
|
||||
#686530, #684810, #688181, #688475, #688557, #688507, #638351]
|
||||
|
||||
Contributors:
|
||||
Matthew Barnes, Giovanni Campagna, Xavier Claessens, Matthias Clasen,
|
||||
Sebastian Keller, Tim Lunn, Rui Matos, Florian Müllner, Alejandro Piñeiro,
|
||||
Sjoerd Simons, Jasper St. Pierre, Ray Strode, Owen Taylor
|
||||
Elad Alfassa, Matthew Barnes, Alban Browaeys, Giovanni Campagna,
|
||||
Cosimo Cecchi, Matthias Clasen, Allan Day, Stéphane Démurget,
|
||||
Jean-François Fortin Tam, Adel Gadllah, Alex Hultman, Sebastian Keller,
|
||||
Rui Matos, Simon McVittie, Aleksander Morgado, Florian Müllner,
|
||||
Bastien Nocera, Pierre-Eric Pelloux-Prayer, Alejandro Piñeiro, Neil Roberts,
|
||||
Sjoerd Simons, Carlos Soriano Sánchez, Jasper St. Pierre, Ray Strode,
|
||||
Owen Taylor, Daiki Ueno, Thomas Wood
|
||||
|
||||
Translations:
|
||||
Takayuki KUSANO [ja], Dušan Kazik [sk], Mattias Põldaru [et],
|
||||
Tom Tryfonidis [el], Sweta Kothari [gu], Matej Urbančič [sl], Piotr Drąg [pl],
|
||||
Fran Diéguez [gl], Aurimas Černius [lt], Kjartan Maraas [nb],
|
||||
Ihar Hrachyshka [be], Мирослав Николић [sr, sr@latin], Gil Forcada [ca],
|
||||
A S Alam [pa], Yuri Myasoedov [ru], Marek Černocký [cs], Sweta Kothari [gu],
|
||||
Wolfgang Stöggl [de], Daniel Mustieles [es]
|
||||
Dušan Kazik [sk], Pavol Klačanský [sk], Piotr Drąg [pl], Yuri Myasoedov [ru],
|
||||
Marek Černocký [cs], Kjartan Maraas [nb], Wolfgang Stöggl [de],
|
||||
Yaron Shahrabani [he], Fran Diéguez [gl], Mattias Põldaru [et]
|
||||
|
||||
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
|
||||
=====
|
||||
|
||||
@@ -153,8 +153,6 @@ NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
||||
/* global initialization routine, called once when plugin
|
||||
is loaded */
|
||||
|
||||
g_type_init ();
|
||||
|
||||
g_debug ("plugin loaded");
|
||||
|
||||
memcpy (&funcs, pfuncs, sizeof (funcs));
|
||||
|
||||
17
configure.ac
17
configure.ac
@@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.6.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.7.2.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@@ -54,7 +54,7 @@ AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
|
||||
if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
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)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
@@ -65,9 +65,9 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||
CLUTTER_MIN_VERSION=1.11.11
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||
GJS_MIN_VERSION=1.33.2
|
||||
MUTTER_MIN_VERSION=3.6.2
|
||||
MUTTER_MIN_VERSION=3.7.2
|
||||
GTK_MIN_VERSION=3.3.9
|
||||
GIO_MIN_VERSION=2.31.6
|
||||
GIO_MIN_VERSION=2.35.0
|
||||
LIBECAL_MIN_VERSION=3.5.3
|
||||
LIBEDATASERVER_MIN_VERSION=3.5.3
|
||||
LIBEDATASERVERUI_MIN_VERSION=3.5.3
|
||||
@@ -76,7 +76,7 @@ TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
||||
POLKIT_MIN_VERSION=0.100
|
||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||
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
|
||||
|
||||
# Collect more than 20 libraries for a prize!
|
||||
@@ -99,8 +99,7 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
||||
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
||||
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
||||
libnm-glib libnm-util gnome-keyring-1
|
||||
gcr-3 >= $GCR_MIN_VERSION
|
||||
gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
|
||||
gcr-3 >= $GCR_MIN_VERSION)
|
||||
|
||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||
|
||||
@@ -122,10 +121,10 @@ CFLAGS=$saved_CFLAGS
|
||||
LIBS=$saved_LIBS
|
||||
|
||||
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(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.7.2)
|
||||
|
||||
AC_MSG_CHECKING([for bluetooth support])
|
||||
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
|
||||
|
||||
@@ -8,5 +8,14 @@
|
||||
<KeyListEntry name="toggle-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>
|
||||
|
||||
|
||||
@@ -91,6 +91,14 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
|
||||
Keybinding to open the application menu.
|
||||
</_description>
|
||||
</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">
|
||||
<default>["<Super>m"]</default>
|
||||
<_summary>Keybinding to toggle the visibility of the message tray</_summary>
|
||||
@@ -98,6 +106,13 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
|
||||
Keybinding to toggle the visibility of the message tray.
|
||||
</_description>
|
||||
</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">
|
||||
<default><![CDATA[['<Control><Shift><Alt>r']]]></default>
|
||||
<_summary>Keybinding to toggle the screen recorder</_summary>
|
||||
@@ -156,47 +171,48 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
|
||||
</key>
|
||||
</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">
|
||||
<default>true</default>
|
||||
<summary>Attach modal dialog to the parent window</summary>
|
||||
<description>
|
||||
<_summary>Attach modal dialog to the parent window</_summary>
|
||||
<_description>
|
||||
This key overrides the key in org.gnome.mutter when running
|
||||
GNOME Shell.
|
||||
</description>
|
||||
</_description>
|
||||
</key>
|
||||
|
||||
<key name="button-layout" type="s">
|
||||
<default>":close"</default>
|
||||
<summary>Arrangement of buttons on the titlebar</summary>
|
||||
<description>
|
||||
<_summary>Arrangement of buttons on the titlebar</_summary>
|
||||
<_description>
|
||||
This key overrides the key in org.gnome.desktop.wm.preferences when
|
||||
running GNOME Shell.
|
||||
</description>
|
||||
</_description>
|
||||
</key>
|
||||
|
||||
<key name="edge-tiling" type="b">
|
||||
<default>true</default>
|
||||
<summary>Enable edge tiling when dropping windows on screen edges</summary>
|
||||
<description>
|
||||
<_summary>Enable edge tiling when dropping windows on screen edges</_summary>
|
||||
<_description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</description>
|
||||
</_description>
|
||||
</key>
|
||||
|
||||
<key name="dynamic-workspaces" type="b">
|
||||
<default>true</default>
|
||||
<summary>Workspaces are managed dynamically</summary>
|
||||
<description>
|
||||
<_summary>Workspaces are managed dynamically</_summary>
|
||||
<_description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</description>
|
||||
</_description>
|
||||
</key>
|
||||
|
||||
<key name="workspaces-only-on-primary" type="b">
|
||||
<default>true</default>
|
||||
<summary>Workspaces only on primary monitor</summary>
|
||||
<description>
|
||||
<_summary>Workspaces only on primary monitor</_summary>
|
||||
<_description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</description>
|
||||
</_description>
|
||||
</key>
|
||||
|
||||
<key name="focus-change-on-pointer-rest" type="b">
|
||||
|
||||
@@ -39,7 +39,6 @@ stage {
|
||||
/* small */
|
||||
.app-well-menu,
|
||||
.contact-details-status,
|
||||
.run-dialog-label,
|
||||
.run-dialog-error-label {
|
||||
font-size: 9pt;
|
||||
}
|
||||
@@ -311,7 +310,7 @@ StScrollBar StButton#vhandle:active {
|
||||
.notification-icon-button:focus,
|
||||
.hotplug-notification-item:focus,
|
||||
.modal-dialog-button:focus {
|
||||
border: 2px solid #8b8b8b;
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
.dash-search-button:active,
|
||||
@@ -326,17 +325,20 @@ StScrollBar StButton#vhandle:active {
|
||||
background-gradient-end: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.notification-button:insensitive,
|
||||
.notification-icon-button:insensitive,
|
||||
.notification-button:insensitive {
|
||||
.modal-dialog-button:insensitive {
|
||||
border-color: #666666;
|
||||
color: #9f9f9f;
|
||||
background-gradient-direction: none;
|
||||
background-color: rgba(102, 102, 102, 0.15);
|
||||
}
|
||||
|
||||
/* Entries */
|
||||
|
||||
#searchEntry,
|
||||
.notification StEntry,
|
||||
.login-dialog-prompt-entry,
|
||||
.prompt-dialog-password-entry {
|
||||
.modal-dialog StEntry {
|
||||
color: rgb(64, 64, 64);
|
||||
caret-color: rgb(64, 64, 64);
|
||||
font-size: 12pt;
|
||||
@@ -346,6 +348,7 @@ StScrollBar StButton#vhandle:active {
|
||||
}
|
||||
|
||||
#searchEntry,
|
||||
.run-dialog-entry,
|
||||
.notification StEntry {
|
||||
border: 2px solid rgba(245,245,245,0.2);
|
||||
background-gradient-start: rgba(5,5,6,0.1);
|
||||
@@ -358,8 +361,7 @@ StScrollBar StButton#vhandle:active {
|
||||
#searchEntry:focus,
|
||||
#searchEntry:hover,
|
||||
.notification StEntry:focus,
|
||||
.login-dialog-prompt-entry,
|
||||
.prompt-dialog-password-entry {
|
||||
.modal-dialog StEntry {
|
||||
border: 2px solid rgb(136,138,133);
|
||||
background-gradient-start: rgb(200,200,200);
|
||||
background-gradient-end: white;
|
||||
@@ -368,12 +370,17 @@ StScrollBar StButton#vhandle:active {
|
||||
}
|
||||
|
||||
.notification StEntry:focus,
|
||||
.prompt-dialog-password-entry:focus,
|
||||
.login-dialog-prompt-entry:focus {
|
||||
.modal-dialog StEntry:focus {
|
||||
border: 2px solid #3465a4;
|
||||
}
|
||||
|
||||
#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);
|
||||
caret-color: rgb(128, 128, 128);
|
||||
}
|
||||
@@ -386,8 +393,7 @@ StScrollBar StButton#vhandle:active {
|
||||
}
|
||||
|
||||
.notification StEntry,
|
||||
.prompt-dialog-password-entry,
|
||||
.login-dialog-prompt-entry {
|
||||
.modal-dialog StEntry {
|
||||
border-radius: 5px;
|
||||
padding: 4px 4px;
|
||||
}
|
||||
@@ -551,7 +557,6 @@ StScrollBar StButton#vhandle:active {
|
||||
}
|
||||
|
||||
.status-chooser-combo.popup-combo-menu {
|
||||
background-color: rgba(0,0,0,0.7);
|
||||
padding: .4em 0em;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #5f5f5f;
|
||||
@@ -569,7 +574,7 @@ StScrollBar StButton#vhandle:active {
|
||||
/* Overview */
|
||||
|
||||
#overview {
|
||||
spacing: 12px;
|
||||
spacing: 40px;
|
||||
}
|
||||
|
||||
.window-caption {
|
||||
@@ -633,13 +638,25 @@ StScrollBar StButton#vhandle:active {
|
||||
* adjust down 8px */
|
||||
|
||||
-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 {
|
||||
-st-background-image-shadow: 2px 2px 6px rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
.window-picker {
|
||||
-horizontal-spacing: 40px;
|
||||
-vertical-spacing: 40px;
|
||||
}
|
||||
|
||||
/* Dash */
|
||||
|
||||
#dash {
|
||||
@@ -677,6 +694,11 @@ StScrollBar StButton#vhandle:active {
|
||||
|
||||
.search-entry-icon {
|
||||
icon-size: 1em;
|
||||
color: #c0c0c0;
|
||||
}
|
||||
|
||||
#searchEntry:hover .search-entry-icon,
|
||||
#searchEntry:focus .search-entry-icon {
|
||||
color: #8d8f8a;
|
||||
}
|
||||
|
||||
@@ -1410,6 +1432,10 @@ StScrollBar StButton#vhandle:active {
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
.chat-notification-scrollview{
|
||||
max-height: 22em;
|
||||
}
|
||||
|
||||
.subscription-message {
|
||||
font-style: italic;
|
||||
}
|
||||
@@ -1624,35 +1650,26 @@ StScrollBar StButton#vhandle:active {
|
||||
padding: 4px 32px 5px;
|
||||
}
|
||||
|
||||
.modal-dialog-button:insensitive {
|
||||
color: rgb(60, 60, 60);
|
||||
}
|
||||
|
||||
.modal-dialog-button:focus {
|
||||
padding: 3px 31px 4px;
|
||||
}
|
||||
|
||||
/* Run Dialog */
|
||||
|
||||
.run-dialog-label {
|
||||
font-size: 12pt;
|
||||
font-weight: bold;
|
||||
color: #999999;
|
||||
padding-bottom: .4em;
|
||||
}
|
||||
|
||||
.run-dialog-error-box {
|
||||
padding-top: 15px;
|
||||
spacing: 5px;
|
||||
}
|
||||
|
||||
.run-dialog-entry {
|
||||
font-weight: bold;
|
||||
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;
|
||||
.modal-dialog .run-dialog-entry {
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
.lightbox {
|
||||
@@ -2112,7 +2129,7 @@ StScrollBar StButton#vhandle:active {
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
padding-left: 15px;
|
||||
text-shadow: black 4px 4px 3px 0px;
|
||||
text-shadow: black 0px 4px 3px 0px;
|
||||
}
|
||||
|
||||
.login-dialog-prompt-layout {
|
||||
@@ -2178,24 +2195,20 @@ StScrollBar StButton#vhandle:active {
|
||||
height: .75em;
|
||||
}
|
||||
|
||||
|
||||
.login-dialog .modal-dialog-button {
|
||||
border: 1px solid #666666;
|
||||
border-radius: 5px;
|
||||
padding: 3px 18px;
|
||||
}
|
||||
|
||||
.login-dialog .modal-dialog-button:focus {
|
||||
padding: 2px 17px;
|
||||
border: 2px solid #8b8b8b;
|
||||
}
|
||||
|
||||
.login-dialog .modal-dialog-button:default {
|
||||
background-gradient-start: #6793c4;
|
||||
background-gradient-end: #335d8f;
|
||||
background-gradient-direction: vertical;
|
||||
padding: 2px 17px;
|
||||
border: 2px solid #16335d;
|
||||
border-color: #16335d;
|
||||
}
|
||||
|
||||
.login-dialog .modal-dialog-button:default:focus {
|
||||
@@ -2213,6 +2226,13 @@ StScrollBar StButton#vhandle:active {
|
||||
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 {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
@@ -39,13 +39,14 @@ const GdmUtil = imports.gdm.util;
|
||||
const Lightbox = imports.ui.lightbox;
|
||||
const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const UserMenu = imports.ui.userMenu;
|
||||
|
||||
const _RESIZE_ANIMATION_TIME = 0.25;
|
||||
const _SCROLL_ANIMATION_TIME = 0.5;
|
||||
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
||||
const _LOGO_ICON_NAME_SIZE = 48;
|
||||
const _LOGO_ICON_HEIGHT = 16;
|
||||
|
||||
let _loginDialog = null;
|
||||
|
||||
@@ -82,6 +83,36 @@ function _smoothlyResizeActor(actor, width, height) {
|
||||
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({
|
||||
Name: 'UserListItem',
|
||||
|
||||
@@ -629,6 +660,7 @@ const LoginDialog = new Lang.Class({
|
||||
this.parent({ shellReactive: true,
|
||||
styleClass: 'login-dialog',
|
||||
parentActor: parentActor,
|
||||
keybindingMode: Main.KeybindingMode.LOGIN_SCREEN,
|
||||
shouldFadeIn: false });
|
||||
this.connect('destroy',
|
||||
Lang.bind(this, this._onDestroy));
|
||||
@@ -638,15 +670,17 @@ const LoginDialog = new Lang.Class({
|
||||
this._userManager = AccountsService.UserManager.get_default()
|
||||
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',
|
||||
Lang.bind(this, this._onDefaultSessionChanged));
|
||||
this._greeter.connect('default-session-name-changed',
|
||||
Lang.bind(this, this._onDefaultSessionChanged));
|
||||
|
||||
this._greeter.connect('session-opened',
|
||||
Lang.bind(this, this._onSessionOpened));
|
||||
this._greeter.connect('timed-login-requested',
|
||||
Lang.bind(this, this._onTimedLoginRequested));
|
||||
this._greeter.connect('session-opened',
|
||||
Lang.bind(this, this._onSessionOpened));
|
||||
this._greeter.connect('timed-login-requested',
|
||||
Lang.bind(this, this._onTimedLoginRequested));
|
||||
}
|
||||
|
||||
this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient);
|
||||
this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion));
|
||||
@@ -658,8 +692,6 @@ const LoginDialog = new Lang.Class({
|
||||
|
||||
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,
|
||||
Lang.bind(this, this._updateBanner));
|
||||
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY,
|
||||
@@ -667,10 +699,6 @@ const LoginDialog = new Lang.Class({
|
||||
this._settings.connect('changed::' + GdmUtil.DISABLE_USER_LIST_KEY,
|
||||
Lang.bind(this, this._updateDisableUserList));
|
||||
|
||||
this._logoBox = new St.Bin({ style_class: 'login-dialog-logo-box' });
|
||||
this.contentLayout.add(this._logoBox);
|
||||
this._updateLogo();
|
||||
|
||||
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
|
||||
text: '' });
|
||||
this.contentLayout.add(this._bannerLabel);
|
||||
@@ -708,6 +736,7 @@ const LoginDialog = new Lang.Class({
|
||||
x_align: St.Align.START });
|
||||
this._promptEntry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
||||
can_focus: true });
|
||||
this._promptEntryTextChangedId = 0;
|
||||
this._promptBox.add(this._promptEntry,
|
||||
{ expand: true,
|
||||
x_fill: true,
|
||||
@@ -783,22 +812,8 @@ const LoginDialog = new Lang.Class({
|
||||
this._disableUserList = disableUserList;
|
||||
|
||||
if (!this._verifyingUser)
|
||||
this._reset();
|
||||
this._reset();
|
||||
}
|
||||
},
|
||||
|
||||
_updateLogo: function() {
|
||||
this._logoBox.child = null;
|
||||
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
|
||||
|
||||
if (path) {
|
||||
let file = Gio.file_new_for_path(path);
|
||||
let uri = file.get_uri();
|
||||
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
this._logoBox.child = textureCache.load_uri_async(uri, -1, _LOGO_ICON_NAME_SIZE);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
_updateBanner: function() {
|
||||
@@ -891,7 +906,7 @@ const LoginDialog = new Lang.Class({
|
||||
return batch.run();
|
||||
},
|
||||
|
||||
_showPrompt: function() {
|
||||
_showPrompt: function(forSecret) {
|
||||
let hold = new Batch.Hold();
|
||||
|
||||
let cancelButtonInfo = { action: Lang.bind(this, this.cancel),
|
||||
@@ -900,7 +915,7 @@ const LoginDialog = new Lang.Class({
|
||||
let okButtonInfo = { action: Lang.bind(this, function() {
|
||||
hold.release();
|
||||
}),
|
||||
label: C_("button", "Sign In"),
|
||||
label: forSecret ? C_("button", "Sign In") : _("Next"),
|
||||
default: true };
|
||||
let buttons = [];
|
||||
if (!this._disableUserList || this._verifyingUser)
|
||||
@@ -913,6 +928,16 @@ const LoginDialog = new Lang.Class({
|
||||
|
||||
function() {
|
||||
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];
|
||||
@@ -925,6 +950,11 @@ const LoginDialog = new Lang.Class({
|
||||
_hidePrompt: function() {
|
||||
this.setButtons([]);
|
||||
|
||||
if (this._promptEntryTextChangedId > 0) {
|
||||
this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId);
|
||||
this._promptEntryTextChangedId = 0;
|
||||
}
|
||||
|
||||
let tasks = [function() {
|
||||
return GdmUtil.fadeOutActor(this._promptBox);
|
||||
},
|
||||
@@ -946,7 +976,9 @@ const LoginDialog = new Lang.Class({
|
||||
this._promptEntry.set_text('');
|
||||
this._promptEntry.clutter_text.set_password_char(passwordChar);
|
||||
|
||||
let tasks = [this._showPrompt,
|
||||
let tasks = [function() {
|
||||
return this._showPrompt(!!passwordChar);
|
||||
},
|
||||
|
||||
function() {
|
||||
let _text = this._promptEntry.get_text();
|
||||
@@ -1117,8 +1149,7 @@ const LoginDialog = new Lang.Class({
|
||||
},
|
||||
|
||||
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
||||
this._fadeOutNotListedButton,
|
||||
this._fadeOutLogo]),
|
||||
this._fadeOutNotListedButton]),
|
||||
|
||||
function() {
|
||||
return this._askForUsernameAndLogIn();
|
||||
@@ -1128,20 +1159,11 @@ const LoginDialog = new Lang.Class({
|
||||
batch.run();
|
||||
},
|
||||
|
||||
_fadeInLogo: function() {
|
||||
return GdmUtil.fadeInActor(this._logoBox);
|
||||
},
|
||||
|
||||
_fadeOutLogo: function() {
|
||||
return GdmUtil.fadeOutActor(this._logoBox);
|
||||
},
|
||||
|
||||
_showUserList: function() {
|
||||
let tasks = [this._hidePrompt,
|
||||
|
||||
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
|
||||
this._fadeInNotListedButton,
|
||||
this._fadeInLogo]),
|
||||
this._fadeInNotListedButton]),
|
||||
|
||||
function() {
|
||||
this._sessionList.close();
|
||||
@@ -1209,8 +1231,7 @@ const LoginDialog = new Lang.Class({
|
||||
},
|
||||
|
||||
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
|
||||
this._fadeOutNotListedButton,
|
||||
this._fadeOutLogo]),
|
||||
this._fadeOutNotListedButton]),
|
||||
|
||||
function() {
|
||||
return this._userList.shrinkToNaturalHeight();
|
||||
|
||||
@@ -18,11 +18,12 @@
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const Lang = imports.lang;
|
||||
const UPowerGlib = imports.gi.UPowerGlib;
|
||||
|
||||
const LoginManager = imports.misc.loginManager;
|
||||
|
||||
const GdmUtil = imports.gdm.util;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
@@ -33,15 +34,14 @@ const PowerMenuButton = new Lang.Class({
|
||||
_init: function() {
|
||||
/* Translators: accessible name of the power menu in the login screen */
|
||||
this.parent('system-shutdown-symbolic', _("Power"));
|
||||
this._upClient = new UPowerGlib.Client();
|
||||
|
||||
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',
|
||||
Lang.bind(this, this._updateHaveSuspend));
|
||||
this._updateHaveSuspend();
|
||||
this._createSubMenu();
|
||||
|
||||
// ConsoleKit doesn't send notifications when shutdown/reboot
|
||||
// are disabled, so we update the menu item each time the menu opens
|
||||
@@ -50,15 +50,17 @@ const PowerMenuButton = new Lang.Class({
|
||||
if (open) {
|
||||
this._updateHaveShutdown();
|
||||
this._updateHaveRestart();
|
||||
this._updateHaveSuspend();
|
||||
}
|
||||
}));
|
||||
this._updateHaveShutdown();
|
||||
this._updateHaveRestart();
|
||||
this._updateHaveSuspend();
|
||||
},
|
||||
|
||||
_updateVisibility: function() {
|
||||
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() {
|
||||
@@ -78,9 +80,11 @@ const PowerMenuButton = new Lang.Class({
|
||||
},
|
||||
|
||||
_updateHaveSuspend: function() {
|
||||
this._haveSuspend = this._upClient.get_can_suspend();
|
||||
this._suspendItem.actor.visible = this._haveSuspend;
|
||||
this._updateVisibility();
|
||||
this._loginManager.canSuspend(Lang.bind(this, function(result) {
|
||||
this._haveSuspend = result;
|
||||
this._suspendItem.actor.visible = this._haveSuspend;
|
||||
this._updateVisibility();
|
||||
}));
|
||||
},
|
||||
|
||||
_createSubMenu: function() {
|
||||
@@ -103,8 +107,10 @@ const PowerMenuButton = new Lang.Class({
|
||||
},
|
||||
|
||||
_onActivateSuspend: function() {
|
||||
if (this._haveSuspend)
|
||||
this._upClient.suspend_sync(null);
|
||||
if (!this._haveSuspend)
|
||||
return;
|
||||
|
||||
this._loginManager.suspend();
|
||||
},
|
||||
|
||||
_onActivateRestart: function() {
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
const UPowerGlib = imports.gi.UPowerGlib;
|
||||
|
||||
const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager'>
|
||||
<method name='PowerOff'>
|
||||
@@ -12,12 +14,18 @@ const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager
|
||||
<method name='Reboot'>
|
||||
<arg type='b' direction='in'/>
|
||||
</method>
|
||||
<method name='Suspend'>
|
||||
<arg type='b' direction='in'/>
|
||||
</method>
|
||||
<method name='CanPowerOff'>
|
||||
<arg type='s' direction='out'/>
|
||||
</method>
|
||||
<method name='CanReboot'>
|
||||
<arg type='s' direction='out'/>
|
||||
</method>
|
||||
<method name='CanSuspend'>
|
||||
<arg type='s' direction='out'/>
|
||||
</method>
|
||||
</interface>;
|
||||
|
||||
const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session'>
|
||||
@@ -123,12 +131,25 @@ const LoginManagerSystemd = new Lang.Class({
|
||||
});
|
||||
},
|
||||
|
||||
canSuspend: function(asyncCallback) {
|
||||
this._proxy.CanSuspendRemote(function(result, error) {
|
||||
if (error)
|
||||
asyncCallback(false);
|
||||
else
|
||||
asyncCallback(result[0] != 'no');
|
||||
});
|
||||
},
|
||||
|
||||
powerOff: function() {
|
||||
this._proxy.PowerOffRemote(true);
|
||||
},
|
||||
|
||||
reboot: function() {
|
||||
this._proxy.RebootRemote(true);
|
||||
},
|
||||
|
||||
suspend: function() {
|
||||
this._proxy.SuspendRemote(true);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -139,6 +160,7 @@ const LoginManagerConsoleKit = new Lang.Class({
|
||||
this._proxy = new ConsoleKitManager(Gio.DBus.system,
|
||||
'org.freedesktop.ConsoleKit',
|
||||
'/org/freedesktop/ConsoleKit/Manager');
|
||||
this._upClient = new UPowerGlib.Client();
|
||||
},
|
||||
|
||||
// Having this function is a bit of a hack since the Systemd and ConsoleKit
|
||||
@@ -186,12 +208,22 @@ const LoginManagerConsoleKit = new Lang.Class({
|
||||
});
|
||||
},
|
||||
|
||||
canSuspend: function(asyncCallback) {
|
||||
Mainloop.idle_add(Lang.bind(this, function() {
|
||||
asyncCallback(this._upClient.get_can_suspend());
|
||||
return false;
|
||||
}));
|
||||
},
|
||||
|
||||
powerOff: function() {
|
||||
this._proxy.StopRemote();
|
||||
},
|
||||
|
||||
reboot: function() {
|
||||
this._proxy.RestartRemote();
|
||||
},
|
||||
|
||||
suspend: function() {
|
||||
this._upClient.suspend_sync(null);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -46,8 +46,70 @@ let _providersTable;
|
||||
function _getProvidersTable() {
|
||||
if (_providersTable)
|
||||
return _providersTable;
|
||||
let [providers, countryCodes] = Shell.mobile_providers_parse();
|
||||
return _providersTable = providers;
|
||||
return _providersTable = Shell.mobile_providers_parse(null,null);
|
||||
}
|
||||
|
||||
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({
|
||||
@@ -91,64 +153,29 @@ const ModemGsm = new Lang.Class({
|
||||
},
|
||||
|
||||
_findOperatorName: function(name, opCode) {
|
||||
if (name.length != 0 && (name.length > 6 || name.length < 5)) {
|
||||
// this looks like a valid name, i.e. not an MCCMNC (that some
|
||||
// devices return when not yet connected
|
||||
return name;
|
||||
}
|
||||
if (isNaN(parseInt(name))) {
|
||||
// name is definitely not a MCCMNC, so it may be a name
|
||||
// after all; return that
|
||||
return name;
|
||||
if (name) {
|
||||
if (name && name.length != 0 && (name.length > 6 || name.length < 5)) {
|
||||
// this looks like a valid name, i.e. not an MCCMNC (that some
|
||||
// devices return when not yet connected
|
||||
return name;
|
||||
}
|
||||
if (isNaN(parseInt(name))) {
|
||||
// name is definitely not a MCCMNC, so it may be a name
|
||||
// after all; return that
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
let needle;
|
||||
if (name.length == 0 && opCode)
|
||||
if ((name == null || name.length == 0) && opCode)
|
||||
needle = opCode;
|
||||
else if (name.length == 6 || name.length == 5)
|
||||
needle = name;
|
||||
else // nothing to search
|
||||
return null;
|
||||
|
||||
return this._findProviderForMCCMNC(needle);
|
||||
},
|
||||
|
||||
_findProviderForMCCMNC: function(needle) {
|
||||
let table = _getProvidersTable();
|
||||
let needlemcc = needle.substring(0, 3);
|
||||
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;
|
||||
return findProviderForMCCMNC(table, needle);
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(ModemGsm.prototype);
|
||||
@@ -189,39 +216,14 @@ const ModemCdma = new Lang.Class({
|
||||
this.operator_name = null;
|
||||
} else {
|
||||
let [bandClass, band, id] = result;
|
||||
if (name.length > 0)
|
||||
this.operator_name = this._findProviderForSid(id);
|
||||
else
|
||||
if (name.length > 0) {
|
||||
let table = _getProvidersTable();
|
||||
this.operator_name = findProviderForSid(table, id);
|
||||
} else
|
||||
this.operator_name = null;
|
||||
}
|
||||
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);
|
||||
|
||||
@@ -172,7 +172,7 @@ const AltTabPopup = new Lang.Class({
|
||||
|
||||
if (!Main.pushModal(this.actor)) {
|
||||
// Probably someone else has a pointer grab, try again with keyboard only
|
||||
if (!Main.pushModal(this.actor, global.get_current_time(), Meta.ModalOptions.POINTER_ALREADY_GRABBED)) {
|
||||
if (!Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED })) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,7 +479,6 @@ const AppWellIcon = new Lang.Class({
|
||||
Lang.bind(this,
|
||||
this._onStateChanged));
|
||||
this._onStateChanged();
|
||||
this.isMenuUp = false;
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
@@ -561,7 +560,8 @@ const AppWellIcon = new Lang.Class({
|
||||
this._menuManager.addMenu(this._menu);
|
||||
}
|
||||
|
||||
this.isMenuUp = true;
|
||||
this.emit('menu-state-changed', true);
|
||||
|
||||
this.actor.set_hover(true);
|
||||
this._menu.popup();
|
||||
|
||||
@@ -578,7 +578,7 @@ const AppWellIcon = new Lang.Class({
|
||||
|
||||
_onMenuPoppedDown: function() {
|
||||
this.actor.sync_hover();
|
||||
this.isMenuUp = false;
|
||||
this.emit('menu-state-changed', false);
|
||||
},
|
||||
|
||||
_onActivate: function (event) {
|
||||
|
||||
@@ -84,9 +84,12 @@ const AppFavorites = new Lang.Class({
|
||||
|
||||
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 () {
|
||||
this._removeFavorite(appId);
|
||||
}));
|
||||
Main.overview.setMessage(_("%s has been added to your favorites.").format(app.get_name()),
|
||||
{ forFeedback: true,
|
||||
undoCallback: Lang.bind(this, function () {
|
||||
this._removeFavorite(appId);
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
addFavorite: function(appId) {
|
||||
@@ -116,9 +119,11 @@ const AppFavorites = new Lang.Class({
|
||||
return;
|
||||
|
||||
Main.overview.setMessage(_("%s has been removed from your favorites.").format(app.get_name()),
|
||||
Lang.bind(this, function () {
|
||||
this._addFavorite(appId, pos);
|
||||
}));
|
||||
{ forFeedback: true,
|
||||
undoCallback: Lang.bind(this, function () {
|
||||
this._addFavorite(appId, pos);
|
||||
})
|
||||
});
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(AppFavorites.prototype);
|
||||
|
||||
@@ -270,8 +270,9 @@ const DBusEventSource = new Lang.Class({
|
||||
this._loadEvents(false);
|
||||
},
|
||||
|
||||
_onEventsReceived: function([appointments]) {
|
||||
_onEventsReceived: function(results, error) {
|
||||
let newEvents = [];
|
||||
let appointments = results ? results[0] : null;
|
||||
if (appointments != null) {
|
||||
for (let n = 0; n < appointments.length; n++) {
|
||||
let a = appointments[n];
|
||||
|
||||
@@ -45,14 +45,12 @@ function isMountRootHidden(root) {
|
||||
}
|
||||
|
||||
function isMountNonLocal(mount) {
|
||||
// If the mount doesn't have an associated volume, that means it could
|
||||
// be a remote filesystem. For certain kinds of local filesystems,
|
||||
// like digital cameras and music players, there's no associated
|
||||
// gvfs volume, so err on the side of caution and assume it's a local
|
||||
// filesystem to allow the prompt.
|
||||
// If the mount doesn't have an associated volume, that means it's
|
||||
// an uninteresting filesystem. Most devices that we care about will
|
||||
// have a mount, like media players and USB sticks.
|
||||
let volume = mount.get_volume();
|
||||
if (volume == null)
|
||||
return false;
|
||||
return true;
|
||||
|
||||
return (volume.get_identifier("class") == "network");
|
||||
}
|
||||
@@ -546,9 +544,8 @@ const AutorunTransientSource = new Lang.Class({
|
||||
this.notify(this._notification);
|
||||
},
|
||||
|
||||
createIcon: function(size) {
|
||||
return new St.Icon({ gicon: this.mount.get_icon(),
|
||||
icon_size: size });
|
||||
getIcon: function() {
|
||||
return this.mount.get_icon();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const Meta = imports.gi.Meta;
|
||||
@@ -16,13 +17,16 @@ const Recorder = new Lang.Class({
|
||||
},
|
||||
|
||||
enable: function() {
|
||||
global.display.add_keybinding('toggle-recording',
|
||||
this._bindingSettings,
|
||||
Meta.KeyBindingFlags.NONE, Lang.bind(this, this._toggleRecorder));
|
||||
Main.wm.addKeybinding('toggle-recording',
|
||||
this._bindingSettings,
|
||||
Meta.KeyBindingFlags.NONE,
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._toggleRecorder));
|
||||
},
|
||||
|
||||
disable: function() {
|
||||
global.display.remove_keybinding('toggle-recording');
|
||||
Main.wm.removeKeybinding('toggle-recording');
|
||||
},
|
||||
|
||||
_ensureRecorder: function() {
|
||||
@@ -41,7 +45,7 @@ const Recorder = new Lang.Class({
|
||||
recorder.set_framerate(this._recorderSettings.get_int('framerate'));
|
||||
/* Translators: this is a filename used for screencast recording */
|
||||
// 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');
|
||||
|
||||
if (!pipeline.match(/^\s*$/))
|
||||
|
||||
@@ -509,51 +509,42 @@ const ChatSource = new Lang.Class({
|
||||
this._notification.appendAliasChange(oldAlias, newAlias);
|
||||
},
|
||||
|
||||
createIcon: function(size) {
|
||||
this._iconBox = new St.Bin({ style_class: 'avatar-box' });
|
||||
this._iconBox._size = size;
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
getIcon: function() {
|
||||
let file = this._contact.get_avatar_file();
|
||||
|
||||
if (file) {
|
||||
let uri = file.get_uri();
|
||||
this._iconBox.child = textureCache.load_uri_async(uri, this._iconBox._size, this._iconBox._size);
|
||||
return new Gio.FileIcon({ file: file });
|
||||
} else {
|
||||
this._iconBox.child = new St.Icon({ icon_name: 'avatar-default',
|
||||
icon_size: this._iconBox._size });
|
||||
return new Gio.ThemedIcon({ name: 'avatar-default' });
|
||||
}
|
||||
|
||||
return this._iconBox;
|
||||
},
|
||||
|
||||
createSecondaryIcon: function() {
|
||||
let iconBox = new St.Bin();
|
||||
iconBox.child = new St.Icon({ style_class: 'secondary-icon' });
|
||||
getSecondaryIcon: function() {
|
||||
let iconName;
|
||||
let presenceType = this._contact.get_presence_type();
|
||||
|
||||
switch (presenceType) {
|
||||
case Tp.ConnectionPresenceType.AVAILABLE:
|
||||
iconBox.child.icon_name = 'user-available';
|
||||
iconName = 'user-available';
|
||||
break;
|
||||
case Tp.ConnectionPresenceType.BUSY:
|
||||
iconBox.child.icon_name = 'user-busy';
|
||||
iconName = 'user-busy';
|
||||
break;
|
||||
case Tp.ConnectionPresenceType.OFFLINE:
|
||||
iconBox.child.icon_name = 'user-offline';
|
||||
iconName = 'user-offline';
|
||||
break;
|
||||
case Tp.ConnectionPresenceType.HIDDEN:
|
||||
iconBox.child.icon_name = 'user-invisible';
|
||||
iconName = 'user-invisible';
|
||||
break;
|
||||
case Tp.ConnectionPresenceType.AWAY:
|
||||
iconBox.child.icon_name = 'user-away';
|
||||
iconName = 'user-away';
|
||||
break;
|
||||
case Tp.ConnectionPresenceType.EXTENDED_AWAY:
|
||||
iconBox.child.icon_name = 'user-idle';
|
||||
iconName = 'user-idle';
|
||||
break;
|
||||
default:
|
||||
iconBox.child.icon_name = 'user-offline';
|
||||
iconName = 'user-offline';
|
||||
}
|
||||
return iconBox;
|
||||
return new Gio.ThemedIcon({ name: iconName });
|
||||
},
|
||||
|
||||
_updateAvatarIcon: function() {
|
||||
@@ -735,7 +726,7 @@ const ChatSource = new Lang.Class({
|
||||
|
||||
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)
|
||||
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
||||
@@ -763,7 +754,7 @@ const ChatNotification = new Lang.Class({
|
||||
Extends: MessageTray.Notification,
|
||||
|
||||
_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._responseEntry = new St.Entry({ style_class: 'chat-response',
|
||||
@@ -788,6 +779,7 @@ const ChatNotification = new Lang.Class({
|
||||
// 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) {
|
||||
if (adjustment.value == this._oldMaxScrollValue)
|
||||
this.scrollTo(St.Side.BOTTOM);
|
||||
@@ -943,24 +935,32 @@ const ChatNotification = new Lang.Class({
|
||||
|
||||
let format;
|
||||
|
||||
// Show a week day and time if date is in the last week
|
||||
if (daysAgo < 1 || (daysAgo < 7 && now.getDay() != date.getDay())) {
|
||||
/* Translators: this is a time format string followed by a date.
|
||||
If applicable, replace %X with a strftime format valid for your
|
||||
locale, without seconds. */
|
||||
// Show only the hour if date is on today
|
||||
if(daysAgo < 1){
|
||||
format = "<b>%H:%M</b>";
|
||||
}
|
||||
// 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
|
||||
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()) {
|
||||
/* Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
shown when you get a chat message in the same year. */
|
||||
/* 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 */
|
||||
// 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 {
|
||||
/* 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. */
|
||||
/* 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 */
|
||||
// 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);
|
||||
@@ -973,8 +973,7 @@ const ChatNotification = new Lang.Class({
|
||||
let timeLabel = this._append({ body: this._formatTimestamp(lastMessageDate),
|
||||
group: 'meta',
|
||||
styles: ['chat-meta-message'],
|
||||
childProps: { expand: true, x_fill: false,
|
||||
x_align: St.Align.END },
|
||||
childProps: { expand: true, x_fill: false },
|
||||
noTimestamp: true,
|
||||
timestamp: lastMessageTime });
|
||||
|
||||
@@ -1075,9 +1074,8 @@ const ApproverSource = new Lang.Class({
|
||||
this.parent();
|
||||
},
|
||||
|
||||
createIcon: function(size) {
|
||||
return new St.Icon({ gicon: this._gicon,
|
||||
icon_size: size });
|
||||
getIcon: function() {
|
||||
return this._gicon;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1138,7 +1136,7 @@ const AudioVideoNotification = new Lang.Class({
|
||||
this.parent(source, title, null, { customContent: true });
|
||||
this.setResident(true);
|
||||
|
||||
this.addButton('reject', _("Reject"));
|
||||
this.addButton('reject', _("Decline"));
|
||||
/* translators: this is a button label (verb), not a noun */
|
||||
this.addButton('answer', _("Answer"));
|
||||
|
||||
|
||||
@@ -23,8 +23,7 @@ const DASH_ITEM_HOVER_TIMEOUT = 300;
|
||||
|
||||
function getAppFromSource(source) {
|
||||
if (source instanceof AppDisplay.AppWellIcon) {
|
||||
let appSystem = Shell.AppSystem.get_default();
|
||||
return appSystem.lookup_app(source.getId());
|
||||
return source.app;
|
||||
} else if (source.metaWindow) {
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
return tracker.get_window_app(source.metaWindow);
|
||||
@@ -492,34 +491,51 @@ const Dash = new Lang.Class({
|
||||
},
|
||||
|
||||
_createAppItem: function(app) {
|
||||
let display = new AppDisplay.AppWellIcon(app,
|
||||
let appIcon = new AppDisplay.AppWellIcon(app,
|
||||
{ setSizeManually: true,
|
||||
showLabel: false });
|
||||
display._draggable.connect('drag-begin',
|
||||
appIcon._draggable.connect('drag-begin',
|
||||
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() {
|
||||
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();
|
||||
item.setChild(display.actor);
|
||||
item.setChild(appIcon.actor);
|
||||
|
||||
// Override default AppWellIcon label_actor, now the
|
||||
// accessible_name is set at DashItemContainer.setLabelText
|
||||
display.actor.label_actor = null;
|
||||
appIcon.actor.label_actor = null;
|
||||
item.setLabelText(app.get_name());
|
||||
|
||||
display.icon.setIconSize(this.iconSize);
|
||||
appIcon.icon.setIconSize(this.iconSize);
|
||||
this._hookUpLabel(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) {
|
||||
if (item.child.get_hover() && !item.child._delegate.isMenuUp) {
|
||||
if (item.child.get_hover()) {
|
||||
if (this._showLabelTimeoutId == 0) {
|
||||
let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT;
|
||||
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,
|
||||
|
||||
@@ -105,7 +105,7 @@ const restartDialogContent = {
|
||||
endDescription: _("Restarting the system."),
|
||||
confirmButtons: [{ signal: 'ConfirmedReboot',
|
||||
label: C_("button", "Restart") }],
|
||||
iconName: 'system-shutdown-symbolic',
|
||||
iconName: 'view-refresh-symbolic',
|
||||
iconStyleClass: 'end-session-dialog-shutdown-icon'
|
||||
};
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ function _navigateActor(actor) {
|
||||
|
||||
// GrabHelper:
|
||||
// @owner: the actor that owns the GrabHelper
|
||||
// @params: optional parameters to pass to Main.pushModal()
|
||||
//
|
||||
// Creates a new GrabHelper object, for dealing with keyboard and pointer grabs
|
||||
// associated with a set of actors.
|
||||
@@ -34,8 +35,9 @@ function _navigateActor(actor) {
|
||||
const GrabHelper = new Lang.Class({
|
||||
Name: 'GrabHelper',
|
||||
|
||||
_init: function(owner) {
|
||||
_init: function(owner, params) {
|
||||
this._owner = owner;
|
||||
this._modalParams = params;
|
||||
|
||||
this._grabStack = [];
|
||||
|
||||
@@ -165,7 +167,7 @@ const GrabHelper = new Lang.Class({
|
||||
_takeModalGrab: function() {
|
||||
let firstGrab = (this._modalCount == 0);
|
||||
if (firstGrab) {
|
||||
if (!Main.pushModal(this._owner))
|
||||
if (!Main.pushModal(this._owner, this._modalParams))
|
||||
return false;
|
||||
|
||||
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
|
||||
|
||||
@@ -20,25 +20,6 @@ const KEYBOARD_TYPE = 'keyboard-type';
|
||||
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
||||
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'>
|
||||
<method name='Show'>
|
||||
<arg type='u' direction='in' />
|
||||
@@ -98,17 +79,7 @@ const Key = new Lang.Class({
|
||||
},
|
||||
|
||||
_makeKey: function () {
|
||||
let label = this._key.name;
|
||||
|
||||
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 label = GLib.markup_escape_text(this._key.label, -1);
|
||||
let button = new St.Button ({ label: label,
|
||||
style_class: 'keyboard-key' });
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ const LayoutManager = new Lang.Class({
|
||||
this.primaryMonitor = null;
|
||||
this.primaryIndex = -1;
|
||||
this._hotCorners = [];
|
||||
this._rootPixmap = null;
|
||||
this._background = null;
|
||||
this._leftPanelBarrier = 0;
|
||||
this._rightPanelBarrier = 0;
|
||||
this._trayBarrier = 0;
|
||||
@@ -128,8 +128,6 @@ const LayoutManager = new Lang.Class({
|
||||
this.trayBox = new St.Widget({ name: 'trayBox',
|
||||
layout_manager: new Clutter.BinLayout() });
|
||||
this.addChrome(this.trayBox);
|
||||
this.trayBox.connect('allocation-changed',
|
||||
Lang.bind(this, this._updateTrayBarrier));
|
||||
|
||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
||||
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() {
|
||||
this._updateMonitors();
|
||||
this._updateBoxes();
|
||||
@@ -333,30 +315,30 @@ const LayoutManager = new Lang.Class({
|
||||
// to the greeter. Otherwise, we'll just animate the panel,
|
||||
// as usual.
|
||||
if (Main.sessionMode.isGreeter) {
|
||||
this._rootPixmap = global.create_xrootpmap_texture();
|
||||
if (this._rootPixmap != null) {
|
||||
Main.uiGroup.add_actor(this._rootPixmap);
|
||||
Tweener.addTween(this._rootPixmap,
|
||||
this._background = Meta.BackgroundActor.new_for_screen(global.screen);
|
||||
if (this._background != null) {
|
||||
Main.uiGroup.add_actor(this._background);
|
||||
Tweener.addTween(this._background,
|
||||
{ opacity: 0,
|
||||
time: PLYMOUTH_TRANSITION_TIME,
|
||||
transition: 'linear',
|
||||
onComplete: this._fadeRootpmapComplete,
|
||||
onComplete: this._fadeBackgroundComplete,
|
||||
onCompleteScope: this });
|
||||
plymouthTransitionRunning = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!plymouthTransitionRunning)
|
||||
this._fadeRootpmapComplete();
|
||||
this._fadeBackgroundComplete();
|
||||
},
|
||||
|
||||
_fadeRootpmapComplete: function() {
|
||||
_fadeBackgroundComplete: function() {
|
||||
// Don't animate the strut
|
||||
this._chrome.freezeUpdateRegions();
|
||||
|
||||
if (this._rootPixmap != null) {
|
||||
this._rootPixmap.destroy();
|
||||
this._rootPixmap = null;
|
||||
if (this._background != null) {
|
||||
this._background.destroy();
|
||||
this._background = null;
|
||||
}
|
||||
|
||||
Tweener.addTween(this.panelBox,
|
||||
|
||||
@@ -1129,7 +1129,7 @@ const LookingGlass = new Lang.Class({
|
||||
if (this._open)
|
||||
return;
|
||||
|
||||
if (!Main.pushModal(this._entry))
|
||||
if (!Main.pushModal(this._entry, { keybindingMode: Main.KeybindingMode.LOOKING_GLASS }))
|
||||
return;
|
||||
|
||||
this._notebook.selectIndex(0);
|
||||
|
||||
138
js/ui/main.js
138
js/ui/main.js
@@ -20,6 +20,7 @@ const Keyboard = imports.ui.keyboard;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
const Overview = imports.ui.overview;
|
||||
const Panel = imports.ui.panel;
|
||||
const Params = imports.misc.params;
|
||||
const RunDialog = imports.ui.runDialog;
|
||||
const Layout = imports.ui.layout;
|
||||
const LookingGlass = imports.ui.lookingGlass;
|
||||
@@ -39,6 +40,18 @@ const Util = imports.misc.util;
|
||||
const OVERRIDES_SCHEMA = 'org.gnome.shell.overrides';
|
||||
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
|
||||
|
||||
const KeybindingMode = {
|
||||
NONE: 0, // block all keybindings
|
||||
NORMAL: 1 << 0, // window mode
|
||||
OVERVIEW: 1 << 1,
|
||||
LOCK_SCREEN: 1 << 2,
|
||||
UNLOCK_SCREEN: 1 << 3,
|
||||
LOGIN_SCREEN: 1 << 4,
|
||||
MESSAGE_TRAY: 1 << 5,
|
||||
SYSTEM_MODAL: 1 << 6,
|
||||
LOOKING_GLASS: 1 << 7
|
||||
};
|
||||
|
||||
let componentManager = null;
|
||||
let panel = null;
|
||||
let overview = null;
|
||||
@@ -55,6 +68,7 @@ let shellDBusService = null;
|
||||
let shellMountOpDBusService = null;
|
||||
let screenSaverDBus = null;
|
||||
let modalCount = 0;
|
||||
let keybindingMode = KeybindingMode.NORMAL;
|
||||
let modalActorFocusStack = [];
|
||||
let uiGroup = null;
|
||||
let magnifier = null;
|
||||
@@ -69,7 +83,17 @@ let _overridesSettings = null;
|
||||
let background = null;
|
||||
|
||||
function _sessionUpdated() {
|
||||
Meta.keybindings_set_custom_handler('panel-run-dialog', sessionMode.hasRunDialog ? openRunDialog : null);
|
||||
wm.setCustomKeybindingHandler('panel-main-menu',
|
||||
KeybindingMode.NORMAL |
|
||||
KeybindingMode.OVERVIEW,
|
||||
sessionMode.hasOverview ? Lang.bind(overview, overview.toggle) : null);
|
||||
wm.allowKeybinding('overlay-key', KeybindingMode.NORMAL |
|
||||
KeybindingMode.OVERVIEW);
|
||||
|
||||
wm.setCustomKeybindingHandler('panel-run-dialog',
|
||||
KeybindingMode.NORMAL |
|
||||
KeybindingMode.OVERVIEW,
|
||||
sessionMode.hasRunDialog ? openRunDialog : null);
|
||||
if (sessionMode.isGreeter)
|
||||
screenShield.showDialog();
|
||||
}
|
||||
@@ -155,9 +179,7 @@ function start() {
|
||||
|
||||
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
|
||||
false, -1, 1);
|
||||
Meta.keybindings_set_custom_handler('panel-main-menu', Lang.bind(overview, overview.toggle));
|
||||
global.display.connect('overlay-key', Lang.bind(overview, overview.toggle));
|
||||
|
||||
sessionMode.connect('update', _sessionUpdated);
|
||||
_sessionUpdated();
|
||||
|
||||
@@ -167,8 +189,6 @@ function start() {
|
||||
|
||||
_startDate = new Date();
|
||||
|
||||
global.stage.connect('captured-event', _globalKeyPressHandler);
|
||||
|
||||
log('GNOME Shell started at ' + _startDate);
|
||||
|
||||
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
|
||||
@@ -465,80 +485,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) {
|
||||
for (let i = 0; i < modalActorFocusStack.length; i++) {
|
||||
if (modalActorFocusStack[i].actor == actor)
|
||||
@@ -554,7 +500,7 @@ function isInModalStack(actor) {
|
||||
/**
|
||||
* pushModal:
|
||||
* @actor: #ClutterActor which will be given keyboard focus
|
||||
* @timestamp: optional timestamp
|
||||
* @params: optional parameters
|
||||
*
|
||||
* Ensure we are in a mode where all keyboard and mouse input goes to
|
||||
* the stage, and focus @actor. Multiple calls to this function act in
|
||||
@@ -565,21 +511,27 @@ function isInModalStack(actor) {
|
||||
* modal stack returns to this actor, reset the focus to the actor
|
||||
* which was focused at the time pushModal() was invoked.
|
||||
*
|
||||
* @timestamp is optionally used to associate the call with a specific user
|
||||
* initiated event. If not provided then the value of
|
||||
* global.get_current_time() is assumed.
|
||||
* @params may be used to provide the following parameters:
|
||||
* - timestamp: used to associate the call with a specific user initiated
|
||||
* event. If not provided then the value of
|
||||
* global.get_current_time() is assumed.
|
||||
*
|
||||
* @options: optional Meta.ModalOptions flags to indicate that the
|
||||
* pointer is alrady grabbed
|
||||
* - options: Meta.ModalOptions flags to indicate that the pointer is
|
||||
* already grabbed
|
||||
*
|
||||
* - keybindingMode: used to set the current Main.KeybindingMode to filter
|
||||
* global keybindings; the default of NONE will filter
|
||||
* out all keybindings
|
||||
*
|
||||
* Returns: true iff we successfully acquired a grab or already had one
|
||||
*/
|
||||
function pushModal(actor, timestamp, options) {
|
||||
if (timestamp == undefined)
|
||||
timestamp = global.get_current_time();
|
||||
function pushModal(actor, params) {
|
||||
params = Params.parse(params, { timestamp: global.get_current_time(),
|
||||
options: 0,
|
||||
keybindingMode: KeybindingMode.NONE });
|
||||
|
||||
if (modalCount == 0) {
|
||||
if (!global.begin_modal(timestamp, options ? options : 0)) {
|
||||
if (!global.begin_modal(params.timestamp, params.options)) {
|
||||
log('pushModal: invocation of begin_modal failed');
|
||||
return false;
|
||||
}
|
||||
@@ -606,8 +558,10 @@ function pushModal(actor, timestamp, options) {
|
||||
modalActorFocusStack.push({ actor: actor,
|
||||
focus: curFocus,
|
||||
destroyId: actorDestroyId,
|
||||
focusDestroyId: curFocusDestroyId });
|
||||
focusDestroyId: curFocusDestroyId,
|
||||
keybindingMode: keybindingMode });
|
||||
|
||||
keybindingMode = params.keybindingMode;
|
||||
global.stage.set_key_focus(actor);
|
||||
return true;
|
||||
}
|
||||
@@ -634,6 +588,7 @@ function popModal(actor, timestamp) {
|
||||
global.stage.set_key_focus(null);
|
||||
global.end_modal(timestamp);
|
||||
global.set_stage_input_mode(Shell.StageInputMode.NORMAL);
|
||||
keybindingMode = KeybindingMode.NORMAL;
|
||||
|
||||
throw new Error('incorrect pop');
|
||||
}
|
||||
@@ -646,6 +601,7 @@ function popModal(actor, timestamp) {
|
||||
if (focusIndex == modalActorFocusStack.length - 1) {
|
||||
if (record.focus)
|
||||
record.focus.disconnect(record.focusDestroyId);
|
||||
keybindingMode = record.keybindingMode;
|
||||
global.stage.set_key_focus(record.focus);
|
||||
} else {
|
||||
let t = modalActorFocusStack[modalActorFocusStack.length - 1];
|
||||
@@ -655,6 +611,7 @@ function popModal(actor, timestamp) {
|
||||
for (let i = modalActorFocusStack.length - 1; i > focusIndex; i--) {
|
||||
modalActorFocusStack[i].focus = modalActorFocusStack[i - 1].focus;
|
||||
modalActorFocusStack[i].focusDestroyId = modalActorFocusStack[i - 1].focusDestroyId;
|
||||
modalActorFocusStack[i].keybindingMode = modalActorFocusStack[i - 1].keybindingMode;
|
||||
}
|
||||
}
|
||||
modalActorFocusStack.splice(focusIndex, 1);
|
||||
@@ -665,6 +622,7 @@ function popModal(actor, timestamp) {
|
||||
global.end_modal(timestamp);
|
||||
global.set_stage_input_mode(Shell.StageInputMode.NORMAL);
|
||||
Meta.enable_unredirect_for_screen(global.screen);
|
||||
keybindingMode = KeybindingMode.NORMAL;
|
||||
}
|
||||
|
||||
function createLookingGlass() {
|
||||
|
||||
@@ -4,6 +4,7 @@ const Clutter = imports.gi.Clutter;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||
const Atk = imports.gi.Atk;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
@@ -35,8 +36,6 @@ const LONGER_SUMMARY_TIMEOUT = 4;
|
||||
const HIDE_TIMEOUT = 0.2;
|
||||
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
|
||||
// range from the point where it left the tray.
|
||||
const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
|
||||
@@ -143,14 +142,9 @@ const URLHighlighter = new Lang.Class({
|
||||
let url = this._urls[urlId].url;
|
||||
if (url.indexOf(':') == -1)
|
||||
url = 'http://' + url;
|
||||
try {
|
||||
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
|
||||
return true;
|
||||
} catch (e) {
|
||||
// TODO: remove this after gnome 3 release
|
||||
Util.spawn(['gvfs-open', url]);
|
||||
return true;
|
||||
}
|
||||
|
||||
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}));
|
||||
@@ -242,13 +236,8 @@ function makeCloseButton() {
|
||||
|
||||
closeButton.connect('style-changed', function() {
|
||||
let themeNode = closeButton.get_theme_node();
|
||||
|
||||
// libcroco doesn't support negative units
|
||||
let direction = closeButton.get_text_direction() == Clutter.TextDirection.RTL ? -1 : 1;
|
||||
closeButton.translation_x = direction * themeNode.get_length('-shell-close-overlap-x');
|
||||
|
||||
// libcroco doesn't support negative units
|
||||
closeButton.translation_y = -themeNode.get_length('-shell-close-overlap-y');
|
||||
closeButton.translation_x = themeNode.get_length('-shell-close-overlap-x');
|
||||
closeButton.translation_y = themeNode.get_length('-shell-close-overlap-y');
|
||||
});
|
||||
|
||||
return closeButton;
|
||||
@@ -294,9 +283,12 @@ function makeCloseButton() {
|
||||
// If @params contains a 'body' parameter, then that text will be added to
|
||||
// the content area (as with addBody()).
|
||||
//
|
||||
// By default, the icon shown is created by calling
|
||||
// source.createIcon(). However, if @params contains an 'icon'
|
||||
// parameter, the passed in icon will be used.
|
||||
// By default, the icon shown is the same as the source's.
|
||||
// However, if @params contains a 'gicon' parameter, the passed in gicon
|
||||
// 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
|
||||
// 'bodyMarkup' parameter with the value %true, then the corresponding
|
||||
@@ -311,6 +303,8 @@ function makeCloseButton() {
|
||||
const Notification = new Lang.Class({
|
||||
Name: 'Notification',
|
||||
|
||||
ICON_SIZE: 24,
|
||||
|
||||
IMAGE_SIZE: 125,
|
||||
|
||||
_init: function(source, title, banner, params) {
|
||||
@@ -320,6 +314,7 @@ const Notification = new Lang.Class({
|
||||
this.resident = false;
|
||||
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
||||
this.isTransient = false;
|
||||
this.forFeedback = false;
|
||||
this.expanded = false;
|
||||
this.focused = false;
|
||||
this.acknowledged = false;
|
||||
@@ -394,8 +389,8 @@ const Notification = new Lang.Class({
|
||||
update: function(title, banner, params) {
|
||||
params = Params.parse(params, { customContent: false,
|
||||
body: null,
|
||||
icon: null,
|
||||
secondaryIcon: null,
|
||||
gicon: null,
|
||||
secondaryGIcon: null,
|
||||
titleMarkup: false,
|
||||
bannerMarkup: false,
|
||||
bodyMarkup: false,
|
||||
@@ -405,12 +400,12 @@ const Notification = new Lang.Class({
|
||||
|
||||
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 = null;
|
||||
}
|
||||
|
||||
if (this._secondaryIcon && (params.secondaryIcon || params.clear)) {
|
||||
if (this._secondaryIcon && (params.secondaryGIcon || params.clear)) {
|
||||
this._secondaryIcon.destroy();
|
||||
this._secondaryIcon = null;
|
||||
}
|
||||
@@ -440,8 +435,14 @@ const Notification = new Lang.Class({
|
||||
if (!this._scrollArea && !this._actionArea && !this._imageBin)
|
||||
this._table.remove_style_class_name('multi-line-notification');
|
||||
|
||||
if (!this._icon) {
|
||||
this._icon = params.icon || this.source.createIcon(NOTIFICATION_ICON_SIZE);
|
||||
if (params.gicon) {
|
||||
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,
|
||||
col: 0,
|
||||
x_expand: false,
|
||||
@@ -450,11 +451,10 @@ const Notification = new Lang.Class({
|
||||
y_align: St.Align.START });
|
||||
}
|
||||
|
||||
if (!this._secondaryIcon) {
|
||||
this._secondaryIcon = params.secondaryIcon;
|
||||
|
||||
if (this._secondaryIcon)
|
||||
this._bannerBox.add_actor(this._secondaryIcon);
|
||||
if (params.secondaryGIcon) {
|
||||
this._secondaryIcon = new St.Icon({ gicon: params.secondaryGIcon,
|
||||
style_class: 'secondary-icon' });
|
||||
this._bannerBox.add_actor(this._secondaryIcon);
|
||||
}
|
||||
|
||||
this.title = title;
|
||||
@@ -714,6 +714,10 @@ const Notification = new Lang.Class({
|
||||
this.isTransient = isTransient;
|
||||
},
|
||||
|
||||
setForFeedback: function(forFeedback) {
|
||||
this.forFeedback = forFeedback;
|
||||
},
|
||||
|
||||
setUseActionIcons: function(useIcons) {
|
||||
this._useActionIcons = useIcons;
|
||||
},
|
||||
@@ -1117,10 +1121,14 @@ const Source = new Lang.Class({
|
||||
// Provides a sane default implementation, override if you need
|
||||
// something more fancy.
|
||||
createIcon: function(size) {
|
||||
return new St.Icon({ icon_name: this.iconName,
|
||||
return new St.Icon({ gicon: this.getIcon(),
|
||||
icon_size: size });
|
||||
},
|
||||
|
||||
getIcon: function() {
|
||||
return new Gio.ThemedIcon({ name: this.iconName });
|
||||
},
|
||||
|
||||
_ensureMainIcon: function() {
|
||||
if (this._mainIcon)
|
||||
return;
|
||||
@@ -1386,6 +1394,8 @@ const MessageTray = new Lang.Class({
|
||||
y_expand: true,
|
||||
x_expand: true,
|
||||
layout_manager: new Clutter.BinLayout() });
|
||||
this._notificationWidget.connect('key-release-event', Lang.bind(this, this._onNotificationKeyRelease));
|
||||
|
||||
this.actor.add_actor(this._notificationWidget);
|
||||
|
||||
this._notificationBin = new St.Bin({ y_expand: true });
|
||||
@@ -1435,15 +1445,16 @@ const MessageTray = new Lang.Class({
|
||||
|
||||
this._closeButton = makeCloseButton();
|
||||
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._idleMonitorWatchId = 0;
|
||||
this._idleMonitorBecameActiveId = 0;
|
||||
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,
|
||||
{ keybindingMode: Main.KeybindingMode.MESSAGE_TRAY });
|
||||
this._grabHelper.addActor(this._summaryBoxPointer.actor);
|
||||
this._grabHelper.addActor(this.actor);
|
||||
if (Main.panel.statusArea.activities)
|
||||
@@ -1507,10 +1518,20 @@ const MessageTray = new Lang.Class({
|
||||
|
||||
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
||||
|
||||
global.display.add_keybinding('toggle-message-tray',
|
||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Meta.KeyBindingFlags.NONE,
|
||||
Lang.bind(this, this.toggleAndNavigate));
|
||||
Main.wm.addKeybinding('toggle-message-tray',
|
||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Meta.KeyBindingFlags.NONE,
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.MESSAGE_TRAY |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this.toggleAndNavigate));
|
||||
Main.wm.addKeybinding('focus-active-notification',
|
||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Meta.KeyBindingFlags.NONE,
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.MESSAGE_TRAY |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._expandActiveNotification));
|
||||
|
||||
this._summaryItems = [];
|
||||
this._chatSummaryItemsCount = 0;
|
||||
@@ -1586,7 +1607,19 @@ const MessageTray = new Lang.Class({
|
||||
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) {
|
||||
this._closeButton.hide();
|
||||
this._notificationClosed = true;
|
||||
@@ -1946,8 +1979,9 @@ const MessageTray = new Lang.Class({
|
||||
// Notifications
|
||||
let notificationQueue = this._notificationQueue;
|
||||
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 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 notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
||||
let notificationExpanded = this._notification && this._notification.expanded;
|
||||
@@ -2153,20 +2187,26 @@ const MessageTray = new Lang.Class({
|
||||
});
|
||||
},
|
||||
|
||||
_onIdleMonitorWatch: function(monitor, id, userBecameIdle) {
|
||||
this.idleMonitor.remove_watch(this._idleMonitorWatchId);
|
||||
this._idleMonitorWatchId = 0;
|
||||
if (!userBecameIdle)
|
||||
this._updateNotificationTimeout(2000);
|
||||
_onIdleMonitorBecameActive: function() {
|
||||
this.idleMonitor.disconnect(this._idleMonitorBecameActiveId);
|
||||
this._idleMonitorBecameActiveId = 0;
|
||||
|
||||
this._userActiveWhileNotificationShown = true;
|
||||
this._updateNotificationTimeout(2000);
|
||||
this._updateState();
|
||||
},
|
||||
|
||||
_showNotification: function() {
|
||||
this._notification = this._notificationQueue.shift();
|
||||
this._userActiveWhileNotificationShown = this.idleMonitor.get_idletime() <= IDLE_TIME;
|
||||
this._idleMonitorWatchId = this.idleMonitor.add_watch(IDLE_TIME,
|
||||
Lang.bind(this, this._onIdleMonitorWatch));
|
||||
|
||||
let userIdle = this.idleMonitor.get_idletime() > IDLE_TIME;
|
||||
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',
|
||||
Lang.bind(this, this._escapeTray));
|
||||
this._notification.connect('unfocused', Lang.bind(this, function() {
|
||||
@@ -2277,8 +2317,25 @@ const MessageTray = new Lang.Class({
|
||||
},
|
||||
|
||||
_hideNotification: function() {
|
||||
// HACK!
|
||||
// There seems to be a reentrancy issue in calling .ungrab() here,
|
||||
// which causes _updateState to be called before _notificationState
|
||||
// becomes HIDING. That hides the notification again, nullifying the
|
||||
// object but not setting _notificationState (and that's the weird part)
|
||||
// As then _notificationState is stuck into SHOWN but _notification
|
||||
// is null, every new _updateState fails and the message tray is
|
||||
// lost forever.
|
||||
//
|
||||
// See more at https://bugzilla.gnome.org/show_bug.cgi?id=683986
|
||||
this._notificationState = State.HIDING;
|
||||
|
||||
this._grabHelper.ungrab({ actor: this._notification.actor });
|
||||
|
||||
if (this._idleMonitorBecameActiveId) {
|
||||
this.idleMonitor.disconnect(this._idleMonitorBecameActiveId);
|
||||
this._idleMonitorBecameActiveId = 0;
|
||||
}
|
||||
|
||||
if (this._notificationExpandedId) {
|
||||
this._notification.disconnect(this._notificationExpandedId);
|
||||
this._notificationExpandedId = 0;
|
||||
@@ -2318,6 +2375,13 @@ const MessageTray = new Lang.Class({
|
||||
notification.destroy(NotificationDestroyedReason.EXPIRED);
|
||||
},
|
||||
|
||||
_expandActiveNotification: function() {
|
||||
if (!this._notification)
|
||||
return;
|
||||
|
||||
this._expandNotification(false);
|
||||
},
|
||||
|
||||
_expandNotification: function(autoExpanding) {
|
||||
// Don't grab focus in notifications that are auto-expanded.
|
||||
if (!autoExpanding)
|
||||
@@ -2341,8 +2405,13 @@ const MessageTray = new Lang.Class({
|
||||
if (this._notificationWidget.y < expandedY) {
|
||||
this._notificationWidget.y = expandedY;
|
||||
} else if (this._notification.y != expandedY) {
|
||||
// Tween also opacity here, to override a possible tween that's
|
||||
// currently hiding the notification. This will ensure that the
|
||||
// notification is not removed when the onComplete handler for this
|
||||
// one triggers.
|
||||
this._tween(this._notificationWidget, '_notificationState', State.SHOWN,
|
||||
{ y: expandedY,
|
||||
opacity: 255,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
|
||||
@@ -20,7 +20,6 @@ const Main = imports.ui.main;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const OPEN_AND_CLOSE_TIME = 0.1;
|
||||
const FADE_IN_BUTTONS_TIME = 0.33;
|
||||
const FADE_OUT_DIALOG_TIME = 1.0;
|
||||
|
||||
const State = {
|
||||
@@ -38,10 +37,12 @@ const ModalDialog = new Lang.Class({
|
||||
params = Params.parse(params, { shellReactive: false,
|
||||
styleClass: null,
|
||||
parentActor: Main.uiGroup,
|
||||
keybindingMode: Main.KeybindingMode.SYSTEM_MODAL,
|
||||
shouldFadeIn: true });
|
||||
|
||||
this.state = State.CLOSED;
|
||||
this._hasModal = false;
|
||||
this._keybindingMode = params.keybindingMode;
|
||||
this._shellReactive = params.shellReactive;
|
||||
this._shouldFadeIn = params.shouldFadeIn;
|
||||
|
||||
@@ -117,8 +118,6 @@ const ModalDialog = new Lang.Class({
|
||||
},
|
||||
|
||||
setButtons: function(buttons) {
|
||||
let hadChildren = this._buttonLayout.get_children() > 0;
|
||||
|
||||
this._buttonLayout.destroy_all_children();
|
||||
this._actionKeys = {};
|
||||
|
||||
@@ -169,21 +168,7 @@ const ModalDialog = new Lang.Class({
|
||||
this._actionKeys[key] = action;
|
||||
}
|
||||
|
||||
// Fade in buttons if there weren't any before
|
||||
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');
|
||||
}
|
||||
|
||||
this.emit('buttons-set');
|
||||
},
|
||||
|
||||
_onKeyReleaseEvent: function(object, event) {
|
||||
@@ -243,7 +228,7 @@ const ModalDialog = new Lang.Class({
|
||||
if (this.state == State.OPENED || this.state == State.OPENING)
|
||||
return true;
|
||||
|
||||
if (!this.pushModal(timestamp))
|
||||
if (!this.pushModal({ timestamp: timestamp }))
|
||||
return false;
|
||||
|
||||
this._fadeOpen(onPrimary);
|
||||
@@ -293,7 +278,8 @@ const ModalDialog = new Lang.Class({
|
||||
pushModal: function (timestamp) {
|
||||
if (this._hasModal)
|
||||
return true;
|
||||
if (!Main.pushModal(this._group, timestamp))
|
||||
if (!Main.pushModal(this._group, { timestamp: timestamp,
|
||||
keybindingMode: this._keybindingMode }))
|
||||
return false;
|
||||
|
||||
this._hasModal = true;
|
||||
|
||||
@@ -356,12 +356,10 @@ const NotificationDaemon = new Lang.Class({
|
||||
ndata.actions, ndata.hints, ndata.notification];
|
||||
|
||||
let gicon = this._iconForNotificationData(icon, hints);
|
||||
let iconActor = new St.Icon({ gicon: gicon,
|
||||
icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
|
||||
|
||||
if (notification == null) {
|
||||
notification = new MessageTray.Notification(source, summary, body,
|
||||
{ icon: iconActor,
|
||||
{ gicon: gicon,
|
||||
bannerMarkup: true });
|
||||
ndata.notification = notification;
|
||||
notification.connect('destroy', Lang.bind(this,
|
||||
@@ -386,7 +384,7 @@ const NotificationDaemon = new Lang.Class({
|
||||
this._emitActionInvoked(ndata.id, actionId);
|
||||
}));
|
||||
} else {
|
||||
notification.update(summary, body, { icon: iconActor,
|
||||
notification.update(summary, body, { gicon: gicon,
|
||||
bannerMarkup: true,
|
||||
clear: true });
|
||||
}
|
||||
|
||||
@@ -23,11 +23,29 @@ const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
||||
// Time for initial animation going into Overview mode
|
||||
const ANIMATION_TIME = 0.25;
|
||||
|
||||
// We split the screen vertically between the dash and the view selector.
|
||||
const DASH_SPLIT_FRACTION = 0.1;
|
||||
// XXX -- grab this automatically. Hard to do.
|
||||
const DASH_MAX_WIDTH = 96;
|
||||
|
||||
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 = {
|
||||
NONE: 0,
|
||||
HORIZONTAL: 1,
|
||||
@@ -57,7 +75,14 @@ const ShellInfo = new Lang.Class({
|
||||
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) {
|
||||
this._source = new MessageTray.SystemNotificationSource();
|
||||
this._source.connect('destroy', Lang.bind(this,
|
||||
@@ -71,6 +96,7 @@ const ShellInfo = new Lang.Class({
|
||||
if (this._source.notifications.length == 0) {
|
||||
notification = new MessageTray.Notification(this._source, text, null);
|
||||
notification.setTransient(true);
|
||||
notification.setForFeedback(forFeedback);
|
||||
} else {
|
||||
notification = this._source.notifications[0];
|
||||
notification.update(text, null, { clear: true });
|
||||
@@ -78,10 +104,8 @@ const ShellInfo = new Lang.Class({
|
||||
|
||||
this._undoCallback = undoCallback;
|
||||
if (undoCallback) {
|
||||
notification.addButton('system-undo',
|
||||
undoLabel ? undoLabel : _("Undo"));
|
||||
notification.connect('action-invoked',
|
||||
Lang.bind(this, this._onUndoClicked));
|
||||
notification.addButton('system-undo', _("Undo"));
|
||||
notification.connect('action-invoked', Lang.bind(this, this._onUndoClicked));
|
||||
}
|
||||
|
||||
this._source.notify(notification);
|
||||
@@ -113,6 +137,10 @@ const Overview = new Lang.Class({
|
||||
// scenes which allows us to show the background with different
|
||||
// rendering options without duplicating the texture data.
|
||||
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();
|
||||
global.overlay_group.add_actor(this._background);
|
||||
|
||||
@@ -233,11 +261,16 @@ const Overview = new Lang.Class({
|
||||
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)
|
||||
return;
|
||||
|
||||
this._shellInfo.setMessage(text, undoCallback, undoLabel);
|
||||
this._shellInfo.setMessage(text, options);
|
||||
},
|
||||
|
||||
_onDragBegin: function() {
|
||||
@@ -502,7 +535,7 @@ const Overview = new Lang.Class({
|
||||
let searchX = (primary.width - searchWidth) / 2;
|
||||
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 dashX;
|
||||
if (rtl) {
|
||||
@@ -558,7 +591,7 @@ const Overview = new Lang.Class({
|
||||
if (this._shown)
|
||||
return;
|
||||
// Do this manually instead of using _syncInputMode, to handle failure
|
||||
if (!Main.pushModal(this._group))
|
||||
if (!Main.pushModal(this._group, { keybindingMode: Main.KeybindingMode.OVERVIEW }))
|
||||
return;
|
||||
this._modal = true;
|
||||
this._animateVisible();
|
||||
@@ -622,7 +655,7 @@ const Overview = new Lang.Class({
|
||||
});
|
||||
|
||||
Tweener.addTween(this._background,
|
||||
{ dim_factor: 0.4,
|
||||
{ dim_factor: 0.8,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
@@ -709,7 +742,8 @@ const Overview = new Lang.Class({
|
||||
|
||||
if (this._shown) {
|
||||
if (!this._modal) {
|
||||
if (Main.pushModal(this._group))
|
||||
if (Main.pushModal(this._group,
|
||||
{ keybindingMode: Main.KeybindingMode.OVERVIEW }))
|
||||
this._modal = true;
|
||||
else
|
||||
this.hide();
|
||||
|
||||
@@ -82,26 +82,34 @@ const AnimatedIcon = new Lang.Class({
|
||||
_init: function(name, size) {
|
||||
this.actor = new St.Bin({ visible: false });
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
this.actor.connect('notify::visible', Lang.bind(this, this._onVisibleNotify));
|
||||
|
||||
this._isLoaded = false;
|
||||
this._isPlaying = false;
|
||||
this._timeoutId = 0;
|
||||
this._frame = 0;
|
||||
this._animations = St.TextureCache.get_default().load_sliced_image (global.datadir + '/theme/' + name, size, size);
|
||||
this._animations = St.TextureCache.get_default().load_sliced_image (global.datadir + '/theme/' + name, size, size,
|
||||
Lang.bind(this, this._animationsLoaded));
|
||||
this.actor.set_child(this._animations);
|
||||
},
|
||||
|
||||
_disconnectTimeout: function() {
|
||||
play: function() {
|
||||
if (this._isLoaded && this._timeoutId == 0) {
|
||||
if (this._frame == 0)
|
||||
this._showFrame(0);
|
||||
|
||||
this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
|
||||
}
|
||||
|
||||
this._isPlaying = true;
|
||||
},
|
||||
|
||||
stop: function() {
|
||||
if (this._timeoutId > 0) {
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
this._timeoutId = 0;
|
||||
}
|
||||
},
|
||||
|
||||
_onVisibleNotify: function() {
|
||||
if (this.actor.visible)
|
||||
this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
|
||||
else
|
||||
this._disconnectTimeout();
|
||||
this._isPlaying = false;
|
||||
},
|
||||
|
||||
_showFrame: function(frame) {
|
||||
@@ -121,8 +129,17 @@ const AnimatedIcon = new Lang.Class({
|
||||
return true;
|
||||
},
|
||||
|
||||
_animationsLoaded: function() {
|
||||
this._isLoaded = true;
|
||||
|
||||
if (this._isPlaying) {
|
||||
this._showFrame(0);
|
||||
this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
|
||||
}
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
this._disconnectTimeout();
|
||||
this.stop();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -247,6 +264,10 @@ const AppMenuButton = new Lang.Class({
|
||||
this._container.connect('get-preferred-height', Lang.bind(this, this._getContentPreferredHeight));
|
||||
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.connect('style-changed',
|
||||
Lang.bind(this, this._onIconBoxStyleChanged));
|
||||
@@ -332,6 +353,15 @@ const AppMenuButton = new Lang.Class({
|
||||
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() {
|
||||
let allocation = this._iconBox.allocation;
|
||||
if (this._iconBottomClip > 0)
|
||||
@@ -354,6 +384,7 @@ const AppMenuButton = new Lang.Class({
|
||||
transition: "easeOutQuad",
|
||||
onCompleteScope: this,
|
||||
onComplete: function() {
|
||||
this._spinner.stop();
|
||||
this._spinner.actor.opacity = 255;
|
||||
this._spinner.actor.hide();
|
||||
}
|
||||
@@ -363,6 +394,7 @@ const AppMenuButton = new Lang.Class({
|
||||
startAnimation: function() {
|
||||
this._stop = false;
|
||||
this.actor.reactive = false;
|
||||
this._spinner.play();
|
||||
this._spinner.actor.show();
|
||||
},
|
||||
|
||||
@@ -901,6 +933,7 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
|
||||
'volume': imports.ui.status.volume.Indicator,
|
||||
'battery': imports.ui.status.power.Indicator,
|
||||
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
||||
'logo': imports.gdm.loginDialog.LogoMenuButton,
|
||||
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
||||
'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
|
||||
'userMenu': imports.ui.userMenu.UserMenuButton
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
// 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',
|
||||
|
||||
_init: function() {
|
||||
let idleMonitor = Shell.IdleMonitor.get();
|
||||
idleMonitor.add_watch(IDLE_TIME,
|
||||
Lang.bind(this, this._onIdleMonitorWatch));
|
||||
let idleMonitor = new GnomeDesktop.IdleMonitor();
|
||||
idleMonitor.connect('became-active', Lang.bind(this, this._onIdleMonitorBecameActive));
|
||||
idleMonitor.add_watch(IDLE_TIME, Lang.bind(this, this._onIdleMonitorBecameIdle));
|
||||
this._idle = idleMonitor.get_idletime() > IDLE_TIME;
|
||||
this._watches = [];
|
||||
this.pointerX = null;
|
||||
@@ -78,11 +79,14 @@ const PointerWatcher = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
_onIdleMonitorWatch: function(monitor, id, userBecameIdle) {
|
||||
this._idle = userBecameIdle;
|
||||
if (!userBecameIdle)
|
||||
this._updatePointer();
|
||||
_onIdleMonitorBecameActive: function(monitor) {
|
||||
this._idle = false;
|
||||
this._updatePointer();
|
||||
this._updateTimeout();
|
||||
},
|
||||
|
||||
_onIdleMonitorBecameIdle: function(monitor) {
|
||||
this._idle = true;
|
||||
this._updateTimeout();
|
||||
},
|
||||
|
||||
|
||||
@@ -31,20 +31,37 @@ const SearchProviderIface = <interface name="org.gnome.Shell.SearchProvider">
|
||||
|
||||
var SearchProviderProxy = Gio.DBusProxy.makeProxyWrapper(SearchProviderIface);
|
||||
|
||||
|
||||
function loadRemoteSearchProviders(addProviderCallback) {
|
||||
let loadState = { loadedProviders: [],
|
||||
objectPaths: {},
|
||||
numLoading: 0,
|
||||
addProviderCallback: addProviderCallback };
|
||||
|
||||
let dataDirs = GLib.get_system_data_dirs();
|
||||
let loadedProviders = {};
|
||||
for (let i = 0; i < dataDirs.length; i++) {
|
||||
let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'search-providers']);
|
||||
let dir = Gio.file_new_for_path(path);
|
||||
if (!dir.query_exists(null))
|
||||
continue;
|
||||
loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallback);
|
||||
|
||||
dir.query_info_async('standard:type', Gio.FileQueryInfoFlags.NONE,
|
||||
GLib.PRIORITY_DEFAULT, null,
|
||||
function(object, res) {
|
||||
let exists = false;
|
||||
try {
|
||||
object.query_info_finish(res);
|
||||
exists = true;
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
if (!exists)
|
||||
return;
|
||||
|
||||
loadState.numLoading++;
|
||||
loadRemoteSearchProvidersFromDir(dir, loadState);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallback) {
|
||||
function loadRemoteSearchProvidersFromDir(dir, loadState) {
|
||||
let dirPath = dir.get_path();
|
||||
FileUtils.listDirAsync(dir, Lang.bind(this, function(files) {
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
@@ -60,13 +77,13 @@ function loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallb
|
||||
if (!keyfile.has_group(KEY_FILE_GROUP))
|
||||
continue;
|
||||
|
||||
let remoteProvider, title;
|
||||
let remoteProvider;
|
||||
try {
|
||||
let group = KEY_FILE_GROUP;
|
||||
let busName = keyfile.get_string(group, 'BusName');
|
||||
let objectPath = keyfile.get_string(group, 'ObjectPath');
|
||||
|
||||
if (loadedProviders[objectPath])
|
||||
if (loadState.objectPaths[objectPath])
|
||||
continue;
|
||||
|
||||
let appInfo = null;
|
||||
@@ -74,46 +91,93 @@ function loadRemoteSearchProvidersFromDir(dir, loadedProviders, addProviderCallb
|
||||
let desktopId = keyfile.get_string(group, 'DesktopId');
|
||||
appInfo = Gio.DesktopAppInfo.new(desktopId);
|
||||
} catch (e) {
|
||||
log('Ignoring search provider ' + path + ': missing DesktopId');
|
||||
continue;
|
||||
}
|
||||
|
||||
let icon;
|
||||
if (appInfo) {
|
||||
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,
|
||||
remoteProvider = new RemoteSearchProvider(appInfo,
|
||||
busName,
|
||||
objectPath);
|
||||
loadedProviders[objectPath] = remoteProvider;
|
||||
loadState.objectPaths[objectPath] = remoteProvider;
|
||||
loadState.loadedProviders.push(remoteProvider);
|
||||
} 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;
|
||||
}
|
||||
|
||||
addProviderCallback(remoteProvider);
|
||||
}
|
||||
|
||||
remoteProvidersDirLoaded(loadState);
|
||||
}));
|
||||
|
||||
};
|
||||
|
||||
function remoteProvidersDirLoaded(loadState) {
|
||||
loadState.numLoading--;
|
||||
if (loadState.numLoading > 0)
|
||||
return;
|
||||
|
||||
let searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
|
||||
let sortOrder = searchSettings.get_strv('sort-order');
|
||||
let numSorted = sortOrder.length;
|
||||
|
||||
loadState.loadedProviders.sort(
|
||||
function(providerA, providerB) {
|
||||
let idxA, idxB;
|
||||
let appIdA, appIdB;
|
||||
|
||||
appIdA = providerA.appInfo.get_id();
|
||||
appIdB = providerB.appInfo.get_id();
|
||||
|
||||
idxA = sortOrder.indexOf(appIdA);
|
||||
idxB = sortOrder.indexOf(appIdB);
|
||||
|
||||
// if no provider is found in the order, use alphabetical order
|
||||
if ((idxA == -1) && (idxB == -1))
|
||||
return GLib.utf8_collate(providerA.title, providerB.title);
|
||||
|
||||
if (numSorted > 1) {
|
||||
// if providerA is the last, it goes after everything
|
||||
if ((idxA + 1) == numSorted)
|
||||
return 1;
|
||||
// if providerB is the last, it goes after everything
|
||||
else if ((idxB + 1) == numSorted)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// if providerA isn't found, it's sorted after providerB
|
||||
if (idxA == -1)
|
||||
return 1;
|
||||
|
||||
// if providerB isn't found, it's sorted after providerA
|
||||
if (idxB == -1)
|
||||
return -1;
|
||||
|
||||
// finally, if both providers are found, return their order in the list
|
||||
return (idxA - idxB);
|
||||
});
|
||||
|
||||
loadState.loadedProviders.forEach(
|
||||
function(provider) {
|
||||
loadState.addProviderCallback(provider);
|
||||
});
|
||||
}
|
||||
|
||||
const RemoteSearchProvider = new Lang.Class({
|
||||
Name: 'RemoteSearchProvider',
|
||||
Extends: Search.SearchProvider,
|
||||
|
||||
_init: function(title, icon, dbusName, dbusPath) {
|
||||
_init: function(appInfo, dbusName, dbusPath) {
|
||||
this._proxy = new SearchProviderProxy(Gio.DBus.session,
|
||||
dbusName, dbusPath);
|
||||
dbusName, dbusPath, Lang.bind(this, this._onProxyConstructed));
|
||||
|
||||
this.parent(title.toUpperCase());
|
||||
this.parent(appInfo.get_name().toUpperCase(), appInfo, true);
|
||||
this._cancellable = new Gio.Cancellable();
|
||||
},
|
||||
|
||||
_onProxyConstructed: function(proxy) {
|
||||
// Do nothing
|
||||
},
|
||||
|
||||
createIcon: function(size, meta) {
|
||||
if (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',
|
||||
text: _("Please enter a command:") });
|
||||
text: _("Enter a Command") });
|
||||
|
||||
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);
|
||||
|
||||
entry.label_actor = label;
|
||||
@@ -236,6 +237,10 @@ const RunDialog = new Lang.Class({
|
||||
|
||||
this._errorBox.hide();
|
||||
|
||||
this.setButtons([{ action: Lang.bind(this, this.close),
|
||||
label: _("Close"),
|
||||
key: Clutter.Escape }]);
|
||||
|
||||
this._pathCompleter = new Gio.FilenameCompleter();
|
||||
this._commandCompleter = new CommandCompleter();
|
||||
this._group.connect('notify::visible', Lang.bind(this._commandCompleter, this._commandCompleter.update));
|
||||
@@ -246,20 +251,12 @@ const RunDialog = new Lang.Class({
|
||||
let symbol = e.get_key_symbol();
|
||||
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
|
||||
this.popModal();
|
||||
if (e.get_state() & Clutter.ModifierType.CONTROL_MASK)
|
||||
this._run(o.get_text(), true);
|
||||
else
|
||||
this._run(o.get_text(), false);
|
||||
if (!this._commandError)
|
||||
this._run(o.get_text(),
|
||||
e.get_state() & Clutter.ModifierType.CONTROL_MASK);
|
||||
if (!this._commandError ||
|
||||
!this.pushModal())
|
||||
this.close();
|
||||
else {
|
||||
if (!this.pushModal())
|
||||
this.close();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (symbol == Clutter.Escape) {
|
||||
this.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
if (symbol == Clutter.slash) {
|
||||
|
||||
@@ -9,7 +9,6 @@ const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Signals = imports.signals;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const TweenerEquations = imports.tweener.equations;
|
||||
|
||||
@@ -50,6 +49,38 @@ const SUMMARY_ICON_SIZE = 48;
|
||||
const STANDARD_FADE_TIME = 10;
|
||||
const SHORT_FADE_TIME = 0.3;
|
||||
|
||||
function sample(offx, offy) {
|
||||
return 'texel += texture2D (sampler, tex_coord.st + pixel_step * ' +
|
||||
'vec2 (' + offx + ',' + offy + '));\n'
|
||||
}
|
||||
const GLSL_BLUR_EFFECT_DECLARATIONS = ' \
|
||||
uniform vec2 pixel_step;\n \
|
||||
uniform float desaturation;\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(+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)\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);\n';
|
||||
|
||||
|
||||
const Clock = new Lang.Class({
|
||||
Name: 'ScreenShieldClock',
|
||||
|
||||
@@ -336,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.
|
||||
*
|
||||
@@ -363,13 +398,25 @@ const ScreenShield = new Lang.Class({
|
||||
Lang.bind(this, this._onLockScreenKeyRelease));
|
||||
this._lockScreenGroup.connect('scroll-event',
|
||||
Lang.bind(this, this._onLockScreenScroll));
|
||||
Main.ctrlAltTabManager.addGroup(this._lockScreenGroup, _("Lock"), 'changes-prevent-symbolic');
|
||||
|
||||
this._lockScreenContents = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
||||
name: 'lockScreenContents' });
|
||||
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);
|
||||
backgroundActor.set_uniform_float('desaturation',
|
||||
1, 1, [0.6]);
|
||||
backgroundActor.connect('notify::size', function(actor) {
|
||||
actor.set_uniform_float('pixel_step', 2, 1, [1/actor.width, 1/actor.height]);
|
||||
});
|
||||
|
||||
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._lockScreenContents);
|
||||
|
||||
@@ -388,14 +435,11 @@ const ScreenShield = new Lang.Class({
|
||||
}
|
||||
this._lockScreenContents.add_actor(this._arrowContainer);
|
||||
|
||||
let dragArea = new Clutter.Rect({ origin: new Clutter.Point({ x: 0, y: -global.screen_height, }),
|
||||
size: new Clutter.Size({ width: global.screen_width,
|
||||
height: global.screen_height }) });
|
||||
let action = new Clutter.DragAction({ drag_axis: Clutter.DragAxis.Y_AXIS,
|
||||
drag_area: dragArea });
|
||||
action.connect('drag-begin', Lang.bind(this, this._onDragBegin));
|
||||
action.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
||||
this._lockScreenGroup.add_action(action);
|
||||
this._dragAction = new Clutter.GestureAction();
|
||||
this._dragAction.connect('gesture-begin', Lang.bind(this, this._onDragBegin));
|
||||
this._dragAction.connect('gesture-progress', Lang.bind(this, this._onDragMotion));
|
||||
this._dragAction.connect('gesture-end', Lang.bind(this, this._onDragEnd));
|
||||
this._lockScreenGroup.add_action(this._dragAction);
|
||||
|
||||
this._lockDialogGroup = new St.Widget({ x_expand: true,
|
||||
y_expand: true,
|
||||
@@ -438,7 +482,7 @@ const ScreenShield = new Lang.Class({
|
||||
fadeInTime: STANDARD_FADE_TIME,
|
||||
fadeFactor: 1 });
|
||||
|
||||
this.idleMonitor = Shell.IdleMonitor.get();
|
||||
this.idleMonitor = new GnomeDesktop.IdleMonitor();
|
||||
},
|
||||
|
||||
_onLockScreenKeyRelease: function(actor, event) {
|
||||
@@ -459,7 +503,7 @@ const ScreenShield = new Lang.Class({
|
||||
symbol == Clutter.KEY_Return ||
|
||||
symbol == Clutter.KEY_KP_Enter) {
|
||||
this._ensureUnlockDialog(true);
|
||||
this._hideLockScreen(true);
|
||||
this._hideLockScreen(true, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -482,7 +526,7 @@ const ScreenShield = new Lang.Class({
|
||||
// 7 standard scrolls to lift up
|
||||
if (this._lockScreenScrollCounter > 35) {
|
||||
this._ensureUnlockDialog(false);
|
||||
this._hideLockScreen(true);
|
||||
this._hideLockScreen(true, 0);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -514,12 +558,27 @@ const ScreenShield = new Lang.Class({
|
||||
Tweener.removeTweens(this._lockScreenGroup);
|
||||
this._lockScreenState = MessageTray.State.HIDING;
|
||||
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) {
|
||||
if (this._lockScreenGroup.y < -(ARROW_DRAG_THRESHOLD * global.stage.height)) {
|
||||
// Complete motion automatically
|
||||
this._hideLockScreen(true);
|
||||
let [velocity, velocityX, velocityY] = this._dragAction.get_velocity(0);
|
||||
this._hideLockScreen(true, -velocityY);
|
||||
} else {
|
||||
// restore the lock screen to its original place
|
||||
// try to use the same speed as the normal animation
|
||||
@@ -559,7 +618,7 @@ const ScreenShield = new Lang.Class({
|
||||
}
|
||||
|
||||
if (!this._isModal) {
|
||||
Main.pushModal(this.actor);
|
||||
Main.pushModal(this.actor, { keybindingMode: Main.KeybindingMode.LOCK_SCREEN });
|
||||
this._isModal = true;
|
||||
}
|
||||
|
||||
@@ -569,14 +628,8 @@ const ScreenShield = new Lang.Class({
|
||||
if (this._activationTime == 0)
|
||||
this._activationTime = GLib.get_monotonic_time();
|
||||
|
||||
// What we want is a negative transition to 0, so we install a watch for
|
||||
// 1 second and trigger it if the idle_time becomes lower than that
|
||||
// The correct fix will come in GNOME 3.8 with GnomeDesktop.IdleMonitor
|
||||
this._becameActiveId = this.idleMonitor.add_watch(1000, Lang.bind(this, function() {
|
||||
if (this.idleMonitor.get_idletime() >= 1000)
|
||||
return;
|
||||
|
||||
this.idleMonitor.remove_watch(this._becameActiveId);
|
||||
this._becameActiveId = this.idleMonitor.connect('became-active', Lang.bind(this, function() {
|
||||
this.idleMonitor.disconnect(this._becameActiveId);
|
||||
|
||||
let lightboxWasShown = this._lightbox.shown;
|
||||
this._lightbox.hide();
|
||||
@@ -609,7 +662,7 @@ const ScreenShield = new Lang.Class({
|
||||
this.actor.show();
|
||||
this._isGreeter = Main.sessionMode.isGreeter;
|
||||
this._ensureUnlockDialog(true);
|
||||
this._hideLockScreen(false);
|
||||
this._hideLockScreen(false, 0);
|
||||
},
|
||||
|
||||
_bumpLockScreen: function() {
|
||||
@@ -627,14 +680,21 @@ const ScreenShield = new Lang.Class({
|
||||
});
|
||||
},
|
||||
|
||||
_hideLockScreen: function(animate) {
|
||||
_hideLockScreen: function(animate, velocity) {
|
||||
this._lockScreenState = MessageTray.State.HIDING;
|
||||
|
||||
if (animate) {
|
||||
// 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 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.addTween(this._lockScreenGroup,
|
||||
{ y: -h,
|
||||
@@ -651,6 +711,8 @@ const ScreenShield = new Lang.Class({
|
||||
this._lockScreenGroup.hide();
|
||||
}
|
||||
|
||||
global.stage.show_cursor();
|
||||
|
||||
if (Main.sessionMode.currentMode == 'lock-screen')
|
||||
Main.sessionMode.popMode('lock-screen');
|
||||
},
|
||||
@@ -741,6 +803,16 @@ const ScreenShield = new Lang.Class({
|
||||
this._arrowAnimationId = Mainloop.timeout_add(6000, Lang.bind(this, 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._lockScreenGroup.fixed_position_set = false;
|
||||
this._lockScreenScrollCounter = 0;
|
||||
@@ -855,7 +927,7 @@ const ScreenShield = new Lang.Class({
|
||||
|
||||
lock: function(animate) {
|
||||
if (!this._isModal) {
|
||||
Main.pushModal(this.actor);
|
||||
Main.pushModal(this.actor, { keybindingMode: Main.KeybindingMode.LOCK_SCREEN });
|
||||
this._isModal = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ const Util = imports.misc.util;
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const SEARCH_PROVIDERS_SCHEMA = 'org.gnome.desktop.search-providers';
|
||||
|
||||
// Not currently referenced by the search API, but
|
||||
// this enumeration can be useful for provider
|
||||
// implementations.
|
||||
@@ -74,9 +76,11 @@ const SearchResultDisplay = new Lang.Class({
|
||||
const SearchProvider = new Lang.Class({
|
||||
Name: 'SearchProvider',
|
||||
|
||||
_init: function(title) {
|
||||
_init: function(title, appInfo, isRemoteProvider) {
|
||||
this.title = title;
|
||||
this.appInfo = appInfo;
|
||||
this.searchSystem = null;
|
||||
this.isRemoteProvider = !!isRemoteProvider;
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -172,12 +176,16 @@ const SearchSystem = new Lang.Class({
|
||||
|
||||
_init: function() {
|
||||
this._providers = [];
|
||||
this._remoteProviders = [];
|
||||
this.reset();
|
||||
},
|
||||
|
||||
registerProvider: function (provider) {
|
||||
provider.searchSystem = this;
|
||||
this._providers.push(provider);
|
||||
|
||||
if (provider.isRemoteProvider)
|
||||
this._remoteProviders.push(provider);
|
||||
},
|
||||
|
||||
unregisterProvider: function (provider) {
|
||||
@@ -186,12 +194,20 @@ const SearchSystem = new Lang.Class({
|
||||
return;
|
||||
provider.searchSystem = null;
|
||||
this._providers.splice(index, 1);
|
||||
|
||||
let remoteIndex = this._remoteProviders.indexOf(provider);
|
||||
if (remoteIndex != -1)
|
||||
this._remoteProviders.splice(index, 1);
|
||||
},
|
||||
|
||||
getProviders: function() {
|
||||
return this._providers;
|
||||
},
|
||||
|
||||
getRemoteProviders: function() {
|
||||
return this._remoteProviders;
|
||||
},
|
||||
|
||||
getTerms: function() {
|
||||
return this._previousTerms;
|
||||
},
|
||||
|
||||
@@ -14,7 +14,6 @@ const _modes = {
|
||||
showCalendarEvents: false,
|
||||
allowSettings: false,
|
||||
allowExtensions: false,
|
||||
allowKeybindingsWhenModal: false,
|
||||
hasRunDialog: false,
|
||||
hasWorkspaces: false,
|
||||
hasWindows: false,
|
||||
@@ -32,14 +31,13 @@ const _modes = {
|
||||
},
|
||||
|
||||
'gdm': {
|
||||
allowKeybindingsWhenModal: true,
|
||||
hasNotifications: true,
|
||||
isGreeter: true,
|
||||
isPrimary: true,
|
||||
unlockDialog: imports.gdm.loginDialog.LoginDialog,
|
||||
components: ['polkitAgent'],
|
||||
panel: {
|
||||
left: [],
|
||||
left: ['logo'],
|
||||
center: ['dateMenu'],
|
||||
right: ['a11y', 'display', 'keyboard',
|
||||
'volume', 'battery', 'powerMenu']
|
||||
|
||||
@@ -27,6 +27,7 @@ const KEY_VISUAL_BELL = 'visual-bell';
|
||||
const DESKTOP_INTERFACE_SCHEMA = 'org.gnome.desktop.interface';
|
||||
const KEY_GTK_THEME = 'gtk-theme';
|
||||
const KEY_ICON_THEME = 'icon-theme';
|
||||
const KEY_WM_THEME = 'theme';
|
||||
const KEY_TEXT_SCALING_FACTOR = 'text-scaling-factor';
|
||||
|
||||
const HIGH_CONTRAST_THEME = 'HighContrast';
|
||||
@@ -101,28 +102,35 @@ const ATIndicator = new Lang.Class({
|
||||
},
|
||||
|
||||
_buildHCItem: function() {
|
||||
let settings = new Gio.Settings({ schema: DESKTOP_INTERFACE_SCHEMA });
|
||||
let gtkTheme = settings.get_string(KEY_GTK_THEME);
|
||||
let iconTheme = settings.get_string(KEY_ICON_THEME);
|
||||
let interfaceSettings = new Gio.Settings({ schema: DESKTOP_INTERFACE_SCHEMA });
|
||||
let wmSettings = new Gio.Settings({ schema: WM_SCHEMA });
|
||||
let gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME);
|
||||
let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME);
|
||||
let wmTheme = wmSettings.get_string(KEY_WM_THEME);
|
||||
let hasHC = (gtkTheme == HIGH_CONTRAST_THEME);
|
||||
let highContrast = this._buildItemExtended(
|
||||
_("High Contrast"),
|
||||
hasHC,
|
||||
settings.is_writable(KEY_GTK_THEME) && settings.is_writable(KEY_ICON_THEME),
|
||||
interfaceSettings.is_writable(KEY_GTK_THEME) &&
|
||||
interfaceSettings.is_writable(KEY_ICON_THEME) &&
|
||||
wmSettings.is_writable(KEY_WM_THEME),
|
||||
function (enabled) {
|
||||
if (enabled) {
|
||||
settings.set_string(KEY_GTK_THEME, HIGH_CONTRAST_THEME);
|
||||
settings.set_string(KEY_ICON_THEME, HIGH_CONTRAST_THEME);
|
||||
interfaceSettings.set_string(KEY_GTK_THEME, HIGH_CONTRAST_THEME);
|
||||
interfaceSettings.set_string(KEY_ICON_THEME, HIGH_CONTRAST_THEME);
|
||||
wmSettings.set_string(KEY_WM_THEME, HIGH_CONTRAST_THEME);
|
||||
} else if(!hasHC) {
|
||||
settings.set_string(KEY_GTK_THEME, gtkTheme);
|
||||
settings.set_string(KEY_ICON_THEME, iconTheme);
|
||||
interfaceSettings.set_string(KEY_GTK_THEME, gtkTheme);
|
||||
interfaceSettings.set_string(KEY_ICON_THEME, iconTheme);
|
||||
wmSettings.set_string(KEY_WM_THEME, wmTheme);
|
||||
} else {
|
||||
settings.reset(KEY_GTK_THEME);
|
||||
settings.reset(KEY_ICON_THEME);
|
||||
interfaceSettings.reset(KEY_GTK_THEME);
|
||||
interfaceSettings.reset(KEY_ICON_THEME);
|
||||
wmSettings.reset(KEY_WM_THEME);
|
||||
}
|
||||
});
|
||||
settings.connect('changed::' + KEY_GTK_THEME, function() {
|
||||
let value = settings.get_string(KEY_GTK_THEME);
|
||||
interfaceSettings.connect('changed::' + KEY_GTK_THEME, function() {
|
||||
let value = interfaceSettings.get_string(KEY_GTK_THEME);
|
||||
if (value == HIGH_CONTRAST_THEME) {
|
||||
highContrast.setToggleState(true);
|
||||
} else {
|
||||
@@ -130,11 +138,16 @@ const ATIndicator = new Lang.Class({
|
||||
gtkTheme = value;
|
||||
}
|
||||
});
|
||||
settings.connect('changed::' + KEY_ICON_THEME, function() {
|
||||
let value = settings.get_string(KEY_ICON_THEME);
|
||||
interfaceSettings.connect('changed::' + KEY_ICON_THEME, function() {
|
||||
let value = interfaceSettings.get_string(KEY_ICON_THEME);
|
||||
if (value != HIGH_CONTRAST_THEME)
|
||||
iconTheme = value;
|
||||
});
|
||||
wmSettings.connect('changed::' + KEY_WM_THEME, function() {
|
||||
let value = wmSettings.get_string(KEY_WM_THEME);
|
||||
if (value != HIGH_CONTRAST_THEME)
|
||||
wmTheme = value;
|
||||
});
|
||||
return highContrast;
|
||||
},
|
||||
|
||||
|
||||
@@ -239,22 +239,6 @@ const Indicator = new Lang.Class({
|
||||
this._applet.send_to_address(device.bdaddr, device.alias);
|
||||
}));
|
||||
}
|
||||
if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_FILE_TRANSFER) {
|
||||
item.menu.addAction(_("Browse Files..."), Lang.bind(this, function(event) {
|
||||
this._applet.browse_address(device.bdaddr, event.get_time(),
|
||||
Lang.bind(this, function(applet, result) {
|
||||
try {
|
||||
applet.browse_address_finish(result);
|
||||
} catch (e) {
|
||||
this._ensureSource();
|
||||
this._source.notify(new MessageTray.Notification(this._source,
|
||||
_("Bluetooth"),
|
||||
_("Error browsing device"),
|
||||
{ body: _("The requested device cannot be browsed, error is '%s'").format(e) }));
|
||||
}
|
||||
}));
|
||||
}));
|
||||
}
|
||||
|
||||
switch (device.type) {
|
||||
case GnomeBluetoothApplet.Type.KEYBOARD:
|
||||
@@ -369,6 +353,7 @@ const ConfirmNotification = new Lang.Class({
|
||||
_init: function(source, applet, device_path, name, long_name, pin) {
|
||||
this.parent(source,
|
||||
_("Bluetooth"),
|
||||
/* Translators: argument is the device short name */
|
||||
_("Pairing confirmation for %s").format(name),
|
||||
{ customContent: true });
|
||||
this.setResident(true);
|
||||
@@ -378,6 +363,7 @@ const ConfirmNotification = new Lang.Class({
|
||||
this.addBody(_("Device %s wants to pair with this computer").format(long_name));
|
||||
this.addBody(_("Please confirm whether the PIN '%06d' matches the one on the device.").format(pin));
|
||||
|
||||
/* Translators: this is the verb, not the noun */
|
||||
this.addButton('matches', _("Matches"));
|
||||
this.addButton('does-not-match', _("Does not match"));
|
||||
|
||||
|
||||
@@ -233,20 +233,11 @@ const NMWirelessSectionTitleMenuItem = new Lang.Class({
|
||||
}
|
||||
});
|
||||
|
||||
const NMDevice = new Lang.Class({
|
||||
Name: 'NMDevice',
|
||||
const NMConnectionBased = new Lang.Class({
|
||||
Name: 'NMConnectionBased',
|
||||
Abstract: true,
|
||||
|
||||
_init: function(client, device, 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;
|
||||
_init: function(connections) {
|
||||
this._connections = [ ];
|
||||
for (let i = 0; i < connections.length; i++) {
|
||||
if (!connections[i].get_uuid())
|
||||
@@ -264,26 +255,115 @@ const NMDevice = new Lang.Class({
|
||||
this._connections.push(obj);
|
||||
}
|
||||
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._activeConnectionItem = null;
|
||||
this._autoConnectionItem = null;
|
||||
this._overflowItem = null;
|
||||
|
||||
if (this.device) {
|
||||
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) {
|
||||
let ok;
|
||||
if (state)
|
||||
ok = this.activate();
|
||||
else
|
||||
ok = this.deactivate();
|
||||
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) {
|
||||
let ok;
|
||||
if (state)
|
||||
ok = this.activate();
|
||||
else
|
||||
ok = this.deactivate();
|
||||
|
||||
if (!ok)
|
||||
item.setToggleState(!state);
|
||||
}));
|
||||
if (!ok)
|
||||
item.setToggleState(!state);
|
||||
}));
|
||||
|
||||
this._updateStatusItem();
|
||||
}
|
||||
this._updateStatusItem();
|
||||
this.section = new PopupMenu.PopupMenuSection();
|
||||
|
||||
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;
|
||||
},
|
||||
|
||||
clearActiveConnection: function(activeConnection) {
|
||||
this.setActiveConnection(null);
|
||||
},
|
||||
|
||||
setActiveConnection: function(activeConnection) {
|
||||
if (activeConnection == this._activeConnection)
|
||||
// nothing to do
|
||||
@@ -369,80 +453,13 @@ const NMDevice = new Lang.Class({
|
||||
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) {
|
||||
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) {
|
||||
// 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() {
|
||||
@@ -500,15 +517,6 @@ const NMDevice = new Lang.Class({
|
||||
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() {
|
||||
this._clearSection();
|
||||
Main.queueDeferredWork(this._deferredWorkId);
|
||||
@@ -652,8 +660,6 @@ const NMDevice = new Lang.Class({
|
||||
return out;
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(NMDevice.prototype);
|
||||
|
||||
|
||||
const NMDeviceWired = new Lang.Class({
|
||||
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({
|
||||
Name: 'NMDeviceWireless',
|
||||
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({
|
||||
Name: 'NMApplet',
|
||||
Extends: PanelMenu.SystemStatusButton,
|
||||
@@ -1622,15 +1684,9 @@ const NMApplet = new Lang.Class({
|
||||
this.menu.addMenuItem(this._devices.wwan.section);
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
||||
this._devices.vpn = {
|
||||
section: new PopupMenu.PopupMenuSection(),
|
||||
device: this._makeWrapperDevice(NMDeviceVPN, null),
|
||||
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._vpnSection = new NMVPNSection(this._client, this._connections);
|
||||
this._vpnSection.connect('activation-failed', Lang.bind(this, this._onActivationFailed));
|
||||
this.menu.addMenuItem(this._vpnSection.section);
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
||||
|
||||
@@ -1699,18 +1755,6 @@ const NMApplet = new Lang.Class({
|
||||
},
|
||||
|
||||
_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 item = this._devices[category].item;
|
||||
let section = this._devices[category].section;
|
||||
@@ -1747,10 +1791,9 @@ const NMApplet = new Lang.Class({
|
||||
or this._source will be cleared */
|
||||
this._ensureSource();
|
||||
|
||||
let icon = new St.Icon({ icon_name: iconName,
|
||||
icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
|
||||
let gicon = new Gio.ThemedIcon({ name: iconName });
|
||||
device._notification = new MessageTray.Notification(this._source, title, text,
|
||||
{ icon: icon });
|
||||
{ gicon: gicon });
|
||||
device._notification.setUrgency(urgency);
|
||||
device._notification.setTransient(true);
|
||||
device._notification.connect('destroy', function() {
|
||||
@@ -1759,17 +1802,20 @@ const NMApplet = new Lang.Class({
|
||||
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) {
|
||||
let wrapper = new wrapperClass(this._client, device, this._connections);
|
||||
|
||||
wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) {
|
||||
// XXX: nm-applet has no special text depending on reason
|
||||
// but I'm not sure of this generic message
|
||||
this._notifyForDevice(device, 'network-error-symbolic',
|
||||
_("Connection failed"),
|
||||
_("Activation of network connection failed"),
|
||||
MessageTray.Urgency.HIGH);
|
||||
}));
|
||||
wrapper._activationFailedId = wrapper.connect('activation-failed',
|
||||
Lang.bind(this, this._onActivationFailed));
|
||||
wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) {
|
||||
this._syncSectionTitle(dev.category);
|
||||
}));
|
||||
@@ -1852,7 +1898,7 @@ const NMApplet = new Lang.Class({
|
||||
for (let i = 0; i < closedConnections.length; i++) {
|
||||
let active = closedConnections[i];
|
||||
if (active._primaryDevice) {
|
||||
active._primaryDevice.setActiveConnection(null);
|
||||
active._primaryDevice.clearActiveConnection(active);
|
||||
active._primaryDevice = null;
|
||||
}
|
||||
if (active._inited) {
|
||||
@@ -1919,7 +1965,7 @@ const NMApplet = new Lang.Class({
|
||||
}
|
||||
}
|
||||
} else
|
||||
a._primaryDevice = this._devices.vpn.device
|
||||
a._primaryDevice = this._vpnSection;
|
||||
|
||||
if (a._primaryDevice)
|
||||
a._primaryDevice.setActiveConnection(a);
|
||||
@@ -2001,8 +2047,7 @@ const NMApplet = new Lang.Class({
|
||||
let section = connection._section;
|
||||
|
||||
if (section == NMConnectionCategory.VPN) {
|
||||
this._devices.vpn.device.removeConnection(connection);
|
||||
this._syncSectionTitle(section);
|
||||
this._vpnSection.removeConnection(connection);
|
||||
} else if (section != NMConnectionCategory.INVALID) {
|
||||
let devices = this._devices[section].devices;
|
||||
for (let i = 0; i < devices.length; i++)
|
||||
@@ -2025,8 +2070,7 @@ const NMApplet = new Lang.Class({
|
||||
if (section == NMConnectionCategory.INVALID)
|
||||
return;
|
||||
if (section == NMConnectionCategory.VPN) {
|
||||
this._devices.vpn.device.checkConnection(connection);
|
||||
this._syncSectionTitle(section);
|
||||
this._vpnSection.checkConnection(connection);
|
||||
} else {
|
||||
let devices = this._devices[section].devices;
|
||||
for (let i = 0; i < devices.length; i++) {
|
||||
@@ -2052,7 +2096,6 @@ const NMApplet = new Lang.Class({
|
||||
this._syncSectionTitle(NMConnectionCategory.WIRED);
|
||||
this._syncSectionTitle(NMConnectionCategory.WIRELESS);
|
||||
this._syncSectionTitle(NMConnectionCategory.WWAN);
|
||||
this._syncSectionTitle(NMConnectionCategory.VPN);
|
||||
},
|
||||
|
||||
_syncNMState: function() {
|
||||
|
||||
@@ -5,6 +5,7 @@ const Clutter = imports.gi.Clutter;
|
||||
const Gdm = imports.gi.Gdm;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
@@ -112,6 +113,7 @@ const UnlockDialog = new Lang.Class({
|
||||
_init: function(parentActor) {
|
||||
this.parent({ shellReactive: true,
|
||||
styleClass: 'login-dialog',
|
||||
keybindingMode: Main.KeybindingMode.UNLOCK_SCREEN,
|
||||
parentActor: parentActor
|
||||
});
|
||||
|
||||
@@ -150,6 +152,9 @@ const UnlockDialog = new Lang.Class({
|
||||
ShellEntry.addContextMenu(this._promptEntry, { isPassword: true });
|
||||
this.setInitialKeyFocus(this._promptEntry);
|
||||
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,
|
||||
{ expand: true,
|
||||
@@ -195,15 +200,19 @@ const UnlockDialog = new Lang.Class({
|
||||
return false;
|
||||
}));
|
||||
|
||||
this._idleMonitor = Shell.IdleMonitor.get();
|
||||
// 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
|
||||
Main.ctrlAltTabManager.addGroup(this.dialogLayout, _("Unlock Window"), 'dialog-password-symbolic');
|
||||
|
||||
this._idleMonitor = new GnomeDesktop.IdleMonitor();
|
||||
this._idleWatchId = this._idleMonitor.add_watch(IDLE_TIMEOUT * 1000, Lang.bind(this, this._escape));
|
||||
},
|
||||
|
||||
_updateSensitivity: function(sensitive) {
|
||||
this._promptEntry.reactive = 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.can_focus = sensitive;
|
||||
},
|
||||
|
||||
@@ -9,11 +9,11 @@ const Pango = imports.gi.Pango;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Tp = imports.gi.TelepathyGLib;
|
||||
const UPowerGlib = imports.gi.UPowerGlib;
|
||||
const Atk = imports.gi.Atk;
|
||||
|
||||
const BoxPointer = imports.ui.boxpointer;
|
||||
const GnomeSession = imports.misc.gnomeSession;
|
||||
const LoginManager = imports.misc.loginManager;
|
||||
const Main = imports.ui.main;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
@@ -74,11 +74,6 @@ const UserAvatarWidget = new Lang.Class({
|
||||
let file = Gio.File.new_for_path(iconFile);
|
||||
this.actor.child = null;
|
||||
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 {
|
||||
this.actor.style = null;
|
||||
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
|
||||
@@ -193,7 +188,7 @@ const IMStatusChooserItem = new Lang.Class({
|
||||
item = new IMStatusItem(_("Idle"), 'user-idle-symbolic');
|
||||
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.connect('active-item-changed',
|
||||
@@ -488,10 +483,11 @@ const UserMenuButton = new Lang.Class({
|
||||
this._presence = new GnomeSession.Presence();
|
||||
this._session = new GnomeSession.SessionManager();
|
||||
this._haveShutdown = true;
|
||||
this._haveSuspend = true;
|
||||
|
||||
this._accountMgr = Tp.AccountManager.dup();
|
||||
|
||||
this._upClient = new UPowerGlib.Client();
|
||||
this._loginManager = LoginManager.getLoginManager();
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
this._iconBox = new St.Bin();
|
||||
@@ -571,14 +567,15 @@ const UserMenuButton = new Lang.Class({
|
||||
// the lockdown setting changes, which should be close enough.
|
||||
this.menu.connect('open-state-changed', Lang.bind(this,
|
||||
function(menu, open) {
|
||||
if (open)
|
||||
this._updateHaveShutdown();
|
||||
if (!open)
|
||||
return;
|
||||
|
||||
this._updateHaveShutdown();
|
||||
this._updateHaveSuspend();
|
||||
}));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
||||
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));
|
||||
this._sessionUpdated();
|
||||
},
|
||||
@@ -650,9 +647,15 @@ const UserMenuButton = new Lang.Class({
|
||||
}));
|
||||
},
|
||||
|
||||
_updateSuspendOrPowerOff: function() {
|
||||
this._haveSuspend = this._upClient.get_can_suspend();
|
||||
_updateHaveSuspend: function() {
|
||||
this._loginManager.canSuspend(Lang.bind(this,
|
||||
function(result) {
|
||||
this._haveSuspend = result;
|
||||
this._updateSuspendOrPowerOff();
|
||||
}));
|
||||
},
|
||||
|
||||
_updateSuspendOrPowerOff: function() {
|
||||
if (!this._suspendOrPowerOffItem)
|
||||
return;
|
||||
|
||||
@@ -749,7 +752,7 @@ const UserMenuButton = new Lang.Class({
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
||||
item = new PopupMenu.PopupMenuItem(_("Settings"));
|
||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._systemSettings = item;
|
||||
@@ -855,13 +858,13 @@ const UserMenuButton = new Lang.Class({
|
||||
let tmpId = Main.screenShield.connect('lock-screen-shown', Lang.bind(this, function() {
|
||||
Main.screenShield.disconnect(tmpId);
|
||||
|
||||
this._upClient.suspend_sync(null);
|
||||
this._loginManager.suspend();
|
||||
}));
|
||||
|
||||
this.menu.close(BoxPointer.PopupAnimation.NONE);
|
||||
Main.screenShield.lock(true);
|
||||
} else {
|
||||
this._upClient.suspend_sync(null);
|
||||
this._loginManager.suspend();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
@@ -19,6 +20,7 @@ const Tweener = imports.ui.tweener;
|
||||
const Wanda = imports.ui.wanda;
|
||||
const WorkspacesView = imports.ui.workspacesView;
|
||||
|
||||
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||
|
||||
const FocusTrap = new Lang.Class({
|
||||
Name: 'FocusTrap',
|
||||
@@ -92,6 +94,11 @@ const ViewSelector = new Lang.Class({
|
||||
this._searchPage = this._addPage(this._searchResults.actor, this._entry,
|
||||
_("Search"), 'edit-find-symbolic');
|
||||
|
||||
this._searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
|
||||
this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
|
||||
this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
|
||||
this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));
|
||||
|
||||
// Default search providers
|
||||
// Wanda comes obviously first
|
||||
this.addSearchProvider(new Wanda.WandaSearchProvider());
|
||||
@@ -141,6 +148,18 @@ const ViewSelector = new Lang.Class({
|
||||
// accessing the properties.
|
||||
this.constrainHeight = new Clutter.BindConstraint({ source: this._pageArea,
|
||||
coordinate: Clutter.BindCoordinate.HEIGHT });
|
||||
|
||||
Main.wm.addKeybinding('toggle-application-view',
|
||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Meta.KeyBindingFlags.NONE,
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._toggleAppsPage));
|
||||
},
|
||||
|
||||
_toggleAppsPage: function() {
|
||||
Main.overview.show();
|
||||
this._showAppsButton.checked = !this._showAppsButton.checked;
|
||||
},
|
||||
|
||||
show: function() {
|
||||
@@ -184,7 +203,7 @@ const ViewSelector = new Lang.Class({
|
||||
})
|
||||
});;
|
||||
this._pageArea.add_actor(page);
|
||||
return page
|
||||
return page;
|
||||
},
|
||||
|
||||
_showPage: function(page) {
|
||||
@@ -421,7 +440,32 @@ const ViewSelector = new Lang.Class({
|
||||
this._showPage(this._searchPage);
|
||||
},
|
||||
|
||||
_shouldUseSearchProvider: function(provider) {
|
||||
// the disable-external GSetting only affects remote providers
|
||||
if (!provider.isRemoteProvider)
|
||||
return true;
|
||||
|
||||
if (this._searchSettings.get_boolean('disable-external'))
|
||||
return false;
|
||||
|
||||
let appId = provider.appInfo.get_id();
|
||||
let disable = this._searchSettings.get_strv('disabled');
|
||||
return disable.indexOf(appId) == -1;
|
||||
},
|
||||
|
||||
_reloadRemoteProviders: function() {
|
||||
// removeSearchProvider() modifies the provider list we iterate on,
|
||||
// so make a copy first
|
||||
let remoteProviders = this._searchSystem.getRemoteProviders().slice(0);
|
||||
|
||||
remoteProviders.forEach(Lang.bind(this, this.removeSearchProvider));
|
||||
RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, this.addSearchProvider));
|
||||
},
|
||||
|
||||
addSearchProvider: function(provider) {
|
||||
if (!this._shouldUseSearchProvider(provider))
|
||||
return;
|
||||
|
||||
this._searchSystem.registerProvider(provider);
|
||||
this._searchResults.createProviderMeta(provider);
|
||||
},
|
||||
|
||||
@@ -39,6 +39,8 @@ const WindowAttentionHandler = new Lang.Class({
|
||||
let [title, banner] = this._getTitleAndBanner(app, window);
|
||||
|
||||
let notification = new MessageTray.Notification(source, title, banner);
|
||||
notification.setForFeedback(true);
|
||||
|
||||
source.notify(notification);
|
||||
|
||||
source.signalIDs.push(window.connect('notify::title', Lang.bind(this, function() {
|
||||
|
||||
@@ -83,6 +83,8 @@ const WindowManager = new Lang.Class({
|
||||
|
||||
this._animationBlockCount = 0;
|
||||
|
||||
this._allowedKeybindings = {};
|
||||
|
||||
this._switchData = null;
|
||||
this._shellwm.connect('kill-switch-workspace', Lang.bind(this, this._switchWorkspaceDone));
|
||||
this._shellwm.connect('kill-window-effects', Lang.bind(this, function (shellwm, actor) {
|
||||
@@ -99,38 +101,66 @@ const WindowManager = new Lang.Class({
|
||||
this._shellwm.connect('unmaximize', Lang.bind(this, this._unmaximizeWindow));
|
||||
this._shellwm.connect('map', Lang.bind(this, this._mapWindow));
|
||||
this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow));
|
||||
this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding));
|
||||
|
||||
this._workspaceSwitcherPopup = null;
|
||||
Meta.keybindings_set_custom_handler('switch-to-workspace-left',
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
Meta.keybindings_set_custom_handler('switch-to-workspace-right',
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
Meta.keybindings_set_custom_handler('switch-to-workspace-up',
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
Meta.keybindings_set_custom_handler('switch-to-workspace-down',
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
Meta.keybindings_set_custom_handler('move-to-workspace-left',
|
||||
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));
|
||||
Meta.keybindings_set_custom_handler('switch-group',
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
Meta.keybindings_set_custom_handler('switch-windows-backward',
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
Meta.keybindings_set_custom_handler('switch-group-backward',
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
Meta.keybindings_set_custom_handler('switch-panels',
|
||||
Lang.bind(this, this._startA11ySwitcher));
|
||||
global.display.add_keybinding('open-application-menu',
|
||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Meta.KeyBindingFlags.NONE,
|
||||
Lang.bind(this, this._openAppMenu));
|
||||
this.setCustomKeybindingHandler('switch-to-workspace-left',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-to-workspace-right',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-to-workspace-up',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-to-workspace-down',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('move-to-workspace-left',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('move-to-workspace-right',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('move-to-workspace-up',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('move-to-workspace-down',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW,
|
||||
Lang.bind(this, this._showWorkspaceSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-windows',
|
||||
Main.KeybindingMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-group',
|
||||
Main.KeybindingMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-windows-backward',
|
||||
Main.KeybindingMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-group-backward',
|
||||
Main.KeybindingMode.NORMAL,
|
||||
Lang.bind(this, this._startAppSwitcher));
|
||||
this.setCustomKeybindingHandler('switch-panels',
|
||||
Main.KeybindingMode.NORMAL |
|
||||
Main.KeybindingMode.OVERVIEW |
|
||||
Main.KeybindingMode.LOCK_SCREEN |
|
||||
Main.KeybindingMode.UNLOCK_SCREEN |
|
||||
Main.KeybindingMode.LOGIN_SCREEN,
|
||||
Lang.bind(this, this._startA11ySwitcher));
|
||||
|
||||
this.addKeybinding('open-application-menu',
|
||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Meta.KeyBindingFlags.NONE,
|
||||
Main.KeybindingMode.NORMAL,
|
||||
Lang.bind(this, this._openAppMenu));
|
||||
|
||||
Main.overview.connect('showing', Lang.bind(this, function() {
|
||||
for (let i = 0; i < this._dimmedWindows.length; i++)
|
||||
@@ -142,6 +172,25 @@ const WindowManager = new Lang.Class({
|
||||
}));
|
||||
},
|
||||
|
||||
setCustomKeybindingHandler: function(name, modes, handler) {
|
||||
if (Meta.keybindings_set_custom_handler(name, handler))
|
||||
this.allowKeybinding(name, modes);
|
||||
},
|
||||
|
||||
addKeybinding: function(name, settings, flags, modes, handler) {
|
||||
if (global.display.add_keybinding(name, settings, flags, handler))
|
||||
this.allowKeybinding(name, modes);
|
||||
},
|
||||
|
||||
removeKeybinding: function(name) {
|
||||
if (global.display.remove_keybinding(name))
|
||||
this.allowKeybinding(name, Main.KeybindingMode.NONE);
|
||||
},
|
||||
|
||||
allowKeybinding: function(name, modes) {
|
||||
this._allowedKeybindings[name] = modes;
|
||||
},
|
||||
|
||||
blockAnimations: function() {
|
||||
this._animationBlockCount++;
|
||||
},
|
||||
@@ -424,6 +473,21 @@ const WindowManager = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
_filterKeybinding: function(shellwm, binding) {
|
||||
if (Main.keybindingMode == Main.KeybindingMode.NONE)
|
||||
return true;
|
||||
|
||||
// There's little sense in implementing a keybinding in mutter and
|
||||
// not having it work in NORMAL mode; handle this case generically
|
||||
// so we don't have to explicitly allow all builtin keybindings in
|
||||
// NORMAL mode.
|
||||
if (Main.keybindingMode == Main.KeybindingMode.NORMAL &&
|
||||
binding.is_builtin())
|
||||
return false;
|
||||
|
||||
return !(this._allowedKeybindings[binding.get_name()] & Main.keybindingMode);
|
||||
},
|
||||
|
||||
_switchWorkspace : function(shellwm, from, to, direction) {
|
||||
if (!this._shouldAnimate()) {
|
||||
shellwm.completed_switch_workspace();
|
||||
|
||||
@@ -33,21 +33,13 @@ const DRAGGING_WINDOW_OPACITY = 100;
|
||||
const BUTTON_LAYOUT_SCHEMA = 'org.gnome.shell.overrides';
|
||||
const BUTTON_LAYOUT_KEY = 'button-layout';
|
||||
|
||||
// Define a layout scheme for small window counts. For larger
|
||||
// counts we fall back to an algorithm. We need more schemes here
|
||||
// unless we have a really good algorithm.
|
||||
|
||||
// Each triplet is [xCenter, yCenter, scale] where the scale
|
||||
// is relative to the width of the workspace.
|
||||
const POSITIONS = {
|
||||
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;
|
||||
// When calculating a layout, we calculate the scale of windows and the percent
|
||||
// of the available area the new layout uses. If the values for the new layout,
|
||||
// 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.
|
||||
// Otherwise, we keep looking for a new layout.
|
||||
const LAYOUT_SCALE_WEIGHT = 1;
|
||||
const LAYOUT_SPACE_WEIGHT = 0.1;
|
||||
|
||||
function _interpolate(start, end, step) {
|
||||
return start + (end - start) * step;
|
||||
@@ -167,6 +159,24 @@ const WindowClone = new Lang.Class({
|
||||
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) {
|
||||
this._stackAbove = actor;
|
||||
if (this.inDrag || this._zooming)
|
||||
@@ -443,6 +453,11 @@ const WindowOverlay = new Lang.Class({
|
||||
this._updateCaptionId = metaWindow.connect('notify::title',
|
||||
Lang.bind(this, function(w) {
|
||||
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' });
|
||||
@@ -504,15 +519,16 @@ const WindowOverlay = new Lang.Class({
|
||||
transition: 'easeOutQuad' });
|
||||
},
|
||||
|
||||
chromeWidth: function () {
|
||||
return this.closeButton.width - this.closeButton._overlap;
|
||||
},
|
||||
|
||||
chromeHeights: function () {
|
||||
return [this.closeButton.height - this.closeButton._overlap,
|
||||
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
|
||||
* @cloneY: y position of windowClone
|
||||
@@ -550,9 +566,8 @@ const WindowOverlay = new Lang.Class({
|
||||
else
|
||||
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
||||
|
||||
if (!title.fullWidth)
|
||||
title.fullWidth = title.width;
|
||||
let titleWidth = Math.min(title.fullWidth, cloneWidth);
|
||||
let [titleMinWidth, titleNatWidth] = title.get_preferred_width(-1);
|
||||
let titleWidth = Math.max(titleMinWidth, Math.min(titleNatWidth, cloneWidth));
|
||||
|
||||
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
|
||||
let titleY = cloneY + cloneHeight + title._spacing;
|
||||
@@ -668,6 +683,280 @@ const WindowPositionFlags = {
|
||||
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
|
||||
*/
|
||||
@@ -689,7 +978,7 @@ const Workspace = new Lang.Class({
|
||||
// Without this the drop area will be overlapped.
|
||||
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._dropRect = new Clutter.Rectangle({ opacity: 0 });
|
||||
@@ -729,6 +1018,8 @@ const Workspace = new Lang.Class({
|
||||
|
||||
this._positionWindowsFlags = 0;
|
||||
this._positionWindowsId = 0;
|
||||
|
||||
this._currentLayout = null;
|
||||
},
|
||||
|
||||
setGeometry: function(x, y, width, height) {
|
||||
@@ -763,225 +1054,6 @@ const Workspace = new Lang.Class({
|
||||
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) {
|
||||
if (this._reservedSlot == clone)
|
||||
return;
|
||||
@@ -990,6 +1062,7 @@ const Workspace = new Lang.Class({
|
||||
clone = null;
|
||||
|
||||
this._reservedSlot = clone;
|
||||
this._currentLayout = null;
|
||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||
},
|
||||
|
||||
@@ -1020,6 +1093,11 @@ const Workspace = new Lang.Class({
|
||||
}
|
||||
|
||||
let clones = this._windows.slice();
|
||||
|
||||
clones.sort(function(a, b) {
|
||||
return a.metaWindow.get_stable_sequence() - b.metaWindow.get_stable_sequence();
|
||||
});
|
||||
|
||||
if (this._reservedSlot)
|
||||
clones.push(this._reservedSlot);
|
||||
|
||||
@@ -1027,8 +1105,7 @@ const Workspace = new Lang.Class({
|
||||
let animate = flags & WindowPositionFlags.ANIMATE;
|
||||
|
||||
// Start the animations
|
||||
let slots = this._computeAllWindowSlots(clones.length);
|
||||
clones = this._orderWindowsByMotionAndStartup(clones, slots);
|
||||
let slots = this._computeAllWindowSlots(clones);
|
||||
|
||||
let currentWorkspace = global.screen.get_active_workspace();
|
||||
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
|
||||
@@ -1045,10 +1122,11 @@ const Workspace = new Lang.Class({
|
||||
if (clone.inDrag)
|
||||
continue;
|
||||
|
||||
let [x, y, scale] = this._computeWindowLayout(metaWindow, slot);
|
||||
let [x, y, scale] = slot;
|
||||
|
||||
if (overlay && initialPositioning)
|
||||
overlay.hide();
|
||||
|
||||
if (animate && isOnCurrentWorkspace) {
|
||||
if (!metaWindow.showing_on_its_workspace()) {
|
||||
/* Hidden windows should fade in and grow
|
||||
@@ -1072,6 +1150,8 @@ const Workspace = new Lang.Class({
|
||||
|
||||
this._animateClone(clone, overlay, x, y, scale, initialPositioning);
|
||||
} else {
|
||||
// cancel any active tweens (otherwise they might override our changes)
|
||||
Tweener.removeTweens(clone.actor);
|
||||
clone.actor.set_position(x, y);
|
||||
clone.actor.set_scale(scale, scale);
|
||||
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) {
|
||||
if (!overlay)
|
||||
return;
|
||||
|
||||
let [cloneWidth, cloneHeight] = clone.actor.get_size();
|
||||
cloneWidth = scale * cloneWidth;
|
||||
cloneHeight = scale * cloneHeight;
|
||||
if (overlay)
|
||||
overlay.updatePositions(x, y, cloneWidth, cloneHeight, animate);
|
||||
overlay.updatePositions(x, y, cloneWidth * scale, cloneHeight * scale, animate);
|
||||
},
|
||||
|
||||
_showWindowOverlay: function(clone, overlay, fade) {
|
||||
@@ -1211,6 +1291,7 @@ const Workspace = new Lang.Class({
|
||||
this._cursorX = x;
|
||||
this._cursorY = y;
|
||||
|
||||
this._currentLayout = null;
|
||||
this._repositionWindowsId = Mainloop.timeout_add(750,
|
||||
Lang.bind(this, this._delayedWindowRepositioning));
|
||||
},
|
||||
@@ -1263,6 +1344,7 @@ const Workspace = new Lang.Class({
|
||||
clone.actor.set_position (this._x, this._y);
|
||||
}
|
||||
|
||||
this._currentLayout = null;
|
||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||
},
|
||||
|
||||
@@ -1300,6 +1382,8 @@ const Workspace = new Lang.Class({
|
||||
|
||||
// Animate the full-screen to Overview transition.
|
||||
zoomToOverview : function() {
|
||||
this._currentLayout = null;
|
||||
|
||||
// Position and scale the windows.
|
||||
if (Main.overview.animationInProgress)
|
||||
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
|
||||
@@ -1464,29 +1548,108 @@ const Workspace = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
_computeWindowSlot : function(windowIndex, numberOfWindows) {
|
||||
if (numberOfWindows in POSITIONS)
|
||||
return POSITIONS[numberOfWindows][windowIndex];
|
||||
_isBetterLayout: function(oldLayout, newLayout) {
|
||||
if (oldLayout.scale === undefined)
|
||||
return true;
|
||||
|
||||
// If we don't have a predefined scheme for this window count,
|
||||
// arrange the windows in a grid pattern.
|
||||
let gridWidth = Math.ceil(Math.sqrt(numberOfWindows));
|
||||
let gridHeight = Math.ceil(numberOfWindows / gridWidth);
|
||||
let spacePower = (newLayout.space - oldLayout.space) * LAYOUT_SPACE_WEIGHT;
|
||||
let scalePower = (newLayout.scale - oldLayout.scale) * LAYOUT_SCALE_WEIGHT;
|
||||
|
||||
let fraction = 0.95 * (1. / gridWidth);
|
||||
|
||||
let xCenter = (.5 / gridWidth) + ((windowIndex) % gridWidth) / gridWidth;
|
||||
let yCenter = (.5 / gridHeight) + Math.floor((windowIndex / gridWidth)) / gridHeight;
|
||||
|
||||
return [xCenter, yCenter, fraction];
|
||||
if (newLayout.scale > oldLayout.scale && newLayout.space > oldLayout.space) {
|
||||
// Win win -- better scale and better space
|
||||
return true;
|
||||
} else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) {
|
||||
// Keep new layout only if scale gain outweights aspect space loss
|
||||
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) {
|
||||
let slots = [];
|
||||
for (let i = 0; i < totalWindows; i++) {
|
||||
slots.push(this._computeWindowSlot(i, totalWindows));
|
||||
_computeLayout: function(windows, area, rowSpacing, columnSpacing, bottomPadding) {
|
||||
// We look for the largest scale that allows us to fit the
|
||||
// largest row/tallest column on the workspace.
|
||||
|
||||
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) {
|
||||
|
||||
@@ -51,7 +51,6 @@ const WorkspacesView = new Lang.Class({
|
||||
this._clipY = 0;
|
||||
this._clipWidth = 0;
|
||||
this._clipHeight = 0;
|
||||
this._workspaceRatioSpacing = 0;
|
||||
this._spacing = 0;
|
||||
this._animating = false; // tweening
|
||||
this._scrolling = false; // swipe-scrolling
|
||||
@@ -72,6 +71,7 @@ const WorkspacesView = new Lang.Class({
|
||||
this._workspaces[w].actor.reparent(this.actor);
|
||||
this._workspaces[activeWorkspaceIndex].actor.raise_top();
|
||||
|
||||
this._extraWorkspaces = [];
|
||||
this._updateExtraWorkspaces();
|
||||
|
||||
// Position/scale the desktop windows and their children after the
|
||||
@@ -83,8 +83,6 @@ const WorkspacesView = new Lang.Class({
|
||||
Lang.bind(this, function() {
|
||||
for (let w = 0; w < this._workspaces.length; w++)
|
||||
this._workspaces[w].zoomToOverview();
|
||||
if (!this._extraWorkspaces)
|
||||
return;
|
||||
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
||||
this._extraWorkspaces[w].zoomToOverview();
|
||||
}));
|
||||
@@ -124,7 +122,6 @@ const WorkspacesView = new Lang.Class({
|
||||
if (!this._settings.get_boolean('workspaces-only-on-primary'))
|
||||
return;
|
||||
|
||||
this._extraWorkspaces = [];
|
||||
let monitors = Main.layoutManager.monitors;
|
||||
for (let i = 0; i < monitors.length; i++) {
|
||||
if (i == Main.layoutManager.primaryIndex)
|
||||
@@ -139,23 +136,20 @@ const WorkspacesView = new Lang.Class({
|
||||
},
|
||||
|
||||
_destroyExtraWorkspaces: function() {
|
||||
if (!this._extraWorkspaces)
|
||||
return;
|
||||
|
||||
for (let m = 0; m < this._extraWorkspaces.length; m++)
|
||||
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 &&
|
||||
this._width == width && this._height == height)
|
||||
return;
|
||||
|
||||
this._width = width;
|
||||
this._height = height;
|
||||
this._x = x;
|
||||
this._y = y;
|
||||
this._workspaceRatioSpacing = spacing;
|
||||
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
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++)
|
||||
this._workspaces[w].zoomFromOverview();
|
||||
if (!this._extraWorkspaces)
|
||||
return;
|
||||
for (let w = 0; w < this._extraWorkspaces.length; w++)
|
||||
this._extraWorkspaces[w].zoomFromOverview();
|
||||
},
|
||||
@@ -204,8 +196,6 @@ const WorkspacesView = new Lang.Class({
|
||||
syncStacking: function(stackIndices) {
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].syncStacking(stackIndices);
|
||||
if (!this._extraWorkspaces)
|
||||
return;
|
||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||
this._extraWorkspaces[i].syncStacking(stackIndices);
|
||||
},
|
||||
@@ -234,7 +224,7 @@ const WorkspacesView = new Lang.Class({
|
||||
|
||||
Tweener.removeTweens(workspace.actor);
|
||||
|
||||
let y = (w - active) * (this._height + this._spacing + this._workspaceRatioSpacing);
|
||||
let y = (w - active) * (this._height + this._spacing);
|
||||
|
||||
if (showAnimation) {
|
||||
let params = { y: y,
|
||||
@@ -376,9 +366,6 @@ const WorkspacesView = new Lang.Class({
|
||||
this._firstDragMotion = false;
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
|
||||
if (!this._extraWorkspaces)
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||
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++)
|
||||
this._workspaces[i].setReservedSlot(null);
|
||||
|
||||
if (!this._extraWorkspaces)
|
||||
return;
|
||||
for (let i = 0; i < this._extraWorkspaces.length; i++)
|
||||
this._extraWorkspaces[i].setReservedSlot(null);
|
||||
},
|
||||
@@ -541,6 +525,16 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
this._notifyOpacityId = 0;
|
||||
this._swipeScrollBeginId = 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() {
|
||||
@@ -563,6 +557,7 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
|
||||
this._controls.show();
|
||||
this._thumbnailsBox.show();
|
||||
this._updateSwitcherVisibility();
|
||||
|
||||
this._updateWorkspacesViews();
|
||||
|
||||
@@ -864,28 +859,23 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
let rtl = (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL);
|
||||
|
||||
let clipWidth = width - controlsVisible;
|
||||
let clipHeight = (fullHeight / fullWidth) * clipWidth;
|
||||
let clipHeight = fullHeight;
|
||||
let clipX = rtl ? x + controlsVisible : x;
|
||||
let clipY = y + (fullHeight - clipHeight) / 2;
|
||||
|
||||
let widthAdjust = this._zoomOut ? controlsNatural : controlsVisible;
|
||||
widthAdjust += Main.overview._spacing;
|
||||
width -= widthAdjust;
|
||||
if (rtl)
|
||||
x += widthAdjust;
|
||||
|
||||
height = (fullHeight / fullWidth) * width;
|
||||
let difference = fullHeight - height;
|
||||
y += difference / 2;
|
||||
|
||||
|
||||
let monitors = Main.layoutManager.monitors;
|
||||
let m = 0;
|
||||
for (let i = 0; i < monitors.length; i++) {
|
||||
if (i == this._primaryIndex) {
|
||||
this._workspacesViews[m].setClipRect(clipX, clipY,
|
||||
clipWidth, clipHeight);
|
||||
this._workspacesViews[m].setGeometry(x, y, width, height,
|
||||
difference);
|
||||
this._workspacesViews[m].setGeometry(x, y, width, height);
|
||||
m++;
|
||||
} else if (!this._workspacesOnlyOnPrimary) {
|
||||
this._workspacesViews[m].setClipRect(monitors[i].x,
|
||||
@@ -895,7 +885,7 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
this._workspacesViews[m].setGeometry(monitors[i].x,
|
||||
monitors[i].y,
|
||||
monitors[i].width,
|
||||
monitors[i].height, 0);
|
||||
monitors[i].height);
|
||||
m++;
|
||||
}
|
||||
}
|
||||
@@ -975,6 +965,7 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].updateWorkspaces(oldNumWorkspaces,
|
||||
newNumWorkspaces);
|
||||
this._updateSwitcherVisibility();
|
||||
},
|
||||
|
||||
_updateZoom : function() {
|
||||
|
||||
192
po/be.po
192
po/be.po
@@ -5,8 +5,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-11-02 07:11+0000\n"
|
||||
"PO-Revision-Date: 2012-11-02 15:12+0300\n"
|
||||
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 12:05+0300\n"
|
||||
"Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n"
|
||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||
"Language: be\n"
|
||||
@@ -34,6 +34,14 @@ msgstr "Сістэма"
|
||||
msgid "Show the message tray"
|
||||
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
|
||||
msgid "GNOME Shell"
|
||||
msgstr "Абалонка GNOME"
|
||||
@@ -136,33 +144,30 @@ msgstr ""
|
||||
"камунікатара карыстальніка. Гэта значэнне - з пераліку GsmPresenceStatus."
|
||||
|
||||
#: ../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"
|
||||
msgstr "Паказваць тыдзень у календары"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Калі ўключана, паказваць тыдзень у календары ў ISO-фармаце."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Клавіятурны скарот для адкрыцця праграмнага меню"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Клавіятурны скарот для адкрыцця праграмнага меню."
|
||||
|
||||
#: ../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"
|
||||
msgstr "Клавіятурны скарот для ўключэння/выключэння абшару апавяшчэнняў"
|
||||
@@ -295,8 +300,8 @@ msgstr "Акно ўваходу"
|
||||
msgid "Power"
|
||||
msgstr "Праца сістэмы"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:775
|
||||
msgid "Suspend"
|
||||
msgstr "Прыпыніць камп'ютар"
|
||||
|
||||
@@ -304,8 +309,8 @@ msgstr "Прыпыніць камп'ютар"
|
||||
msgid "Restart"
|
||||
msgstr "Перазапусціць сістэму"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:774
|
||||
msgid "Power Off"
|
||||
msgstr "Выключыць камп'ютар"
|
||||
|
||||
@@ -688,35 +693,35 @@ msgstr "Абязгучыць"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:950
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Адпраўлена ў <b>%X</b>, <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:956
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:961
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:990
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s змяніў імя на %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1090
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Запрашэнне ў %s"
|
||||
@@ -724,42 +729,42 @@ msgstr "Запрашэнне ў %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "Удзельнік %s запрашае вас далучыцца да %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1179
|
||||
#: ../js/ui/components/telepathyClient.js:1242
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "Адмовіцца"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1101
|
||||
#: ../js/ui/components/telepathyClient.js:1180
|
||||
#: ../js/ui/components/telepathyClient.js:1243
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "Прыняць"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Відэазванок ад %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1134
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Званок ад %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Адмовіць"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "Адказаць"
|
||||
|
||||
@@ -768,108 +773,108 @@ msgstr "Адказаць"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1173
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s пасылае вам %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1208
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s просіць дазволу на прагляд вашага сеткавага стану"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "Сеткавая памылка"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "Няўдалая ідэнтыфікацыя"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "Памылка шыфравання"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Сертыфікат не пададзены"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Сертыфікат не заслугоўвае даверу"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "Сертыфікат састарэў"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Сертыфікат не актывізаваны"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Адбітак сертыфіката не адпавядае патрэбнаму"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Сертыфікат уласнаручна падпісаны"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Уключаны рэжым па-за сеткай"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Шыфраванне недаступнае"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Хібны сертыфікат"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Адмоўлена ў злучэнні"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Не ўдалося ўсталяваць злучэнне"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Злучэнне страчана"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Гэты конт ужо злучаны з серверам"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Злучэнне заменена новым для таго ж самага рэсурсу"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Такі конт ужо існуе на серверы"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Сертыфікат быў адкліканы"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -877,26 +882,26 @@ msgstr ""
|
||||
"Даўжыня сертыфіката сервера або глыбіня яго ланцуга перавышае абмежаванне, "
|
||||
"выстаўленае крыптаграфічнай бібліятэкай"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "Унутраная памылка"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1356
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "не ўдалося злучыцца з %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1365
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "Перазлучыцца"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1366
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "Рэдагаваць конт"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1411
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "Невядомая прычына"
|
||||
|
||||
@@ -1083,23 +1088,23 @@ msgstr "Паглядзець выточны код"
|
||||
msgid "Web Page"
|
||||
msgstr "Сеціўная старонка"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1081
|
||||
msgid "Open"
|
||||
msgstr "Адкрыць"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Remove"
|
||||
msgstr "Выдаліць"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:1540
|
||||
msgid "Message Tray"
|
||||
msgstr "Абшар апавяшчэнняў"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2547
|
||||
msgid "System Information"
|
||||
msgstr "Сістэмная інфармацыя"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Невядомая"
|
||||
@@ -1155,11 +1160,11 @@ msgstr "Увядзіце загад:"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:79
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d %B"
|
||||
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
@@ -1167,7 +1172,7 @@ msgstr[0] "%d новае паведамленне"
|
||||
msgstr[1] "%d новыя паведамленні"
|
||||
msgstr[2] "%d новых паведамленняў"
|
||||
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
@@ -1627,59 +1632,59 @@ msgstr "Мікрафон"
|
||||
msgid "Log in as another user"
|
||||
msgstr "Увайсці іншым карыстальнікам"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Available"
|
||||
msgstr "Даступны"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Busy"
|
||||
msgstr "Заняты"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Invisible"
|
||||
msgstr "Нябачны"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Away"
|
||||
msgstr "Адсутны"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:192
|
||||
msgid "Idle"
|
||||
msgstr "Бяздзейны"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:195
|
||||
msgid "Unavailable"
|
||||
msgstr "Недаступны"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
#: ../js/ui/userMenu.js:740
|
||||
msgid "Notifications"
|
||||
msgstr "Апавяшчэнні"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
#: ../js/ui/userMenu.js:748
|
||||
msgid "System Settings"
|
||||
msgstr "Сістэмныя настройкі"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:756
|
||||
msgid "Switch User"
|
||||
msgstr "Перамяніць карыстальніка"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:761
|
||||
msgid "Log Out"
|
||||
msgstr "Выйсці з сеанса"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:766
|
||||
msgid "Lock"
|
||||
msgstr "Заблакіраваць"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:781
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Усталяваць абнаўленні і перазагрузіць камп'ютар"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:799
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Вам прызначаны стан занятасці для чату"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../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."
|
||||
@@ -1688,15 +1693,15 @@ msgstr ""
|
||||
"сеціўны стан абноўлены інфармацыяй аб тым, што вы можаце не ўбачыць чужых "
|
||||
"паведамленняў у час."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
#: ../js/ui/viewSelector.js:87
|
||||
msgid "Windows"
|
||||
msgstr "Вокны"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Праграмы"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Пошук"
|
||||
|
||||
@@ -1767,7 +1772,7 @@ msgstr "Ужыць асаблівы рэжым, напрыклад, \"gdm\" дл
|
||||
msgid "List possible modes"
|
||||
msgstr "Вывесці спіс магчымых рэжымаў"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Не ўдалося запусціць \"%s\""
|
||||
@@ -1791,4 +1796,3 @@ msgstr "Прадвызначана"
|
||||
#: ../src/shell-polkit-authentication-agent.c:343
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"
|
||||
|
||||
|
||||
256
po/ca.po
256
po/ca.po
@@ -10,14 +10,14 @@ msgstr ""
|
||||
"Project-Id-Version: HEAD\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-10-31 16:48+0000\n"
|
||||
"PO-Revision-Date: 2012-11-03 16:22+0100\n"
|
||||
"POT-Creation-Date: 2012-09-25 10:59+0000\n"
|
||||
"PO-Revision-Date: 2012-09-25 07:47+0100\n"
|
||||
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
|
||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||
"Language: ca\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bits\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Gtranslator 2.91.5\n"
|
||||
|
||||
@@ -141,63 +141,50 @@ msgstr ""
|
||||
"l'usuari. El valor prové de l'enumeració «GsmPresenceStatus»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||
msgstr "Mostra sempre l'element de menú «Surt» en el menú d'usuari."
|
||||
|
||||
#: ../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 ""
|
||||
"Aquesta clau sobreescriu l'ocultació automàtica de l'element de menú «Surt» "
|
||||
"en el menú d'usuari en el cas que només hi hagi un sol usuari i una sola "
|
||||
"sessió."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostra el número de la setmana en el calendari"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Si és «true» (cert) es mostra el número de la setmana en el calendari."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Vinculació per obrir el menú d'aplicació"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "La vinculació per obrir el menú d'aplicació."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
msgid "Keybinding to toggle the visibility of the message tray"
|
||||
msgstr "La vinculació per commutar la visibilitat de la safata de missatges"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr "La vinculació per commutar la visibilitat de la safata de missatges."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "La vinculació per commutar l'enregistrador de pantalla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "La vinculació per iniciar/aturar l'enregistrador de pantalla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Quin tipus de teclat s'ha d'utilitzar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "El tipus de teclat que s'utilitzarà."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Imatges per segon per enregistrar els screencasts."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@@ -205,11 +192,11 @@ msgstr ""
|
||||
"Les imatges per segon, en fotogrames per segon, de l'screencast enregistrat "
|
||||
"per l'eina d'enregistrament del GNOME Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "El conducte GStreamer per enregistrar els screencasts"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@@ -236,11 +223,11 @@ msgstr ""
|
||||
"WEBM i utilitza el còdec VP8. El %T és una variable per estimar el nombre de "
|
||||
"fils d'execució paral·lels òptims del sistema."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Extensió de fitxer per desar l'screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
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 "
|
||||
@@ -263,11 +250,11 @@ msgstr "Extensió"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Seleccioneu una extensió amb el quadre combinat per configurar-la."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:529
|
||||
#: ../js/gdm/loginDialog.js:528
|
||||
msgid "Session..."
|
||||
msgstr "Sessió..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:677
|
||||
#: ../js/gdm/loginDialog.js:676
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Entrada"
|
||||
@@ -275,23 +262,23 @@ msgstr "Entrada"
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:736
|
||||
#: ../js/gdm/loginDialog.js:743
|
||||
msgid "Not listed?"
|
||||
msgstr "No esteu llistat?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/gdm/loginDialog.js:896 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel·la"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:901
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Entra"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1215
|
||||
#: ../js/gdm/loginDialog.js:1240
|
||||
msgid "Login Window"
|
||||
msgstr "Finestra d'entrada"
|
||||
|
||||
@@ -300,8 +287,8 @@ msgstr "Finestra d'entrada"
|
||||
msgid "Power"
|
||||
msgstr "Apaga"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
||||
#: ../js/ui/userMenu.js:778
|
||||
msgid "Suspend"
|
||||
msgstr "Atura temporalment"
|
||||
|
||||
@@ -309,8 +296,8 @@ msgstr "Atura temporalment"
|
||||
msgid "Restart"
|
||||
msgstr "Reinicia"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
||||
#: ../js/ui/userMenu.js:777
|
||||
msgid "Power Off"
|
||||
msgstr "Apaga"
|
||||
|
||||
@@ -361,7 +348,7 @@ msgstr "CONFIGURACIÓ"
|
||||
msgid "New Window"
|
||||
msgstr "Finestra nova"
|
||||
|
||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Suprimeix dels preferits"
|
||||
|
||||
@@ -525,16 +512,16 @@ msgstr "Aquesta setmana"
|
||||
msgid "Next week"
|
||||
msgstr "La setmana que ve"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:297
|
||||
#: ../js/ui/components/autorunManager.js:278
|
||||
msgid "Removable Devices"
|
||||
msgstr "Dispositius extraïbles"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:594
|
||||
#: ../js/ui/components/autorunManager.js:575
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Obre amb %s"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:620
|
||||
#: ../js/ui/components/autorunManager.js:601
|
||||
msgid "Eject"
|
||||
msgstr "Expulsa"
|
||||
|
||||
@@ -691,35 +678,35 @@ msgstr "Silencia"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:950
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Enviat a les <b>%X</b> del <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:956
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Enviat el <b>%A %d de %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:961
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Enviat el <b>%A %d de %B</b> de %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:990
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "En/na %s ara es diu %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1090
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Us han convidat a entrar a %s"
|
||||
@@ -727,42 +714,42 @@ msgstr "Us han convidat a entrar a %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "En/na %s us convida a entrar a %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1179
|
||||
#: ../js/ui/components/telepathyClient.js:1242
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "Declina"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1101
|
||||
#: ../js/ui/components/telepathyClient.js:1180
|
||||
#: ../js/ui/components/telepathyClient.js:1243
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "Accepta"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videotrucada de %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1134
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Trucada de %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Rebutja"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "Contesta"
|
||||
|
||||
@@ -771,112 +758,112 @@ msgstr "Contesta"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1173
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "En/na %s us envia %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1208
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s vol poder saber quan esteu en línia"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "Error de la xarxa"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "Ha fallat l'autenticació"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "Error d'encriptació"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "No s'ha proporcionat el certificat"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "El certificat no és de confiança"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "El certificat ha vençut"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "El certificat no està activat"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "No coincideix el nom de la màquina del certificat"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "No coincideix l'empremta digital del certificat"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Certificat signat per un mateix"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "S'ha establert l'estat a fora de línia"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "L'encriptació no està disponible"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "El certificat no és vàlid"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "S'ha rebutjat la connexió"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "No es pot establir la connexió"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "S'ha perdut la connexió"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Aquest compte ja està connectat al servidor"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"S'ha reemplaçat la connexió per una altra de nova fent servir el mateix "
|
||||
"recurs"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Ja existeix aquest compte al servidor"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "El servidor està massa ocupat per gestionar la connexió"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "S'ha revocat el certificat"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"El certificat utilitza un algorisme criptògraf no segur o la seva fortalesa "
|
||||
"criptogràfica és feble"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -884,30 +871,30 @@ msgstr ""
|
||||
"La llargada del certificat del servidor o la profunditat de la cadena de "
|
||||
"certificació excedeix els límits de la biblioteca criptogràfica"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "S'ha produït un error intern"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1356
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Ha fallat la connexió a %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1365
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "Torna a connectar"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1366
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "Edita el compte"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1411
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "Motiu desconegut"
|
||||
|
||||
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
||||
msgid "Show Applications"
|
||||
msgstr "Mostra les aplicacions"
|
||||
|
||||
@@ -915,14 +902,14 @@ msgstr "Mostra les aplicacions"
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "Configuració de la data i l'hora"
|
||||
|
||||
#: ../js/ui/dateMenu.js:111
|
||||
#: ../js/ui/dateMenu.js:109
|
||||
msgid "Open Calendar"
|
||||
msgstr "Obre el calendari"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:201
|
||||
#: ../js/ui/dateMenu.js:175
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A %d de %B, %Y"
|
||||
|
||||
@@ -1081,23 +1068,23 @@ msgstr "Mostra el codi font"
|
||||
msgid "Web Page"
|
||||
msgstr "Pàgina web"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1081
|
||||
msgid "Open"
|
||||
msgstr "Obre"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Remove"
|
||||
msgstr "Suprimeix"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:2088
|
||||
msgid "Message Tray"
|
||||
msgstr "Safata de missatges"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2551
|
||||
msgid "System Information"
|
||||
msgstr "Informació de l'ordinador"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Desconegut"
|
||||
@@ -1153,7 +1140,7 @@ msgstr "Introduïu una ordre:"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:79
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A %d de %B"
|
||||
|
||||
@@ -1203,7 +1190,7 @@ msgstr "Contrasenya"
|
||||
msgid "Remember Password"
|
||||
msgstr "Recorda la contrasenya"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
||||
msgid "Unlock"
|
||||
msgstr "Desbloqueja"
|
||||
|
||||
@@ -1614,63 +1601,67 @@ msgstr "Volum"
|
||||
msgid "Microphone"
|
||||
msgstr "Micròfon"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:177
|
||||
#: ../js/ui/unlockDialog.js:176
|
||||
msgid "Log in as another user"
|
||||
msgstr "Entra amb un altre usuari"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Available"
|
||||
msgstr "Disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Busy"
|
||||
msgstr "Ocupat"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Invisible"
|
||||
msgstr "Invisible"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Away"
|
||||
msgstr "Absent"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:192
|
||||
msgid "Idle"
|
||||
msgstr "Inactiu"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:195
|
||||
msgid "Unavailable"
|
||||
msgstr "No disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
msgid "Notifications"
|
||||
msgstr "Notificacions"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
msgid "System Settings"
|
||||
msgstr "Paràmetres del sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
||||
msgid "Switch User"
|
||||
msgstr "Canvia d'usuari"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:619
|
||||
msgid "Switch Session"
|
||||
msgstr "Canvia de sessió"
|
||||
|
||||
#: ../js/ui/userMenu.js:743
|
||||
msgid "Notifications"
|
||||
msgstr "Notificacions"
|
||||
|
||||
#: ../js/ui/userMenu.js:751
|
||||
msgid "System Settings"
|
||||
msgstr "Paràmetres del sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:764
|
||||
msgid "Log Out"
|
||||
msgstr "Surt"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:769
|
||||
msgid "Lock"
|
||||
msgstr "Bloqueja"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:784
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Instal·la les actualitzacions i reinicia"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:802
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "L'estat del xat s'establirà a ocupat"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../js/ui/userMenu.js:803
|
||||
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."
|
||||
@@ -1691,7 +1682,7 @@ msgstr "Aplicacions"
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
#: ../js/ui/wanda.js:117
|
||||
#: ../js/ui/wanda.js:119
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Sorry, no wisdom for you today:\n"
|
||||
@@ -1700,12 +1691,12 @@ msgstr ""
|
||||
"No hi ha cap consell per avui:\n"
|
||||
"%s"
|
||||
|
||||
#: ../js/ui/wanda.js:121
|
||||
#: ../js/ui/wanda.js:123
|
||||
#, c-format
|
||||
msgid "%s the Oracle says"
|
||||
msgstr "L'oracle diu %s"
|
||||
|
||||
#: ../js/ui/wanda.js:162
|
||||
#: ../js/ui/wanda.js:164
|
||||
msgid "Your favorite Easter Egg"
|
||||
msgstr "El vostre ou de pasqua preferit"
|
||||
|
||||
@@ -1740,23 +1731,23 @@ msgstr[1] "%u entrades"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sons del sistema"
|
||||
|
||||
#: ../src/main.c:332
|
||||
#: ../src/main.c:330
|
||||
msgid "Print version"
|
||||
msgstr "Mostra la versió"
|
||||
|
||||
#: ../src/main.c:338
|
||||
#: ../src/main.c:336
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "El mode que utilitzarà el GDM per a la pantalla d'entrada"
|
||||
|
||||
#: ../src/main.c:344
|
||||
#: ../src/main.c:342
|
||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||
msgstr "Utilitza un mode específic, p. ex. «gdm» per la pantalla d'entrada"
|
||||
|
||||
#: ../src/main.c:350
|
||||
#: ../src/main.c:348
|
||||
msgid "List possible modes"
|
||||
msgstr "Llista els modes possibles"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "No s'ha pogut iniciar «%s»"
|
||||
@@ -1781,9 +1772,6 @@ msgstr "Predeterminat"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "L'usuari ha descartat el diàleg d'autenticació"
|
||||
|
||||
#~ msgid "Switch Session"
|
||||
#~ msgstr "Canvia de sessió"
|
||||
|
||||
#~ msgid "Failed to unmount '%s'"
|
||||
#~ msgstr "No s'ha pogut desmuntar «%s»"
|
||||
|
||||
|
||||
377
po/cs.po
377
po/cs.po
@@ -12,7 +12,7 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-10-31 16:48+0000\n"
|
||||
"POT-Creation-Date: 2012-10-31 16:46+0000\n"
|
||||
"PO-Revision-Date: 2012-11-04 17:40+0200\n"
|
||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||
@@ -40,6 +40,14 @@ msgstr "Systém"
|
||||
msgid "Show the message tray"
|
||||
msgstr "Zobrazit lištu zpráv"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||
msgid "Show all applications"
|
||||
msgstr "Zobrazit všechny aplikace"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||
msgid "Open the application menu"
|
||||
msgstr "Otevřít nabídku aplikací"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "Prostředí GNOME Shell"
|
||||
@@ -167,34 +175,47 @@ msgid "Keybinding to open the application menu."
|
||||
msgstr "Klávesová zkratka na otevření nabídky aplikace."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Keybinding to open the \"Show Applications\" view"
|
||||
msgstr "Klávesová zkratka na otevření nabídky aplikace"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu."
|
||||
msgid ""
|
||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||
msgstr "Klávesová zkratka na otevření nabídky aplikace."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "Keybinding to toggle the visibility of the message tray"
|
||||
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "Klávesová zkratka k záznamu obrazovky"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "Klávesová zkratka k započnutí nebo ukončení záznamu dění na obrazovce."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Která klávesnice se má používat"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Typ klávesnice, který se má používat."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Frekvence snímků při nahrávání dění na obrazovce."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@@ -202,11 +223,11 @@ msgstr ""
|
||||
"Frekvence snímků za sekundu výsledné nahrávky dění na obrazovce, která byla "
|
||||
"nahrána záznamovým programem GNOME Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Roura systému gstreamer určená ke kódování nahrávky dění na obrazovce"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@@ -231,11 +252,11 @@ msgstr ""
|
||||
"nahráváním do WEBM s kodekem VP8. %T je použito jako zástupný symbol odhadu "
|
||||
"nejvhodnějšího počtu vláken na systému."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Přípona souboru s nahrávkou dění na obrazovce"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
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 "
|
||||
@@ -245,6 +266,39 @@ msgstr ""
|
||||
"názvu vycházejícího z aktuálního data a bude používat tuto příponu. Při "
|
||||
"nahrávání do jiného formátu kontejneru by měla být provedena úprava pravidel."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||
msgid "Attach modal dialog to the parent window"
|
||||
msgstr "Připojovat modální dialogová okna k rodičovským oknům"
|
||||
|
||||
#: ../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 ""
|
||||
"Tento kíč přepisuje klíč v org.gnome.mutter, když běží GNOME Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||
msgid "Arrangement of buttons on the titlebar"
|
||||
msgstr "Uspořádání tlačítek v záhlaví"
|
||||
|
||||
#: ../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 ""
|
||||
"Tento kíč přepisuje klíč v org.gnome.desktop.wm.preferences, když běží GNOME Shell."
|
||||
|
||||
#: ../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 "Pracovní plochy jsou spravovány dynamicky"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||
msgid "Workspaces only on primary monitor"
|
||||
msgstr "Pracovní plochy pouze na hlavním monitoru"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:124
|
||||
#, c-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
@@ -260,11 +314,11 @@ msgid "Select an extension to configure using the combobox above."
|
||||
msgstr ""
|
||||
"Pomocí rozbalovacího seznamu výše zvolte rozšíření, které chete nastavit."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:529
|
||||
#: ../js/gdm/loginDialog.js:560
|
||||
msgid "Session..."
|
||||
msgstr "Sezení…"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:677
|
||||
#: ../js/gdm/loginDialog.js:704
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Přihlášení"
|
||||
@@ -272,56 +326,56 @@ msgstr "Přihlášení"
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:736
|
||||
#: ../js/gdm/loginDialog.js:763
|
||||
msgid "Not listed?"
|
||||
msgstr "Nejste na seznamu?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/gdm/loginDialog.js:905 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:168
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:910
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Přihlásit se"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1215
|
||||
#: ../js/gdm/loginDialog.js:1221
|
||||
msgid "Login Window"
|
||||
msgstr "Přihlašovací okno"
|
||||
|
||||
#. Translators: accessible name of the power menu in the login screen
|
||||
#: ../js/gdm/powerMenu.js:35
|
||||
#: ../js/gdm/powerMenu.js:36
|
||||
msgid "Power"
|
||||
msgstr "Vypnout"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:667 ../js/ui/userMenu.js:671
|
||||
#: ../js/ui/userMenu.js:782
|
||||
msgid "Suspend"
|
||||
msgstr "Uspat do paměti"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:94
|
||||
#: ../js/gdm/powerMenu.js:98
|
||||
msgid "Restart"
|
||||
msgstr "Restartovat"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:669
|
||||
#: ../js/ui/userMenu.js:671 ../js/ui/userMenu.js:781
|
||||
msgid "Power Off"
|
||||
msgstr "Vypnout"
|
||||
|
||||
#: ../js/gdm/util.js:148
|
||||
#: ../js/gdm/util.js:151
|
||||
msgid "Authentication error"
|
||||
msgstr "Chyba ověření"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/util.js:265
|
||||
#: ../js/gdm/util.js:268
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(nebo otiskněte prst)"
|
||||
|
||||
#: ../js/gdm/util.js:290
|
||||
#: ../js/gdm/util.js:293
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(např. uživatel nebo %s)"
|
||||
@@ -491,48 +545,48 @@ msgid "S"
|
||||
msgstr "So"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:699
|
||||
#: ../js/ui/calendar.js:700
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr "Nic nenaplánováno"
|
||||
|
||||
#. 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"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %e. %B"
|
||||
|
||||
#. 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"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %e. %B %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:728
|
||||
#: ../js/ui/calendar.js:729
|
||||
msgid "Today"
|
||||
msgstr "Dnes"
|
||||
|
||||
#: ../js/ui/calendar.js:732
|
||||
#: ../js/ui/calendar.js:733
|
||||
msgid "Tomorrow"
|
||||
msgstr "Zítra"
|
||||
|
||||
#: ../js/ui/calendar.js:743
|
||||
#: ../js/ui/calendar.js:744
|
||||
msgid "This week"
|
||||
msgstr "Tento týden"
|
||||
|
||||
#: ../js/ui/calendar.js:751
|
||||
#: ../js/ui/calendar.js:752
|
||||
msgid "Next week"
|
||||
msgstr "Následující týden"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:297
|
||||
#: ../js/ui/components/autorunManager.js:295
|
||||
msgid "Removable Devices"
|
||||
msgstr "Výměnná zařízení"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:594
|
||||
#: ../js/ui/components/autorunManager.js:591
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Otevřít s %s"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:620
|
||||
#: ../js/ui/components/autorunManager.js:617
|
||||
msgid "Eject"
|
||||
msgstr "Vysunout"
|
||||
|
||||
@@ -686,38 +740,42 @@ msgstr "Zrušit ztlumení"
|
||||
msgid "Mute"
|
||||
msgstr "Ztlumit"
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:950
|
||||
#. Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"
|
||||
#: ../js/ui/components/telepathyClient.js:943
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Čas odeslání: <b>%X</b>, den odeslání: <b>%A</b>"
|
||||
msgid "<b>%H:%M</b> on Yesterday"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:956
|
||||
#. Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday
|
||||
#: ../js/ui/components/telepathyClient.js:949
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Den odeslání: <b>%A</b>, <b>%e. %B</b>"
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>"
|
||||
msgstr "<b>%H:%M</b> v <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:961
|
||||
#. 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
|
||||
#: ../js/ui/components/telepathyClient.js:955
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Den odeslání: <b>%A</b>, <b>%e. %B</b> %Y"
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>"
|
||||
msgstr "<b>%H:%M</b> v <b>%A</b>, <b>%e. %B</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:960
|
||||
#, no-c-format
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>, %Y"
|
||||
msgstr "<b>%H:%M</b> v <b>%A</b>, <b>%e. %B</b> %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:990
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s je teď znám jako %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1090
|
||||
#: ../js/ui/components/telepathyClient.js:1087
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Pozvánka na připojení k %s"
|
||||
@@ -725,42 +783,42 @@ msgstr "Pozvánka na připojení k %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1095
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s vás zve do %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1179
|
||||
#: ../js/ui/components/telepathyClient.js:1242
|
||||
#: ../js/ui/components/telepathyClient.js:1097
|
||||
#: ../js/ui/components/telepathyClient.js:1176
|
||||
#: ../js/ui/components/telepathyClient.js:1239
|
||||
msgid "Decline"
|
||||
msgstr "Odmítnout"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1101
|
||||
#: ../js/ui/components/telepathyClient.js:1180
|
||||
#: ../js/ui/components/telepathyClient.js:1243
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Accept"
|
||||
msgstr "Přijmout"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#: ../js/ui/components/telepathyClient.js:1128
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videohovor od %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1134
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Hovor od %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
#: ../js/ui/components/telepathyClient.js:1136
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Odmítnout"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1138
|
||||
msgid "Answer"
|
||||
msgstr "Zvednout"
|
||||
|
||||
@@ -769,110 +827,110 @@ msgstr "Zvednout"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1173
|
||||
#: ../js/ui/components/telepathyClient.js:1170
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s vám posílá %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1208
|
||||
#: ../js/ui/components/telepathyClient.js:1205
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s vás žádá o oprávnění vidět, že jste dostupní"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
#: ../js/ui/components/telepathyClient.js:1297
|
||||
msgid "Network error"
|
||||
msgstr "Chyba sítě"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1299
|
||||
msgid "Authentication failed"
|
||||
msgstr "Ověření selhalo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1301
|
||||
msgid "Encryption error"
|
||||
msgstr "Chyba šifrování"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1303
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Certifikát neposkytnut"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1305
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Nedůvěryhodný certifikát"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1307
|
||||
msgid "Certificate expired"
|
||||
msgstr "Platnost certifikátu vypršela"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1309
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Certifikát není aktivován"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1311
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Název počítače certifikátu nesouhlasí"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1313
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Otisk prstu certifikátu nesouhlasí"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1315
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Certifikát je podepsán sám sebou"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1317
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Stav nastaven na „Odhlášen“"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1319
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Šifrování není dostupné"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1321
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Certifikát je neplatný"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1323
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Spojení bylo odmítnuto"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1325
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Spojení nemohlo bát navázáno"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1327
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Spojení bylo ztraceno"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1329
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Tento účet je již připojen k serveru"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1331
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Spojení bylo nahrazeno novým spojením, které používá stejný zdroj"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1333
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Takový účet již na serveru existuje"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1335
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Server je právě příliš zaneprázdněn na to, aby obsloužil spojení"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1337
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Certifikát byl odvolán"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1339
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Certifikát používá nepříliš bezpečný šifrovací algoritmus nebo je z "
|
||||
"kryptografického hlediska slabý"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1341
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -880,26 +938,26 @@ msgstr ""
|
||||
"Délka certifikátu serveru nebo délka zřetězených certifikátů serveru "
|
||||
"přesáhla omezení dané kryptografickou knihovnou"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1343
|
||||
msgid "Internal error"
|
||||
msgstr "Vnitřní chyba"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1356
|
||||
#: ../js/ui/components/telepathyClient.js:1353
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Připojení k „%s“ selhalo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1365
|
||||
#: ../js/ui/components/telepathyClient.js:1362
|
||||
msgid "Reconnect"
|
||||
msgstr "Znovu připojit"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1366
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Edit account"
|
||||
msgstr "Upravit účet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1411
|
||||
#: ../js/ui/components/telepathyClient.js:1408
|
||||
msgid "Unknown reason"
|
||||
msgstr "Neznámý důvod"
|
||||
|
||||
@@ -1082,23 +1140,23 @@ msgstr "Zobrazit zdroj"
|
||||
msgid "Web Page"
|
||||
msgstr "Webová stránka"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1083
|
||||
msgid "Open"
|
||||
msgstr "Otevřít"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1090
|
||||
msgid "Remove"
|
||||
msgstr "Odstranit"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:1534
|
||||
msgid "Message Tray"
|
||||
msgstr "Lišta zpráv"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2557
|
||||
msgid "System Information"
|
||||
msgstr "Informace o systému"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:504 ../src/shell-app.c:374
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Neznámé"
|
||||
@@ -1125,17 +1183,17 @@ msgstr "Vyhledávejte psaním…"
|
||||
msgid "Dash"
|
||||
msgstr "Oblíbené"
|
||||
|
||||
#: ../js/ui/panel.js:567
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "Quit"
|
||||
msgstr "Ukončit"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:612
|
||||
msgid "Activities"
|
||||
msgstr "Činnosti"
|
||||
|
||||
#: ../js/ui/panel.js:965
|
||||
#: ../js/ui/panel.js:979
|
||||
msgid "Top Bar"
|
||||
msgstr "Horní lišta"
|
||||
|
||||
@@ -1149,8 +1207,12 @@ msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Zadejte prosím příkaz:"
|
||||
msgid "Enter a Command"
|
||||
msgstr "Zadejte příkaz:"
|
||||
|
||||
#: ../js/ui/runDialog.js:241
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
@@ -1206,7 +1268,7 @@ msgstr "Heslo"
|
||||
msgid "Remember Password"
|
||||
msgstr "Pamatovat si heslo"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:171
|
||||
msgid "Unlock"
|
||||
msgstr "Odemknout"
|
||||
|
||||
@@ -1261,7 +1323,7 @@ msgstr "Styl velkého textu"
|
||||
#: ../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: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"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@@ -1290,12 +1352,12 @@ msgstr "zařízení zakázáno"
|
||||
msgid "Connection"
|
||||
msgstr "Připojení"
|
||||
|
||||
#: ../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..."
|
||||
msgstr "odpojování…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:220 ../js/ui/status/network.js:464
|
||||
#: ../js/ui/status/network.js:934
|
||||
#: ../js/ui/status/bluetooth.js:220 ../js/ui/status/network.js:481
|
||||
#: ../js/ui/status/network.js:1507
|
||||
msgid "connecting..."
|
||||
msgstr "připojování…"
|
||||
|
||||
@@ -1405,109 +1467,106 @@ msgstr "zakázáno"
|
||||
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||
#: ../js/ui/status/network.js:456
|
||||
#: ../js/ui/status/network.js:473
|
||||
msgid "unmanaged"
|
||||
msgstr "nespravováno"
|
||||
|
||||
#. 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"
|
||||
msgstr "je vyžadováno ověření"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:477
|
||||
#: ../js/ui/status/network.js:494
|
||||
msgid "firmware missing"
|
||||
msgstr "nedostupný firmware"
|
||||
|
||||
#. 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"
|
||||
msgstr "kabel byl odpojen"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
#: ../js/ui/status/network.js:506
|
||||
msgid "unavailable"
|
||||
msgstr "nedostupné"
|
||||
|
||||
#: ../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"
|
||||
msgstr "připojení selhalo"
|
||||
|
||||
#: ../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..."
|
||||
msgstr "Více…"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1459
|
||||
#: ../js/ui/status/network.js:596 ../js/ui/status/network.js:1376
|
||||
msgid "Connected (private)"
|
||||
msgstr "Připojení (soukromé)"
|
||||
|
||||
#: ../js/ui/status/network.js:663
|
||||
#: ../js/ui/status/network.js:669
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatické Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:721
|
||||
#: ../js/ui/status/network.js:727
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatické širokopásmové"
|
||||
|
||||
#: ../js/ui/status/network.js:724
|
||||
#: ../js/ui/status/network.js:730
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatické vytáčené"
|
||||
|
||||
#. 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
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatické %s"
|
||||
|
||||
#: ../js/ui/status/network.js:855
|
||||
#: ../js/ui/status/network.js:861
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatické Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1478
|
||||
#: ../js/ui/status/network.js:1395
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatické bezdrátové"
|
||||
|
||||
#: ../js/ui/status/network.js:1575
|
||||
#: ../js/ui/status/network.js:1637
|
||||
msgid "Enable networking"
|
||||
msgstr "Povolit síť"
|
||||
|
||||
#: ../js/ui/status/network.js:1597
|
||||
#: ../js/ui/status/network.js:1659
|
||||
msgid "Wired"
|
||||
msgstr "Drátová"
|
||||
|
||||
#: ../js/ui/status/network.js:1608
|
||||
#: ../js/ui/status/network.js:1670
|
||||
msgid "Wireless"
|
||||
msgstr "Bezdrátová"
|
||||
|
||||
#: ../js/ui/status/network.js:1618
|
||||
#: ../js/ui/status/network.js:1680
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilní širokopásmová"
|
||||
|
||||
#: ../js/ui/status/network.js:1628
|
||||
msgid "VPN Connections"
|
||||
msgstr "Připojení k VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1635
|
||||
#: ../js/ui/status/network.js:1691
|
||||
msgid "Network Settings"
|
||||
msgstr "Nastavení sítě"
|
||||
|
||||
#: ../js/ui/status/network.js:1679
|
||||
#: ../js/ui/status/network.js:1735
|
||||
msgid "Network Manager"
|
||||
msgstr "Network Manager"
|
||||
|
||||
#: ../js/ui/status/network.js:1769
|
||||
#: ../js/ui/status/network.js:1809
|
||||
msgid "Connection failed"
|
||||
msgstr "Připojení selhalo"
|
||||
|
||||
#: ../js/ui/status/network.js:1770
|
||||
#: ../js/ui/status/network.js:1810
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivace síťového připojení selhala"
|
||||
|
||||
#: ../js/ui/status/network.js:2065
|
||||
#: ../js/ui/status/network.js:2108
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Síť je zakázána"
|
||||
|
||||
@@ -1621,63 +1680,63 @@ msgstr "Hlasitost"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:177
|
||||
#: ../js/ui/unlockDialog.js:178
|
||||
msgid "Log in as another user"
|
||||
msgstr "Přihlásit se jako jiný uživatel"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:176
|
||||
msgid "Available"
|
||||
msgstr "Přítomen"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:179
|
||||
msgid "Busy"
|
||||
msgstr "Zaneprázdněn"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:182
|
||||
msgid "Invisible"
|
||||
msgstr "Neviditelný"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:185
|
||||
msgid "Away"
|
||||
msgstr "Nepřítomen"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:188
|
||||
msgid "Idle"
|
||||
msgstr "Nečinný"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
msgid "Unavailable"
|
||||
msgstr "Nedostupný"
|
||||
#: ../js/ui/userMenu.js:191
|
||||
msgid "Offline"
|
||||
msgstr "Odpojen"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
#: ../js/ui/userMenu.js:747
|
||||
msgid "Notifications"
|
||||
msgstr "Upozornění"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
#: ../js/ui/userMenu.js:755
|
||||
msgid "System Settings"
|
||||
msgstr "Nastavení systému"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:763
|
||||
msgid "Switch User"
|
||||
msgstr "Přepnout uživatele"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:768
|
||||
msgid "Log Out"
|
||||
msgstr "Odhlásit se"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:773
|
||||
msgid "Lock"
|
||||
msgstr "Uzamknout"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:788
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Nainstalovat aktualizace a restartovat"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:806
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Váš stav v konverzacích byl nastaven na „Zaneprázdněn“"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../js/ui/userMenu.js:807
|
||||
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."
|
||||
@@ -1685,15 +1744,15 @@ msgstr ""
|
||||
"Upozornění jsou nyní vypnuta, včetně zpráv v konverzacích. Váš stav on-line "
|
||||
"byl změněn tak, aby ostatní věděli, že si jejich zprávy nemusíte přečíst."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
#: ../js/ui/viewSelector.js:87
|
||||
msgid "Windows"
|
||||
msgstr "Okna"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Aplikace"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
|
||||
257
po/es.po
257
po/es.po
@@ -10,15 +10,15 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-11-06 19:11+0000\n"
|
||||
"PO-Revision-Date: 2012-11-08 12:31+0100\n"
|
||||
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 11:06+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"X-Generator: Gtranslator 2.91.5\n"
|
||||
|
||||
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
|
||||
@@ -37,6 +37,16 @@ msgstr "Sistema"
|
||||
msgid "Show the message tray"
|
||||
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
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
@@ -139,34 +149,34 @@ msgstr ""
|
||||
"del usuario. El valor aquí es de la GsmPresenceStatus."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||
msgstr ""
|
||||
"Mostrar siempre el elemento de menú «Cerrar sesión» en el menú del usuario."
|
||||
|
||||
#: ../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 ""
|
||||
"Esta clave omite la ocultación automática del elemento de menú «Cerrar "
|
||||
"sesión» en situación de un único usuario o una única sesión."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostrar la fecha de la semana en el calendario"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Si es cierta, muestra la fecha de semana ISO en el calendario."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Asociación de teclas para abrir el menú de la aplicación"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Asociación de teclas para abrir el menú de la aplicación."
|
||||
|
||||
#: ../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"
|
||||
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes"
|
||||
@@ -222,17 +232,16 @@ msgid ""
|
||||
"used as a placeholder for a guess at the optimal thread count on the system."
|
||||
msgstr ""
|
||||
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
|
||||
"(«sink») desconectado donde grabar el vídeo que se está grabando. "
|
||||
"Generalmente tendrá un punto de origen desconectado; la salida de ese punto "
|
||||
"se escribirá en el archivo de salida. Sin embargo, la tubería también puede "
|
||||
"tomar parte en su propia salida; esto se puede usar para enviar la salida a "
|
||||
"un servidor «icecast» a través de shout2send o similar. Cuando no está "
|
||||
"establecido o lo está a un valor vacío, se usará la tubería predeterminada. "
|
||||
"Actualmente es «'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 "
|
||||
"deadline=1000000 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."
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
|
||||
"desconectado donde grabar el vídeo que se está grabando. Generalmente tendrá "
|
||||
"un punto de origen desconectado; la salida de ese punto se escribirá en el "
|
||||
"archivo de salida. Sin embargo, la tubería también puede tomar parte en su "
|
||||
"propia salida; esto se puede usar para enviar la salida a un servidor "
|
||||
"«icecast» a través de shout2send o similar. Cuando no está establecido o lo "
|
||||
"está a un valor vacío, se usará la tubería predeterminada. Actualmente es "
|
||||
"«'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 "
|
||||
"threads=%T ! queue ! webmmux» y graba en WEBM usando el códec VP8. Se usa %T "
|
||||
"como marcador de posición para el número de hilos óptimos en el sistema."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
msgid "File extension used for storing the screencast"
|
||||
@@ -299,8 +308,8 @@ msgstr "Ventana de inicio de sesión"
|
||||
msgid "Power"
|
||||
msgstr "Energía"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:775
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
@@ -308,8 +317,8 @@ msgstr "Suspender"
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:774
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
@@ -590,8 +599,8 @@ msgstr "La red inalámbrica requiere autenticación"
|
||||
#: ../js/ui/components/networkAgent.js:310
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
"'%s'."
|
||||
"Passwords or encryption keys are required to access the wireless network '%"
|
||||
"s'."
|
||||
msgstr ""
|
||||
"Se necesitan contraseñas o claves de cifrado para acceder a la red "
|
||||
"inalámbrica «%s»."
|
||||
@@ -690,35 +699,35 @@ msgstr "Silenciar"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:952
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Enviado el <b>%A</b> a las <b>%H:%M</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:958
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:963
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b> de %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:992
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "Ahora %s se llama %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1092
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Invitación a %s"
|
||||
@@ -726,42 +735,42 @@ msgstr "Invitación a %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s le está invitando a unirse a %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1102
|
||||
#: ../js/ui/components/telepathyClient.js:1181
|
||||
#: ../js/ui/components/telepathyClient.js:1244
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1103
|
||||
#: ../js/ui/components/telepathyClient.js:1182
|
||||
#: ../js/ui/components/telepathyClient.js:1245
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1133
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videollamada de %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1136
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Llamada de %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1143
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "Responder"
|
||||
|
||||
@@ -770,112 +779,112 @@ msgstr "Responder"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1175
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s le está enviando %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1210
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s solicita permiso para ver cuándo está en línea"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "Error de la red"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "Falló la autenticación"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "Error de cifrado"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Certificado no proporcionado"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "No se confía en el certificado"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "Certificado caducado"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Certificado no activado"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "El nombre del servidor dle certificado no coincide"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "La huella del certificado no coincide"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Certificado autofirmado"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "El estado está establecido a «desconectado»"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "El cifrado no está disponible"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "El certificado no es válido"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Se ha rechazado la conexión"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "No se puede establecer la conexión"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Se ha perdido la conexión"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Esta cuenta ya está conectada al servidor"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "La cuenta ya existe en el servidor"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr ""
|
||||
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Se ha revocado el certificado"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
|
||||
"débil"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -884,30 +893,30 @@ msgstr ""
|
||||
"certificado del servidor exceden los límites impuestos por la biblioteca de "
|
||||
"criptografía"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1348
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "Error interno"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1358
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Falló la conexión a %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1367
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "Reconectar"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1368
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "Editar cuenta"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1413
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "Razón desconocida"
|
||||
|
||||
#: ../js/ui/dash.js:254 ../js/ui/dash.js:292
|
||||
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||
msgid "Show Applications"
|
||||
msgstr "Mostrar aplicaciones"
|
||||
|
||||
@@ -1083,23 +1092,23 @@ msgstr "Ver fuente"
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1081
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:1540
|
||||
msgid "Message Tray"
|
||||
msgstr "Bandeja de mensajes"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2547
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Desconocido"
|
||||
@@ -1155,18 +1164,18 @@ msgstr "Introduzca un comando:"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:79
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d de %B"
|
||||
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
msgstr[0] "%d mensaje nuevo"
|
||||
msgstr[1] "%d mensajes nuevos"
|
||||
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
@@ -1358,8 +1367,7 @@ msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
|
||||
#: ../js/ui/status/bluetooth.js:379
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
|
||||
msgstr ""
|
||||
"Confirme que el PIN mostrado en «%06d» coincide con el del dispositivo."
|
||||
msgstr "Confirme que el PIN mostrado en «%06d» coincide con el del dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
msgid "Matches"
|
||||
@@ -1621,59 +1629,59 @@ msgstr "Micrófono"
|
||||
msgid "Log in as another user"
|
||||
msgstr "Iniciar sesión como otro usuario"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Available"
|
||||
msgstr "Disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Invisible"
|
||||
msgstr "Invisible"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Away"
|
||||
msgstr "Ausente"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:192
|
||||
msgid "Idle"
|
||||
msgstr "Inactivo"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:195
|
||||
msgid "Unavailable"
|
||||
msgstr "No disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
#: ../js/ui/userMenu.js:740
|
||||
msgid "Notifications"
|
||||
msgstr "Notificaciones"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
#: ../js/ui/userMenu.js:748
|
||||
msgid "System Settings"
|
||||
msgstr "Configuración del sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:756
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:761
|
||||
msgid "Log Out"
|
||||
msgstr "Cerrar la sesión"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:766
|
||||
msgid "Lock"
|
||||
msgstr "Bloquear"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:781
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Instalar actualizaciones y reiniciar"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:799
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Su estado del chat se establecerá a «ocupado»"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../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."
|
||||
@@ -1682,15 +1690,15 @@ msgstr ""
|
||||
"chat. Su estado en línea se ha ajustado para que otros sepan que puede no "
|
||||
"leer sus mensajes."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
#: ../js/ui/viewSelector.js:87
|
||||
msgid "Windows"
|
||||
msgstr "Ventanas"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Aplicaciones"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@@ -1761,7 +1769,7 @@ msgstr ""
|
||||
msgid "List possible modes"
|
||||
msgstr "Listar los modos posibles"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Falló al lanzar «%s»"
|
||||
@@ -2161,8 +2169,8 @@ msgstr "El usuario rechazó el diálogo de autenticación"
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr ""
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
|
||||
#~ "segundos en la hora."
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
|
||||
#~ "en la hora."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the format used by the panel clock when the format key "
|
||||
@@ -2179,19 +2187,18 @@ msgstr "El usuario rechazó el diálogo de autenticación"
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
||||
#~ "ignored."
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||
#~ "format specified in the custom_format key. Note that if set to either "
|
||||
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||
#~ msgstr ""
|
||||
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
|
||||
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
|
||||
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
|
||||
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
|
||||
#~ "especificado en la clave «custom_format». Note que si se establece a "
|
||||
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
|
||||
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
|
||||
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
|
||||
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
|
||||
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
|
||||
#~ "ignoran las claves «show_date» y «show_seconds»."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Formato del reloj"
|
||||
|
||||
182
po/et.po
182
po/et.po
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell MASTER\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-10-17 17:06+0000\n"
|
||||
"PO-Revision-Date: 2012-10-18 00:49+0300\n"
|
||||
"POT-Creation-Date: 2012-11-16 18:27+0000\n"
|
||||
"PO-Revision-Date: 2012-11-16 20:40+0300\n"
|
||||
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
|
||||
"Language-Team: Estonian <>\n"
|
||||
"Language: et\n"
|
||||
@@ -37,6 +37,15 @@ msgstr "Arvuti"
|
||||
msgid "Show the message tray"
|
||||
msgstr "Teateala näitamine"
|
||||
|
||||
msgid "Focus the active notification"
|
||||
msgstr "Aktiivse märguande fokuseerimine"
|
||||
|
||||
msgid "Show all applications"
|
||||
msgstr "Kõigi rakenduste kuvamine"
|
||||
|
||||
msgid "Open the application menu"
|
||||
msgstr "Rakenduste menüü avamine"
|
||||
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
|
||||
@@ -116,6 +125,16 @@ msgstr ""
|
||||
"Kasutatakse kasutaja poolt viimati vahetult määratud kiirsuhtluse oleku "
|
||||
"salvestamiseks. See väärtus pärineb GsmPresenceStatus nummerdusest."
|
||||
|
||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||
msgstr "Kasutajamenüüs näidatakse alati 'Logi välja' menüükirjet."
|
||||
|
||||
msgid ""
|
||||
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||
"user, single-session situations."
|
||||
msgstr ""
|
||||
"See võti keelab automaatse 'Logi välja' menüükirje peitmise, kui arvutis on "
|
||||
"üks kasutaja ning avatud üks seanss."
|
||||
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Kalendris näidatakse kuupäeva nädalavormingus"
|
||||
|
||||
@@ -128,12 +147,25 @@ msgstr "Rakenduste menüü avamise kiirklahv"
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Kiirklahv rakenduste menüü avamiseks."
|
||||
|
||||
msgid "Keybinding to open the \"Show Applications\" view"
|
||||
msgstr "\"Rakenduste vaate\" avamise kiirklahv"
|
||||
|
||||
msgid ""
|
||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||
msgstr "\"Rakenduste vaate\" avamise kiirklahv tegevuste ülevaates."
|
||||
|
||||
msgid "Keybinding to toggle the visibility of the message tray"
|
||||
msgstr "Teateala nähtavuse muutmise kiirklahv"
|
||||
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr "Kiirklahv teateala nähtavuse muutmiseks."
|
||||
|
||||
msgid "Keybinding to focus the active notification"
|
||||
msgstr "Aktiivse teate fokuseerimise kiirklahv"
|
||||
|
||||
msgid "Keybinding to focus the active notification."
|
||||
msgstr "Aktiivse teate fokuseerimise kiirklahv."
|
||||
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "Erkaanilindistaja lülitamise kiirklahv"
|
||||
|
||||
@@ -195,6 +227,34 @@ msgstr ""
|
||||
"konteinervormingusse salvestades tuleks ka sellele vormingule vastav laiend "
|
||||
"määrata."
|
||||
|
||||
msgid "Attach modal dialog to the parent window"
|
||||
msgstr "Modaaldialoog kuulub vanemakna juurde"
|
||||
|
||||
msgid ""
|
||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||
msgstr ""
|
||||
"See võti on ülimuslik võtme org.gnome.mutter suhtes, kui kasutatakse GNOME "
|
||||
"Shelli."
|
||||
|
||||
msgid "Arrangement of buttons on the titlebar"
|
||||
msgstr "Nuppude järjekord tiitliribal"
|
||||
|
||||
msgid ""
|
||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
||||
"GNOME Shell."
|
||||
msgstr ""
|
||||
"See võti on ülimuslik võtme org.gnome.desktop.wm.preferences suhtes, kui "
|
||||
"kasutatakse GNOME Shelli."
|
||||
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr "Akende lohistamisel ekraani serva lubatakse serva paigutamine"
|
||||
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Tööalasid hallatakse dünaamiliselt"
|
||||
|
||||
msgid "Workspaces only on primary monitor"
|
||||
msgstr "Tööalad peamisel monitoril"
|
||||
|
||||
#, c-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
msgstr "%s jaoks eelistuste dialoogi laadimisel esines viga:"
|
||||
@@ -223,7 +283,16 @@ msgstr "Katkesta"
|
||||
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Sisselogimine"
|
||||
msgstr "Logi sisse"
|
||||
|
||||
msgid "Next"
|
||||
msgstr "Järgmine"
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
msgid "Username: "
|
||||
msgstr "Kasutajanimi: "
|
||||
|
||||
msgid "Login Window"
|
||||
msgstr "Sisselogimisaken"
|
||||
@@ -336,7 +405,7 @@ msgstr "K"
|
||||
#. Translators: Calendar grid abbreviation for Thursday
|
||||
msgctxt "grid thursday"
|
||||
msgid "T"
|
||||
msgstr "T"
|
||||
msgstr "N"
|
||||
|
||||
#. Translators: Calendar grid abbreviation for Friday
|
||||
msgctxt "grid friday"
|
||||
@@ -346,7 +415,7 @@ msgstr "R"
|
||||
#. Translators: Calendar grid abbreviation for Saturday
|
||||
msgctxt "grid saturday"
|
||||
msgid "S"
|
||||
msgstr "P"
|
||||
msgstr "L"
|
||||
|
||||
#. Translators: Event list abbreviation for Sunday.
|
||||
#. *
|
||||
@@ -386,7 +455,7 @@ msgstr "R"
|
||||
#. Translators: Event list abbreviation for Saturday
|
||||
msgctxt "list saturday"
|
||||
msgid "S"
|
||||
msgstr "P"
|
||||
msgstr "L"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
msgid "Nothing Scheduled"
|
||||
@@ -441,12 +510,6 @@ msgstr "Parool: "
|
||||
msgid "Key: "
|
||||
msgstr "Võti: "
|
||||
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
msgid "Username: "
|
||||
msgstr "Kasutajanimi: "
|
||||
|
||||
msgid "Identity: "
|
||||
msgstr "Identiteet: "
|
||||
|
||||
@@ -537,24 +600,27 @@ msgstr "Heli peale"
|
||||
msgid "Mute"
|
||||
msgstr "Heli maha"
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#. Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Saadeti: <b>%a</b>, <b>%X</b>"
|
||||
msgid "<b>%H:%M</b> on Yesterday"
|
||||
msgstr "Eile <b>%H:%M</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#. Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Saadeti: <b>%a</b>, <b>d. %B</b>"
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>"
|
||||
msgstr "<b>%H:%M</b>, <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#. 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
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Saadeti: <b>%a</b>, <b>d. %B</b>, %Y"
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>"
|
||||
msgstr "<b>%H:%M</b>, <b>%A</b>, <b>%d. %B</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
|
||||
#, 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>%d. %B</b> %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
@@ -591,9 +657,6 @@ msgstr "%s tahab alustada videokõnet"
|
||||
msgid "Call from %s"
|
||||
msgstr "%s helistab"
|
||||
|
||||
msgid "Reject"
|
||||
msgstr "Lükka tagasi"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
msgid "Answer"
|
||||
msgstr "Vasta"
|
||||
@@ -752,11 +815,11 @@ msgstr "Süsteemist väljalogimine"
|
||||
|
||||
msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Väljalogimine"
|
||||
msgstr "Logi välja"
|
||||
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Lülita välja"
|
||||
msgstr "Väljalülitamine"
|
||||
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
@@ -782,7 +845,7 @@ msgstr "Lülita välja"
|
||||
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Taaskäivita"
|
||||
msgstr "Taaskäivitamine"
|
||||
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
@@ -901,8 +964,11 @@ msgstr "Ülemine riba"
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Palun sisesta käsk:"
|
||||
msgid "Enter a Command"
|
||||
msgstr "Palun sisesta käsk"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Sulge"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
@@ -1015,16 +1081,6 @@ msgstr "ühendumine..."
|
||||
msgid "Send Files..."
|
||||
msgstr "Failide saatmine..."
|
||||
|
||||
msgid "Browse Files..."
|
||||
msgstr "Failide sirvimine..."
|
||||
|
||||
msgid "Error browsing device"
|
||||
msgstr "Viga seadme sirvimisel"
|
||||
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Küsitud seadet pole võimalik sirvida, viga on '%s'"
|
||||
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Klaviatuurisätted"
|
||||
|
||||
@@ -1048,6 +1104,9 @@ msgstr "Luba alati"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Luba ainult seekord"
|
||||
|
||||
msgid "Reject"
|
||||
msgstr "Lükka tagasi"
|
||||
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Paardumise kinnitus seadmele %s"
|
||||
@@ -1158,9 +1217,6 @@ msgstr "Juhtmeta"
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobiiliühendus"
|
||||
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-ühendused"
|
||||
|
||||
msgid "Network Settings"
|
||||
msgstr "Võrgusätted"
|
||||
|
||||
@@ -1278,20 +1334,20 @@ msgstr "Eemal"
|
||||
msgid "Idle"
|
||||
msgstr "Jõude"
|
||||
|
||||
msgid "Unavailable"
|
||||
msgstr "Pole saadaval"
|
||||
msgid "Offline"
|
||||
msgstr "Ühendamata"
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr "Märguanded"
|
||||
|
||||
msgid "System Settings"
|
||||
msgstr "Süsteemi sätted"
|
||||
msgid "Settings"
|
||||
msgstr "Sätted"
|
||||
|
||||
msgid "Switch User"
|
||||
msgstr "Vaheta kasutajat"
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "Väljalogimine"
|
||||
msgstr "Logi välja"
|
||||
|
||||
msgid "Lock"
|
||||
msgstr "Lukusta"
|
||||
@@ -1390,27 +1446,6 @@ msgstr "Vaikimisi"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Kasutaja katkestas autentimisdialoogi"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Show all applications"
|
||||
#~ msgstr "Rakenduste kuvamine"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Open the application menu"
|
||||
#~ msgstr "Rakenduste menüü avamise kiirklahv"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Keybinding to open the \"Show Applications\" view"
|
||||
#~ msgstr "Rakenduste menüü avamise kiirklahv"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid ""
|
||||
#~ "Keybinding to open the \"Show Applications\" view of the Activities "
|
||||
#~ "Overview."
|
||||
#~ msgstr "Kiirklahv rakenduste menüü avamiseks."
|
||||
|
||||
#~ msgid "Switch Session"
|
||||
#~ msgstr "Vaheta seanssi"
|
||||
|
||||
#~ msgid "disabled OpenSearch providers"
|
||||
#~ msgstr "keelatud OpenSearch pakkujad"
|
||||
|
||||
@@ -1426,9 +1461,6 @@ msgstr "Kasutaja katkestas autentimisdialoogi"
|
||||
#~ msgid "If true, display date in the clock, in addition to time."
|
||||
#~ msgstr "Kui määratud, siis kuvatakse kellaaja kõrval ka kuupäeva."
|
||||
|
||||
#~ msgid "Offline"
|
||||
#~ msgstr "Ühendamata"
|
||||
|
||||
#~ msgid "CONTACTS"
|
||||
#~ msgstr "KONTAKTID"
|
||||
|
||||
|
||||
383
po/gu.po
383
po/gu.po
@@ -9,8 +9,8 @@ msgstr ""
|
||||
"Project-Id-Version: gu\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-11-04 19:00+0000\n"
|
||||
"PO-Revision-Date: 2012-11-05 12:23+0530\n"
|
||||
"POT-Creation-Date: 2012-09-18 04:20+0000\n"
|
||||
"PO-Revision-Date: 2012-09-18 16:59+0530\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: gu_IN <kde-i18n-doc@kde.org>\n"
|
||||
"Language: \n"
|
||||
@@ -20,22 +20,6 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"X-Generator: Lokalize 1.0\n"
|
||||
|
||||
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
|
||||
msgid "Screenshots"
|
||||
msgstr "સ્ક્રીનશોટ"
|
||||
|
||||
#: ../data/50-gnome-shell-screenshot.xml.in.h:2
|
||||
msgid "Record a screencast"
|
||||
msgstr "સ્ક્રીનકાસ્ટ રેકોર્ડ કરો"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "સિસ્ટમ"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:2
|
||||
msgid "Show the message tray"
|
||||
msgstr "સંદેશો ટ્રેને બતાવો"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME શેલ"
|
||||
@@ -61,7 +45,7 @@ msgstr "Alt-F2 માંથી ડેવલપર અને ટેસ્ટર
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr "Alt-F2 સંવાદની મદદથી આંતરિક ડિબગીંગ અને મોનિટરીંગ સાધનોને વાપરવા પરવાનગી આપે છે."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
|
||||
msgid "Uuids of extensions to enable"
|
||||
@@ -74,13 +58,10 @@ msgid ""
|
||||
"list. You can also manipulate this list with the EnableExtension and "
|
||||
"DisableExtension DBus methods on org.gnome.Shell."
|
||||
msgstr ""
|
||||
"GNOME Shell ઍક્સટેન્શન પાસે uuid ગુણધર્મ છે; આ કી ઍક્સટેન્શનની યાદી કરે છે કે જેને લાવેલ "
|
||||
"હોવુ જોઇએ. કોઇપણ ઍક્સટેન્શન કે જેને આ યાદીમાં લાવવાની જરૂર છે. તમે પણ org.gnome.Shell પર "
|
||||
"EnableExtension અને DisableExtension DBus પદ્દતિઓ સાથે આ યાદીને કુશળતાપૂર્વક વાપરી શકો છો."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "શું કાર્યક્રમ વપરાશ વિશે આંકડા એકત્ર કરવા જોઇએ"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
|
||||
msgid ""
|
||||
@@ -89,10 +70,6 @@ msgid ""
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"શેલ સામાન્ય રીતે મોટાભાગનાં એકને હાજર રાખવા માટે ક્રમમાં સક્રિય કાર્યક્રમોને મોનિટર કરવામાં "
|
||||
"આવે છે (દા.ત. લૉન્ચર). જ્યારે આ માહિતીને ખાનગી રાખવામાં આવશે, તમે ખાનગી કારણો માટે આને "
|
||||
"નિષ્ક્રિય કરવા માંગી શકો છો. મહેરબાની કરીને આવુ કરવાનું નોંધો તેથી પહેલેથી સંગ્રહેલ "
|
||||
"માહિતીને દૂર કરાતુ નથી."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
@@ -102,7 +79,7 @@ msgstr "પસંદીદા કાર્યક્રમો માટે ડે
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "કાર્યક્રમો આ ઓળખકર્તાઓ સાથે સંકળાયેલ છે તે પસંદીદા વિસ્તારમાં દેખાશે."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
@@ -117,87 +94,75 @@ msgid ""
|
||||
"Internally used to store the last IM presence explicitly set by the user. "
|
||||
"The value here is from the TpConnectionPresenceType enumeration."
|
||||
msgstr ""
|
||||
"વપરાશકર્તા દ્દારા છેલ્લુ IM સુયોજનને સંગ્રહવા આંતરિક રીતે વાપરેલ છે. અહિંયા કિંમત "
|
||||
"TpConnectionPresenceType ઍન્યુમરેશનમાંથી છે."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
||||
msgid ""
|
||||
"Internally used to store the last session presence status for the user. The "
|
||||
"value here is from the GsmPresenceStatus enumeration."
|
||||
msgstr ""
|
||||
"વપરાશકર્તા માટે છેલ્લી સત્રની હાજર પરિસ્થિતિને સંગ્રહવા આંતરિક રીતે વાપરેલ છે. કિંમત અહિંયા "
|
||||
"GsmPresenceStatus ઍન્યુમરેશનમાંથી છે."
|
||||
|
||||
#: ../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"
|
||||
msgstr "કૅલેન્ડરમાં અઠવાડિયા તારીખને બતાવો"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "જો true હોય તો, કૅલેન્ડરમાં ISO અઠવાડિયાની તારીખને દર્શાવો."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Keybinding to toggle the visibility of the message tray"
|
||||
msgstr "સંદેશા ટ્રેની દૃશ્યતાને ટૉગલ કરવા માટે કીબાઇન્ડીંગ"
|
||||
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr "સંદેશા ટ્રેની દૃશ્યતાને ટૉગલ કરવા માટે કીબાઇન્ડીંગ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "સ્ક્રીન રેકોર્ડરને ટૉગલ કરવા માટે કીબાઇન્ડીંગ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
#| msgid "Keybinding to open the application menu."
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "બિલ્ટઇન સ્ક્રીન રેકોર્ડરને શરૂ/બંધ કરવા માટે કfબાઇન્ડીંગ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "ક્યુ કિબોર્ડ વાપરવુ છે"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "વાપરવા માટે કિબોર્ડનો પ્રકાર."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "રેકોર્ડીંગ સ્ક્રીનકાસ્ટ માટે વાપરેલ ફ્રેમરેટ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"પરિણામી સ્ક્રીનકાસ્ટની framerate એ દરેક સેકંડે ફ્રેમમાં GNOME Shell નાં સ્ક્રીનકાસ્ટ "
|
||||
"રેકોર્ડર દ્દારા અહેવાલ થયેલ છે."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "સ્ક્રીનકાસ્ટને એનકોડ કરવા માટે વાપરેલ gstreamer પાઇપલાઇન"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@@ -211,28 +176,17 @@ msgid ""
|
||||
"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 "
|
||||
"માટે વાપરેલ બંધારણને અનુસરે છે. પાઇપલાઇન પાસે બિનજોડાયેલ સીંક પેડ હોય છે જ્યાં રેકોર્ડ થયેલ "
|
||||
"વિડિયો રેકોર્ડ થયેલ છે. સામાન્ય રીતે તેમની પાસે બિનજોડાયેલ સ્ત્રોત પેડ હશે; તે પેડમાંથી "
|
||||
"આઉટપુટ એ આઉટપુટ ફાઇલમાં લખાયેલ હશે. છતાંપણ પાઇપલાઇન પણ તેનાં પોતાના આઉટપુટની સંભાળ લઇ શકે "
|
||||
"છે - આ 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:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "સ્ક્રીનકાસ્ટને સંગ્રહ કરવા માટે વાપરેલ ફાઇલ ઍક્સટેન્શન"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
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 ""
|
||||
"રેકોર્ડ થયેલ સ્ક્રીનકાસ્ટ માટે ફાઇલનામ વર્તમાન તારીખ પર આધારિત અનન્ય ફાઇલનામ હશે, અને આ "
|
||||
"ઍક્સટેન્શનને વાપરો. તેને બદલેલ હોવુ જોઇએ જ્યારે વિવિધ પાત્ર બંધારણમાં રેકોર્ડ કરી રહ્યા છે."
|
||||
|
||||
#: ../js/extensionPrefs/main.js:124
|
||||
#, c-format
|
||||
@@ -247,11 +201,11 @@ msgstr "ઍક્સટેન્શન"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "ઉપર કોમ્બોબોક્સની મદદથી રૂપરેખાંકિત કરવા માટે ઍક્સટેન્શનને પસંદ કરો."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:529
|
||||
#: ../js/gdm/loginDialog.js:526
|
||||
msgid "Session..."
|
||||
msgstr "સત્ર..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:677
|
||||
#: ../js/gdm/loginDialog.js:675
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "પ્રવેશો"
|
||||
@@ -259,56 +213,47 @@ msgstr "પ્રવેશો"
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:736
|
||||
#: ../js/gdm/loginDialog.js:742
|
||||
msgid "Not listed?"
|
||||
msgstr "શું યાદી થયેલ નથી?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:137
|
||||
msgid "Cancel"
|
||||
msgstr "રદ કરો"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:900
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "પ્રવેશો"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1215
|
||||
#: ../js/gdm/loginDialog.js:1239
|
||||
msgid "Login Window"
|
||||
msgstr "પ્રવેશ વિન્ડો"
|
||||
|
||||
#. Translators: accessible name of the power menu in the login screen
|
||||
#: ../js/gdm/powerMenu.js:35
|
||||
msgid "Power"
|
||||
msgstr "પાવર"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:88 ../js/ui/userMenu.js:657 ../js/ui/userMenu.js:661
|
||||
#: ../js/ui/userMenu.js:772
|
||||
msgid "Suspend"
|
||||
msgstr "અટકાવો"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:94
|
||||
#: ../js/gdm/powerMenu.js:93
|
||||
msgid "Restart"
|
||||
msgstr "પુન:શરૂ કરો"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:98 ../js/ui/userMenu.js:659 ../js/ui/userMenu.js:661
|
||||
#: ../js/ui/userMenu.js:771
|
||||
msgid "Power Off"
|
||||
msgstr "પાવર બંધ"
|
||||
|
||||
#: ../js/gdm/util.js:148
|
||||
msgid "Authentication error"
|
||||
msgstr "સત્તાધિકરણ ભૂલ"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/util.js:265
|
||||
#: ../js/gdm/util.js:247
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(અથવા સ્વાઇપ આંગળી)"
|
||||
|
||||
#: ../js/gdm/util.js:290
|
||||
#: ../js/gdm/util.js:272
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(દા.ત., વપરાશકર્તા અથવા %s)"
|
||||
@@ -345,7 +290,7 @@ msgstr "SETTINGS"
|
||||
msgid "New Window"
|
||||
msgstr "નવી વિન્ડો"
|
||||
|
||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "પસંદીદાઓ માંથી દૂર કરો"
|
||||
|
||||
@@ -509,16 +454,16 @@ msgstr "આ અઠવાડિયે"
|
||||
msgid "Next week"
|
||||
msgstr "આગળનું અઠવાડિયું"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:297
|
||||
#: ../js/ui/components/autorunManager.js:278
|
||||
msgid "Removable Devices"
|
||||
msgstr "દૂર કરી શકાય તેવા ઉપકરણો"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:594
|
||||
#: ../js/ui/components/autorunManager.js:575
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "%s સાથે ખોલો"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:620
|
||||
#: ../js/ui/components/autorunManager.js:601
|
||||
msgid "Eject"
|
||||
msgstr "રદ કરો"
|
||||
|
||||
@@ -673,35 +618,35 @@ msgstr "મૂંગુ"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:952
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "<b>%A</b> પર <b>%X</b> અહિંયા મોકલેલ છે"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:958
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <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",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:963
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <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
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:992
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s એ હવે %s તરીકે જાણીતુ છે"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1092
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "%s માં આમંત્રણ"
|
||||
@@ -709,42 +654,42 @@ msgstr "%s માં આમંત્રણ"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s એ તમને %s માં જોડાવા માટે આમંત્રણ આપી રહ્યા છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1102
|
||||
#: ../js/ui/components/telepathyClient.js:1181
|
||||
#: ../js/ui/components/telepathyClient.js:1244
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "ના પાડવી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1103
|
||||
#: ../js/ui/components/telepathyClient.js:1182
|
||||
#: ../js/ui/components/telepathyClient.js:1245
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "સ્વીકારો"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1133
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s માંથી વિડીયો કોલ"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1136
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s માંથી કોલ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "રદ કરો"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1143
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "જવાબ"
|
||||
|
||||
@@ -753,137 +698,136 @@ msgstr "જવાબ"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1175
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s એ %s માં મોકલી રહ્યા છે"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1210
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s ને જોવા માટે પરવાનગી આપવાનું ગમે થે જ્યારે તમે ઓનલાઇન હોય"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "નેટવર્ક ભૂલ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "સત્તાધિકરણ નિષ્ક્રિય"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "એનક્રિપ્શન ભૂલ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "પ્રમાણપત્ર પૂરુ પાડેલ નથી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "પ્રમાણપત્ર વિશ્ર્વાસપાત્ર નથી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "પ્રમાણપત્ર નિવૃત્ત થયેલ છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "પ્રમાણપત્ર સક્રિય થયેલ નથી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "પ્રમાણપત્ર યજમાનનામ બંધબેસતુ નથી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "પ્રમાણપજ્ઞ ફિંગરપ્રિન્ટ બંધબેસતુ નથી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "જાતે હસ્તાક્ષર થયેલ પ્રમાણપત્ર"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "સ્થિતિ ઓફલાઇન તરીકે સુયોજિત છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "એનક્રિપ્શન ઉપલબ્ધ નથી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "પ્રમાણપત્ર અમાન્ય છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "જોડાણને નામંજૂર કરી દેવામાં આવ્યુ છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "જોડાણ સ્થાપિત કરી શકાતુ નથી"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "જોડાણ ખોવાઈ ગયેલ છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "આ ખાતુ પહેલેથી જ સર્વર સાથે જોડાયેલ છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "સરખા સ્ત્રોતની મદદથી જોડાણને નવાં જોડાણ દ્દારા બદલી દેવામાં આવ્યુ છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "ખાતુ પહેલેથી સર્વર પર અસ્તિત્વ ધરાવે છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "સર્વર એ જોડાણને સંચાલિત કરવા માટે હાલમાં વ્યસ્ત છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "પ્રમાણપત્રને રદ કરી દેવામાં આવ્યુ છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "પ્રમાણપત્ર અસુરક્ષિત સાઇફર અલ્ગોરિધમને વાપરે છે અથવા ક્રિપ્ટોગ્રાફિકલી નબળુ છે"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
msgstr ""
|
||||
"સર્વર પ્રમાણપત્રની લંબાઇ, સર્વર પ્રમાણપત્ર કતારની ઊંચાઇ, ક્રિપ્ટોગ્રાફી લાઇબ્રેરી દ્દારા "
|
||||
"બનાવેલ મર્યાદાને વધારે છે"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1348
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "આંતરિક ભૂલ"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1358
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "%s માટે જોડાણ નિષ્ફળ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1367
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "પુન:જોડાવો"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1368
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "ખાતામાં ફેરફાર કરો"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1413
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "અજ્ઞાત કારણ"
|
||||
|
||||
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
||||
#| msgid "Applications"
|
||||
msgid "Show Applications"
|
||||
msgstr "કાર્યક્રમો બતાવો"
|
||||
|
||||
@@ -891,14 +835,14 @@ msgstr "કાર્યક્રમો બતાવો"
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "તારીખ અને સમય સુયોજનો"
|
||||
|
||||
#: ../js/ui/dateMenu.js:111
|
||||
#: ../js/ui/dateMenu.js:109
|
||||
msgid "Open Calendar"
|
||||
msgstr "કૅલેન્ડરને ખોલો"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:201
|
||||
#: ../js/ui/dateMenu.js:175
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A %B %e, %Y"
|
||||
|
||||
@@ -915,7 +859,8 @@ msgstr "બહાર નીકળો"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:63
|
||||
msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgstr "આ કાર્યક્રમોને બહાર નીકળવા માટે બહાર નીકળો પર ક્લિક કરો અને સિસ્ટમમાંથી બહાર નીકળો."
|
||||
msgstr ""
|
||||
"આ કાર્યક્રમોને બહાર નીકળવા માટે બહાર નીકળો પર ક્લિક કરો અને સિસ્ટમમાંથી બહાર નીકળો."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:65
|
||||
#, c-format
|
||||
@@ -947,7 +892,8 @@ msgstr "પાવર બંધ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr "આ કાર્યક્રમોને બહાર નીકાળવા માટે પાવર બંધ કરો પર ક્લિક કરો અને સિસ્ટમનો પાવર બંધ કરો"
|
||||
msgstr ""
|
||||
"આ કાર્યક્રમોને બહાર નીકાળવા માટે પાવર બંધ કરો પર ક્લિક કરો અને સિસ્ટમનો પાવર બંધ કરો"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84
|
||||
#, c-format
|
||||
@@ -977,7 +923,8 @@ msgstr "પુન:શરૂ કરો"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "આ કાર્યક્રમોમાંથી બહાર નીકળવા માટે પુન:શરૂ કરો પર ક્લિક કરો અને સિસ્ટમને પુન:શરૂ કરો."
|
||||
msgstr ""
|
||||
"આ કાર્યક્રમોમાંથી બહાર નીકળવા માટે પુન:શરૂ કરો પર ક્લિક કરો અને સિસ્ટમને પુન:શરૂ કરો."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:101
|
||||
#, c-format
|
||||
@@ -999,11 +946,11 @@ msgstr "સ્થાપિત કરો"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "extensions.gnome.org માંથી '%s' ને સ્થાપિત અને ડાઉનલોડ કરો?"
|
||||
|
||||
#: ../js/ui/keyboard.js:337
|
||||
#: ../js/ui/keyboard.js:327
|
||||
msgid "tray"
|
||||
msgstr "ટ્રે"
|
||||
|
||||
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:146
|
||||
#: ../js/ui/status/power.js:205
|
||||
msgid "Keyboard"
|
||||
msgstr "કિબોર્ડ"
|
||||
@@ -1056,23 +1003,23 @@ msgstr "સ્ત્રોત દર્શાવો"
|
||||
msgid "Web Page"
|
||||
msgstr "વેબ પાનું"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1080
|
||||
msgid "Open"
|
||||
msgstr "ખોલો"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1087
|
||||
msgid "Remove"
|
||||
msgstr "દૂર કરો"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:2041
|
||||
msgid "Message Tray"
|
||||
msgstr "સંદેશો ટ્રે"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2483
|
||||
msgid "System Information"
|
||||
msgstr "સિસ્ટમ જાણકારી"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "અજ્ઞાત"
|
||||
@@ -1128,19 +1075,22 @@ msgstr "મહેરબાની કરીને આદેશને દાખલ
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:78
|
||||
#| msgctxt "calendar heading"
|
||||
#| msgid "%A, %B %d"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %B %d"
|
||||
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
msgstr[0] "%d નવો સંદેશો"
|
||||
msgstr[1] "%d નવા સંદેશા"
|
||||
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#, c-format
|
||||
#| msgid "Notifications"
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d નવી સૂચના"
|
||||
@@ -1151,6 +1101,7 @@ msgid "Searching..."
|
||||
msgstr "શોધી રહ્યા છે..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:323
|
||||
#| msgid "No matching results."
|
||||
msgid "No results."
|
||||
msgstr "પરિણામો નથી."
|
||||
|
||||
@@ -1171,14 +1122,16 @@ msgid "Hide Text"
|
||||
msgstr "લખાણ છુપાડો"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:368
|
||||
#| msgid "Password:"
|
||||
msgid "Password"
|
||||
msgstr "પાસવર્ડ"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:389
|
||||
#| msgid "Remember Passphrase"
|
||||
msgid "Remember Password"
|
||||
msgstr "પાસવર્ડને યાદ રાખો"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:140
|
||||
msgid "Unlock"
|
||||
msgstr "તાળું ખોલો"
|
||||
|
||||
@@ -1296,7 +1249,7 @@ msgstr "કીબોર્ડ સુયોજનો"
|
||||
msgid "Mouse Settings"
|
||||
msgstr "માઉસ સુયોજનો"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
||||
msgid "Sound Settings"
|
||||
msgstr "સાઇન્ડ સુયોજનો"
|
||||
|
||||
@@ -1329,9 +1282,10 @@ msgid "Device %s wants to pair with this computer"
|
||||
msgstr "ઉપકરણ %s આ કમ્પ્યૂટર સાથે જોડી કરવા માંગે છે"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:379
|
||||
#, c-format
|
||||
#, fuzzy, c-format
|
||||
#| msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
|
||||
msgstr "મહેરબાની કરીને ખાતરી કરો કે શું PIN '%06d' એ ઉપકરણ પર એક સાથે બંધબેસે છે."
|
||||
msgstr "મહેરબાની કરીને ખાતરી કરો કે શું PIN '%s' એ ઉપકરણ પર એક સાથે બંધબેસે છે."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
msgid "Matches"
|
||||
@@ -1354,11 +1308,11 @@ msgstr "મહેરબાની કરીને ઉપકરણ પર દર
|
||||
msgid "OK"
|
||||
msgstr "બરાબર"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:228
|
||||
#: ../js/ui/status/keyboard.js:170
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "કીબોર્ડ લેઆઉટને બતાવો"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:233
|
||||
#: ../js/ui/status/keyboard.js:175
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "વિસ્તાર અને ભાષા સુયોજનો"
|
||||
|
||||
@@ -1581,7 +1535,7 @@ msgid "Unknown"
|
||||
msgstr "અજ્ઞાત"
|
||||
|
||||
#. Translators: This is the label for audio volume
|
||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
||||
msgid "Volume"
|
||||
msgstr "વોલ્યુમ"
|
||||
|
||||
@@ -1589,69 +1543,72 @@ msgstr "વોલ્યુમ"
|
||||
msgid "Microphone"
|
||||
msgstr "માઇક્રોફોન"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:177
|
||||
#: ../js/ui/unlockDialog.js:147
|
||||
#| msgid "Login as another user"
|
||||
msgid "Log in as another user"
|
||||
msgstr "બીજા વપરાશકર્તા તરીકે પ્રવેશો"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:174
|
||||
msgid "Available"
|
||||
msgstr "ઉપલબ્ધ"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:177
|
||||
msgid "Busy"
|
||||
msgstr "વ્યસ્ત"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Invisible"
|
||||
msgstr "અદૃશ્ય"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Away"
|
||||
msgstr "દૂર"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Idle"
|
||||
msgstr "નિષ્ક્રિય"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Unavailable"
|
||||
msgstr "બિનઉપલબ્ધ"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
msgid "Notifications"
|
||||
msgstr "સૂચનાઓ"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
msgid "System Settings"
|
||||
msgstr "સિસ્ટમ સુયોજનો"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:612 ../js/ui/userMenu.js:753
|
||||
msgid "Switch User"
|
||||
msgstr "વપરાશકર્તાને બદલો"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:613
|
||||
msgid "Switch Session"
|
||||
msgstr "સત્ર બદલો"
|
||||
|
||||
#: ../js/ui/userMenu.js:737
|
||||
msgid "Notifications"
|
||||
msgstr "સૂચનાઓ"
|
||||
|
||||
#: ../js/ui/userMenu.js:745
|
||||
msgid "System Settings"
|
||||
msgstr "સિસ્ટમ સુયોજનો"
|
||||
|
||||
#: ../js/ui/userMenu.js:758
|
||||
msgid "Log Out"
|
||||
msgstr "બહાર નીકળો"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:763
|
||||
msgid "Lock"
|
||||
msgstr "તાળુ"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:778
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:796
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "તમારી વાર્તાલાપ પરિસ્થિતિ વ્યસ્ત તરીકે સુયોજિત હશે"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../js/ui/userMenu.js:797
|
||||
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 ""
|
||||
"સૂચનાઓ હવે નિષ્ક્રિય થયેલ છે, વાર્તાલાપ સંદેશાને સમાવી રહ્યા છે, બીજાને જણાવવા માટે તમારી "
|
||||
"ઓનલાઇન સ્થિતિને ગોઠવી દેવામાં આવી છે કે જે તમે તેનાં સંદેશાને જોઇ શકશો નહિં."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
msgid "Windows"
|
||||
@@ -1665,7 +1622,7 @@ msgstr "કાર્યક્રમો"
|
||||
msgid "Search"
|
||||
msgstr "શોધો"
|
||||
|
||||
#: ../js/ui/wanda.js:117
|
||||
#: ../js/ui/wanda.js:119
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Sorry, no wisdom for you today:\n"
|
||||
@@ -1674,12 +1631,12 @@ msgstr ""
|
||||
"માફ કરો, આજે તમારા માટે શાણપણ નથી:\n"
|
||||
"%s"
|
||||
|
||||
#: ../js/ui/wanda.js:121
|
||||
#: ../js/ui/wanda.js:123
|
||||
#, c-format
|
||||
msgid "%s the Oracle says"
|
||||
msgstr "%s એ એવી કિંમત છે જે Oracle કહે છે"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/wanda.js:162
|
||||
#: ../js/ui/wanda.js:164
|
||||
msgid "Your favorite Easter Egg"
|
||||
msgstr "તમારા મનગમતા ઇસ્ટર ઇંડા"
|
||||
|
||||
@@ -1714,23 +1671,23 @@ msgstr[1] "%u ઇનપુટો"
|
||||
msgid "System Sounds"
|
||||
msgstr "સિસ્ટમ અવાજો"
|
||||
|
||||
#: ../src/main.c:332
|
||||
#: ../src/main.c:330
|
||||
msgid "Print version"
|
||||
msgstr "ા"
|
||||
|
||||
#: ../src/main.c:338
|
||||
#: ../src/main.c:336
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "લૉગિન સ્ક્રીન માટે GDM દ્દારા વાપરેલ સ્થિતિ"
|
||||
|
||||
#: ../src/main.c:344
|
||||
#: ../src/main.c:342
|
||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||
msgstr "ખાસ સ્થિતિને વાપરો, દા.ત. પ્રવેશ સ્ક્રીન માટે \"gdm\""
|
||||
|
||||
#: ../src/main.c:350
|
||||
#: ../src/main.c:348
|
||||
msgid "List possible modes"
|
||||
msgstr "શક્ય સ્થિતિઓની યાદી કરો"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "'%s' ને શરૂ કરવામાં નિષ્ફળતા"
|
||||
@@ -1753,10 +1710,7 @@ msgstr "મૂળભૂત"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:343
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "સત્તાધિકરણ વપરાશકર્તા દ્દારા અસ્વીકાર થયેલ છે"
|
||||
|
||||
#~ msgid "Switch Session"
|
||||
#~ msgstr "સત્ર બદલો"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "disabled OpenSearch providers"
|
||||
#~ msgstr "નિષ્ક્રિય થયેલ OpenSearch પ્રબંધક"
|
||||
@@ -1779,6 +1733,9 @@ msgstr "સત્તાધિકરણ વપરાશકર્તા દ્દ
|
||||
#~ msgid "Home"
|
||||
#~ msgstr "ઘર"
|
||||
|
||||
#~ msgid "File System"
|
||||
#~ msgstr "ફાઇલ સિસ્ટમ"
|
||||
|
||||
#~ msgid "%1$s: %2$s"
|
||||
#~ msgstr "%1$s: %2$s"
|
||||
|
||||
|
||||
154
po/id.po
154
po/id.po
@@ -10,8 +10,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
||||
"PO-Revision-Date: 2012-09-25 09:53+0700\n"
|
||||
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 07:11+0700\n"
|
||||
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
|
||||
"Language-Team: Indonesian <gnome@i15n.org>\n"
|
||||
"Language: id\n"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\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
|
||||
msgid "Screenshots"
|
||||
@@ -38,6 +38,14 @@ msgstr "Sistem"
|
||||
msgid "Show the message tray"
|
||||
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
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
@@ -155,34 +163,45 @@ msgid "Keybinding to open the application menu."
|
||||
msgstr "Kombinasi tombol untuk membuka menu aplikasi."
|
||||
|
||||
#: ../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"
|
||||
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."
|
||||
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"
|
||||
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."
|
||||
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"
|
||||
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."
|
||||
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."
|
||||
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 ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@@ -190,11 +209,11 @@ msgstr ""
|
||||
"Laju frame dari hasil screencast yang direkam oleh perekam screencast GNOME "
|
||||
"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"
|
||||
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
|
||||
msgid ""
|
||||
"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 "
|
||||
"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"
|
||||
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 ""
|
||||
"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 "
|
||||
@@ -247,11 +266,11 @@ msgstr "Ekstensi"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Pilih ekstensi yang ingin dikonfigurasi pada kotak di atas."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:527
|
||||
#: ../js/gdm/loginDialog.js:529
|
||||
msgid "Session..."
|
||||
msgstr "Sesi..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:675
|
||||
#: ../js/gdm/loginDialog.js:677
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Masuk"
|
||||
@@ -259,34 +278,33 @@ msgstr "Masuk"
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:742
|
||||
#: ../js/gdm/loginDialog.js:736
|
||||
msgid "Not listed?"
|
||||
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/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"
|
||||
msgstr "Batal"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:900
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Masuk"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1239
|
||||
#: ../js/gdm/loginDialog.js:1215
|
||||
msgid "Login Window"
|
||||
msgstr "Jendela Log Masuk"
|
||||
|
||||
#. Translators: accessible name of the power menu in the login screen
|
||||
#: ../js/gdm/powerMenu.js:35
|
||||
#| msgid "Power Off"
|
||||
msgid "Power"
|
||||
msgstr "Daya"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:775
|
||||
msgid "Suspend"
|
||||
msgstr "Suspensi"
|
||||
|
||||
@@ -294,8 +312,8 @@ msgstr "Suspensi"
|
||||
msgid "Restart"
|
||||
msgstr "Nyalakan Ulang"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
||||
#: ../js/ui/userMenu.js:777
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:774
|
||||
msgid "Power Off"
|
||||
msgstr "Matikan"
|
||||
|
||||
@@ -346,7 +364,7 @@ msgstr "PENGATURAN"
|
||||
msgid "New Window"
|
||||
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"
|
||||
msgstr "Hapus dari Favorit"
|
||||
|
||||
@@ -510,16 +528,16 @@ msgstr "Minggu ini"
|
||||
msgid "Next week"
|
||||
msgstr "Minggu depan"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:278
|
||||
#: ../js/ui/components/autorunManager.js:297
|
||||
msgid "Removable Devices"
|
||||
msgstr "Perangkat Yang Dapat Dicabut"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:575
|
||||
#: ../js/ui/components/autorunManager.js:594
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Buka dengan %s"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:601
|
||||
#: ../js/ui/components/autorunManager.js:620
|
||||
msgid "Eject"
|
||||
msgstr "Keluarkan"
|
||||
|
||||
@@ -891,7 +909,7 @@ msgstr "Sunting Akun"
|
||||
msgid "Unknown reason"
|
||||
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"
|
||||
msgstr "Tampilkan Aplikasi"
|
||||
|
||||
@@ -899,14 +917,14 @@ msgstr "Tampilkan Aplikasi"
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "Pengaturan Waktu dan Tanggal"
|
||||
|
||||
#: ../js/ui/dateMenu.js:109
|
||||
#: ../js/ui/dateMenu.js:111
|
||||
msgid "Open Calendar"
|
||||
msgstr "Buka Kalender"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:175
|
||||
#: ../js/ui/dateMenu.js:201
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A, %e %B %Y"
|
||||
|
||||
@@ -1005,11 +1023,11 @@ msgstr "Pasang"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "Unduh dan pasang '%s' dari extensions.gnome.org?"
|
||||
|
||||
#: ../js/ui/keyboard.js:327
|
||||
#: ../js/ui/keyboard.js:337
|
||||
msgid "tray"
|
||||
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
|
||||
msgid "Keyboard"
|
||||
msgstr "Papan Ketik"
|
||||
@@ -1062,19 +1080,19 @@ msgstr "Tilik Sumber"
|
||||
msgid "Web Page"
|
||||
msgstr "Halaman Web"
|
||||
|
||||
#: ../js/ui/messageTray.js:1080
|
||||
#: ../js/ui/messageTray.js:1081
|
||||
msgid "Open"
|
||||
msgstr "Buka"
|
||||
|
||||
#: ../js/ui/messageTray.js:1087
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Remove"
|
||||
msgstr "Hapus"
|
||||
|
||||
#: ../js/ui/messageTray.js:2055
|
||||
#: ../js/ui/messageTray.js:1540
|
||||
msgid "Message Tray"
|
||||
msgstr "Baki Pesan"
|
||||
|
||||
#: ../js/ui/messageTray.js:2511
|
||||
#: ../js/ui/messageTray.js:2547
|
||||
msgid "System Information"
|
||||
msgstr "Informasi Sistem"
|
||||
|
||||
@@ -1139,13 +1157,13 @@ msgstr "Ketikkan perintah:"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d %B"
|
||||
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
msgstr[0] "%d pesan baru"
|
||||
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
@@ -1183,7 +1201,7 @@ msgstr "Sandi"
|
||||
msgid "Remember Password"
|
||||
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"
|
||||
msgstr "Buka Kunci"
|
||||
|
||||
@@ -1301,7 +1319,7 @@ msgstr "Pengaturan Papan Ketik"
|
||||
msgid "Mouse Settings"
|
||||
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"
|
||||
msgstr "Pengaturan Suara"
|
||||
|
||||
@@ -1582,7 +1600,7 @@ msgid "Unknown"
|
||||
msgstr "Tak Dikenal"
|
||||
|
||||
#. 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"
|
||||
msgstr "Volume"
|
||||
|
||||
@@ -1590,7 +1608,7 @@ msgstr "Volume"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:176
|
||||
#: ../js/ui/unlockDialog.js:177
|
||||
msgid "Log in as another user"
|
||||
msgstr "Masuk sebagai pengguna lain"
|
||||
|
||||
@@ -1618,39 +1636,35 @@ msgstr "Menganggur"
|
||||
msgid "Unavailable"
|
||||
msgstr "Tak tersedia"
|
||||
|
||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
||||
msgid "Switch User"
|
||||
msgstr "Ganti Pengguna"
|
||||
|
||||
#: ../js/ui/userMenu.js:619
|
||||
msgid "Switch Session"
|
||||
msgstr "Pindah Sesi"
|
||||
|
||||
#: ../js/ui/userMenu.js:743
|
||||
#: ../js/ui/userMenu.js:740
|
||||
msgid "Notifications"
|
||||
msgstr "Pemberitahuan"
|
||||
|
||||
#: ../js/ui/userMenu.js:751
|
||||
#: ../js/ui/userMenu.js:748
|
||||
msgid "System Settings"
|
||||
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"
|
||||
msgstr "Keluar"
|
||||
|
||||
#: ../js/ui/userMenu.js:769
|
||||
#: ../js/ui/userMenu.js:766
|
||||
msgid "Lock"
|
||||
msgstr "Kunci"
|
||||
|
||||
#: ../js/ui/userMenu.js:784
|
||||
#: ../js/ui/userMenu.js:781
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Pasang Pemutakhiran & Jalankan Ulang"
|
||||
|
||||
#: ../js/ui/userMenu.js:802
|
||||
#: ../js/ui/userMenu.js:799
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Status obrolan Anda akan ditata ke sibuk"
|
||||
|
||||
#: ../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."
|
||||
@@ -1659,19 +1673,19 @@ msgstr ""
|
||||
"telah disesuaikan untuk memberitahu pihak lain bahwa Anda mungkin tak "
|
||||
"melihat pesan mereka."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
#: ../js/ui/viewSelector.js:87
|
||||
msgid "Windows"
|
||||
msgstr "Jendela"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Aplikasi"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Cari"
|
||||
|
||||
#: ../js/ui/wanda.js:119
|
||||
#: ../js/ui/wanda.js:117
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Sorry, no wisdom for you today:\n"
|
||||
@@ -1680,12 +1694,12 @@ msgstr ""
|
||||
"Maaf, tidak ada kata-kata bijak bagi Anda hari ini:\n"
|
||||
"%s"
|
||||
|
||||
#: ../js/ui/wanda.js:123
|
||||
#: ../js/ui/wanda.js:121
|
||||
#, c-format
|
||||
msgid "%s the Oracle says"
|
||||
msgstr "%s sang Peramal berkata"
|
||||
|
||||
#: ../js/ui/wanda.js:164
|
||||
#: ../js/ui/wanda.js:162
|
||||
msgid "Your favorite Easter Egg"
|
||||
msgstr "Easter Egg kesukaan Anda"
|
||||
|
||||
@@ -1718,19 +1732,19 @@ msgstr[0] "%u Masukan"
|
||||
msgid "System Sounds"
|
||||
msgstr "Suara Sistem"
|
||||
|
||||
#: ../src/main.c:330
|
||||
#: ../src/main.c:332
|
||||
msgid "Print version"
|
||||
msgstr "Versi Cetak"
|
||||
|
||||
#: ../src/main.c:336
|
||||
#: ../src/main.c:338
|
||||
msgid "Mode used by GDM for login screen"
|
||||
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"
|
||||
msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
|
||||
|
||||
#: ../src/main.c:348
|
||||
#: ../src/main.c:350
|
||||
msgid "List possible modes"
|
||||
msgstr "Menampilkan mode yang mungkin"
|
||||
|
||||
|
||||
389
po/nb.po
389
po/nb.po
@@ -6,10 +6,10 @@
|
||||
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 3.6.x\n"
|
||||
"Project-Id-Version: gnome-shell 3.7.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-11-02 08:10+0100\n"
|
||||
"PO-Revision-Date: 2012-11-02 08:10+0100\n"
|
||||
"POT-Creation-Date: 2012-11-05 19:06+0100\n"
|
||||
"PO-Revision-Date: 2012-11-05 19:10+0100\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
@@ -34,6 +34,14 @@ msgstr "System"
|
||||
msgid "Show the message tray"
|
||||
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
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
@@ -154,34 +162,45 @@ msgid "Keybinding to open the application menu."
|
||||
msgstr "Tastaturbinding som åpner programmenyen."
|
||||
|
||||
#: ../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"
|
||||
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrau"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrauet."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "Tastaturbinding som slår av/på skjermopptak"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "Tastaturbinding som starter/stopper innebygget opptak av skjerm."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Tastatur som skal brukes"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Type tastatur som skal brukes."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@@ -189,11 +208,11 @@ msgstr ""
|
||||
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
|
||||
"skjermvideoopptaker i bilder per sekund."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#, fuzzy, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@@ -210,11 +229,11 @@ msgstr ""
|
||||
"Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som "
|
||||
"brukes for gst-launch. Røret må ha en..."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Filendelse i bruk ved lagring av skjermvideo"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
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 "
|
||||
@@ -224,6 +243,37 @@ msgstr ""
|
||||
"og bruke denne filendelsen. Den bør endres når du gjør opptak til et nytt "
|
||||
"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
|
||||
#, c-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
@@ -237,11 +287,11 @@ msgstr "Utvidelse"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Velg en utvidelse som skal konfigureres med komboboksen over."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:529
|
||||
#: ../js/gdm/loginDialog.js:560
|
||||
msgid "Session..."
|
||||
msgstr "Økt …"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:677
|
||||
#: ../js/gdm/loginDialog.js:704
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Logg inn"
|
||||
@@ -249,56 +299,56 @@ msgstr "Logg inn"
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:736
|
||||
#: ../js/gdm/loginDialog.js:764
|
||||
msgid "Not listed?"
|
||||
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/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:171
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:911
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Logg inn"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1215
|
||||
#: ../js/gdm/loginDialog.js:1237
|
||||
msgid "Login Window"
|
||||
msgstr "Innloggingsvindu"
|
||||
|
||||
#. Translators: accessible name of the power menu in the login screen
|
||||
#: ../js/gdm/powerMenu.js:35
|
||||
#: ../js/gdm/powerMenu.js:36
|
||||
msgid "Power"
|
||||
msgstr "Strøm"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:667 ../js/ui/userMenu.js:671
|
||||
#: ../js/ui/userMenu.js:782
|
||||
msgid "Suspend"
|
||||
msgstr "Hvilemodus"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:94
|
||||
#: ../js/gdm/powerMenu.js:98
|
||||
msgid "Restart"
|
||||
msgstr "Start på nytt"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:669
|
||||
#: ../js/ui/userMenu.js:671 ../js/ui/userMenu.js:781
|
||||
msgid "Power Off"
|
||||
msgstr "Slå av"
|
||||
|
||||
#: ../js/gdm/util.js:148
|
||||
#: ../js/gdm/util.js:151
|
||||
msgid "Authentication error"
|
||||
msgstr "Autentiseringsfeil"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/util.js:265
|
||||
#: ../js/gdm/util.js:268
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(eller dra finger)"
|
||||
|
||||
#: ../js/gdm/util.js:290
|
||||
#: ../js/gdm/util.js:293
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(f.eks. bruker eller %s)"
|
||||
@@ -348,7 +398,7 @@ msgstr "Legg til i favoritter"
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s ble lagt til i dine favoritter."
|
||||
|
||||
#: ../js/ui/appFavorites.js:118
|
||||
#: ../js/ui/appFavorites.js:121
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s ble fjernet fra dine favoritter."
|
||||
@@ -467,48 +517,48 @@ msgid "S"
|
||||
msgstr "Lø"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:699
|
||||
#: ../js/ui/calendar.js:700
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr "Ingenting planlagt"
|
||||
|
||||
#. 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"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A %B %d"
|
||||
|
||||
#. 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"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A %B %d, %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:728
|
||||
#: ../js/ui/calendar.js:729
|
||||
msgid "Today"
|
||||
msgstr "I dag"
|
||||
|
||||
#: ../js/ui/calendar.js:732
|
||||
#: ../js/ui/calendar.js:733
|
||||
msgid "Tomorrow"
|
||||
msgstr "I morgen"
|
||||
|
||||
#: ../js/ui/calendar.js:743
|
||||
#: ../js/ui/calendar.js:744
|
||||
msgid "This week"
|
||||
msgstr "Denne uken"
|
||||
|
||||
#: ../js/ui/calendar.js:751
|
||||
#: ../js/ui/calendar.js:752
|
||||
msgid "Next week"
|
||||
msgstr "Neste uke"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:297
|
||||
#: ../js/ui/components/autorunManager.js:295
|
||||
msgid "Removable Devices"
|
||||
msgstr "Avtagbare enheter"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:594
|
||||
#: ../js/ui/components/autorunManager.js:591
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Åpne med %s"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:620
|
||||
#: ../js/ui/components/autorunManager.js:617
|
||||
msgid "Eject"
|
||||
msgstr "Løs ut"
|
||||
|
||||
@@ -662,27 +712,31 @@ msgstr "Fjern demping"
|
||||
msgid "Mute"
|
||||
msgstr "Demp"
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:950
|
||||
#. Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"
|
||||
#: ../js/ui/components/telepathyClient.js:945
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Sendt <b>%X</b> på <b>%A</b>"
|
||||
msgid "<b>%H:%M</b> on Yesterday"
|
||||
msgstr "<b>%H.%M</b> i går"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:956
|
||||
#. Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday
|
||||
#: ../js/ui/components/telepathyClient.js:951
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>"
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>"
|
||||
msgstr "<b>%H.%M</b> på <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:961
|
||||
#. 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
|
||||
#: ../js/ui/components/telepathyClient.js:957
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>"
|
||||
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
|
||||
#. IM name.
|
||||
@@ -693,7 +747,7 @@ msgstr "%s er nå kjent som %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1090
|
||||
#: ../js/ui/components/telepathyClient.js:1089
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Invitasjon til %s"
|
||||
@@ -701,42 +755,42 @@ msgstr "Invitasjon til %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1097
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s inviterer deg til å bli med i %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1179
|
||||
#: ../js/ui/components/telepathyClient.js:1242
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Decline"
|
||||
msgstr "Avslå"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1101
|
||||
#: ../js/ui/components/telepathyClient.js:1180
|
||||
#: ../js/ui/components/telepathyClient.js:1243
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1179
|
||||
#: ../js/ui/components/telepathyClient.js:1242
|
||||
msgid "Accept"
|
||||
msgstr "Godta"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#: ../js/ui/components/telepathyClient.js:1130
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videosamtale fra %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1134
|
||||
#: ../js/ui/components/telepathyClient.js:1133
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Samtale fra %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
#: ../js/ui/components/telepathyClient.js:1138
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Avvis"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1140
|
||||
msgid "Answer"
|
||||
msgstr "Svar"
|
||||
|
||||
@@ -745,110 +799,110 @@ msgstr "Svar"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1173
|
||||
#: ../js/ui/components/telepathyClient.js:1172
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s sender deg %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1208
|
||||
#: ../js/ui/components/telepathyClient.js:1207
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
#: ../js/ui/components/telepathyClient.js:1299
|
||||
msgid "Network error"
|
||||
msgstr "Nettverksfeil"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1301
|
||||
msgid "Authentication failed"
|
||||
msgstr "Autentisering feilet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1303
|
||||
msgid "Encryption error"
|
||||
msgstr "Feil ved kryptering"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1305
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Sertifikat ikke oppgitt"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1307
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Stoler ikke på sertifikatet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1309
|
||||
msgid "Certificate expired"
|
||||
msgstr "Sertifikatet er utløpt"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1311
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Sertifikatet er ikke aktivert"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1313
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Feil vertsnavn for sertifikat"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1315
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Feil fingeravtrykk for sertifikat"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1317
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Sertifikatet er selvsignert"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1319
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Status er satt til frakoblet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1321
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Kryptering er ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1323
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Sertifikatet er ugyldig"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1325
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Tilkobling ble nektet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1327
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Tilkobling kan ikke etableres"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1329
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Tilkobling tapt"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1331
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Denne kontoen er allerede koblet til tjeneren"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1333
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1335
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Kontoen eksisterer allerede på tjeneren"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1337
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1339
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Sertifikatet er tilbaketrukket"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1341
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1343
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -856,26 +910,26 @@ msgstr ""
|
||||
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
|
||||
"kryptografibiblioteket"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1345
|
||||
msgid "Internal error"
|
||||
msgstr "Intern feil"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1356
|
||||
#: ../js/ui/components/telepathyClient.js:1355
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Tilkobling til %s feilet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1365
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Reconnect"
|
||||
msgstr "Koble til på nytt"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1366
|
||||
#: ../js/ui/components/telepathyClient.js:1365
|
||||
msgid "Edit account"
|
||||
msgstr "Rediger konto"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1411
|
||||
#: ../js/ui/components/telepathyClient.js:1410
|
||||
msgid "Unknown reason"
|
||||
msgstr "Ukjent årsak"
|
||||
|
||||
@@ -999,11 +1053,11 @@ msgstr "Installer"
|
||||
msgid "Download and install '%s' from 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"
|
||||
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
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastatur"
|
||||
@@ -1056,32 +1110,32 @@ msgstr "Vis kildekode"
|
||||
msgid "Web Page"
|
||||
msgstr "Nettside"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Open"
|
||||
msgstr "Åpne"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1095
|
||||
msgid "Remove"
|
||||
msgstr "Fjern"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:1539
|
||||
msgid "Message Tray"
|
||||
msgstr "Meldingstrau"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2563
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformasjon"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:504 ../src/shell-app.c:374
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Ukjent"
|
||||
|
||||
#: ../js/ui/overview.js:82
|
||||
#: ../js/ui/overview.js:89
|
||||
msgid "Undo"
|
||||
msgstr "Angre"
|
||||
|
||||
#: ../js/ui/overview.js:127
|
||||
#: ../js/ui/overview.js:133
|
||||
msgid "Overview"
|
||||
msgstr "Oversikt"
|
||||
|
||||
@@ -1089,27 +1143,27 @@ msgstr "Oversikt"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/overview.js:201
|
||||
#: ../js/ui/overview.js:207
|
||||
msgid "Type to search..."
|
||||
msgstr "Skriv for å søke …"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:222
|
||||
#: ../js/ui/overview.js:228
|
||||
msgid "Dash"
|
||||
msgstr "Favoritter"
|
||||
|
||||
#: ../js/ui/panel.js:567
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "Quit"
|
||||
msgstr "Avslutt"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:613
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
#: ../js/ui/panel.js:965
|
||||
#: ../js/ui/panel.js:980
|
||||
msgid "Top Bar"
|
||||
msgstr "Topp-panel"
|
||||
|
||||
@@ -1123,8 +1177,12 @@ msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:205
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Oppgi en kommando:"
|
||||
msgid "Enter a Command"
|
||||
msgstr "Oppgi en kommando"
|
||||
|
||||
#: ../js/ui/runDialog.js:241
|
||||
msgid "Close"
|
||||
msgstr "Lukk"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
@@ -1178,7 +1236,7 @@ msgstr "Passord"
|
||||
msgid "Remember Password"
|
||||
msgstr "Husk passord"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:174
|
||||
msgid "Unlock"
|
||||
msgstr "Lås opp"
|
||||
|
||||
@@ -1233,7 +1291,7 @@ msgstr "Stor tekst"
|
||||
#: ../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: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"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@@ -1262,12 +1320,12 @@ msgstr "maskinvare slått av"
|
||||
msgid "Connection"
|
||||
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..."
|
||||
msgstr "kobler fra …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:220 ../js/ui/status/network.js:464
|
||||
#: ../js/ui/status/network.js:934
|
||||
#: ../js/ui/status/bluetooth.js:220 ../js/ui/status/network.js:481
|
||||
#: ../js/ui/status/network.js:1507
|
||||
msgid "connecting..."
|
||||
msgstr "kobler til …"
|
||||
|
||||
@@ -1377,109 +1435,106 @@ msgstr "slått av"
|
||||
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||
#: ../js/ui/status/network.js:456
|
||||
#: ../js/ui/status/network.js:473
|
||||
msgid "unmanaged"
|
||||
msgstr "ikke håndtert"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:467 ../js/ui/status/network.js:937
|
||||
#: ../js/ui/status/network.js:484 ../js/ui/status/network.js:1510
|
||||
msgid "authentication required"
|
||||
msgstr "autentisering kreves"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:477
|
||||
#: ../js/ui/status/network.js:494
|
||||
msgid "firmware missing"
|
||||
msgstr "fastvare mangler"
|
||||
|
||||
#. 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"
|
||||
msgstr "kabel koblet fra"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
#: ../js/ui/status/network.js:506
|
||||
msgid "unavailable"
|
||||
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"
|
||||
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..."
|
||||
msgstr "Mer …"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1459
|
||||
#: ../js/ui/status/network.js:596 ../js/ui/status/network.js:1376
|
||||
msgid "Connected (private)"
|
||||
msgstr "Tilkoblet (privat)"
|
||||
|
||||
#: ../js/ui/status/network.js:663
|
||||
#: ../js/ui/status/network.js:669
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatisk Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:721
|
||||
#: ../js/ui/status/network.js:727
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatisk bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:724
|
||||
#: ../js/ui/status/network.js:730
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatisk oppringt"
|
||||
|
||||
#. 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
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatisk %s"
|
||||
|
||||
#: ../js/ui/status/network.js:855
|
||||
#: ../js/ui/status/network.js:861
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatisk Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1478
|
||||
#: ../js/ui/status/network.js:1395
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatisk trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1575
|
||||
#: ../js/ui/status/network.js:1637
|
||||
msgid "Enable networking"
|
||||
msgstr "Slå på nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1597
|
||||
#: ../js/ui/status/network.js:1659
|
||||
msgid "Wired"
|
||||
msgstr "Kablet"
|
||||
|
||||
#: ../js/ui/status/network.js:1608
|
||||
#: ../js/ui/status/network.js:1670
|
||||
msgid "Wireless"
|
||||
msgstr "Trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1618
|
||||
#: ../js/ui/status/network.js:1680
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilt bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:1628
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-tilkoblinger"
|
||||
|
||||
#: ../js/ui/status/network.js:1635
|
||||
#: ../js/ui/status/network.js:1691
|
||||
msgid "Network Settings"
|
||||
msgstr "Innstillinger for nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1679
|
||||
#: ../js/ui/status/network.js:1735
|
||||
msgid "Network Manager"
|
||||
msgstr "Nettverkshåndtering"
|
||||
|
||||
#: ../js/ui/status/network.js:1769
|
||||
#: ../js/ui/status/network.js:1809
|
||||
msgid "Connection failed"
|
||||
msgstr "Tilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:1770
|
||||
#: ../js/ui/status/network.js:1810
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivering av nettverkstilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:2065
|
||||
#: ../js/ui/status/network.js:2108
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Nettverk er slått av"
|
||||
|
||||
@@ -1589,63 +1644,63 @@ msgstr "Volum"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:177
|
||||
#: ../js/ui/unlockDialog.js:181
|
||||
msgid "Log in as another user"
|
||||
msgstr "Logg inn som en annen bruker"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:176
|
||||
msgid "Available"
|
||||
msgstr "Tilgjengelig"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:179
|
||||
msgid "Busy"
|
||||
msgstr "Opptatt"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:182
|
||||
msgid "Invisible"
|
||||
msgstr "Usynlig"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:185
|
||||
msgid "Away"
|
||||
msgstr "Borte"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:188
|
||||
msgid "Idle"
|
||||
msgstr "Ledig"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
msgid "Unavailable"
|
||||
msgstr "Ikke tilgjengelig"
|
||||
#: ../js/ui/userMenu.js:191
|
||||
msgid "Offline"
|
||||
msgstr "Frakoblet"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
#: ../js/ui/userMenu.js:747
|
||||
msgid "Notifications"
|
||||
msgstr "Varslinger"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
#: ../js/ui/userMenu.js:755
|
||||
msgid "System Settings"
|
||||
msgstr "Systeminnstillinger"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:763
|
||||
msgid "Switch User"
|
||||
msgstr "Bytt bruker"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:768
|
||||
msgid "Log Out"
|
||||
msgstr "Logg ut"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:773
|
||||
msgid "Lock"
|
||||
msgstr "Lås"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:788
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Installer oppdateringer og start på nytt"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:806
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Din pratestatus vil bli satt til opptatt"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../js/ui/userMenu.js:807
|
||||
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."
|
||||
@@ -1654,15 +1709,15 @@ msgstr ""
|
||||
"tilkoblingsstatus er justert for å la andre vite at du kanskje ikke ser "
|
||||
"deres meldinger."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
#: ../js/ui/viewSelector.js:87
|
||||
msgid "Windows"
|
||||
msgstr "Vinduer"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Programmer"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Søk"
|
||||
|
||||
|
||||
263
po/pa.po
263
po/pa.po
@@ -7,8 +7,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-10-31 16:48+0000\n"
|
||||
"PO-Revision-Date: 2012-11-04 09:23+0530\n"
|
||||
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
|
||||
"PO-Revision-Date: 2012-09-25 06:45+0530\n"
|
||||
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
||||
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
||||
"Language: pa\n"
|
||||
@@ -137,63 +137,50 @@ msgstr ""
|
||||
"GsmPresenceStatus ਤੋਂ ਇੱਥੇ ਮੁੱਲ।"
|
||||
|
||||
#: ../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"
|
||||
msgstr "ਕੈਲੰਡਰ ਵਿੱਚ ਹਫ਼ਤਾ ਮਿਤੀ ਵੇਖੋ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਕੈਲੰਡਰ ਵਿੱਚ ISO ਹਫਤਾ ਮਿਤੀ ਵੇਖਾਈ ਜਾਵੇਗੀ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਮੇਨੂ ਖੋਲ੍ਹਣ ਲਈ ਕੀਬਾਈਡਿੰਗ ਹੈ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਮੇਨੂ ਖੋਲ੍ਹਣ ਲਈ ਕੀਬਾਈਡਿੰਗ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
msgid "Keybinding to toggle the visibility of the message tray"
|
||||
msgstr "ਸੁਨੇਹਾ ਟਰੇ ਦੀ ਦਿੱਖਣ ਨੂੰ ਬਦਲਣ ਲਈ ਕੀਬਾਈਡਿੰਗ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr "ਸੁਨੇਹਾ ਟਰੇ ਦੀ ਦਿੱਖਣ ਨੂੰ ਬਦਲਣ ਲਈ ਕੀਬਾਈਡਿੰਗ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "ਸਕਰੀਨ ਰਿਕਾਡਰ ਨੂੰ ਬਦਲਣ ਲਈ ਕੀਬਾਈਡਿੰਗ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "ਬਿਲਟ-ਇਨ ਸਕਰੀਨ ਰਿਕਾਰਡ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ/ਰੋਕਣ ਲਈ ਕੀਬਾਈਡਿੰਗ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "ਕਿਹੜਾ ਕੀਬੋਰਡ ਵਰਤਣਾ ਹੈ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "ਵਰਤਣ ਲਈ ਕੀਬੋਰਡ ਦੀ ਕਿਸਮ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "ਸਕਰੀਨਕਾਸਟ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਫਰੇਮਰੇਟ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@@ -202,11 +189,11 @@ msgstr ""
|
||||
"ਫਰੇਮ ਪ੍ਰਤੀ "
|
||||
"ਸਕਿੰਟ 'ਚ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "ਸਕਰੀਨਕਾਸਟ ਇੰਕੋਡ ਕਰਨ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਜੀਸਟਰੀਮਰ ਪਾਇਪਲਾਇਨ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@@ -239,11 +226,11 @@ msgstr ""
|
||||
"ਲਗਾਉਣ ਲਈ "
|
||||
"ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "ਸਕਰੀਨਕਾਸਟ ਸੰਭਾਲਣ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਇਲ ਇਕਟੈਨਸ਼ਨ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
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 "
|
||||
@@ -268,11 +255,11 @@ msgstr "ਇਕਸਟੈਸ਼ਨ"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "ਉੱਤੇ ਦਿੱਤੇ ਕੰਬੋਬਾਕਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਕਸਟੈਸ਼ਨ ਦੀ ਸੰਰਚਨਾ ਕਰਨ ਲਈ ਚੋਣ ਕਰੋ।"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:529
|
||||
#: ../js/gdm/loginDialog.js:527
|
||||
msgid "Session..."
|
||||
msgstr "ਸ਼ੈਸ਼ਨ..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:677
|
||||
#: ../js/gdm/loginDialog.js:675
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "ਸਾਇਨ ਇਨ"
|
||||
@@ -280,33 +267,34 @@ msgstr "ਸਾਇਨ ਇਨ"
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:736
|
||||
#: ../js/gdm/loginDialog.js:742
|
||||
msgid "Not listed?"
|
||||
msgstr "ਲਿਸਟ ਵਿੱਚ ਨਹੀਂ ਹੈ?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
|
||||
msgid "Cancel"
|
||||
msgstr "ਰੱਦ ਕਰੋ"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:900
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "ਸਾਇਨ ਇਨ"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1215
|
||||
#: ../js/gdm/loginDialog.js:1239
|
||||
msgid "Login Window"
|
||||
msgstr "ਲਾਗਇਨ ਵਿੰਡੋ"
|
||||
|
||||
#. Translators: accessible name of the power menu in the login screen
|
||||
#: ../js/gdm/powerMenu.js:35
|
||||
#| msgid "Power Off"
|
||||
msgid "Power"
|
||||
msgstr "ਪਾਵਰ"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
||||
#: ../js/ui/userMenu.js:778
|
||||
msgid "Suspend"
|
||||
msgstr "ਸਸਪੈਂਡ"
|
||||
|
||||
@@ -314,8 +302,8 @@ msgstr "ਸਸਪੈਂਡ"
|
||||
msgid "Restart"
|
||||
msgstr "ਮੁੜ-ਚਾਲੂ ਕਰੋ"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
|
||||
#: ../js/ui/userMenu.js:777
|
||||
msgid "Power Off"
|
||||
msgstr "ਬੰਦ ਕਰੋ"
|
||||
|
||||
@@ -366,7 +354,7 @@ msgstr "ਸੈਟਿੰਗ"
|
||||
msgid "New Window"
|
||||
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
|
||||
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
|
||||
|
||||
@@ -530,16 +518,16 @@ msgstr "ਇਹ ਹਫ਼ਤਾ"
|
||||
msgid "Next week"
|
||||
msgstr "ਹਫ਼ਤਾ ਅੱਗੇ"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:297
|
||||
#: ../js/ui/components/autorunManager.js:278
|
||||
msgid "Removable Devices"
|
||||
msgstr "ਹਟਾਉਣਯੋਗ ਜੰਤਰ"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:594
|
||||
#: ../js/ui/components/autorunManager.js:575
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "%s ਨਾਲ ਖੋਲ੍ਹੋ"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:620
|
||||
#: ../js/ui/components/autorunManager.js:601
|
||||
msgid "Eject"
|
||||
msgstr "ਬਾਹਰ ਕੱਢੋ"
|
||||
|
||||
@@ -694,35 +682,35 @@ msgstr "ਚੁੱਪ"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:950
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "<b>%2$A</b> ਨੂੰ <b>%1$X</b> ਵਜੇ ਭੇਜਿਆ"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:956
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <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",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:961
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <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
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:990
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s ਨੂੰ ਹੁਣ %s ਵਜੋਂ ਜਾਣਿਆ ਜਾਵੇਗਾ"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1090
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "%s ਲਈ ਸੱਦਾ"
|
||||
@@ -730,42 +718,42 @@ msgstr "%s ਲਈ ਸੱਦਾ"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s ਤੁਹਾਨੂੰ %s ਜੁਆਇੰਨ ਕਰਨ ਲਈ ਸੱਦ ਰਿਹਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1179
|
||||
#: ../js/ui/components/telepathyClient.js:1242
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "ਇਨਕਾਰ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1101
|
||||
#: ../js/ui/components/telepathyClient.js:1180
|
||||
#: ../js/ui/components/telepathyClient.js:1243
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "ਮਨਜ਼ੂਰ"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s ਵਲੋਂ ਵਿਡੀਓ ਕਾਲ"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1134
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s ਵਲੋਂ ਕਾਲ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "ਨਾ-ਮਨਜ਼ੂਰ"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "ਜਵਾਬ ਦਿਓ"
|
||||
|
||||
@@ -774,110 +762,110 @@ msgstr "ਜਵਾਬ ਦਿਓ"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1173
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s ਤੁਹਾਨੂੰ %s ਭੇਜ ਰਿਹਾ/ਰਹੀ ਹੈ"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1208
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr ""
|
||||
"%s ਤੁਹਾਨੂੰ ਵੇਖਣ ਦਾ ਅਧਿਕਾਰ ਚਾਹੁੰਦਾ/ਚਾਹੁੰਦੀ ਹੈ, ਜਦੋਂ ਵੀ ਤੁਸੀਂ ਆਨਲਾਈਨ ਹੋਵੋ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "ਨੈੱਟਵਰਕ ਗਲਤੀ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "ਪਰਮਾਣਕਿਤਾ ਫੇਲ੍ਹ ਹੋਈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "ਇੰਕ੍ਰਿਪਸ਼ਨ ਗਲਤੀ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਨਹੀਂ ਦਿੱਤਾ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਬੇਭਰੋਸੇਯੋਗ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਦੀ ਮਿਆਦ ਪੁੱਗੀ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਸਰਗਰਮ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਹੋਸਟ-ਨਾਂ ਨਹੀਂ ਮਿਲਦਾ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਫਿੰਗਰ-ਪਰਿੰਟ ਮਿਲਦਾ ਨਹੀਂ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਖੁਦ-ਦਸਤਖਤੀ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "ਹਾਲਤ ਆਫਲਾਈਨ ਸੈੱਟ ਕੀਤੀ ਗਈ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "ਇੰਕ੍ਰਿਪਸ਼ਨ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਗਲਤ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "ਕੁਨੈਕਸ਼ਨ ਤੋਂ ਇਨਕਾਰ ਕੀਤਾ ਗਿਆ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "ਕੁਨੈਕਸ਼ਨ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਹੋ ਗਿਆ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "ਇਹ ਅਕਾਊਂਟ ਪਹਿਲਾਂ ਹੀ ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਟ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "ਉਸੇ ਸਰੋਤ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੁਨੈਕਸ਼ਨ ਨੂੰ ਨਵੇਂ ਕੁਨੈਕਸ਼ਨ ਨਾਲ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "ਅਕਾਊਂਟ ਸਰਵਰ ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "ਸਰਵਰ ਇਸ ਵੇਲੇ ਐਨਾ ਰੁੱਝਿਆ ਹੋਇਆ ਹੈ ਕਿ ਕੁਨੈਕਸ਼ਨ ਸੰਭਾਲ ਨਹੀਂ ਸਕਦਾ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "ਸਰਟੀਫਿਕੇਟ ਮਨਸੂਖ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"ਸਰਟੀਫਿਕੇਟ ਅਸੁਰੱਖਿਅਤ ਸੀਫ਼ਰ ਐਲਗੋਰਿਥਮ ਵਰਤਦਾ ਹੈ ਜਾਂ ਕਮਜ਼ੋਰ ਕ੍ਰਿਪਟੋਗਰਾਫਿਕਲ ਵਰਤਦਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -886,30 +874,30 @@ msgstr ""
|
||||
"ਲਾਇਬਰੇਰੀ ਵਲੋਂ ਰੱਖੀ "
|
||||
"ਗਈ ਲਿਮਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ।"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "ਅੰਦਰੂਨੀ ਗਲਤੀ"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1356
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "%s ਲਈ ਕੁਨੈਕਸ਼ਨ ਫੇਲ੍ਹ ਹੈ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1365
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "ਮੁੜ-ਕੁਨੈਕਟ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1366
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "ਅਕਾਊਂਟ ਸੋਧ"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1411
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "ਅਣਜਾਣ ਕਾਰਨ"
|
||||
|
||||
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
|
||||
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
|
||||
msgid "Show Applications"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵੇਖੋ"
|
||||
|
||||
@@ -917,14 +905,14 @@ msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵੇਖੋ"
|
||||
msgid "Date and Time Settings"
|
||||
msgstr "ਮਿਤੀ ਤੇ ਸਮਾਂ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/dateMenu.js:111
|
||||
#: ../js/ui/dateMenu.js:109
|
||||
msgid "Open Calendar"
|
||||
msgstr "ਕੈਲੰਡਰ ਖੋਲ੍ਹੋ"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:201
|
||||
#: ../js/ui/dateMenu.js:175
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "%A, %e %B %Y"
|
||||
|
||||
@@ -1027,11 +1015,11 @@ msgstr "ਇੰਸਟਾਲ ਕਰੋ"
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr "ਕੀ extensions.gnome.org ਤੋਂ '%s' ਡਾਊਨਲੋਡ ਅਤੇ ਇੰਸਟਾਲ ਕਰਨੀ ਹੈ?"
|
||||
|
||||
#: ../js/ui/keyboard.js:337
|
||||
#: ../js/ui/keyboard.js:327
|
||||
msgid "tray"
|
||||
msgstr "ਟਰੇ"
|
||||
|
||||
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
|
||||
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
|
||||
#: ../js/ui/status/power.js:205
|
||||
msgid "Keyboard"
|
||||
msgstr "ਕੀਬੋਰਡ"
|
||||
@@ -1084,23 +1072,23 @@ msgstr "ਸਰੋਤ ਵੇਖੋ"
|
||||
msgid "Web Page"
|
||||
msgstr "ਵੈੱਬ ਪੇਜ਼"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1080
|
||||
msgid "Open"
|
||||
msgstr "ਖੋਲ੍ਹੋ"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1087
|
||||
msgid "Remove"
|
||||
msgstr "ਹਟਾਓ"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:2055
|
||||
msgid "Message Tray"
|
||||
msgstr "ਸੁਨੇਹਾ ਟਰੇ"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2511
|
||||
msgid "System Information"
|
||||
msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "ਅਣਜਾਣ"
|
||||
@@ -1156,7 +1144,7 @@ msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:79
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d %B"
|
||||
|
||||
@@ -1206,7 +1194,7 @@ msgstr "ਪਾਸਵਰਡ"
|
||||
msgid "Remember Password"
|
||||
msgstr "ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
|
||||
msgid "Unlock"
|
||||
msgstr "ਅਣ-ਲਾਕ"
|
||||
|
||||
@@ -1324,7 +1312,7 @@ msgstr "ਕੀਬੋਰਡ ਸੈਟਿੰਗ"
|
||||
msgid "Mouse Settings"
|
||||
msgstr "ਮਾਊਸ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
|
||||
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
|
||||
msgid "Sound Settings"
|
||||
msgstr "ਸਾਊਂਡ ਸੈਟਿੰਗ"
|
||||
|
||||
@@ -1609,7 +1597,7 @@ msgid "Unknown"
|
||||
msgstr "ਅਣਜਾਣ"
|
||||
|
||||
#. Translators: This is the label for audio volume
|
||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
|
||||
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
|
||||
msgid "Volume"
|
||||
msgstr "ਆਵਾਜ਼"
|
||||
|
||||
@@ -1617,63 +1605,67 @@ msgstr "ਆਵਾਜ਼"
|
||||
msgid "Microphone"
|
||||
msgstr "ਮਾਈਕਰੋਫੋਨ"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:177
|
||||
#: ../js/ui/unlockDialog.js:176
|
||||
msgid "Log in as another user"
|
||||
msgstr "ਹੋਰ ਯੂਜ਼ਰ ਵਜੋਂ ਲਾਗਇਨ"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Available"
|
||||
msgstr "ਉਪਲੱਬਧ"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Busy"
|
||||
msgstr "ਰੁਝਿਆ"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Invisible"
|
||||
msgstr "ਅਦਿੱਖ"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Away"
|
||||
msgstr "ਦੂਰ"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:192
|
||||
msgid "Idle"
|
||||
msgstr "ਵੇਹਲਾ"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:195
|
||||
msgid "Unavailable"
|
||||
msgstr "ਨਾ ਉਪਲੱਬਧ"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
msgid "Notifications"
|
||||
msgstr "ਨੋਟੀਫਿਕੇਸ਼ਨ"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
msgid "System Settings"
|
||||
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
|
||||
msgid "Switch User"
|
||||
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:619
|
||||
msgid "Switch Session"
|
||||
msgstr "ਸ਼ੈਸ਼ਨ ਬਦਲੋ"
|
||||
|
||||
#: ../js/ui/userMenu.js:743
|
||||
msgid "Notifications"
|
||||
msgstr "ਨੋਟੀਫਿਕੇਸ਼ਨ"
|
||||
|
||||
#: ../js/ui/userMenu.js:751
|
||||
msgid "System Settings"
|
||||
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/userMenu.js:764
|
||||
msgid "Log Out"
|
||||
msgstr "ਲਾਗ ਆਉਟ"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:769
|
||||
msgid "Lock"
|
||||
msgstr "ਲਾਕ"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:784
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰੋ ਅਤੇ ਮੁੜ-ਚਾਲੂ"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:802
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "ਤੁਹਾਡੀ ਚੈਟ ਹਾਲਤ ਰੁੱਝੇ ਵਜੋਂ ਸੈੱਟ ਕੀਤੀ ਜਾਵੇਗੀ"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../js/ui/userMenu.js:803
|
||||
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."
|
||||
@@ -1695,7 +1687,7 @@ msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||
msgid "Search"
|
||||
msgstr "ਖੋਜ"
|
||||
|
||||
#: ../js/ui/wanda.js:117
|
||||
#: ../js/ui/wanda.js:119
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Sorry, no wisdom for you today:\n"
|
||||
@@ -1704,12 +1696,12 @@ msgstr ""
|
||||
"ਅਫਸੋਸ, ਅੱਜ ਤੁਹਾਡੇ ਲਈ ਕੋਈ ਨਸੀਹਤ ਨਹੀਂ:\n"
|
||||
"%s "
|
||||
|
||||
#: ../js/ui/wanda.js:121
|
||||
#: ../js/ui/wanda.js:123
|
||||
#, c-format
|
||||
msgid "%s the Oracle says"
|
||||
msgstr "%s ਓਰੇਕਲ ਨੇ ਕਿਹਾ"
|
||||
|
||||
#: ../js/ui/wanda.js:162
|
||||
#: ../js/ui/wanda.js:164
|
||||
msgid "Your favorite Easter Egg"
|
||||
msgstr "ਤੁਹਾਡਾ ਪਸੰਦੀਦਾ ਈਸਟਰ ਅੰਡਾ"
|
||||
|
||||
@@ -1744,23 +1736,23 @@ msgstr[1] "%u ਇੰਪੁੱਟ"
|
||||
msgid "System Sounds"
|
||||
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
|
||||
|
||||
#: ../src/main.c:332
|
||||
#: ../src/main.c:330
|
||||
msgid "Print version"
|
||||
msgstr "ਵਰਜਨ ਛਾਪੋ"
|
||||
|
||||
#: ../src/main.c:338
|
||||
#: ../src/main.c:336
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "ਲਾਗਇਨ ਸਕਰੀਨ ਲਈ GDM ਵਲੋਂ ਵਰਤਿਆ ਮੋਡ"
|
||||
|
||||
#: ../src/main.c:344
|
||||
#: ../src/main.c:342
|
||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||
msgstr "ਲਾਗਇਨ ਸਕਰੀਨ ਉੱਤੇ ਖਾਸ ਮੋਡ ਜਿਵੇਂ ਕਿ \"gdm\" ਵਰਤੋਂ"
|
||||
|
||||
#: ../src/main.c:350
|
||||
#: ../src/main.c:348
|
||||
msgid "List possible modes"
|
||||
msgstr "ਸੰਭਵ ਮੋਡ ਵੇਖਾਓ"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ"
|
||||
@@ -1785,9 +1777,6 @@ msgstr "ਡਿਫਾਲਟ"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "ਪਰਮਾਣਕਿਤਾ ਡਾਈਲਾਗ ਯੂਜ਼ਰ ਵਲੋਂ ਰੱਦ ਕੀਤਾ"
|
||||
|
||||
#~ msgid "Switch Session"
|
||||
#~ msgstr "ਸ਼ੈਸ਼ਨ ਬਦਲੋ"
|
||||
|
||||
#~ msgid "disabled OpenSearch providers"
|
||||
#~ msgstr "ਓਪਨਸਰਚ ਉਪਲੱਬਧ ਕਰਵਾਉਣ ਵਾਲੇ ਬੰਦ ਹਨ"
|
||||
|
||||
|
||||
296
po/sk.po
296
po/sk.po
@@ -10,8 +10,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-10-18 16:51+0000\n"
|
||||
"PO-Revision-Date: 2012-10-13 22:35+0100\n"
|
||||
"POT-Creation-Date: 2012-10-27 16:22+0000\n"
|
||||
"PO-Revision-Date: 2012-10-28 19:49+0000\n"
|
||||
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
|
||||
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
|
||||
"Language: sk\n"
|
||||
@@ -25,8 +25,6 @@ msgstr ""
|
||||
msgid "Screenshots"
|
||||
msgstr "Snímky obrazovky"
|
||||
|
||||
# PM: inde dianie na obrazovke
|
||||
# DK:presne taketo nieco som chcel povedat ale nevedel som ako
|
||||
#: ../data/50-gnome-shell-screenshot.xml.in.h:2
|
||||
msgid "Record a screencast"
|
||||
msgstr "Zaznamenať dianie na obrazovke"
|
||||
@@ -37,20 +35,16 @@ msgstr "Systém"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:2
|
||||
msgid "Show the message tray"
|
||||
msgstr "Zobraziť lištu správ"
|
||||
msgstr "Zobrazí lištu správ"
|
||||
|
||||
# tooltip
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||
#, fuzzy
|
||||
#| msgid "Show Applications"
|
||||
msgid "Show all applications"
|
||||
msgstr "Zobrazí aplikácie"
|
||||
msgstr "Zobrazí všetky aplikácie"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Open the application menu"
|
||||
msgstr "Klávesová skratka na otvorenie ponuky aplikácií"
|
||||
msgstr "Otvorí ponuku aplikácií"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
@@ -85,13 +79,9 @@ msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Uuid identifikátory rozšírení určených na povolenie"
|
||||
msgstr "Vlastnosť uuid rozšírení určených na povolenie"
|
||||
|
||||
# PM: nepáči sa mi konštrukcia viet, preklad vyznieva strojovo
|
||||
# DK: uz lepsie?
|
||||
# PM: lepšie ale nepáči sa mi org.gnome.Shell. mne sa vidí že to bude nejaký súbor a potom predložka na asi nebude dobre
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should be loaded. Any extension that wants to be loaded needs to be in this "
|
||||
@@ -101,7 +91,7 @@ msgstr ""
|
||||
"Rozšírenia pre GNOME Shell majú vlastnosť uuid; tento kľúč obsahuje zoznam "
|
||||
"rozšírení, ktoré by mali byť načítané. Každé rozšírenie, ktoré je potrebné "
|
||||
"načítať, musí byť v tomto zozname. Tento zoznam môžete upraviť aj ručne "
|
||||
"pomocou metód DBus EnableExtension a DisableExtension na org.gnome.Shell."
|
||||
"pomocou metód DBus EnableExtension a DisableExtension v org.gnome.Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
@@ -176,17 +166,15 @@ msgid "Keybinding to open the application menu."
|
||||
msgstr "Klávesová skratka na otvorenie ponuky aplikácií."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Keybinding to open the \"Show Applications\" view"
|
||||
msgstr "Klávesová skratka na otvorenie ponuky aplikácií"
|
||||
msgstr "Klávesová skratka na otvorenie pohľadu „Zobraziť aplikácie“"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#, fuzzy
|
||||
#| msgid "Keybinding to open the application menu."
|
||||
msgid ""
|
||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||
msgstr "Klávesová skratka na otvorenie ponuky aplikácií."
|
||||
msgstr ""
|
||||
"Klávesová skratka na otvorenie pohľadu „Zobraziť aplikácie“ v prehľade "
|
||||
"aktivít."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
msgid "Keybinding to toggle the visibility of the message tray"
|
||||
@@ -211,7 +199,7 @@ msgstr "Ktorú klávesnicu používať"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Typ klávesnice, ktorý sa má používať."
|
||||
msgstr "Typ klávesnice, ktorá sa má používať."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid "Framerate used for recording screencasts."
|
||||
@@ -273,6 +261,39 @@ msgstr ""
|
||||
"základe aktuálneho dátumu a použije túto príponu. Pri nahrávaní do iného "
|
||||
"formátu kontajneru by mala byť zmenená."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||
msgid "Attach modal dialog to the parent window"
|
||||
msgstr "Pripojiť modálne dialógové okno k rodičovskému oknu"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
msgid ""
|
||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||
msgstr "Tento kľúč preváži kľúč v org.gnome.mutter po spustení GNOME Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||
msgid "Arrangement of buttons on the titlebar"
|
||||
msgstr "Usporiadanie tlačidiel na titulku okna"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||
msgid ""
|
||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
||||
"GNOME Shell."
|
||||
msgstr ""
|
||||
"Tento kľúč preváži kľúč v org.gnome.desktop.wm.preferences po spustení GNOME "
|
||||
"Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Pracovné priestory sú spravované dynamicky"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||
msgid "Workspaces only on primary monitor"
|
||||
msgstr "Pracovné priestory sú iba na primárnom monitore"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:124
|
||||
#, c-format
|
||||
msgid "There was an error loading the preferences dialog for %s:"
|
||||
@@ -286,11 +307,11 @@ msgstr "Rozšírenie"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Použitím ponuky vyberte rozšírenie na nastavenie"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:529
|
||||
#: ../js/gdm/loginDialog.js:560
|
||||
msgid "Session..."
|
||||
msgstr "Relácia..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:677
|
||||
#: ../js/gdm/loginDialog.js:704
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Prihlásenie"
|
||||
@@ -299,42 +320,42 @@ msgstr "Prihlásenie"
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:736
|
||||
#: ../js/gdm/loginDialog.js:763
|
||||
msgid "Not listed?"
|
||||
msgstr "Nie ste v zozname?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/gdm/loginDialog.js:901 ../js/ui/components/networkAgent.js:137
|
||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
|
||||
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:168
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušiť"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:906
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Prihlásiť sa"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1215
|
||||
#: ../js/gdm/loginDialog.js:1217
|
||||
msgid "Login Window"
|
||||
msgstr "Prihlasovacie okno"
|
||||
|
||||
#. Translators: accessible name of the power menu in the login screen
|
||||
#: ../js/gdm/powerMenu.js:37
|
||||
#: ../js/gdm/powerMenu.js:36
|
||||
msgid "Power"
|
||||
msgstr "Napájanie"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:95 ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:659
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
|
||||
#: ../js/ui/userMenu.js:778
|
||||
msgid "Suspend"
|
||||
msgstr "Uspať"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:100
|
||||
#: ../js/gdm/powerMenu.js:98
|
||||
msgid "Restart"
|
||||
msgstr "Reštartovať"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:105 ../js/ui/userMenu.js:657
|
||||
#: ../js/ui/userMenu.js:659 ../js/ui/userMenu.js:769
|
||||
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:665
|
||||
#: ../js/ui/userMenu.js:667 ../js/ui/userMenu.js:777
|
||||
msgid "Power Off"
|
||||
msgstr "Vypnúť"
|
||||
|
||||
@@ -517,35 +538,35 @@ msgid "S"
|
||||
msgstr "So"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:699
|
||||
#: ../js/ui/calendar.js:700
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr "Žiadne naplánované udalosti"
|
||||
|
||||
#. 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"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %e. %B"
|
||||
|
||||
#. 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"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %e. %B %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:728
|
||||
#: ../js/ui/calendar.js:729
|
||||
msgid "Today"
|
||||
msgstr "Dnes"
|
||||
|
||||
#: ../js/ui/calendar.js:732
|
||||
#: ../js/ui/calendar.js:733
|
||||
msgid "Tomorrow"
|
||||
msgstr "Zajtra"
|
||||
|
||||
#: ../js/ui/calendar.js:743
|
||||
#: ../js/ui/calendar.js:744
|
||||
msgid "This week"
|
||||
msgstr "Tento týždeň"
|
||||
|
||||
#: ../js/ui/calendar.js:751
|
||||
#: ../js/ui/calendar.js:752
|
||||
msgid "Next week"
|
||||
msgstr "Ďalší týždeň"
|
||||
|
||||
@@ -553,10 +574,11 @@ msgstr "Ďalší týždeň"
|
||||
msgid "Removable Devices"
|
||||
msgstr "Vymeniteľné zariadenia"
|
||||
|
||||
# DK: doplnil som slovo "programu", aby to znelo prirodzenejsie. priklad:po pripojeni USB kluca bolo zobrazene "Otvoriť pomocou Súbory"
|
||||
#: ../js/ui/components/autorunManager.js:591
|
||||
#, c-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Otvoriť pomocou %s"
|
||||
msgstr "Otvoriť pomocou programu %s"
|
||||
|
||||
#: ../js/ui/components/autorunManager.js:617
|
||||
msgid "Eject"
|
||||
@@ -623,7 +645,7 @@ msgstr ""
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:314
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Overenie totožnosti drôtovej 802.1X"
|
||||
msgstr "Overenie totožnosti k drôtovej sieti 802.1X"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:316
|
||||
msgid "Network name: "
|
||||
@@ -631,7 +653,7 @@ msgstr "Názov siete: "
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:321
|
||||
msgid "DSL authentication"
|
||||
msgstr "Overenie totožnosti DSL"
|
||||
msgstr "Overenie totožnosti k DSL"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:328
|
||||
msgid "PIN code required"
|
||||
@@ -639,7 +661,7 @@ msgstr "Požaduje sa kód PIN"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:329
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Pre zariadenie mobilnej siete je potrebný PIN kód"
|
||||
msgstr "Pre zariadenie mobilnej siete je potrebný kód PIN"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:330
|
||||
msgid "PIN: "
|
||||
@@ -647,7 +669,7 @@ msgstr "PIN: "
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:336
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Heslo pre mobilnú sieť"
|
||||
msgstr "Heslo k mobilnej sieti"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:337
|
||||
#, c-format
|
||||
@@ -675,11 +697,12 @@ msgstr "Overiť totožnosť"
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Prepáčte, ale nezabralo to. Skúste to, prosím, znova."
|
||||
|
||||
# %d je datum, %t je cas
|
||||
#. Translators: this is a filename used for screencast recording
|
||||
#: ../js/ui/components/recorder.js:44
|
||||
#, no-c-format
|
||||
msgid "Screencast from %d %t"
|
||||
msgstr "Záznam videa obrazovky z %d %t"
|
||||
msgstr "Záznam videa obrazovky dňa %d o %t"
|
||||
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
@@ -714,44 +737,42 @@ msgid "Mute"
|
||||
msgstr "Stlmiť"
|
||||
|
||||
#. Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"
|
||||
#: ../js/ui/components/telepathyClient.js:941
|
||||
#: ../js/ui/components/telepathyClient.js:943
|
||||
#, no-c-format
|
||||
msgid "<b>%H:%M</b> on Yesterday"
|
||||
msgstr ""
|
||||
msgstr "včera o <b>%H:%M</b>"
|
||||
|
||||
#. Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday
|
||||
#: ../js/ui/components/telepathyClient.js:947
|
||||
#, fuzzy, no-c-format
|
||||
#| msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
#: ../js/ui/components/telepathyClient.js:949
|
||||
#, no-c-format
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>"
|
||||
msgstr "Čas odoslania: <b>%A</b>, <b>%R</b>"
|
||||
msgstr "v <b>%A</b> o <b>%H:%M</b>"
|
||||
|
||||
#. 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
|
||||
#: ../js/ui/components/telepathyClient.js:953
|
||||
#, fuzzy, no-c-format
|
||||
#| msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
#: ../js/ui/components/telepathyClient.js:955
|
||||
#, no-c-format
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>"
|
||||
msgstr "Čas odoslania: <b>%A</b>, <b>%e. %B</b>"
|
||||
msgstr "v <b>%A</b> o <b>%H:%M</b>, <b>%e.</b> <b>%B</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:958
|
||||
#, fuzzy, no-c-format
|
||||
#| msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
#: ../js/ui/components/telepathyClient.js:960
|
||||
#, no-c-format
|
||||
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>, %Y"
|
||||
msgstr "Čas odoslania: <b>%A</b>, <b>%e. %B</b> %Y"
|
||||
msgstr "v <b>%A</b> o <b>%H:%M</b>, <b>%e.</b> <b>%B</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:986
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s odteraz vystupuje ako %s"
|
||||
msgstr "Kontakt %s odteraz vystupuje ako %s"
|
||||
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1085
|
||||
#: ../js/ui/components/telepathyClient.js:1087
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Pozvánka do %s"
|
||||
@@ -759,42 +780,42 @@ msgstr "Pozvánka do %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1093
|
||||
#: ../js/ui/components/telepathyClient.js:1095
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s vás pozýva aby ste sa pridali do %s"
|
||||
msgstr "Kontakt %s vás pozýva aby ste sa pridali do %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1095
|
||||
#: ../js/ui/components/telepathyClient.js:1174
|
||||
#: ../js/ui/components/telepathyClient.js:1237
|
||||
#: ../js/ui/components/telepathyClient.js:1097
|
||||
#: ../js/ui/components/telepathyClient.js:1176
|
||||
#: ../js/ui/components/telepathyClient.js:1239
|
||||
msgid "Decline"
|
||||
msgstr "Odmietnuť"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#: ../js/ui/components/telepathyClient.js:1175
|
||||
#: ../js/ui/components/telepathyClient.js:1238
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Accept"
|
||||
msgstr "Prijať"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1126
|
||||
#: ../js/ui/components/telepathyClient.js:1128
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videohovor od používateľa %s"
|
||||
msgstr "Videohovor od kontaktu %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Hovor od používateľa %s"
|
||||
msgstr "Hovor od kontaktu %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1134
|
||||
#: ../js/ui/components/telepathyClient.js:1136
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Odmietnuť"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1136
|
||||
#: ../js/ui/components/telepathyClient.js:1138
|
||||
msgid "Answer"
|
||||
msgstr "Prijať hovor"
|
||||
|
||||
@@ -803,110 +824,111 @@ msgstr "Prijať hovor"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1168
|
||||
#: ../js/ui/components/telepathyClient.js:1170
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s vám posiela %s"
|
||||
msgstr "Kontakt %s vám posiela %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1203
|
||||
#: ../js/ui/components/telepathyClient.js:1205
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s by chcel získať oprávnenie vidieť, kedy ste pripojený"
|
||||
msgstr ""
|
||||
"Kontakt %s by chcel získať oprávnenie vidieť, kedy ste pripojený"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1295
|
||||
#: ../js/ui/components/telepathyClient.js:1297
|
||||
msgid "Network error"
|
||||
msgstr "Chyba siete"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1297
|
||||
#: ../js/ui/components/telepathyClient.js:1299
|
||||
msgid "Authentication failed"
|
||||
msgstr "Overenie totožnosti zlyhalo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1299
|
||||
#: ../js/ui/components/telepathyClient.js:1301
|
||||
msgid "Encryption error"
|
||||
msgstr "Chyba šifrovania"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1301
|
||||
#: ../js/ui/components/telepathyClient.js:1303
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Neposkytnutý certifikát"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1303
|
||||
#: ../js/ui/components/telepathyClient.js:1305
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Nedôveryhodný certifikát"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1305
|
||||
#: ../js/ui/components/telepathyClient.js:1307
|
||||
msgid "Certificate expired"
|
||||
msgstr "Certifikát s ukončenou platnosťou"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1307
|
||||
#: ../js/ui/components/telepathyClient.js:1309
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Neaktivovaný certifikát"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1309
|
||||
#: ../js/ui/components/telepathyClient.js:1311
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Certifikát s nesúhlasným názvom hostiteľa"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1311
|
||||
#: ../js/ui/components/telepathyClient.js:1313
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Certifikát s nesúhlasným odtlačkom"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1313
|
||||
#: ../js/ui/components/telepathyClient.js:1315
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Sebou podpísaný certifikát"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1315
|
||||
#: ../js/ui/components/telepathyClient.js:1317
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Stav je nastavený na odhlásený"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1317
|
||||
#: ../js/ui/components/telepathyClient.js:1319
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Šifrovanie nie je dostupné"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1319
|
||||
#: ../js/ui/components/telepathyClient.js:1321
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Certifikát je neplatný"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1321
|
||||
#: ../js/ui/components/telepathyClient.js:1323
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Pripojenie bolo odmietnuté"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1323
|
||||
#: ../js/ui/components/telepathyClient.js:1325
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Nedá sa nadviazať spojenie"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1325
|
||||
#: ../js/ui/components/telepathyClient.js:1327
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Spojenie sa stratilo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1327
|
||||
#: ../js/ui/components/telepathyClient.js:1329
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Tento účet je už pripojený k serveru"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1329
|
||||
#: ../js/ui/components/telepathyClient.js:1331
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Pripojenie bolo nahradené novým, ktoré používa rovnaký zdroj"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1331
|
||||
#: ../js/ui/components/telepathyClient.js:1333
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Účet na serveri už existuje"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1333
|
||||
#: ../js/ui/components/telepathyClient.js:1335
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Server je momentálne príliš zaneprázdnený na zvládnutie pripojenia"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1335
|
||||
#: ../js/ui/components/telepathyClient.js:1337
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Certifikát bol zrušený"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1337
|
||||
#: ../js/ui/components/telepathyClient.js:1339
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Šifrovací algoritmus používaný certifikátom nie je bezpečný alebo je "
|
||||
"kryptograficky slabý"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1339
|
||||
#: ../js/ui/components/telepathyClient.js:1341
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -914,26 +936,26 @@ msgstr ""
|
||||
"Dĺžka certifikátu servera, alebo hĺbka reťazca certifikátu servera presahuje "
|
||||
"limit stanovený kryptografickou knižnicou."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1341
|
||||
#: ../js/ui/components/telepathyClient.js:1343
|
||||
msgid "Internal error"
|
||||
msgstr "Vnútorná chyba"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1351
|
||||
#: ../js/ui/components/telepathyClient.js:1353
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Pripojenie k %s zlyhalo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1360
|
||||
#: ../js/ui/components/telepathyClient.js:1362
|
||||
msgid "Reconnect"
|
||||
msgstr "Znovu sa pripojiť"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1361
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Edit account"
|
||||
msgstr "Upraviť účet"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1406
|
||||
#: ../js/ui/components/telepathyClient.js:1408
|
||||
msgid "Unknown reason"
|
||||
msgstr "Neznámy dôvod"
|
||||
|
||||
@@ -992,7 +1014,7 @@ msgstr[2] "Budete automaticky odhlásený o %d sekundy."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:74
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Odhlasuje sa zo systému."
|
||||
msgstr "Prebieha odhlásenie zo systému."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
msgctxt "button"
|
||||
@@ -1120,21 +1142,21 @@ msgstr "Zobraziť zdroj"
|
||||
msgid "Web Page"
|
||||
msgstr "Webová stránka"
|
||||
|
||||
#: ../js/ui/messageTray.js:1082
|
||||
#: ../js/ui/messageTray.js:1083
|
||||
msgid "Open"
|
||||
msgstr "Otvoriť"
|
||||
|
||||
#: ../js/ui/messageTray.js:1089
|
||||
#: ../js/ui/messageTray.js:1090
|
||||
msgid "Remove"
|
||||
msgstr "Odstrániť"
|
||||
|
||||
# DK: zvazoval som pouzit "Panel správ"
|
||||
# neviem co bude vhodnejsie ako preklad "tray"
|
||||
#: ../js/ui/messageTray.js:1545
|
||||
#: ../js/ui/messageTray.js:1534
|
||||
msgid "Message Tray"
|
||||
msgstr "Lišta správ"
|
||||
|
||||
#: ../js/ui/messageTray.js:2552
|
||||
#: ../js/ui/messageTray.js:2557
|
||||
msgid "System Information"
|
||||
msgstr "Informácie o systéme"
|
||||
|
||||
@@ -1175,7 +1197,7 @@ msgstr "Ukončiť"
|
||||
msgid "Activities"
|
||||
msgstr "Aktivity"
|
||||
|
||||
#: ../js/ui/panel.js:965
|
||||
#: ../js/ui/panel.js:966
|
||||
msgid "Top Bar"
|
||||
msgstr "Horná lišta"
|
||||
|
||||
@@ -1197,11 +1219,11 @@ msgstr "Prosím, zadajte príkaz:"
|
||||
# v ostatnych retazcoch je pouzite %e, tak to bude asi OK
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:79
|
||||
#: ../js/ui/screenShield.js:80
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %e. %B"
|
||||
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
@@ -1209,13 +1231,13 @@ msgstr[0] "%d nových správ"
|
||||
msgstr[1] "%d nová správa"
|
||||
msgstr[2] "%d nové správy"
|
||||
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d nových upozornení"
|
||||
msgstr[1] "%d nové upozornenie"
|
||||
msgstr[2] "%d nové upozornenia"
|
||||
msgstr[0] "%d nových oznámení"
|
||||
msgstr[1] "%d nové oznámenie"
|
||||
msgstr[2] "%d nové oznámenia"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:275
|
||||
msgid "Searching..."
|
||||
@@ -1249,13 +1271,13 @@ msgstr "Heslo"
|
||||
msgid "Remember Password"
|
||||
msgstr "Zapamätať heslo"
|
||||
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
|
||||
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:171
|
||||
msgid "Unlock"
|
||||
msgstr "Odblokovať"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:39
|
||||
msgid "Accessibility"
|
||||
msgstr "Prístupnosť"
|
||||
msgstr "Zjednodušenie ovládania"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:44
|
||||
msgid "Zoom"
|
||||
@@ -1537,7 +1559,7 @@ msgstr "Mobilné"
|
||||
|
||||
#: ../js/ui/status/network.js:1628
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN pripojenia"
|
||||
msgstr "Pripojenia k VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1635
|
||||
msgid "Network Settings"
|
||||
@@ -1669,7 +1691,7 @@ msgstr "Hlasitosť"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofón"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:177
|
||||
#: ../js/ui/unlockDialog.js:178
|
||||
msgid "Log in as another user"
|
||||
msgstr "Prihlásiť ako iný používateľ"
|
||||
|
||||
@@ -1697,35 +1719,35 @@ msgstr "Nečinný"
|
||||
msgid "Unavailable"
|
||||
msgstr "Nedostupný"
|
||||
|
||||
#: ../js/ui/userMenu.js:735
|
||||
#: ../js/ui/userMenu.js:743
|
||||
msgid "Notifications"
|
||||
msgstr "Upozornenia"
|
||||
|
||||
#: ../js/ui/userMenu.js:743
|
||||
#: ../js/ui/userMenu.js:751
|
||||
msgid "System Settings"
|
||||
msgstr "Nastavenia systému"
|
||||
|
||||
#: ../js/ui/userMenu.js:751
|
||||
#: ../js/ui/userMenu.js:759
|
||||
msgid "Switch User"
|
||||
msgstr "Prepnúť používateľa"
|
||||
|
||||
#: ../js/ui/userMenu.js:756
|
||||
#: ../js/ui/userMenu.js:764
|
||||
msgid "Log Out"
|
||||
msgstr "Odhlásiť sa"
|
||||
|
||||
#: ../js/ui/userMenu.js:761
|
||||
#: ../js/ui/userMenu.js:769
|
||||
msgid "Lock"
|
||||
msgstr "Uzamknúť"
|
||||
|
||||
#: ../js/ui/userMenu.js:776
|
||||
#: ../js/ui/userMenu.js:784
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Nainštalovať aktualizácie a reštartovať"
|
||||
|
||||
#: ../js/ui/userMenu.js:794
|
||||
#: ../js/ui/userMenu.js:802
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Váš stav bude nastavený na zaneprázdnený"
|
||||
|
||||
#: ../js/ui/userMenu.js:795
|
||||
#: ../js/ui/userMenu.js:803
|
||||
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."
|
||||
|
||||
188
po/sl.po
188
po/sl.po
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-10-31 16:48+0000\n"
|
||||
"PO-Revision-Date: 2012-10-31 18:50+0100\n"
|
||||
"POT-Creation-Date: 2012-10-16 00:16+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 07:53+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"Language: Slovenian\n"
|
||||
@@ -37,6 +37,14 @@ msgstr "Sistem"
|
||||
msgid "Show the message tray"
|
||||
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
|
||||
msgid "GNOME Shell"
|
||||
msgstr "Gnome lupina"
|
||||
@@ -103,29 +111,29 @@ msgid "Internally used to store the last session presence status for the user. T
|
||||
msgstr "Uporabljeno za shranjevanje stanja prisotnosti zadnje seje uporabnika. Vrednost določa števec predmeta GsmPresenceStatus."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||
msgstr "Vedno pokaži možnost 'Odjave' v meniju uporabnika."
|
||||
|
||||
#: ../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 "Možnost onemogoči samodejno skrivanje možnosti 'Odjava' v meniju uporabnika, kadar je ta seja edina dejavna."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Pokaži tedenski datum v koledarju"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Izbrana možnost določa prikaz ISO tedenski datum v koledarju."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Tipkovna bližnjica, ki odpre meni programov"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Tipkovna bližnjica, ki odpre meni programov."
|
||||
|
||||
#: ../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"
|
||||
msgstr "Tipkovna bližnjica za preklop vidnosti vrstice sporočanja"
|
||||
@@ -230,9 +238,9 @@ msgid "Power"
|
||||
msgstr "Napajanje"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89
|
||||
#: ../js/ui/userMenu.js:660
|
||||
#: ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/ui/userMenu.js:775
|
||||
msgid "Suspend"
|
||||
msgstr "Zaustavi"
|
||||
|
||||
@@ -241,9 +249,9 @@ msgid "Restart"
|
||||
msgstr "Zaženi znova"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99
|
||||
#: ../js/ui/userMenu.js:666
|
||||
#: ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/ui/userMenu.js:662
|
||||
#: ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:774
|
||||
msgid "Power Off"
|
||||
msgstr "Izklop"
|
||||
|
||||
@@ -623,35 +631,35 @@ msgstr "Utišaj"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:950
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Poslano <b>%A</b> ob <b>%X</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:956
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Poslano <b>%A</b>, <b>%d. %Ba</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:961
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Poslano <b>%A</b>, <b>%d. %Ba</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:990
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s je sedaj znan kot v %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1090
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Povabilo v %s"
|
||||
@@ -659,42 +667,42 @@ msgstr "Povabilo v %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s vas vabi, da se pridružite v %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1179
|
||||
#: ../js/ui/components/telepathyClient.js:1242
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "Zavrni"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1101
|
||||
#: ../js/ui/components/telepathyClient.js:1180
|
||||
#: ../js/ui/components/telepathyClient.js:1243
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "Sprejmi"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1131
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s želi vzpostaviti video klic"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1134
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s kliče"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Zavrni"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "Odgovori"
|
||||
|
||||
@@ -703,129 +711,129 @@ msgstr "Odgovori"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1173
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s pošilja %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1208
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s želi dovoljenje za pogled dosegljivosti"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "Napaka omrežja"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "Overitev je spodletela"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "Napaka šifriranja"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Potrdilo ni na voljo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Potrdilo ni zaupljivo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "Potrdilo je preteklo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Potrdilo ni potrjeno"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Neustrezno ime gostitelja potrdila"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Neustrezen prstni odtis potrdila"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Potrdilo je samo-podpisano"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Stanje je nastavljeno na brez povezave"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Šifriranje ni na voljo."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Potrdilo je neveljavno."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Povezava je zavrnjena."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Povezave ni mogoče vzpostaviti."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Povezava je prekinjena."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Račun je s strežnikom že povezan"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Povezava je zamenjana z novo povezavo, ki uporablja isti vir."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Račun na strežniku že obstaja"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Strežnik je trenutno preveč zaposlen za upravljanje s povezavo."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Potrdilo je preklicano"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "Potrdilo ne uporablja varnega algoritma ali pa uporablja šibko šifriranje."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
|
||||
msgstr "Dolžina potrdila strežnika ali pa globina verige potrdila presega omejitev, ki je določena s šifrirno knjižnico."
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "Notranja napaka"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1356
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Povezava z %s je spodletela"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1365
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "Ponovno se poveži"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1366
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "Uredi račun"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1411
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "Neznan vzrok"
|
||||
|
||||
@@ -1015,24 +1023,24 @@ msgstr "Poglej vir"
|
||||
msgid "Web Page"
|
||||
msgstr "Spletna stran"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1081
|
||||
msgid "Open"
|
||||
msgstr "Odpri"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Remove"
|
||||
msgstr "Odstrani"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:1540
|
||||
msgid "Message Tray"
|
||||
msgstr "Vrstica sporočanja"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2547
|
||||
msgid "System Information"
|
||||
msgstr "Podrobnosti sistema"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506
|
||||
#: ../src/shell-app.c:374
|
||||
#: ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Neznano"
|
||||
@@ -1088,11 +1096,11 @@ msgstr "Vnos ukaza:"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:79
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d. %m."
|
||||
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
@@ -1101,7 +1109,7 @@ msgstr[1] "%d novo sporočilo"
|
||||
msgstr[2] "%d novi sporočili"
|
||||
msgstr[3] "%d nova sporočila"
|
||||
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
@@ -1582,71 +1590,71 @@ msgstr "Mikrofon"
|
||||
msgid "Log in as another user"
|
||||
msgstr "Prijava kot drug uporabnik"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Available"
|
||||
msgstr "Na voljo"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Busy"
|
||||
msgstr "Zaposleno"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Invisible"
|
||||
msgstr "Nevidno"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Away"
|
||||
msgstr "Odsotno"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:192
|
||||
msgid "Idle"
|
||||
msgstr "Nedejavno"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:195
|
||||
msgid "Unavailable"
|
||||
msgstr "Nedostopno"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
#: ../js/ui/userMenu.js:740
|
||||
msgid "Notifications"
|
||||
msgstr "Obvestila"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
#: ../js/ui/userMenu.js:748
|
||||
msgid "System Settings"
|
||||
msgstr "Sistemske nastavitve"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:756
|
||||
msgid "Switch User"
|
||||
msgstr "Preklopi uporabnika"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:761
|
||||
msgid "Log Out"
|
||||
msgstr "Odjava"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:766
|
||||
msgid "Lock"
|
||||
msgstr "Zakleni"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:781
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Namesti posodobitve in ponovno zaženi"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:799
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../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."
|
||||
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"
|
||||
msgstr "Okna"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Programi"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Poišči"
|
||||
|
||||
@@ -1719,7 +1727,7 @@ msgstr "Uporabi poseben način, npr.: \"gdm\" za prijavni zaslon"
|
||||
msgid "List possible modes"
|
||||
msgstr "Seznam mogočih načinov"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Zaganjanje '%s' je spodletelo"
|
||||
|
||||
199
po/sr.po
199
po/sr.po
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-11-02 15:25+0000\n"
|
||||
"PO-Revision-Date: 2012-11-03 09:05+0200\n"
|
||||
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 20:23+0200\n"
|
||||
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
|
||||
"Language-Team: Serbian <gnom@prevod.org>\n"
|
||||
"Language: sr\n"
|
||||
@@ -36,6 +36,16 @@ msgstr "Систем"
|
||||
msgid "Show the message tray"
|
||||
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
|
||||
msgid "GNOME Shell"
|
||||
msgstr "Гномова шкољка"
|
||||
@@ -134,32 +144,31 @@ msgstr ""
|
||||
"корисника. Ова вредност је из пописа стања Гсм присуства."
|
||||
|
||||
#: ../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"
|
||||
msgstr "Приказује дан у недељи у календару"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Ако је изабрано, приказује ИСО дан у недељи у календару."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Свеза тастера за отварање изборника програма"
|
||||
msgstr "Пречица за отварање изборника програма"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Пречица за отварање изборника програма."
|
||||
|
||||
#: ../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."
|
||||
msgstr "Свеза тастера за отварање изборника програма."
|
||||
#| 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"
|
||||
@@ -292,8 +301,8 @@ msgstr "Прозор за пријављивање"
|
||||
msgid "Power"
|
||||
msgstr "Угаси"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:775
|
||||
msgid "Suspend"
|
||||
msgstr "Обустави"
|
||||
|
||||
@@ -301,8 +310,8 @@ msgstr "Обустави"
|
||||
msgid "Restart"
|
||||
msgstr "Поново покрени"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:774
|
||||
msgid "Power Off"
|
||||
msgstr "Угаси"
|
||||
|
||||
@@ -682,35 +691,35 @@ msgstr "Утишај"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:952
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Послато је <b>%A</b> у <b>%X</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:958
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Послато је у <b>%A</b>, <b>%d. %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:963
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Послато је у <b>%A</b>, <b>%d %B</b>, %Y."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:992
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s је сада познат као %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1092
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Позивница за %s"
|
||||
@@ -718,42 +727,42 @@ msgstr "Позивница за %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s вас позива да се придружите %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1102
|
||||
#: ../js/ui/components/telepathyClient.js:1181
|
||||
#: ../js/ui/components/telepathyClient.js:1244
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "Одбиј"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1103
|
||||
#: ../js/ui/components/telepathyClient.js:1182
|
||||
#: ../js/ui/components/telepathyClient.js:1245
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "Прихвати"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1133
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s вам је упутио видео позив"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1136
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s вас зове"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Одбиј"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1143
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "Одговори"
|
||||
|
||||
@@ -762,109 +771,109 @@ msgstr "Одговори"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1175
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s вам шаље „%s“"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1210
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s тражи одобрење да види када сте на вези"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "Грешка мреже"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "Потврђивање идентитета није успело"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "Грешка шифровања"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Уверење није прослеђено"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Уверење није поверљиво"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "Уверење је истекло"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Уверење није активирано"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Назив домаћина уверења се не поклапа"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Отисак уверења се не поклапа"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Уверење је самопотписано"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Стање је постављено на „неповезан“"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Шифровање није доступно"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Уверење није исправно"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Веза је одбијена"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Веза не може бити успостављена"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Веза је изгубљена"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Овај налог је већ повезан са сервером"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Веза је замењена новом везом користећи исти ресурс"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Овај налог већ постоји на серверу"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Сервер је тренутно превише заузет да би руковао везом"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Уверење је опозвано"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Уверење користи несигуран алгоритам шифровања или је криптографски слабо"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -872,26 +881,26 @@ msgstr ""
|
||||
"Дужина уверења сервера, или дубина ланца уверења сервера, премашује границе "
|
||||
"које је задала библиотека шифровања"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1348
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "Унутрашња грешка"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1358
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Повезивање на „%s“ није успело"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1367
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "Поново се повежи"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1368
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "Уреди налог"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1413
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "Непознат разлог"
|
||||
|
||||
@@ -1080,23 +1089,23 @@ msgstr "Прикажи код"
|
||||
msgid "Web Page"
|
||||
msgstr "Веб страница"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1081
|
||||
msgid "Open"
|
||||
msgstr "Отвори"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Remove"
|
||||
msgstr "Уклони"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:1540
|
||||
msgid "Message Tray"
|
||||
msgstr "Фиока порука"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2547
|
||||
msgid "System Information"
|
||||
msgstr "Подаци о систему"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Непознат"
|
||||
@@ -1152,11 +1161,11 @@ msgstr "Унесите наредбу:"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:79
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d. %B"
|
||||
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
@@ -1165,7 +1174,7 @@ msgstr[1] "%d нове поруке"
|
||||
msgstr[2] "%d нових порука"
|
||||
msgstr[3] "Једна нова порука"
|
||||
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
@@ -1629,59 +1638,59 @@ msgstr "Микрофон"
|
||||
msgid "Log in as another user"
|
||||
msgstr "Пријавите се као други корсник"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Available"
|
||||
msgstr "Доступан"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Busy"
|
||||
msgstr "Заузет"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Invisible"
|
||||
msgstr "Невидљив"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Away"
|
||||
msgstr "Одсутан"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:192
|
||||
msgid "Idle"
|
||||
msgstr "Мирује"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:195
|
||||
msgid "Unavailable"
|
||||
msgstr "Недоступан"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
#: ../js/ui/userMenu.js:740
|
||||
msgid "Notifications"
|
||||
msgstr "Обавештења"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
#: ../js/ui/userMenu.js:748
|
||||
msgid "System Settings"
|
||||
msgstr "Подешавања система"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:756
|
||||
msgid "Switch User"
|
||||
msgstr "Промени корисника"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:761
|
||||
msgid "Log Out"
|
||||
msgstr "Одјави ме"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:766
|
||||
msgid "Lock"
|
||||
msgstr "Закључај"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:781
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Инсталирај ажурирања и поново покрени"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:799
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Ваше стање ћаскања ће бити постављено на заузето"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../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."
|
||||
@@ -1690,15 +1699,15 @@ msgstr ""
|
||||
"мрежи је подешено тако да ће остали знати да ви не можете видети њихове "
|
||||
"поруке."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
#: ../js/ui/viewSelector.js:87
|
||||
msgid "Windows"
|
||||
msgstr "Прозори"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Програми"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Тражи"
|
||||
|
||||
@@ -1771,7 +1780,7 @@ msgstr "Користи нарочит режим, нпр. „gdm“ за екр
|
||||
msgid "List possible modes"
|
||||
msgstr "Исписује могуће режиме"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Не могу да покренем „%s“"
|
||||
|
||||
199
po/sr@latin.po
199
po/sr@latin.po
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-11-02 15:25+0000\n"
|
||||
"PO-Revision-Date: 2012-11-03 09:05+0200\n"
|
||||
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 20:23+0200\n"
|
||||
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
|
||||
"Language-Team: Serbian <gnom@prevod.org>\n"
|
||||
"Language: sr\n"
|
||||
@@ -36,6 +36,16 @@ msgstr "Sistem"
|
||||
msgid "Show the message tray"
|
||||
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
|
||||
msgid "GNOME Shell"
|
||||
msgstr "Gnomova školjka"
|
||||
@@ -134,32 +144,31 @@ msgstr ""
|
||||
"korisnika. Ova vrednost je iz popisa stanja Gsm prisustva."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||
msgstr "Uvek prikazuje stavku izbornika „Odjavi me“ u korisničkom izborniku."
|
||||
|
||||
#: ../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 ""
|
||||
"Ovaj ključ prepisuje samostalno skrivanje stavke izbornika „Odjavi me“ u "
|
||||
"slučaju jednog korisnika sa jednom sesijom."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Prikazuje dan u nedelji u kalendaru"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Ako je izabrano, prikazuje ISO dan u nedelji u kalendaru."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
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
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Prečica za otvaranje izbornika programa."
|
||||
|
||||
#: ../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."
|
||||
msgstr "Sveza tastera za otvaranje izbornika programa."
|
||||
#| 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"
|
||||
@@ -292,8 +301,8 @@ msgstr "Prozor za prijavljivanje"
|
||||
msgid "Power"
|
||||
msgstr "Ugasi"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:779
|
||||
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:775
|
||||
msgid "Suspend"
|
||||
msgstr "Obustavi"
|
||||
|
||||
@@ -301,8 +310,8 @@ msgstr "Obustavi"
|
||||
msgid "Restart"
|
||||
msgstr "Ponovo pokreni"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
|
||||
#: ../js/ui/userMenu.js:778
|
||||
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
|
||||
#: ../js/ui/userMenu.js:774
|
||||
msgid "Power Off"
|
||||
msgstr "Ugasi"
|
||||
|
||||
@@ -682,35 +691,35 @@ msgstr "Utišaj"
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/components/telepathyClient.js:952
|
||||
#: ../js/ui/components/telepathyClient.js:948
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Poslato je <b>%A</b> u <b>%X</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/components/telepathyClient.js:958
|
||||
#: ../js/ui/components/telepathyClient.js:954
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Poslato je u <b>%A</b>, <b>%d. %B</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/components/telepathyClient.js:963
|
||||
#: ../js/ui/components/telepathyClient.js:959
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Poslato je u <b>%A</b>, <b>%d %B</b>, %Y."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:992
|
||||
#: ../js/ui/components/telepathyClient.js:988
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s je sada poznat kao %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1092
|
||||
#: ../js/ui/components/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Pozivnica za %s"
|
||||
@@ -718,42 +727,42 @@ msgstr "Pozivnica za %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1100
|
||||
#: ../js/ui/components/telepathyClient.js:1096
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s vas poziva da se pridružite %s"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1102
|
||||
#: ../js/ui/components/telepathyClient.js:1181
|
||||
#: ../js/ui/components/telepathyClient.js:1244
|
||||
#: ../js/ui/components/telepathyClient.js:1098
|
||||
#: ../js/ui/components/telepathyClient.js:1177
|
||||
#: ../js/ui/components/telepathyClient.js:1240
|
||||
msgid "Decline"
|
||||
msgstr "Odbij"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1103
|
||||
#: ../js/ui/components/telepathyClient.js:1182
|
||||
#: ../js/ui/components/telepathyClient.js:1245
|
||||
#: ../js/ui/components/telepathyClient.js:1099
|
||||
#: ../js/ui/components/telepathyClient.js:1178
|
||||
#: ../js/ui/components/telepathyClient.js:1241
|
||||
msgid "Accept"
|
||||
msgstr "Prihvati"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1133
|
||||
#: ../js/ui/components/telepathyClient.js:1129
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s vam je uputio video poziv"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1136
|
||||
#: ../js/ui/components/telepathyClient.js:1132
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s vas zove"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1141
|
||||
#: ../js/ui/components/telepathyClient.js:1137
|
||||
#: ../js/ui/status/bluetooth.js:346
|
||||
msgid "Reject"
|
||||
msgstr "Odbij"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/components/telepathyClient.js:1143
|
||||
#: ../js/ui/components/telepathyClient.js:1139
|
||||
msgid "Answer"
|
||||
msgstr "Odgovori"
|
||||
|
||||
@@ -762,109 +771,109 @@ msgstr "Odgovori"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/components/telepathyClient.js:1175
|
||||
#: ../js/ui/components/telepathyClient.js:1171
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s vam šalje „%s“"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/components/telepathyClient.js:1210
|
||||
#: ../js/ui/components/telepathyClient.js:1206
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s traži odobrenje da vidi kada ste na vezi"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
#: ../js/ui/components/telepathyClient.js:1298
|
||||
msgid "Network error"
|
||||
msgstr "Greška mreže"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
#: ../js/ui/components/telepathyClient.js:1300
|
||||
msgid "Authentication failed"
|
||||
msgstr "Potvrđivanje identiteta nije uspelo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
#: ../js/ui/components/telepathyClient.js:1302
|
||||
msgid "Encryption error"
|
||||
msgstr "Greška šifrovanja"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
#: ../js/ui/components/telepathyClient.js:1304
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Uverenje nije prosleđeno"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
#: ../js/ui/components/telepathyClient.js:1306
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Uverenje nije poverljivo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
#: ../js/ui/components/telepathyClient.js:1308
|
||||
msgid "Certificate expired"
|
||||
msgstr "Uverenje je isteklo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
#: ../js/ui/components/telepathyClient.js:1310
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Uverenje nije aktivirano"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
#: ../js/ui/components/telepathyClient.js:1312
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Naziv domaćina uverenja se ne poklapa"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
#: ../js/ui/components/telepathyClient.js:1314
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Otisak uverenja se ne poklapa"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
#: ../js/ui/components/telepathyClient.js:1316
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Uverenje je samopotpisano"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
#: ../js/ui/components/telepathyClient.js:1318
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Stanje je postavljeno na „nepovezan“"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
#: ../js/ui/components/telepathyClient.js:1320
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Šifrovanje nije dostupno"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
#: ../js/ui/components/telepathyClient.js:1322
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Uverenje nije ispravno"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
#: ../js/ui/components/telepathyClient.js:1324
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Veza je odbijena"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
#: ../js/ui/components/telepathyClient.js:1326
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Veza ne može biti uspostavljena"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
#: ../js/ui/components/telepathyClient.js:1328
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Veza je izgubljena"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
#: ../js/ui/components/telepathyClient.js:1330
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "Ovaj nalog je već povezan sa serverom"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
#: ../js/ui/components/telepathyClient.js:1332
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Veza je zamenjena novom vezom koristeći isti resurs"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
#: ../js/ui/components/telepathyClient.js:1334
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Ovaj nalog već postoji na serveru"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
#: ../js/ui/components/telepathyClient.js:1336
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Server je trenutno previše zauzet da bi rukovao vezom"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
#: ../js/ui/components/telepathyClient.js:1338
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Uverenje je opozvano"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
#: ../js/ui/components/telepathyClient.js:1340
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Uverenje koristi nesiguran algoritam šifrovanja ili je kriptografski slabo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1346
|
||||
#: ../js/ui/components/telepathyClient.js:1342
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@@ -872,26 +881,26 @@ msgstr ""
|
||||
"Dužina uverenja servera, ili dubina lanca uverenja servera, premašuje granice "
|
||||
"koje je zadala biblioteka šifrovanja"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1348
|
||||
#: ../js/ui/components/telepathyClient.js:1344
|
||||
msgid "Internal error"
|
||||
msgstr "Unutrašnja greška"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/components/telepathyClient.js:1358
|
||||
#: ../js/ui/components/telepathyClient.js:1354
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Povezivanje na „%s“ nije uspelo"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1367
|
||||
#: ../js/ui/components/telepathyClient.js:1363
|
||||
msgid "Reconnect"
|
||||
msgstr "Ponovo se poveži"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1368
|
||||
#: ../js/ui/components/telepathyClient.js:1364
|
||||
msgid "Edit account"
|
||||
msgstr "Uredi nalog"
|
||||
|
||||
#: ../js/ui/components/telepathyClient.js:1413
|
||||
#: ../js/ui/components/telepathyClient.js:1409
|
||||
msgid "Unknown reason"
|
||||
msgstr "Nepoznat razlog"
|
||||
|
||||
@@ -1080,23 +1089,23 @@ msgstr "Prikaži kod"
|
||||
msgid "Web Page"
|
||||
msgstr "Veb stranica"
|
||||
|
||||
#: ../js/ui/messageTray.js:1084
|
||||
#: ../js/ui/messageTray.js:1081
|
||||
msgid "Open"
|
||||
msgstr "Otvori"
|
||||
|
||||
#: ../js/ui/messageTray.js:1091
|
||||
#: ../js/ui/messageTray.js:1088
|
||||
msgid "Remove"
|
||||
msgstr "Ukloni"
|
||||
|
||||
#: ../js/ui/messageTray.js:1543
|
||||
#: ../js/ui/messageTray.js:1540
|
||||
msgid "Message Tray"
|
||||
msgstr "Fioka poruka"
|
||||
|
||||
#: ../js/ui/messageTray.js:2549
|
||||
#: ../js/ui/messageTray.js:2547
|
||||
msgid "System Information"
|
||||
msgstr "Podaci o sistemu"
|
||||
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
|
||||
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Nepoznat"
|
||||
@@ -1152,11 +1161,11 @@ msgstr "Unesite naredbu:"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:80
|
||||
#: ../js/ui/screenShield.js:79
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d. %B"
|
||||
|
||||
#: ../js/ui/screenShield.js:144
|
||||
#: ../js/ui/screenShield.js:143
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
@@ -1165,7 +1174,7 @@ msgstr[1] "%d nove poruke"
|
||||
msgstr[2] "%d novih poruka"
|
||||
msgstr[3] "Jedna nova poruka"
|
||||
|
||||
#: ../js/ui/screenShield.js:146
|
||||
#: ../js/ui/screenShield.js:145
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
@@ -1629,59 +1638,59 @@ msgstr "Mikrofon"
|
||||
msgid "Log in as another user"
|
||||
msgstr "Prijavite se kao drugi korsnik"
|
||||
|
||||
#: ../js/ui/userMenu.js:181
|
||||
#: ../js/ui/userMenu.js:180
|
||||
msgid "Available"
|
||||
msgstr "Dostupan"
|
||||
|
||||
#: ../js/ui/userMenu.js:184
|
||||
#: ../js/ui/userMenu.js:183
|
||||
msgid "Busy"
|
||||
msgstr "Zauzet"
|
||||
|
||||
#: ../js/ui/userMenu.js:187
|
||||
#: ../js/ui/userMenu.js:186
|
||||
msgid "Invisible"
|
||||
msgstr "Nevidljiv"
|
||||
|
||||
#: ../js/ui/userMenu.js:190
|
||||
#: ../js/ui/userMenu.js:189
|
||||
msgid "Away"
|
||||
msgstr "Odsutan"
|
||||
|
||||
#: ../js/ui/userMenu.js:193
|
||||
#: ../js/ui/userMenu.js:192
|
||||
msgid "Idle"
|
||||
msgstr "Miruje"
|
||||
|
||||
#: ../js/ui/userMenu.js:196
|
||||
#: ../js/ui/userMenu.js:195
|
||||
msgid "Unavailable"
|
||||
msgstr "Nedostupan"
|
||||
|
||||
#: ../js/ui/userMenu.js:744
|
||||
#: ../js/ui/userMenu.js:740
|
||||
msgid "Notifications"
|
||||
msgstr "Obaveštenja"
|
||||
|
||||
#: ../js/ui/userMenu.js:752
|
||||
#: ../js/ui/userMenu.js:748
|
||||
msgid "System Settings"
|
||||
msgstr "Podešavanja sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:760
|
||||
#: ../js/ui/userMenu.js:756
|
||||
msgid "Switch User"
|
||||
msgstr "Promeni korisnika"
|
||||
|
||||
#: ../js/ui/userMenu.js:765
|
||||
#: ../js/ui/userMenu.js:761
|
||||
msgid "Log Out"
|
||||
msgstr "Odjavi me"
|
||||
|
||||
#: ../js/ui/userMenu.js:770
|
||||
#: ../js/ui/userMenu.js:766
|
||||
msgid "Lock"
|
||||
msgstr "Zaključaj"
|
||||
|
||||
#: ../js/ui/userMenu.js:785
|
||||
#: ../js/ui/userMenu.js:781
|
||||
msgid "Install Updates & Restart"
|
||||
msgstr "Instaliraj ažuriranja i ponovo pokreni"
|
||||
|
||||
#: ../js/ui/userMenu.js:803
|
||||
#: ../js/ui/userMenu.js:799
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Vaše stanje ćaskanja će biti postavljeno na zauzeto"
|
||||
|
||||
#: ../js/ui/userMenu.js:804
|
||||
#: ../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."
|
||||
@@ -1690,15 +1699,15 @@ msgstr ""
|
||||
"mreži je podešeno tako da će ostali znati da vi ne možete videti njihove "
|
||||
"poruke."
|
||||
|
||||
#: ../js/ui/viewSelector.js:85
|
||||
#: ../js/ui/viewSelector.js:87
|
||||
msgid "Windows"
|
||||
msgstr "Prozori"
|
||||
|
||||
#: ../js/ui/viewSelector.js:89
|
||||
#: ../js/ui/viewSelector.js:91
|
||||
msgid "Applications"
|
||||
msgstr "Programi"
|
||||
|
||||
#: ../js/ui/viewSelector.js:93
|
||||
#: ../js/ui/viewSelector.js:95
|
||||
msgid "Search"
|
||||
msgstr "Traži"
|
||||
|
||||
@@ -1771,7 +1780,7 @@ msgstr "Koristi naročit režim, npr. „gdm“ za ekran prijavljivanja"
|
||||
msgid "List possible modes"
|
||||
msgstr "Ispisuje moguće režime"
|
||||
|
||||
#: ../src/shell-app.c:622
|
||||
#: ../src/shell-app.c:621
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Ne mogu da pokrenem „%s“"
|
||||
|
||||
@@ -113,14 +113,12 @@ shell_public_headers_h = \
|
||||
shell-generic-container.h \
|
||||
shell-gtk-embed.h \
|
||||
shell-global.h \
|
||||
shell-idle-monitor.h \
|
||||
shell-invert-lightness-effect.h \
|
||||
shell-mobile-providers.h \
|
||||
shell-mount-operation.h \
|
||||
shell-network-agent.h \
|
||||
shell-perf-log.h \
|
||||
shell-screenshot.h \
|
||||
shell-screen-grabber.h \
|
||||
shell-slicer.h \
|
||||
shell-stack.h \
|
||||
shell-tp-client.h \
|
||||
@@ -158,7 +156,6 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-generic-container.c \
|
||||
shell-gtk-embed.c \
|
||||
shell-global.c \
|
||||
shell-idle-monitor.c \
|
||||
shell-invert-lightness-effect.c \
|
||||
shell-keyring-prompt.h \
|
||||
shell-keyring-prompt.c \
|
||||
@@ -169,7 +166,6 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-polkit-authentication-agent.h \
|
||||
shell-polkit-authentication-agent.c \
|
||||
shell-screenshot.c \
|
||||
shell-screen-grabber.c \
|
||||
shell-secure-text-buffer.c \
|
||||
shell-secure-text-buffer.h \
|
||||
shell-slicer.c \
|
||||
@@ -234,8 +230,6 @@ test_recorder_LDADD = $(TEST_SHELL_RECORDER_LIBS)
|
||||
|
||||
test_recorder_SOURCES = \
|
||||
$(shell_recorder_sources) $(shell_recorder_private_sources) \
|
||||
shell-screen-grabber.c \
|
||||
shell-screen-grabber.h \
|
||||
test-recorder.c
|
||||
endif BUILD_RECORDER
|
||||
|
||||
|
||||
@@ -1035,8 +1035,6 @@ main (int argc,
|
||||
name_owner_id = 0;
|
||||
stdin_channel = NULL;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
|
||||
g_assert (introspection_data != NULL);
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ def show_version(option, opt_str, value, parser):
|
||||
def wait_for_dbus_name(wait_name):
|
||||
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 != ''):
|
||||
return
|
||||
loop.quit()
|
||||
@@ -60,13 +60,18 @@ def start_perf_helper():
|
||||
wait_for_dbus_name (PERF_HELPER_NAME)
|
||||
|
||||
def stop_perf_helper():
|
||||
proxy = Gio.DBusProxy(g_bus_type=Gio.BusType.SESSION,
|
||||
g_name=PERF_HELPER_NAME,
|
||||
g_interface=PERF_HELPER_IFACE,
|
||||
g_object_path=PERF_HELPER_PATH)
|
||||
bus = Gio.bus_get_sync(Gio.BusType.SESSION, None)
|
||||
|
||||
proxy = Gio.DBusProxy.new_sync(bus,
|
||||
Gio.DBusProxyFlags.NONE,
|
||||
None,
|
||||
PERF_HELPER_NAME,
|
||||
PERF_HELPER_PATH,
|
||||
PERF_HELPER_IFACE,
|
||||
None)
|
||||
proxy.Exit()
|
||||
|
||||
def start_shell(extra_args, perf_output=None):
|
||||
def start_shell(perf_output=None):
|
||||
# Set up environment
|
||||
env = dict(os.environ)
|
||||
env['SHELL_PERF_MODULE'] = options.perf
|
||||
@@ -76,19 +81,21 @@ def start_shell(extra_args, perf_output=None):
|
||||
env['SHELL_PERF_OUTPUT'] = perf_output
|
||||
|
||||
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||
args = []
|
||||
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)
|
||||
|
||||
def run_shell(args, perf_output=None):
|
||||
def run_shell(perf_output=None):
|
||||
# we do no additional supervision of gnome-shell,
|
||||
# beyond that of wait
|
||||
# in particular, we don't kill the shell upon
|
||||
# receving a KeyboardInterrupt, as we expect to be
|
||||
# in the same process group
|
||||
shell = start_shell(extra_args, perf_output=perf_output)
|
||||
shell = start_shell(perf_output=perf_output)
|
||||
shell.wait()
|
||||
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 response.read()
|
||||
|
||||
def run_performance_test(args):
|
||||
def run_performance_test():
|
||||
iters = options.perf_iters
|
||||
if options.perf_warmup:
|
||||
iters += 1
|
||||
@@ -192,7 +199,7 @@ def run_performance_test(args):
|
||||
# Run the performance test and collect the output as JSON
|
||||
normal_exit = False
|
||||
try:
|
||||
normal_exit = run_shell(args, perf_output=output_file)
|
||||
normal_exit = run_shell(perf_output=output_file)
|
||||
except:
|
||||
stop_perf_helper()
|
||||
raise
|
||||
@@ -288,7 +295,8 @@ def run_performance_test(args):
|
||||
|
||||
parser = optparse.OptionParser()
|
||||
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",
|
||||
help="Numbers of iterations of performance module to run",
|
||||
default=1)
|
||||
@@ -301,9 +309,16 @@ parser.add_option("", "--perf-upload", action="store_true",
|
||||
parser.add_option("", "--version", action="callback", callback=show_version,
|
||||
help="Display version and exit")
|
||||
|
||||
parser.add_option("-r", "--replace", action="store_true",
|
||||
help="Replace the running window manager")
|
||||
|
||||
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:
|
||||
sys.exit(0)
|
||||
else:
|
||||
|
||||
@@ -72,6 +72,9 @@ static void gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin);
|
||||
|
||||
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
XEvent *event);
|
||||
|
||||
static gboolean gnome_shell_plugin_keybinding_filter (MetaPlugin *plugin,
|
||||
MetaKeyBinding *binding);
|
||||
static const MetaPluginInfo *gnome_shell_plugin_plugin_info (MetaPlugin *plugin);
|
||||
|
||||
|
||||
@@ -126,8 +129,9 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
||||
plugin_class->kill_window_effects = gnome_shell_plugin_kill_window_effects;
|
||||
plugin_class->kill_switch_workspace = gnome_shell_plugin_kill_switch_workspace;
|
||||
|
||||
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
||||
plugin_class->plugin_info = gnome_shell_plugin_plugin_info;
|
||||
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
||||
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
|
||||
plugin_class->plugin_info = gnome_shell_plugin_plugin_info;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -337,6 +341,13 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnome_shell_plugin_keybinding_filter (MetaPlugin *plugin,
|
||||
MetaKeyBinding *binding)
|
||||
{
|
||||
return _shell_wm_filter_keybinding (get_shell_wm (), binding);
|
||||
}
|
||||
|
||||
static const
|
||||
MetaPluginInfo *gnome_shell_plugin_plugin_info (MetaPlugin *plugin)
|
||||
{
|
||||
|
||||
@@ -240,8 +240,6 @@ main (int argc,
|
||||
{
|
||||
guint name_owner_id;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
|
||||
g_assert (introspection_data != NULL);
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ extern GType gnome_shell_plugin_get_type (void);
|
||||
#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
|
||||
|
||||
#define WM_NAME "GNOME Shell"
|
||||
#define GNOME_WM_KEYBINDINGS "Metacity,Mutter,GNOME Shell"
|
||||
#define GNOME_WM_KEYBINDINGS "Mutter,GNOME Shell"
|
||||
|
||||
static gboolean is_gdm_mode = FALSE;
|
||||
static char *session_mode = NULL;
|
||||
@@ -361,8 +361,6 @@ main (int argc, char **argv)
|
||||
int ecode;
|
||||
TpDebugSender *sender;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
|
||||
@@ -92,7 +92,6 @@ main(int argc, char **argv)
|
||||
g_error ("option parsing failed: %s", error->message);
|
||||
|
||||
setlocale (LC_ALL, "");
|
||||
g_type_init ();
|
||||
|
||||
_shell_global_init (NULL);
|
||||
global = shell_global_get ();
|
||||
|
||||
@@ -1693,43 +1693,3 @@ shell_global_get_session_mode (ShellGlobal *global)
|
||||
|
||||
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);
|
||||
|
||||
ClutterActor * shell_global_create_xrootpmap_texture (ShellGlobal *global);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#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"
|
||||
|
||||
|
||||
static ShellCountryMobileProvider *country_mobile_provider_new (const char *country_code,
|
||||
const gchar *country_name);
|
||||
|
||||
static GHashTable *
|
||||
read_country_codes (void)
|
||||
read_country_codes (const gchar *country_codes)
|
||||
{
|
||||
GHashTable *table;
|
||||
GIOChannel *channel;
|
||||
@@ -48,18 +49,21 @@ read_country_codes (void)
|
||||
GError *error = NULL;
|
||||
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 (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);
|
||||
} else
|
||||
g_warning ("Could not read " ISO_3166_COUNTRY_CODES ": Unknown error");
|
||||
g_warning ("Could not read %s: Unknown error", country_codes);
|
||||
|
||||
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);
|
||||
|
||||
status = G_IO_STATUS_NORMAL;
|
||||
@@ -69,6 +73,7 @@ read_country_codes (void)
|
||||
switch (status) {
|
||||
case G_IO_STATUS_NORMAL:
|
||||
if (buffer->str[0] != '#') {
|
||||
ShellCountryMobileProvider *country_provider;
|
||||
char **pieces;
|
||||
|
||||
pieces = g_strsplit (buffer->str, "\t", 2);
|
||||
@@ -80,7 +85,8 @@ read_country_codes (void)
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -117,7 +123,6 @@ typedef enum {
|
||||
} MobileContextState;
|
||||
|
||||
typedef struct {
|
||||
GHashTable *country_codes;
|
||||
GHashTable *table;
|
||||
|
||||
char *current_country;
|
||||
@@ -276,6 +281,86 @@ shell_mobile_provider_get_type (void)
|
||||
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
|
||||
provider_list_free (gpointer data)
|
||||
{
|
||||
@@ -310,15 +395,17 @@ parser_toplevel_start (MobileParser *parser,
|
||||
for (i = 0; attribute_names && attribute_names[i]; i++) {
|
||||
if (!strcmp (attribute_names[i], "code")) {
|
||||
char *country_code;
|
||||
char *country;
|
||||
ShellCountryMobileProvider *country_provider;
|
||||
|
||||
country_code = g_ascii_strup (attribute_values[i], -1);
|
||||
country = g_hash_table_lookup (parser->country_codes, country_code);
|
||||
if (country) {
|
||||
parser->current_country = g_strdup (country);
|
||||
g_free (country_code);
|
||||
} else
|
||||
parser->current_country = country_code;
|
||||
country_provider = g_hash_table_lookup (parser->table, country_code);
|
||||
/* Ensure we have a country provider for this country code */
|
||||
if (!country_provider) {
|
||||
g_warning ("%s: adding providers for unknown country '%s'", __func__, country_code);
|
||||
country_provider = country_mobile_provider_new (country_code, NULL);
|
||||
g_hash_table_insert (parser->table, country_code, country_provider);
|
||||
}
|
||||
parser->current_country = country_code;
|
||||
|
||||
parser->state = PARSER_COUNTRY;
|
||||
break;
|
||||
@@ -455,7 +542,13 @@ parser_country_end (MobileParser *parser,
|
||||
const char *name)
|
||||
{
|
||||
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_providers = NULL;
|
||||
parser->text_buffer = NULL;
|
||||
@@ -616,15 +709,16 @@ static const GMarkupParser mobile_parser = {
|
||||
|
||||
/**
|
||||
* shell_mobile_providers_parse:
|
||||
* @out_ccs: (out) (allow-none): (element-type utf8 utf8): a #GHashTable containing
|
||||
* country codes
|
||||
* @country_codes: (allow-none) File with the list of country codes.
|
||||
* @service_providers: (allow-none) File with the list of service providers.
|
||||
*
|
||||
* Returns: (element-type utf8 GList) (transfer container): a
|
||||
* hash table where keys are country names #gchar, values are a #GSList
|
||||
* of #ShellMobileProvider. Everything is destroyed with g_hash_table_destroy().
|
||||
*/
|
||||
* Returns: (element-type utf8 Shell.CountryMobileProvider) (transfer full): a
|
||||
* hash table where keys are country names #gchar and values are #ShellCountryMobileProvider.
|
||||
* Everything is destroyed with g_hash_table_destroy().
|
||||
*/
|
||||
GHashTable *
|
||||
shell_mobile_providers_parse (GHashTable **out_ccs)
|
||||
shell_mobile_providers_parse (const gchar *country_codes,
|
||||
const gchar *service_providers)
|
||||
{
|
||||
GMarkupParseContext *ctx;
|
||||
GIOChannel *channel;
|
||||
@@ -634,24 +728,29 @@ shell_mobile_providers_parse (GHashTable **out_ccs)
|
||||
GIOStatus status;
|
||||
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));
|
||||
|
||||
parser.country_codes = read_country_codes ();
|
||||
if (!parser.country_codes)
|
||||
parser.table = read_country_codes (country_codes);
|
||||
if (!parser.table)
|
||||
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 (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);
|
||||
} else
|
||||
g_warning ("Could not read " MOBILE_BROADBAND_PROVIDER_INFO ": Unknown error");
|
||||
g_warning ("Could not read %s: Unknown error", service_providers);
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
parser.table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, provider_list_free);
|
||||
parser.state = PARSER_TOPLEVEL;
|
||||
|
||||
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.text_buffer);
|
||||
|
||||
out:
|
||||
if (parser.country_codes) {
|
||||
if (out_ccs)
|
||||
*out_ccs = parser.country_codes;
|
||||
else
|
||||
g_hash_table_destroy (parser.country_codes);
|
||||
}
|
||||
out:
|
||||
|
||||
return parser.table;
|
||||
}
|
||||
@@ -744,12 +837,17 @@ dump_gsm (ShellMobileAccessMethod *method)
|
||||
static void
|
||||
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;
|
||||
|
||||
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)) {
|
||||
ShellMobileAccessMethod *method = miter->data;
|
||||
GSList *liter;
|
||||
@@ -779,10 +877,10 @@ dump_country (gpointer key, gpointer value, gpointer user_data)
|
||||
}
|
||||
|
||||
void
|
||||
shell_mobile_providers_dump (GHashTable *providers)
|
||||
shell_mobile_providers_dump (GHashTable *country_providers)
|
||||
{
|
||||
g_return_if_fail (providers != NULL);
|
||||
g_hash_table_foreach (providers, dump_country, NULL);
|
||||
g_return_if_fail (country_providers != NULL);
|
||||
g_hash_table_foreach (country_providers, dump_country, NULL);
|
||||
}
|
||||
|
||||
/* All the following don't exist in nm-applet, because C doesn't need
|
||||
|
||||
@@ -76,10 +76,19 @@ typedef struct {
|
||||
gint refs;
|
||||
} 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_mobile_provider_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);
|
||||
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);
|
||||
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 */
|
||||
|
||||
@@ -14,6 +14,9 @@ struct _ShellRecorderSrc
|
||||
GMutex mutex_data;
|
||||
GMutex *mutex;
|
||||
|
||||
GstClock *clock;
|
||||
GstClockTime last_frame_time;
|
||||
|
||||
GstCaps *caps;
|
||||
GAsyncQueue *queue;
|
||||
gboolean closed;
|
||||
@@ -41,6 +44,10 @@ static void
|
||||
shell_recorder_src_init (ShellRecorderSrc *src)
|
||||
{
|
||||
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
||||
gst_base_src_set_live (GST_BASE_SRC (src), TRUE);
|
||||
|
||||
src->clock = gst_system_clock_obtain ();
|
||||
src->last_frame_time = 0;
|
||||
|
||||
src->queue = g_async_queue_new ();
|
||||
src->mutex = &src->mutex_data;
|
||||
@@ -89,6 +96,10 @@ shell_recorder_src_create (GstPushSrc *push_src,
|
||||
return GST_FLOW_EOS;
|
||||
|
||||
buffer = g_async_queue_pop (src->queue);
|
||||
|
||||
if (src->last_frame_time == 0)
|
||||
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
|
||||
|
||||
if (buffer == RECORDER_QUEUE_END)
|
||||
{
|
||||
/* Returning UNEXPECTED here will cause a EOS message to be sent */
|
||||
@@ -100,6 +111,9 @@ shell_recorder_src_create (GstPushSrc *push_src,
|
||||
- (int)(gst_buffer_get_size(buffer) / 1024));
|
||||
|
||||
*buffer_out = buffer;
|
||||
GST_BUFFER_DURATION(*buffer_out) = GST_CLOCK_DIFF (src->last_frame_time, gst_clock_get_time (GST_CLOCK (src->clock)));
|
||||
|
||||
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
@@ -141,6 +155,8 @@ shell_recorder_src_finalize (GObject *object)
|
||||
|
||||
g_mutex_clear (src->mutex);
|
||||
|
||||
gst_object_unref (src->clock);
|
||||
|
||||
G_OBJECT_CLASS (shell_recorder_src_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,9 +11,11 @@
|
||||
#define GST_USE_UNSTABLE_API
|
||||
#include <gst/gst.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdk.h>
|
||||
|
||||
#include "shell-recorder-src.h"
|
||||
#include "shell-recorder.h"
|
||||
#include "shell-screen-grabber.h"
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
@@ -46,7 +48,7 @@ struct _ShellRecorder {
|
||||
int stage_width;
|
||||
int stage_height;
|
||||
|
||||
ShellScreenGrabber *grabber;
|
||||
GdkScreen *gdk_screen;
|
||||
|
||||
gboolean have_pointer;
|
||||
int pointer_x;
|
||||
@@ -65,7 +67,7 @@ struct _ShellRecorder {
|
||||
|
||||
int framerate;
|
||||
char *pipeline_description;
|
||||
char *filename;
|
||||
char *file_template;
|
||||
|
||||
/* We might have multiple pipelines that are finishing encoding
|
||||
* to go along with the current pipeline where we are recording.
|
||||
@@ -90,6 +92,7 @@ struct _RecorderPipeline
|
||||
GstElement *pipeline;
|
||||
GstElement *src;
|
||||
int outfile;
|
||||
char *filename;
|
||||
};
|
||||
|
||||
static void recorder_set_stage (ShellRecorder *recorder,
|
||||
@@ -98,8 +101,8 @@ static void recorder_set_framerate (ShellRecorder *recorder,
|
||||
int framerate);
|
||||
static void recorder_set_pipeline (ShellRecorder *recorder,
|
||||
const char *pipeline);
|
||||
static void recorder_set_filename (ShellRecorder *recorder,
|
||||
const char *filename);
|
||||
static void recorder_set_file_template (ShellRecorder *recorder,
|
||||
const char *file_template);
|
||||
|
||||
static void recorder_pipeline_set_caps (RecorderPipeline *pipeline);
|
||||
static void recorder_pipeline_closed (RecorderPipeline *pipeline);
|
||||
@@ -109,7 +112,7 @@ enum {
|
||||
PROP_STAGE,
|
||||
PROP_FRAMERATE,
|
||||
PROP_PIPELINE,
|
||||
PROP_FILENAME
|
||||
PROP_FILE_TEMPLATE
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
|
||||
@@ -256,11 +259,11 @@ shell_recorder_init (ShellRecorder *recorder)
|
||||
|
||||
shell_recorder_src_register ();
|
||||
|
||||
recorder->gdk_screen = gdk_screen_get_default ();
|
||||
|
||||
recorder->recording_icon = create_recording_icon ();
|
||||
recorder->memory_target = get_memory_target();
|
||||
|
||||
recorder->grabber = shell_screen_grabber_new ();
|
||||
|
||||
recorder->state = RECORDER_STATE_CLOSED;
|
||||
recorder->framerate = DEFAULT_FRAMES_PER_SECOND;
|
||||
}
|
||||
@@ -269,18 +272,6 @@ static void
|
||||
shell_recorder_finalize (GObject *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)
|
||||
g_source_remove (recorder->update_memory_used_timeout);
|
||||
@@ -290,9 +281,7 @@ shell_recorder_finalize (GObject *object)
|
||||
|
||||
recorder_set_stage (recorder, NULL);
|
||||
recorder_set_pipeline (recorder, NULL);
|
||||
recorder_set_filename (recorder, NULL);
|
||||
|
||||
g_object_unref (recorder->grabber);
|
||||
recorder_set_file_template (recorder, NULL);
|
||||
|
||||
cogl_handle_unref (recorder->recording_icon);
|
||||
|
||||
@@ -471,6 +460,12 @@ static void
|
||||
recorder_draw_buffer_meter (ShellRecorder *recorder)
|
||||
{
|
||||
int fill_level;
|
||||
GdkRectangle primary_monitor;
|
||||
float rects[16];
|
||||
|
||||
gdk_screen_get_monitor_geometry (recorder->gdk_screen,
|
||||
gdk_screen_get_primary_monitor (recorder->gdk_screen),
|
||||
&primary_monitor);
|
||||
|
||||
recorder_update_memory_used (recorder, FALSE);
|
||||
|
||||
@@ -485,14 +480,27 @@ recorder_draw_buffer_meter (ShellRecorder *recorder)
|
||||
fill_level = MIN (60, (recorder->memory_used * 60) / recorder->memory_target);
|
||||
|
||||
/* A hollow rectangle filled from the left to fill_level */
|
||||
cogl_rectangle (recorder->stage_width - 64, recorder->stage_height - 10,
|
||||
recorder->stage_width - 2, recorder->stage_height - 9);
|
||||
cogl_rectangle (recorder->stage_width - 64, recorder->stage_height - 9,
|
||||
recorder->stage_width - (63 - fill_level), recorder->stage_height - 3);
|
||||
cogl_rectangle (recorder->stage_width - 3, recorder->stage_height - 9,
|
||||
recorder->stage_width - 2, recorder->stage_height - 3);
|
||||
cogl_rectangle (recorder->stage_width - 64, recorder->stage_height - 3,
|
||||
recorder->stage_width - 2, recorder->stage_height - 2);
|
||||
rects[0] = primary_monitor.x + primary_monitor.width - 64;
|
||||
rects[1] = primary_monitor.y + primary_monitor.height - 10;
|
||||
rects[2] = primary_monitor.x + primary_monitor.width - 2;
|
||||
rects[3] = primary_monitor.y + primary_monitor.height - 9;
|
||||
|
||||
rects[4] = primary_monitor.x + primary_monitor.width - 64;
|
||||
rects[5] = primary_monitor.y + primary_monitor.height - 9;
|
||||
rects[6] = primary_monitor.x + primary_monitor.width - (63 - fill_level);
|
||||
rects[7] = primary_monitor.y + primary_monitor.height - 3;
|
||||
|
||||
rects[8] = primary_monitor.x + primary_monitor.width - 3;
|
||||
rects[9] = primary_monitor.y + primary_monitor.height - 9;
|
||||
rects[10] = primary_monitor.x + primary_monitor.width - 2;
|
||||
rects[11] = primary_monitor.y + primary_monitor.height - 3;
|
||||
|
||||
rects[12] = primary_monitor.x + primary_monitor.width - 64;
|
||||
rects[13] = primary_monitor.y + primary_monitor.height - 3;
|
||||
rects[14] = primary_monitor.x + primary_monitor.width - 2;
|
||||
rects[15] = primary_monitor.y + primary_monitor.height - 2;
|
||||
|
||||
cogl_rectangles (rects, 4);
|
||||
}
|
||||
|
||||
/* We want to time-stamp each frame based on the actual time it was
|
||||
@@ -542,8 +550,13 @@ recorder_record_frame (ShellRecorder *recorder)
|
||||
|
||||
size = recorder->stage_width * recorder->stage_height * 4;
|
||||
|
||||
data = shell_screen_grabber_grab (recorder->grabber,
|
||||
0, 0, recorder->stage_width, recorder->stage_height);
|
||||
data = g_malloc (recorder->stage_width * 4 * recorder->stage_height);
|
||||
cogl_read_pixels (0, 0, /* x/y */
|
||||
recorder->stage_width,
|
||||
recorder->stage_height,
|
||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||
CLUTTER_CAIRO_FORMAT_ARGB32,
|
||||
data);
|
||||
|
||||
buffer = gst_buffer_new();
|
||||
gst_buffer_insert_memory (buffer, -1,
|
||||
@@ -571,12 +584,17 @@ recorder_on_stage_paint (ClutterActor *actor,
|
||||
{
|
||||
if (recorder->state == RECORDER_STATE_RECORDING)
|
||||
{
|
||||
GdkRectangle primary_monitor;
|
||||
|
||||
gdk_screen_get_monitor_geometry (recorder->gdk_screen,
|
||||
gdk_screen_get_primary_monitor (recorder->gdk_screen),
|
||||
&primary_monitor);
|
||||
if (!recorder->only_paint)
|
||||
recorder_record_frame (recorder);
|
||||
|
||||
cogl_set_source_texture (recorder->recording_icon);
|
||||
cogl_rectangle (recorder->stage_width - 32, recorder->stage_height - 42,
|
||||
recorder->stage_width, recorder->stage_height - 10);
|
||||
cogl_rectangle (primary_monitor.x + primary_monitor.width - 32, primary_monitor.y + primary_monitor.height - 42,
|
||||
primary_monitor.x + primary_monitor.width, primary_monitor.y + primary_monitor.height - 10);
|
||||
}
|
||||
|
||||
if (recorder->state == RECORDER_STATE_RECORDING || recorder->memory_used != 0)
|
||||
@@ -917,22 +935,22 @@ recorder_set_pipeline (ShellRecorder *recorder,
|
||||
}
|
||||
|
||||
static void
|
||||
recorder_set_filename (ShellRecorder *recorder,
|
||||
const char *filename)
|
||||
recorder_set_file_template (ShellRecorder *recorder,
|
||||
const char *file_template)
|
||||
{
|
||||
if (filename == recorder->filename ||
|
||||
(filename && recorder->filename && strcmp (recorder->filename, filename) == 0))
|
||||
if (file_template == recorder->file_template ||
|
||||
(file_template && recorder->file_template && strcmp (recorder->file_template, file_template) == 0))
|
||||
return;
|
||||
|
||||
if (recorder->current_pipeline)
|
||||
shell_recorder_close (recorder);
|
||||
|
||||
if (recorder->filename)
|
||||
g_free (recorder->filename);
|
||||
if (recorder->file_template)
|
||||
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
|
||||
@@ -954,8 +972,8 @@ shell_recorder_set_property (GObject *object,
|
||||
case PROP_PIPELINE:
|
||||
recorder_set_pipeline (recorder, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_FILENAME:
|
||||
recorder_set_filename (recorder, g_value_get_string (value));
|
||||
case PROP_FILE_TEMPLATE:
|
||||
recorder_set_file_template (recorder, g_value_get_string (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
@@ -982,8 +1000,8 @@ shell_recorder_get_property (GObject *object,
|
||||
case PROP_PIPELINE:
|
||||
g_value_set_string (value, recorder->pipeline_description);
|
||||
break;
|
||||
case PROP_FILENAME:
|
||||
g_value_set_string (value, recorder->filename);
|
||||
case PROP_FILE_TEMPLATE:
|
||||
g_value_set_string (value, recorder->file_template);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
@@ -1027,9 +1045,9 @@ shell_recorder_class_init (ShellRecorderClass *klass)
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_FILENAME,
|
||||
g_param_spec_string ("filename",
|
||||
"Filename",
|
||||
PROP_FILE_TEMPLATE,
|
||||
g_param_spec_string ("file-template",
|
||||
"File Template",
|
||||
"The filename template to use for output files",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
@@ -1149,13 +1167,14 @@ get_absolute_path (char *maybe_relative)
|
||||
* be opened.
|
||||
*/
|
||||
static int
|
||||
recorder_open_outfile (ShellRecorder *recorder)
|
||||
recorder_open_outfile (ShellRecorder *recorder,
|
||||
char **outfilename)
|
||||
{
|
||||
const char *pattern;
|
||||
int flags;
|
||||
int outfile = -1;
|
||||
|
||||
pattern = recorder->filename;
|
||||
pattern = recorder->file_template;
|
||||
if (!pattern)
|
||||
return -1;
|
||||
|
||||
@@ -1230,8 +1249,12 @@ recorder_open_outfile (ShellRecorder *recorder)
|
||||
{
|
||||
g_printerr ("Recording to %s\n", path);
|
||||
|
||||
if (outfilename != NULL)
|
||||
*outfilename = path;
|
||||
else
|
||||
g_free (path);
|
||||
g_string_free (filename, TRUE);
|
||||
g_free (path);
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1269,7 +1292,8 @@ recorder_pipeline_add_sink (RecorderPipeline *pipeline)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
pipeline->outfile = recorder_open_outfile (pipeline->recorder);
|
||||
pipeline->outfile = recorder_open_outfile (pipeline->recorder,
|
||||
&pipeline->filename);
|
||||
if (pipeline->outfile == -1)
|
||||
goto out;
|
||||
|
||||
@@ -1344,6 +1368,10 @@ recorder_pipeline_free (RecorderPipeline *pipeline)
|
||||
if (pipeline->outfile != -1)
|
||||
close (pipeline->outfile);
|
||||
|
||||
g_free (pipeline->filename);
|
||||
|
||||
g_clear_object (&pipeline->recorder);
|
||||
|
||||
g_free (pipeline);
|
||||
}
|
||||
|
||||
@@ -1393,6 +1421,10 @@ recorder_pipeline_closed (RecorderPipeline *pipeline)
|
||||
|
||||
if (pipeline->recorder)
|
||||
{
|
||||
GtkRecentManager *recent_manager;
|
||||
GFile *file;
|
||||
char *uri;
|
||||
|
||||
ShellRecorder *recorder = pipeline->recorder;
|
||||
if (pipeline == recorder->current_pipeline)
|
||||
{
|
||||
@@ -1401,6 +1433,15 @@ recorder_pipeline_closed (RecorderPipeline *pipeline)
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1452,7 +1493,7 @@ recorder_open_pipeline (ShellRecorder *recorder)
|
||||
GstBus *bus;
|
||||
|
||||
pipeline = g_new0(RecorderPipeline, 1);
|
||||
pipeline->recorder = recorder;
|
||||
pipeline->recorder = g_object_ref (recorder);
|
||||
pipeline->outfile = - 1;
|
||||
|
||||
pipeline_description = recorder->pipeline_description;
|
||||
@@ -1555,10 +1596,10 @@ shell_recorder_set_framerate (ShellRecorder *recorder,
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_recorder_set_filename:
|
||||
* shell_recorder_set_file_template:
|
||||
* @recorder: the #ShellRecorder
|
||||
* @filename: the filename template to use for output files,
|
||||
* or %NULL for the defalt value.
|
||||
* @file_template: the filename template to use for output files,
|
||||
* or %NULL for the defalt value.
|
||||
*
|
||||
* Sets the filename that will be used when creating output
|
||||
* files. This is only used if the configured pipeline has an
|
||||
@@ -1573,12 +1614,12 @@ shell_recorder_set_framerate (ShellRecorder *recorder,
|
||||
* The default value is 'shell-%d%u-%c.ogg'.
|
||||
*/
|
||||
void
|
||||
shell_recorder_set_filename (ShellRecorder *recorder,
|
||||
const char *filename)
|
||||
shell_recorder_set_file_template (ShellRecorder *recorder,
|
||||
const char *file_template)
|
||||
{
|
||||
g_return_if_fail (SHELL_IS_RECORDER (recorder));
|
||||
|
||||
recorder_set_filename (recorder, filename);
|
||||
recorder_set_file_template (recorder, file_template);
|
||||
|
||||
}
|
||||
|
||||
@@ -1593,7 +1634,7 @@ shell_recorder_set_filename (ShellRecorder *recorder,
|
||||
* 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. (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
|
||||
* might be used to send the output to an icecast server
|
||||
* via shout2send or similar.
|
||||
@@ -1689,9 +1730,6 @@ shell_recorder_close (ShellRecorder *recorder)
|
||||
recorder->repaint_hook_id = 0;
|
||||
}
|
||||
|
||||
recorder_remove_redraw_timeout (recorder);
|
||||
recorder_close_pipeline (recorder);
|
||||
|
||||
recorder->state = RECORDER_STATE_CLOSED;
|
||||
|
||||
/* Release the refcount we took when we started recording */
|
||||
|
||||
@@ -32,8 +32,8 @@ ShellRecorder *shell_recorder_new (ClutterStage *stage);
|
||||
|
||||
void shell_recorder_set_framerate (ShellRecorder *recorder,
|
||||
int framerate);
|
||||
void shell_recorder_set_filename (ShellRecorder *recorder,
|
||||
const char *filename);
|
||||
void shell_recorder_set_file_template (ShellRecorder *recorder,
|
||||
const char *file_template);
|
||||
void shell_recorder_set_pipeline (ShellRecorder *recorder,
|
||||
const char *pipeline);
|
||||
gboolean shell_recorder_record (ShellRecorder *recorder);
|
||||
|
||||
@@ -1,219 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include <cogl/cogl.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glx.h>
|
||||
#include <GL/glext.h>
|
||||
|
||||
#include "shell-screen-grabber.h"
|
||||
|
||||
PFNGLBINDBUFFERARBPROC pf_glBindBufferARB;
|
||||
PFNGLBUFFERDATAARBPROC pf_glBufferDataARB;
|
||||
PFNGLDELETEBUFFERSARBPROC pf_glDeleteBuffersARB;
|
||||
PFNGLGENBUFFERSARBPROC pf_glGenBuffersARB;
|
||||
PFNGLMAPBUFFERARBPROC pf_glMapBufferARB;
|
||||
PFNGLUNMAPBUFFERARBPROC pf_glUnmapBufferARB;
|
||||
|
||||
struct _ShellScreenGrabberClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
struct _ShellScreenGrabber
|
||||
{
|
||||
GObject parent_instance;
|
||||
|
||||
int have_pixel_buffers;
|
||||
int have_pack_invert;
|
||||
int width, height;
|
||||
GLuint pixel_buffer;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(ShellScreenGrabber, shell_screen_grabber, G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
shell_screen_grabber_finalize (GObject *gobject)
|
||||
{
|
||||
ShellScreenGrabber *grabber = SHELL_SCREEN_GRABBER (gobject);
|
||||
|
||||
if (grabber->pixel_buffer != 0)
|
||||
pf_glDeleteBuffersARB (1, &grabber->pixel_buffer);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_screen_grabber_class_init (ShellScreenGrabberClass *grabber_class)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (grabber_class);
|
||||
|
||||
gobject_class->finalize = shell_screen_grabber_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
shell_screen_grabber_init (ShellScreenGrabber *grabber)
|
||||
{
|
||||
grabber->have_pixel_buffers = -1;
|
||||
grabber->width = -1;
|
||||
grabber->height= -1;
|
||||
grabber->pixel_buffer = 0;
|
||||
}
|
||||
|
||||
ShellScreenGrabber *
|
||||
shell_screen_grabber_new (void)
|
||||
{
|
||||
return g_object_new (SHELL_TYPE_SCREEN_GRABBER, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_screen_grabber_grab:
|
||||
* x: X coordinate of the rectangle to grab
|
||||
* y: Y coordinate of the rectangle to grab
|
||||
* width: width of the rectangle to grab
|
||||
* height: heigth of the rectangle to grab
|
||||
*
|
||||
* Grabs pixel data from a portion of the screen.
|
||||
*
|
||||
* Return value: buffer holding the grabbed data. The data is stored as 32-bit
|
||||
* words with native-endian xRGB pixels (i.e., the same as CAIRO_FORMAT_RGB24)
|
||||
* with no padding on the rows. So, the size of the buffer is width * height * 4
|
||||
* bytes. Free with g_free().
|
||||
**/
|
||||
guchar *
|
||||
shell_screen_grabber_grab (ShellScreenGrabber *grabber,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
guchar *data;
|
||||
gsize row_bytes;
|
||||
gsize data_size;
|
||||
|
||||
row_bytes = width * 4;
|
||||
data_size = row_bytes * height;
|
||||
data = g_malloc (data_size);
|
||||
|
||||
if (grabber->have_pixel_buffers == -1)
|
||||
{
|
||||
const GLubyte* extensions = glGetString (GL_EXTENSIONS);
|
||||
grabber->have_pixel_buffers = strstr ((const char *)extensions, "GL_EXT_pixel_buffer_object") != NULL;
|
||||
grabber->have_pack_invert = strstr ((const char *)extensions, "GL_MESA_pack_invert") != NULL;
|
||||
}
|
||||
|
||||
if (grabber->have_pixel_buffers)
|
||||
{
|
||||
GLubyte *mapped_data;
|
||||
GLint old_swap_bytes, old_lsb_first, old_row_length, old_skip_pixels, old_skip_rows, old_alignment;
|
||||
GLint old_pack_invert = GL_FALSE;
|
||||
GLint vp_size[4];
|
||||
guchar *src_row, *dest_row;
|
||||
int i;
|
||||
|
||||
cogl_flush ();
|
||||
|
||||
if (pf_glBindBufferARB == NULL)
|
||||
{
|
||||
pf_glBindBufferARB = (PFNGLBINDBUFFERARBPROC) cogl_get_proc_address ("glBindBufferARB");
|
||||
pf_glBufferDataARB = (PFNGLBUFFERDATAARBPROC) cogl_get_proc_address ("glBufferDataARB");
|
||||
pf_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) cogl_get_proc_address ("glDeleteBuffersARB");
|
||||
pf_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) cogl_get_proc_address ("glGenBuffersARB");
|
||||
pf_glMapBufferARB = (PFNGLMAPBUFFERARBPROC) cogl_get_proc_address ("glMapBufferARB");
|
||||
pf_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC) cogl_get_proc_address ("glUnmapBufferARB");
|
||||
}
|
||||
|
||||
glGetIntegerv (GL_PACK_SWAP_BYTES, &old_swap_bytes);
|
||||
glGetIntegerv (GL_PACK_LSB_FIRST, &old_lsb_first);
|
||||
glGetIntegerv (GL_PACK_ROW_LENGTH, &old_row_length);
|
||||
glGetIntegerv (GL_PACK_SKIP_PIXELS, &old_skip_pixels);
|
||||
glGetIntegerv (GL_PACK_SKIP_ROWS, &old_skip_rows);
|
||||
glGetIntegerv (GL_PACK_ALIGNMENT, &old_alignment);
|
||||
|
||||
glPixelStorei (GL_PACK_SWAP_BYTES, GL_FALSE);
|
||||
glPixelStorei (GL_PACK_LSB_FIRST, GL_FALSE);
|
||||
glPixelStorei (GL_PACK_ROW_LENGTH, 0);
|
||||
glPixelStorei (GL_PACK_SKIP_PIXELS, 0);
|
||||
glPixelStorei (GL_PACK_SKIP_ROWS, 0);
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, 1);
|
||||
|
||||
if (grabber->have_pack_invert)
|
||||
{
|
||||
glGetIntegerv (GL_PACK_INVERT_MESA, &old_pack_invert);
|
||||
glPixelStorei (GL_PACK_INVERT_MESA, GL_FALSE);
|
||||
}
|
||||
|
||||
if (grabber->pixel_buffer != 0 &&
|
||||
(grabber->width != width ||
|
||||
grabber->height != height))
|
||||
{
|
||||
pf_glDeleteBuffersARB (1, &grabber->pixel_buffer);
|
||||
grabber->pixel_buffer = 0;
|
||||
}
|
||||
|
||||
if (grabber->pixel_buffer == 0)
|
||||
{
|
||||
pf_glGenBuffersARB (1, &grabber->pixel_buffer);
|
||||
|
||||
pf_glBindBufferARB (GL_PIXEL_PACK_BUFFER_ARB, grabber->pixel_buffer);
|
||||
pf_glBufferDataARB (GL_PIXEL_PACK_BUFFER_ARB, data_size, 0, GL_STREAM_READ_ARB);
|
||||
|
||||
grabber->width = width;
|
||||
grabber->height = height;
|
||||
}
|
||||
else
|
||||
{
|
||||
pf_glBindBufferARB (GL_PIXEL_PACK_BUFFER_ARB, grabber->pixel_buffer);
|
||||
}
|
||||
|
||||
/* In OpenGL, (x,y) specifies the bottom-left corner rather than the
|
||||
* top-left */
|
||||
glGetIntegerv (GL_VIEWPORT, vp_size);
|
||||
y = vp_size[3] - (y + height);
|
||||
|
||||
/* the "big-endian" version actually works for both, but the litle-endian
|
||||
* version has been better tested with a range of drivers, so we'll
|
||||
* keep on using it on little-endian.
|
||||
*/
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
glReadPixels (x, y, width, height, GL_BGRA, GL_UNSIGNED_BYTE, 0);
|
||||
#else
|
||||
glReadPixels (x, y, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0);
|
||||
#endif
|
||||
|
||||
mapped_data = pf_glMapBufferARB (GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB);
|
||||
|
||||
src_row = mapped_data + (height - 1) * row_bytes;
|
||||
dest_row = data;
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
{
|
||||
memcpy (dest_row, src_row, row_bytes);
|
||||
src_row -= row_bytes;
|
||||
dest_row += row_bytes;
|
||||
}
|
||||
|
||||
pf_glUnmapBufferARB (GL_PIXEL_PACK_BUFFER_ARB);
|
||||
pf_glBindBufferARB (GL_PIXEL_PACK_BUFFER_ARB, 0);
|
||||
|
||||
glPixelStorei (GL_PACK_SWAP_BYTES, old_swap_bytes);
|
||||
glPixelStorei (GL_PACK_LSB_FIRST, old_lsb_first);
|
||||
glPixelStorei (GL_PACK_ROW_LENGTH, old_row_length);
|
||||
glPixelStorei (GL_PACK_SKIP_PIXELS, old_skip_pixels);
|
||||
glPixelStorei (GL_PACK_SKIP_ROWS, old_skip_rows);
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, old_alignment);
|
||||
|
||||
if (grabber->have_pack_invert)
|
||||
glPixelStorei (GL_PACK_INVERT_MESA, old_pack_invert);
|
||||
}
|
||||
else
|
||||
{
|
||||
cogl_read_pixels (x, y,
|
||||
width, height,
|
||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||
CLUTTER_CAIRO_FORMAT_ARGB32,
|
||||
data);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
#ifndef __SHELL_SCREEN_GRABBER_H__
|
||||
#define __SHELL_SCREEN_GRABBER_H__
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* SECTION:shell-screen-grabber
|
||||
* @short_description: Grab pixel data from the screen
|
||||
*
|
||||
* The #ShellScreenGrabber object is used to download previous drawn
|
||||
* content to the screen. It internally uses pixel-buffer objects if
|
||||
* available, otherwise falls back to cogl_read_pixels().
|
||||
*
|
||||
* If you are repeatedly grabbing images of the same size from the
|
||||
* screen, it makes sense to create one #ShellScreenGrabber and keep
|
||||
* it around. Otherwise, it's fine to simply create one as needed and
|
||||
* then get rid of it.
|
||||
*/
|
||||
|
||||
typedef struct _ShellScreenGrabber ShellScreenGrabber;
|
||||
typedef struct _ShellScreenGrabberClass ShellScreenGrabberClass;
|
||||
|
||||
#define SHELL_TYPE_SCREEN_GRABBER (shell_screen_grabber_get_type ())
|
||||
#define SHELL_SCREEN_GRABBER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_SCREEN_GRABBER, ShellScreenGrabber))
|
||||
#define SHELL_SCREEN_GRABBER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_SCREEN_GRABBER, ShellScreenGrabberClass))
|
||||
#define SHELL_IS_SCREEN_GRABBER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_SCREEN_GRABBER))
|
||||
#define SHELL_IS_SCREEN_GRABBER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_SCREEN_GRABBER))
|
||||
#define SHELL_SCREEN_GRABBER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_SCREEN_GRABBER, ShellScreenGrabberClass))
|
||||
|
||||
GType shell_screen_grabber_get_type (void) G_GNUC_CONST;
|
||||
|
||||
ShellScreenGrabber *shell_screen_grabber_new (void);
|
||||
guchar * shell_screen_grabber_grab (ShellScreenGrabber *grabber,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_SCREEN_GRABBER_H__ */
|
||||
@@ -1,5 +1,8 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#define COGL_ENABLE_EXPERIMENTAL_API
|
||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#include <clutter/clutter.h>
|
||||
@@ -10,7 +13,6 @@
|
||||
#include <meta/meta-shaped-texture.h>
|
||||
|
||||
#include "shell-global.h"
|
||||
#include "shell-screen-grabber.h"
|
||||
#include "shell-screenshot.h"
|
||||
|
||||
struct _ShellScreenshotClass
|
||||
@@ -90,18 +92,33 @@ do_grab_screenshot (_screenshot_data *screenshot_data,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
ShellScreenGrabber *grabber;
|
||||
static const cairo_user_data_key_t key;
|
||||
CoglBitmap *bitmap;
|
||||
ClutterBackend *backend;
|
||||
CoglContext *context;
|
||||
int stride;
|
||||
guchar *data;
|
||||
|
||||
grabber = shell_screen_grabber_new ();
|
||||
data = shell_screen_grabber_grab (grabber, x, y, width, height);
|
||||
g_object_unref (grabber);
|
||||
backend = clutter_get_default_backend ();
|
||||
context = clutter_backend_get_cogl_context (backend);
|
||||
|
||||
screenshot_data->image = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_RGB24,
|
||||
width, height, width * 4);
|
||||
cairo_surface_set_user_data (screenshot_data->image, &key,
|
||||
data, (cairo_destroy_func_t)g_free);
|
||||
screenshot_data->image = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
|
||||
width, height);
|
||||
|
||||
|
||||
data = cairo_image_surface_get_data (screenshot_data->image);
|
||||
stride = cairo_image_surface_get_stride (screenshot_data->image);
|
||||
|
||||
bitmap = cogl_bitmap_new_for_data (context,
|
||||
width,
|
||||
height,
|
||||
CLUTTER_CAIRO_FORMAT_ARGB32,
|
||||
stride,
|
||||
data);
|
||||
cogl_framebuffer_read_pixels_into_bitmap (cogl_get_draw_framebuffer (),
|
||||
x, y,
|
||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||
bitmap);
|
||||
cogl_object_unref (bitmap);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -35,6 +35,9 @@ void _shell_wm_kill_window_effects (ShellWM *wm,
|
||||
MetaWindowActor *actor);
|
||||
void _shell_wm_kill_switch_workspace (ShellWM *wm);
|
||||
|
||||
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
|
||||
MetaKeyBinding *binding);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_WM_PRIVATE_H__ */
|
||||
|
||||
@@ -26,6 +26,7 @@ enum
|
||||
SWITCH_WORKSPACE,
|
||||
KILL_SWITCH_WORKSPACE,
|
||||
KILL_WINDOW_EFFECTS,
|
||||
FILTER_KEYBINDING,
|
||||
|
||||
LAST_SIGNAL
|
||||
};
|
||||
@@ -115,6 +116,14 @@ shell_wm_class_init (ShellWMClass *klass)
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_WINDOW_ACTOR);
|
||||
shell_wm_signals[FILTER_KEYBINDING] =
|
||||
g_signal_new ("filter-keybinding",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
g_signal_accumulator_true_handled, NULL, NULL,
|
||||
G_TYPE_BOOLEAN, 1,
|
||||
META_TYPE_KEY_BINDING);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -267,6 +276,17 @@ _shell_wm_destroy (ShellWM *wm,
|
||||
g_signal_emit (wm, shell_wm_signals[DESTROY], 0, actor);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_shell_wm_filter_keybinding (ShellWM *wm,
|
||||
MetaKeyBinding *binding)
|
||||
{
|
||||
gboolean rv;
|
||||
|
||||
g_signal_emit (wm, shell_wm_signals[FILTER_KEYBINDING], 0, binding, &rv);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_wm_new:
|
||||
* @plugin: the #MetaPlugin
|
||||
|
||||
@@ -65,6 +65,10 @@
|
||||
#include "st-clipboard.h"
|
||||
#include "st-private.h"
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/cursorfont.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)
|
||||
@@ -613,6 +617,38 @@ st_entry_key_focus_in (ClutterActor *actor)
|
||||
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
|
||||
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_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->navigate_focus = st_entry_navigate_focus;
|
||||
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. */
|
||||
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);
|
||||
@@ -50,6 +53,7 @@ static void st_texture_cache_finalize (GObject *object);
|
||||
enum
|
||||
{
|
||||
ICON_THEME_CHANGED,
|
||||
TEXTURE_FILE_CHANGED,
|
||||
|
||||
LAST_SIGNAL
|
||||
};
|
||||
@@ -92,33 +96,14 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
|
||||
0, /* no default handler slot */
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* st_texture_cache_clear_uri:
|
||||
* @cache: A #StTextureCache
|
||||
* @uri: URI of cached object
|
||||
*
|
||||
* If the given @uri is known to have been modified
|
||||
* externally, this function may be used to invalidate
|
||||
* 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);
|
||||
signals[TEXTURE_FILE_CHANGED] =
|
||||
g_signal_new ("texture-file-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, /* no default handler slot */
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_STRING);
|
||||
}
|
||||
|
||||
/* Evicts all cached textures for named icons */
|
||||
@@ -164,6 +149,9 @@ st_texture_cache_init (StTextureCache *self)
|
||||
g_free, cogl_handle_unref);
|
||||
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
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
|
||||
@@ -179,13 +167,9 @@ st_texture_cache_dispose (GObject *object)
|
||||
self->priv->icon_theme = NULL;
|
||||
}
|
||||
|
||||
if (self->priv->keyed_cache)
|
||||
g_hash_table_destroy (self->priv->keyed_cache);
|
||||
self->priv->keyed_cache = NULL;
|
||||
|
||||
if (self->priv->outstanding_requests)
|
||||
g_hash_table_destroy (self->priv->outstanding_requests);
|
||||
self->priv->outstanding_requests = NULL;
|
||||
g_clear_pointer (&self->priv->keyed_cache, g_hash_table_destroy);
|
||||
g_clear_pointer (&self->priv->outstanding_requests, g_hash_table_destroy);
|
||||
g_clear_pointer (&self->priv->file_monitors, g_hash_table_destroy);
|
||||
|
||||
G_OBJECT_CLASS (st_texture_cache_parent_class)->dispose (object);
|
||||
}
|
||||
@@ -1039,10 +1023,58 @@ load_from_pixbuf (GdkPixbuf *pixbuf)
|
||||
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 {
|
||||
gchar *path;
|
||||
gint grid_width, grid_height;
|
||||
ClutterActor *actor;
|
||||
GFunc load_callback;
|
||||
gpointer load_callback_data;
|
||||
} AsyncImageData;
|
||||
|
||||
static void
|
||||
@@ -1059,6 +1091,7 @@ on_sliced_image_loaded (GObject *source_object,
|
||||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
GObject *cache = source_object;
|
||||
AsyncImageData *data = (AsyncImageData *)user_data;
|
||||
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
|
||||
GList *list;
|
||||
@@ -1072,6 +1105,9 @@ on_sliced_image_loaded (GObject *source_object,
|
||||
clutter_actor_hide (actor);
|
||||
clutter_actor_add_child (data->actor, actor);
|
||||
}
|
||||
|
||||
if (data->load_callback != NULL)
|
||||
data->load_callback (cache, data->load_callback_data);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1126,6 +1162,8 @@ load_sliced_image (GSimpleAsyncResult *result,
|
||||
* @path: Path to a filename
|
||||
* @grid_width: Width in pixels
|
||||
* @grid_height: Height in pixels
|
||||
* @load_callback: (scope async) (allow-none): Function called when the image is loaded, or %NULL
|
||||
* @user_data: Data to pass to the load callback
|
||||
*
|
||||
* This function reads a single image file which contains multiple images internally.
|
||||
* The image file will be divided using @grid_width and @grid_height;
|
||||
@@ -1135,10 +1173,12 @@ load_sliced_image (GSimpleAsyncResult *result,
|
||||
* Returns: (transfer none): A new #ClutterActor
|
||||
*/
|
||||
ClutterActor *
|
||||
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||
const gchar *path,
|
||||
gint grid_width,
|
||||
gint grid_height)
|
||||
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||
const gchar *path,
|
||||
gint grid_width,
|
||||
gint grid_height,
|
||||
GFunc load_callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
AsyncImageData *data;
|
||||
GSimpleAsyncResult *result;
|
||||
@@ -1149,6 +1189,8 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||
data->grid_height = grid_height;
|
||||
data->path = g_strdup (path);
|
||||
data->actor = actor;
|
||||
data->load_callback = load_callback;
|
||||
data->load_callback_data = user_data;
|
||||
g_object_ref (G_OBJECT (actor));
|
||||
|
||||
result = g_simple_async_result_new (G_OBJECT (cache), on_sliced_image_loaded, data, st_texture_cache_load_sliced_image);
|
||||
@@ -1161,41 +1203,6 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||
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:
|
||||
* @cache: The texture cache instance
|
||||
@@ -1246,6 +1253,8 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
|
||||
load_texture_async (cache, request);
|
||||
}
|
||||
|
||||
ensure_monitor_for_uri (cache, uri);
|
||||
|
||||
return CLUTTER_ACTOR (texture);
|
||||
}
|
||||
|
||||
@@ -1283,6 +1292,8 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
|
||||
else
|
||||
cogl_handle_ref (texdata);
|
||||
|
||||
ensure_monitor_for_uri (cache, uri);
|
||||
|
||||
out:
|
||||
g_free (key);
|
||||
return texdata;
|
||||
@@ -1322,6 +1333,8 @@ st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache,
|
||||
else
|
||||
cairo_surface_reference (surface);
|
||||
|
||||
ensure_monitor_for_uri (cache, uri);
|
||||
|
||||
out:
|
||||
g_free (key);
|
||||
return surface;
|
||||
|
||||
@@ -68,24 +68,18 @@ GType st_texture_cache_get_type (void) G_GNUC_CONST;
|
||||
|
||||
StTextureCache* st_texture_cache_get_default (void);
|
||||
|
||||
void st_texture_cache_clear_uri (StTextureCache *cache,
|
||||
const gchar *uri);
|
||||
|
||||
ClutterActor *
|
||||
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||
const gchar *path,
|
||||
gint grid_width,
|
||||
gint grid_height);
|
||||
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||
const gchar *path,
|
||||
gint grid_width,
|
||||
gint grid_height,
|
||||
GFunc load_callback,
|
||||
gpointer user_data);
|
||||
|
||||
ClutterActor *st_texture_cache_bind_pixbuf_property (StTextureCache *cache,
|
||||
GObject *object,
|
||||
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,
|
||||
StThemeNode *theme_node,
|
||||
GIcon *icon,
|
||||
|
||||
@@ -31,6 +31,9 @@ struct _StThemeContext {
|
||||
PangoFontDescription *font;
|
||||
StThemeNode *root_node;
|
||||
StTheme *theme;
|
||||
|
||||
/* set of StThemeNode */
|
||||
GHashTable *nodes;
|
||||
};
|
||||
|
||||
struct _StThemeContextClass {
|
||||
@@ -66,6 +69,8 @@ st_theme_context_finalize (GObject *object)
|
||||
(gpointer) st_theme_context_changed,
|
||||
context);
|
||||
|
||||
if (context->nodes)
|
||||
g_hash_table_unref (context->nodes);
|
||||
if (context->root_node)
|
||||
g_object_unref (context->root_node);
|
||||
if (context->theme)
|
||||
@@ -105,6 +110,10 @@ st_theme_context_init (StThemeContext *context)
|
||||
"resolution-changed",
|
||||
G_CALLBACK (st_theme_context_changed),
|
||||
context);
|
||||
|
||||
context->nodes = g_hash_table_new_full ((GHashFunc) st_theme_node_hash,
|
||||
(GEqualFunc) st_theme_node_equal,
|
||||
g_object_unref, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,6 +155,7 @@ st_theme_context_changed (StThemeContext *context)
|
||||
{
|
||||
StThemeNode *old_root = context->root_node;
|
||||
context->root_node = NULL;
|
||||
g_hash_table_remove_all (context->nodes);
|
||||
|
||||
emit_changed (context);
|
||||
|
||||
@@ -299,3 +309,27 @@ st_theme_context_get_root_node (StThemeContext *context)
|
||||
|
||||
return context->root_node;
|
||||
}
|
||||
|
||||
/**
|
||||
* st_theme_context_intern_node:
|
||||
* @context: a #StThemeContext
|
||||
* @node: a #StThemeNode
|
||||
*
|
||||
* Return an existing node matching @node, or if that isn't possible,
|
||||
* @node itself.
|
||||
*
|
||||
* Return value: (transfer none): a node with the same properties as @node
|
||||
*/
|
||||
StThemeNode *
|
||||
st_theme_context_intern_node (StThemeContext *context,
|
||||
StThemeNode *node)
|
||||
{
|
||||
StThemeNode *mine = g_hash_table_lookup (context->nodes, node);
|
||||
|
||||
/* this might be node or not - it doesn't actually matter */
|
||||
if (mine != NULL)
|
||||
return mine;
|
||||
|
||||
g_hash_table_add (context->nodes, g_object_ref (node));
|
||||
return node;
|
||||
}
|
||||
|
||||
@@ -62,6 +62,9 @@ const PangoFontDescription *st_theme_context_get_font (StThemeContext
|
||||
|
||||
StThemeNode * st_theme_context_get_root_node (StThemeContext *context);
|
||||
|
||||
StThemeNode * st_theme_context_intern_node (StThemeContext *context,
|
||||
StThemeNode *node);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __ST_THEME_CONTEXT_H__ */
|
||||
|
||||
@@ -1553,7 +1553,7 @@ st_theme_node_paint_borders (StThemeNode *node,
|
||||
{
|
||||
ClutterColor effective_border;
|
||||
gboolean skip_corner_1, skip_corner_2;
|
||||
float x1, y1, x2, y2;
|
||||
float rects[16];
|
||||
|
||||
over (&border_color, &node->background_color, &effective_border);
|
||||
alpha = paint_opacity * effective_border.alpha / 255;
|
||||
@@ -1569,46 +1569,44 @@ st_theme_node_paint_borders (StThemeNode *node,
|
||||
skip_corner_1 = border_radius[ST_CORNER_TOPLEFT] > 0;
|
||||
skip_corner_2 = border_radius[ST_CORNER_TOPRIGHT] > 0;
|
||||
|
||||
x1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT] : 0;
|
||||
y1 = 0;
|
||||
x2 = skip_corner_2 ? width - max_width_radius[ST_CORNER_TOPRIGHT] : width;
|
||||
y2 = border_width[ST_SIDE_TOP];
|
||||
cogl_rectangle (x1, y1, x2, y2);
|
||||
rects[0] = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT] : 0;
|
||||
rects[1] = 0;
|
||||
rects[2] = skip_corner_2 ? width - max_width_radius[ST_CORNER_TOPRIGHT] : width;
|
||||
rects[3] = border_width[ST_SIDE_TOP];
|
||||
|
||||
/* EAST */
|
||||
skip_corner_1 = border_radius[ST_CORNER_TOPRIGHT] > 0;
|
||||
skip_corner_2 = border_radius[ST_CORNER_BOTTOMRIGHT] > 0;
|
||||
|
||||
x1 = width - border_width[ST_SIDE_RIGHT];
|
||||
y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPRIGHT]
|
||||
rects[4] = width - border_width[ST_SIDE_RIGHT];
|
||||
rects[5] = skip_corner_1 ? max_width_radius[ST_CORNER_TOPRIGHT]
|
||||
: border_width[ST_SIDE_TOP];
|
||||
x2 = width;
|
||||
y2 = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMRIGHT]
|
||||
rects[6] = width;
|
||||
rects[7] = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMRIGHT]
|
||||
: height - border_width[ST_SIDE_BOTTOM];
|
||||
cogl_rectangle (x1, y1, x2, y2);
|
||||
|
||||
/* SOUTH */
|
||||
skip_corner_1 = border_radius[ST_CORNER_BOTTOMLEFT] > 0;
|
||||
skip_corner_2 = border_radius[ST_CORNER_BOTTOMRIGHT] > 0;
|
||||
|
||||
x1 = skip_corner_1 ? max_width_radius[ST_CORNER_BOTTOMLEFT] : 0;
|
||||
y1 = height - border_width[ST_SIDE_BOTTOM];
|
||||
x2 = skip_corner_2 ? width - max_width_radius[ST_CORNER_BOTTOMRIGHT]
|
||||
rects[8] = skip_corner_1 ? max_width_radius[ST_CORNER_BOTTOMLEFT] : 0;
|
||||
rects[9] = height - border_width[ST_SIDE_BOTTOM];
|
||||
rects[10] = skip_corner_2 ? width - max_width_radius[ST_CORNER_BOTTOMRIGHT]
|
||||
: width;
|
||||
y2 = height;
|
||||
cogl_rectangle (x1, y1, x2, y2);
|
||||
rects[11] = height;
|
||||
|
||||
/* WEST */
|
||||
skip_corner_1 = border_radius[ST_CORNER_TOPLEFT] > 0;
|
||||
skip_corner_2 = border_radius[ST_CORNER_BOTTOMLEFT] > 0;
|
||||
|
||||
x1 = 0;
|
||||
y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT]
|
||||
rects[12] = 0;
|
||||
rects[13] = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT]
|
||||
: border_width[ST_SIDE_TOP];
|
||||
x2 = border_width[ST_SIDE_LEFT];
|
||||
y2 = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMLEFT]
|
||||
rects[14] = border_width[ST_SIDE_LEFT];
|
||||
rects[15] = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMLEFT]
|
||||
: height - border_width[ST_SIDE_BOTTOM];
|
||||
cogl_rectangle (x1, y1, x2, y2);
|
||||
|
||||
cogl_rectangles (rects, 4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1875,6 +1873,7 @@ st_theme_node_paint_outline (StThemeNode *node,
|
||||
{
|
||||
float width, height;
|
||||
int outline_width;
|
||||
float rects[16];
|
||||
ClutterColor outline_color, effective_outline;
|
||||
|
||||
width = box->x2 - box->x1;
|
||||
@@ -1899,20 +1898,30 @@ st_theme_node_paint_outline (StThemeNode *node,
|
||||
*/
|
||||
|
||||
/* NORTH */
|
||||
cogl_rectangle (-outline_width, -outline_width,
|
||||
width + outline_width, 0);
|
||||
rects[0] = -outline_width;
|
||||
rects[1] = -outline_width;
|
||||
rects[2] = width + outline_width;
|
||||
rects[3] = 0;
|
||||
|
||||
/* EAST */
|
||||
cogl_rectangle (width, 0,
|
||||
width + outline_width, height);
|
||||
rects[4] = width;
|
||||
rects[5] = 0;
|
||||
rects[6] = width + outline_width;
|
||||
rects[7] = height;
|
||||
|
||||
/* SOUTH */
|
||||
cogl_rectangle (-outline_width, height,
|
||||
width + outline_width, height + outline_width);
|
||||
rects[8] = -outline_width;
|
||||
rects[9] = height;
|
||||
rects[10] = width + outline_width;
|
||||
rects[11] = height + outline_width;
|
||||
|
||||
/* WEST */
|
||||
cogl_rectangle (-outline_width, 0,
|
||||
0, height);
|
||||
rects[12] = -outline_width;
|
||||
rects[13] = 0;
|
||||
rects[14] = 0;
|
||||
rects[15] = height;
|
||||
|
||||
cogl_rectangles (rects, 4);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2060,6 +2069,9 @@ st_theme_node_copy_cached_paint_state (StThemeNode *node,
|
||||
g_return_if_fail (ST_IS_THEME_NODE (node));
|
||||
g_return_if_fail (ST_IS_THEME_NODE (other));
|
||||
|
||||
if (node == other)
|
||||
return;
|
||||
|
||||
/* Check omitted for speed: */
|
||||
/* g_return_if_fail (st_theme_node_paint_equal (node, other)); */
|
||||
|
||||
|
||||
@@ -77,8 +77,8 @@ struct _StThemeNode {
|
||||
|
||||
GType element_type;
|
||||
char *element_id;
|
||||
char *element_class;
|
||||
char *pseudo_class;
|
||||
GStrv element_classes;
|
||||
GStrv pseudo_classes;
|
||||
char *inline_style;
|
||||
|
||||
CRDeclaration **properties;
|
||||
|
||||
@@ -41,7 +41,6 @@ struct _StThemeNodeTransitionPrivate {
|
||||
|
||||
CoglHandle material;
|
||||
|
||||
ClutterAlpha *alpha;
|
||||
ClutterTimeline *timeline;
|
||||
|
||||
guint timeline_completed_id;
|
||||
@@ -91,7 +90,6 @@ st_theme_node_transition_new (StThemeNode *from_node,
|
||||
transition->priv->old_theme_node = g_object_ref (from_node);
|
||||
transition->priv->new_theme_node = g_object_ref (to_node);
|
||||
|
||||
transition->priv->alpha = clutter_alpha_new ();
|
||||
transition->priv->timeline = clutter_timeline_new (duration);
|
||||
|
||||
transition->priv->timeline_completed_id =
|
||||
@@ -101,9 +99,7 @@ st_theme_node_transition_new (StThemeNode *from_node,
|
||||
g_signal_connect (transition->priv->timeline, "new-frame",
|
||||
G_CALLBACK (on_timeline_new_frame), transition);
|
||||
|
||||
clutter_alpha_set_mode (transition->priv->alpha, CLUTTER_EASE_IN_OUT_QUAD);
|
||||
clutter_alpha_set_timeline (transition->priv->alpha,
|
||||
transition->priv->timeline);
|
||||
clutter_timeline_set_progress_mode (transition->priv->timeline, CLUTTER_EASE_IN_OUT_QUAD);
|
||||
|
||||
clutter_timeline_start (transition->priv->timeline);
|
||||
|
||||
@@ -334,7 +330,7 @@ st_theme_node_transition_paint (StThemeNodeTransition *transition,
|
||||
}
|
||||
|
||||
cogl_color_set_from_4f (&constant, 0., 0., 0.,
|
||||
clutter_alpha_get_alpha (priv->alpha));
|
||||
clutter_timeline_get_progress (priv->timeline));
|
||||
cogl_material_set_layer_combine_constant (priv->material, 1, &constant);
|
||||
|
||||
cogl_material_set_color4ub (priv->material,
|
||||
@@ -412,12 +408,6 @@ st_theme_node_transition_dispose (GObject *object)
|
||||
priv->timeline_completed_id = 0;
|
||||
priv->timeline_new_frame_id = 0;
|
||||
|
||||
if (priv->alpha)
|
||||
{
|
||||
g_object_unref (priv->alpha);
|
||||
priv->alpha = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (st_theme_node_transition_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
@@ -436,8 +426,6 @@ st_theme_node_transition_init (StThemeNodeTransition *transition)
|
||||
transition->priv->new_offscreen = NULL;
|
||||
|
||||
transition->priv->needs_setup = TRUE;
|
||||
|
||||
transition->priv->alpha = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -96,8 +96,8 @@ st_theme_node_finalize (GObject *object)
|
||||
StThemeNode *node = ST_THEME_NODE (object);
|
||||
|
||||
g_free (node->element_id);
|
||||
g_free (node->element_class);
|
||||
g_free (node->pseudo_class);
|
||||
g_strfreev (node->element_classes);
|
||||
g_strfreev (node->pseudo_classes);
|
||||
g_free (node->inline_style);
|
||||
|
||||
if (node->properties)
|
||||
@@ -145,6 +145,33 @@ st_theme_node_finalize (GObject *object)
|
||||
G_OBJECT_CLASS (st_theme_node_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static GStrv
|
||||
split_on_whitespace (const gchar *s)
|
||||
{
|
||||
gchar *cur;
|
||||
gchar *l;
|
||||
gchar *temp;
|
||||
GPtrArray *arr;
|
||||
|
||||
if (s == NULL)
|
||||
return NULL;
|
||||
|
||||
arr = g_ptr_array_new ();
|
||||
l = g_strdup (s);
|
||||
|
||||
cur = strtok_r (l, " \t\f\r\n", &temp);
|
||||
|
||||
while (cur != NULL)
|
||||
{
|
||||
g_ptr_array_add (arr, g_strdup (cur));
|
||||
cur = strtok_r (NULL, " \t\f\r\n", &temp);
|
||||
}
|
||||
|
||||
g_free (l);
|
||||
g_ptr_array_add (arr, NULL);
|
||||
return (GStrv) g_ptr_array_free (arr, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* st_theme_node_new:
|
||||
* @context: the context representing global state for this themed tree
|
||||
@@ -201,8 +228,8 @@ st_theme_node_new (StThemeContext *context,
|
||||
|
||||
node->element_type = element_type;
|
||||
node->element_id = g_strdup (element_id);
|
||||
node->element_class = g_strdup (element_class);
|
||||
node->pseudo_class = g_strdup (pseudo_class);
|
||||
node->element_classes = split_on_whitespace (element_class);
|
||||
node->pseudo_classes = split_on_whitespace (pseudo_class);
|
||||
node->inline_style = g_strdup (inline_style);
|
||||
|
||||
return node;
|
||||
@@ -257,20 +284,30 @@ st_theme_node_get_element_id (StThemeNode *node)
|
||||
return node->element_id;
|
||||
}
|
||||
|
||||
const char *
|
||||
st_theme_node_get_element_class (StThemeNode *node)
|
||||
/**
|
||||
* st_theme_node_get_element_classes:
|
||||
*
|
||||
* Returns: (transfer none): the element's classes
|
||||
*/
|
||||
GStrv
|
||||
st_theme_node_get_element_classes (StThemeNode *node)
|
||||
{
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (node), NULL);
|
||||
|
||||
return node->element_class;
|
||||
return node->element_classes;
|
||||
}
|
||||
|
||||
const char *
|
||||
st_theme_node_get_pseudo_class (StThemeNode *node)
|
||||
/**
|
||||
* st_theme_node_get_pseudo_classes:
|
||||
*
|
||||
* Returns: (transfer none): the element's pseudo-classes
|
||||
*/
|
||||
GStrv
|
||||
st_theme_node_get_pseudo_classes (StThemeNode *node)
|
||||
{
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (node), NULL);
|
||||
|
||||
return node->pseudo_class;
|
||||
return node->pseudo_classes;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -304,16 +341,91 @@ gboolean
|
||||
st_theme_node_equal (StThemeNode *node_a, StThemeNode *node_b)
|
||||
{
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (node_a), FALSE);
|
||||
|
||||
if (node_a == node_b)
|
||||
return TRUE;
|
||||
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (node_b), FALSE);
|
||||
|
||||
return node_a->parent_node == node_b->parent_node &&
|
||||
node_a->context == node_b->context &&
|
||||
node_a->theme == node_b->theme &&
|
||||
node_a->element_type == node_b->element_type &&
|
||||
!g_strcmp0 (node_a->element_id, node_b->element_id) &&
|
||||
!g_strcmp0 (node_a->element_class, node_b->element_class) &&
|
||||
!g_strcmp0 (node_a->pseudo_class, node_b->pseudo_class) &&
|
||||
!g_strcmp0 (node_a->inline_style, node_b->inline_style);
|
||||
if (node_a->parent_node != node_b->parent_node ||
|
||||
node_a->context != node_b->context ||
|
||||
node_a->theme != node_b->theme ||
|
||||
node_a->element_type != node_b->element_type ||
|
||||
g_strcmp0 (node_a->element_id, node_b->element_id) ||
|
||||
g_strcmp0 (node_a->inline_style, node_b->inline_style))
|
||||
return FALSE;
|
||||
|
||||
if ((node_a->element_classes == NULL) != (node_b->element_classes == NULL))
|
||||
return FALSE;
|
||||
|
||||
if ((node_a->pseudo_classes == NULL) != (node_b->pseudo_classes == NULL))
|
||||
return FALSE;
|
||||
|
||||
if (node_a->element_classes != NULL)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
if (g_strcmp0 (node_a->element_classes[i],
|
||||
node_b->element_classes[i]))
|
||||
return FALSE;
|
||||
|
||||
if (node_a->element_classes[i] == NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (node_a->pseudo_classes != NULL)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
if (g_strcmp0 (node_a->pseudo_classes[i],
|
||||
node_b->pseudo_classes[i]))
|
||||
return FALSE;
|
||||
|
||||
if (node_a->pseudo_classes[i] == NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
guint
|
||||
st_theme_node_hash (StThemeNode *node)
|
||||
{
|
||||
guint hash = GPOINTER_TO_UINT (node->parent_node);
|
||||
|
||||
hash = hash * 33 + GPOINTER_TO_UINT (node->context);
|
||||
hash = hash * 33 + GPOINTER_TO_UINT (node->theme);
|
||||
hash = hash * 33 + ((guint) node->element_type);
|
||||
|
||||
if (node->element_id != NULL)
|
||||
hash = hash * 33 + g_str_hash (node->element_id);
|
||||
|
||||
if (node->inline_style != NULL)
|
||||
hash = hash * 33 + g_str_hash (node->inline_style);
|
||||
|
||||
if (node->element_classes != NULL)
|
||||
{
|
||||
gchar **it;
|
||||
|
||||
for (it = node->element_classes; *it != NULL; it++)
|
||||
hash = hash * 33 + g_str_hash (*it) + 1;
|
||||
}
|
||||
|
||||
if (node->pseudo_classes != NULL)
|
||||
{
|
||||
gchar **it;
|
||||
|
||||
for (it = node->pseudo_classes; *it != NULL; it++)
|
||||
hash = hash * 33 + g_str_hash (*it) + 1;
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3440,6 +3552,10 @@ st_theme_node_geometry_equal (StThemeNode *node,
|
||||
StSide side;
|
||||
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (node), FALSE);
|
||||
|
||||
if (node == other)
|
||||
return TRUE;
|
||||
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (other), FALSE);
|
||||
|
||||
_st_theme_node_ensure_geometry (node);
|
||||
@@ -3484,6 +3600,10 @@ st_theme_node_paint_equal (StThemeNode *node,
|
||||
int i;
|
||||
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (node), FALSE);
|
||||
|
||||
if (node == other)
|
||||
return TRUE;
|
||||
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (other), FALSE);
|
||||
|
||||
_st_theme_node_ensure_background (node);
|
||||
|
||||
@@ -110,11 +110,12 @@ StThemeNode *st_theme_node_get_parent (StThemeNode *node);
|
||||
StTheme *st_theme_node_get_theme (StThemeNode *node);
|
||||
|
||||
gboolean st_theme_node_equal (StThemeNode *node_a, StThemeNode *node_b);
|
||||
guint st_theme_node_hash (StThemeNode *node);
|
||||
|
||||
GType st_theme_node_get_element_type (StThemeNode *node);
|
||||
const char *st_theme_node_get_element_id (StThemeNode *node);
|
||||
const char *st_theme_node_get_element_class (StThemeNode *node);
|
||||
const char *st_theme_node_get_pseudo_class (StThemeNode *node);
|
||||
GStrv st_theme_node_get_element_classes (StThemeNode *node);
|
||||
GStrv st_theme_node_get_pseudo_classes (StThemeNode *node);
|
||||
|
||||
/* Generic getters ... these are not cached so are less efficient. The other
|
||||
* reason for adding the more specific version is that we can handle the
|
||||
|
||||
@@ -448,25 +448,17 @@ st_theme_new (const char *application_stylesheet,
|
||||
|
||||
static gboolean
|
||||
string_in_list (GString *stryng,
|
||||
const char *list)
|
||||
GStrv list)
|
||||
{
|
||||
const char *cur;
|
||||
gchar **it;
|
||||
|
||||
for (cur = list; *cur;)
|
||||
if (list == NULL)
|
||||
return FALSE;
|
||||
|
||||
for (it = list; *it != NULL; it++)
|
||||
{
|
||||
while (*cur && cr_utils_is_white_space (*cur))
|
||||
cur++;
|
||||
|
||||
if (strncmp (cur, stryng->str, stryng->len) == 0)
|
||||
{
|
||||
cur += stryng->len;
|
||||
if ((!*cur) || cr_utils_is_white_space (*cur))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* skip to next whitespace character */
|
||||
while (*cur && !cr_utils_is_white_space (*cur))
|
||||
cur++;
|
||||
if (!strqcmp (*it, stryng->str, stryng->len))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
@@ -477,7 +469,7 @@ pseudo_class_add_sel_matches_style (StTheme *a_this,
|
||||
CRAdditionalSel *a_add_sel,
|
||||
StThemeNode *a_node)
|
||||
{
|
||||
const char *node_pseudo_class;
|
||||
GStrv node_pseudo_classes;
|
||||
|
||||
g_return_val_if_fail (a_this
|
||||
&& a_add_sel
|
||||
@@ -487,12 +479,10 @@ pseudo_class_add_sel_matches_style (StTheme *a_this,
|
||||
&& a_add_sel->content.pseudo->name->stryng->str
|
||||
&& a_node, FALSE);
|
||||
|
||||
node_pseudo_class = st_theme_node_get_pseudo_class (a_node);
|
||||
node_pseudo_classes = st_theme_node_get_pseudo_classes (a_node);
|
||||
|
||||
if (node_pseudo_class == NULL)
|
||||
return FALSE;
|
||||
|
||||
return string_in_list (a_add_sel->content.pseudo->name->stryng, node_pseudo_class);
|
||||
return string_in_list (a_add_sel->content.pseudo->name->stryng,
|
||||
node_pseudo_classes);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -507,7 +497,7 @@ static gboolean
|
||||
class_add_sel_matches_style (CRAdditionalSel *a_add_sel,
|
||||
StThemeNode *a_node)
|
||||
{
|
||||
const char *element_class;
|
||||
GStrv element_classes;
|
||||
|
||||
g_return_val_if_fail (a_add_sel
|
||||
&& a_add_sel->type == CLASS_ADD_SELECTOR
|
||||
@@ -516,11 +506,10 @@ class_add_sel_matches_style (CRAdditionalSel *a_add_sel,
|
||||
&& a_add_sel->content.class_name->stryng->str
|
||||
&& a_node, FALSE);
|
||||
|
||||
element_class = st_theme_node_get_element_class (a_node);
|
||||
if (element_class == NULL)
|
||||
return FALSE;
|
||||
element_classes = st_theme_node_get_element_classes (a_node);
|
||||
|
||||
return string_in_list (a_add_sel->content.class_name->stryng, element_class);
|
||||
return string_in_list (a_add_sel->content.class_name->stryng,
|
||||
element_classes);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1018,6 +1007,7 @@ _st_theme_resolve_url (StTheme *theme,
|
||||
const char *base_filename = NULL;
|
||||
char *dirname;
|
||||
char *filename;
|
||||
char *canonicalized_path;
|
||||
|
||||
/* Handle absolute file:/ URLs */
|
||||
if (g_str_has_prefix (url, "file:") ||
|
||||
@@ -1034,7 +1024,7 @@ _st_theme_resolve_url (StTheme *theme,
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return filename;
|
||||
}
|
||||
|
||||
/* Guard against http:/ URLs */
|
||||
@@ -1050,7 +1040,19 @@ _st_theme_resolve_url (StTheme *theme,
|
||||
/* Assume anything else is a relative URL, and "resolve" it
|
||||
*/
|
||||
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);
|
||||
|
||||
@@ -1062,7 +1064,19 @@ _st_theme_resolve_url (StTheme *theme,
|
||||
|
||||
dirname = g_path_get_dirname (base_filename);
|
||||
filename = g_build_filename (dirname, url, NULL);
|
||||
canonicalized_path = realpath (filename, NULL);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
st_widget_dispose (GObject *gobject)
|
||||
{
|
||||
@@ -302,6 +335,10 @@ st_widget_dispose (GObject *gobject)
|
||||
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_last_child);
|
||||
|
||||
@@ -552,6 +589,8 @@ st_widget_get_theme_node (StWidget *widget)
|
||||
|
||||
if (priv->theme_node == NULL)
|
||||
{
|
||||
StThemeContext *context;
|
||||
StThemeNode *tmp_node;
|
||||
StThemeNode *parent_node = NULL;
|
||||
ClutterStage *stage = NULL;
|
||||
ClutterActor *parent;
|
||||
@@ -592,16 +631,20 @@ st_widget_get_theme_node (StWidget *widget)
|
||||
else
|
||||
pseudo_class = direction_pseudo_class;
|
||||
|
||||
priv->theme_node = st_theme_node_new (st_theme_context_get_for_stage (stage),
|
||||
parent_node, priv->theme,
|
||||
G_OBJECT_TYPE (widget),
|
||||
clutter_actor_get_name (CLUTTER_ACTOR (widget)),
|
||||
priv->style_class,
|
||||
pseudo_class,
|
||||
priv->inline_style);
|
||||
context = st_theme_context_get_for_stage (stage);
|
||||
tmp_node = st_theme_node_new (context, parent_node, priv->theme,
|
||||
G_OBJECT_TYPE (widget),
|
||||
clutter_actor_get_name (CLUTTER_ACTOR (widget)),
|
||||
priv->style_class,
|
||||
pseudo_class,
|
||||
priv->inline_style);
|
||||
|
||||
if (pseudo_class != direction_pseudo_class)
|
||||
g_free (pseudo_class);
|
||||
|
||||
priv->theme_node = g_object_ref (st_theme_context_intern_node (context,
|
||||
tmp_node));
|
||||
g_object_unref (tmp_node);
|
||||
}
|
||||
|
||||
return priv->theme_node;
|
||||
@@ -1470,6 +1513,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::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
|
||||
@@ -1487,6 +1532,12 @@ st_widget_recompute_style (StWidget *widget,
|
||||
int transition_duration;
|
||||
gboolean paint_equal;
|
||||
|
||||
if (new_theme_node == old_theme_node)
|
||||
{
|
||||
widget->priv->is_style_dirty = FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!old_theme_node ||
|
||||
!st_theme_node_geometry_equal (old_theme_node, new_theme_node))
|
||||
clutter_actor_queue_relayout ((ClutterActor *) widget);
|
||||
@@ -2760,38 +2811,3 @@ st_widget_get_focus_chain (StWidget *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,
|
||||
ClutterActor *label);
|
||||
|
||||
void st_widget_clear_background_image (StWidget *widget);
|
||||
|
||||
/* Only to be used by sub-classes of StWidget */
|
||||
void st_widget_style_changed (StWidget *widget);
|
||||
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#define GST_USE_UNSTABLE_API
|
||||
#include "shell-recorder.h"
|
||||
#include <clutter/clutter.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gst/gst.h>
|
||||
|
||||
/* Very simple test of the ShellRecorder class; shows some text strings
|
||||
@@ -11,23 +12,34 @@
|
||||
static ShellRecorder *recorder = NULL;
|
||||
|
||||
static gboolean
|
||||
stop_recording_timeout (gpointer data)
|
||||
stop_recording_timeout (ClutterActor *stage)
|
||||
{
|
||||
if (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);
|
||||
}
|
||||
|
||||
clutter_main_quit ();
|
||||
else
|
||||
{
|
||||
clutter_actor_destroy (stage);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
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
|
||||
@@ -35,7 +47,7 @@ on_stage_realized (ClutterActor *stage,
|
||||
gpointer data)
|
||||
{
|
||||
recorder = shell_recorder_new (CLUTTER_STAGE (stage));
|
||||
shell_recorder_set_filename (recorder, "test-recorder.ogg");
|
||||
shell_recorder_set_file_template (recorder, "test-recorder.webm");
|
||||
shell_recorder_record (recorder);
|
||||
}
|
||||
|
||||
@@ -46,6 +58,7 @@ int main (int argc, char **argv)
|
||||
ClutterAnimation *animation;
|
||||
ClutterColor red, green, blue;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
gst_init (&argc, &argv);
|
||||
if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
|
||||
return 1;
|
||||
@@ -69,7 +82,7 @@ int main (int argc, char **argv)
|
||||
"y", 240.0,
|
||||
NULL);
|
||||
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", "Blue",
|
||||
@@ -110,7 +123,5 @@ int main (int argc, char **argv)
|
||||
|
||||
clutter_main ();
|
||||
|
||||
g_object_unref (stage);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ TEST_JS = \
|
||||
interactive/scrolling.js \
|
||||
interactive/scroll-view-sizing.js \
|
||||
interactive/table.js \
|
||||
interactive/test-title.js \
|
||||
interactive/transitions.js \
|
||||
testcommon/100-200.svg \
|
||||
testcommon/200-100.svg \
|
||||
@@ -25,11 +26,14 @@ TEST_JS = \
|
||||
testcommon/border-image.png \
|
||||
testcommon/face-plain.png \
|
||||
testcommon/ui.js \
|
||||
testcommon/iso3166-test.tab \
|
||||
testcommon/serviceproviders-test.xml \
|
||||
unit/format.js \
|
||||
unit/insertSorted.js \
|
||||
unit/markup.js \
|
||||
unit/jsParse.js \
|
||||
unit/url.js
|
||||
unit/url.js \
|
||||
unit/mobileProviders.js
|
||||
EXTRA_DIST += $(TEST_JS)
|
||||
|
||||
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();
|
||||
|
||||
3
tests/testcommon/iso3166-test.tab
Normal file
3
tests/testcommon/iso3166-test.tab
Normal file
@@ -0,0 +1,3 @@
|
||||
# Test country list
|
||||
ES Spain
|
||||
US United States
|
||||
44
tests/testcommon/serviceproviders-test.xml
Normal file
44
tests/testcommon/serviceproviders-test.xml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<!-- -*- Mode: XML; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- -->
|
||||
|
||||
<!DOCTYPE serviceproviders SYSTEM "serviceproviders.2.dtd">
|
||||
|
||||
<serviceproviders format="2.0">
|
||||
|
||||
<!-- United States -->
|
||||
<country code="us">
|
||||
<provider>
|
||||
<name>AT&T</name>
|
||||
<gsm>
|
||||
<network-id mcc="310" mnc="038"/>
|
||||
<network-id mcc="310" mnc="090"/>
|
||||
<network-id mcc="310" mnc="150"/>
|
||||
</gsm>
|
||||
</provider>
|
||||
<provider>
|
||||
<name>Verizon</name>
|
||||
<gsm>
|
||||
<network-id mcc="310" mnc="995"/>
|
||||
<network-id mcc="311" mnc="480"/>
|
||||
</gsm>
|
||||
<cdma>
|
||||
<sid value="2"/>
|
||||
<sid value="4"/>
|
||||
<sid value="5"/>
|
||||
</cdma>
|
||||
</provider>
|
||||
</country>
|
||||
|
||||
<!-- Spain -->
|
||||
<country code="es">
|
||||
<provider>
|
||||
<name>Movistar (Telefónica)</name>
|
||||
<gsm>
|
||||
<network-id mcc="214" mnc="05"/>
|
||||
<network-id mcc="214" mnc="07"/>
|
||||
</gsm>
|
||||
</provider>
|
||||
</country>
|
||||
|
||||
</serviceproviders>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user